From 6ed1b99aaab43bcd4df096b76a04d35d9c9f0403 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 21:12:21 +0100 Subject: [PATCH 001/270] refactor(attention): move into a package modules/attention.py becomes modules/attention/: hijacks.py keeps the six sdpa monkeypatch setters, dispatcher.py the diffusers-side processor and dispatcher setup with the kernels hub hijack, and the package facade re-exports every public name so call sites are unchanged. The devices import moves inside set_diffusers_attention, which removes the devices <-> attention import cycle. --- modules/attention/__init__.py | 8 ++ modules/attention/dispatcher.py | 115 ++++++++++++++++++ .../{attention.py => attention/hijacks.py} | 114 +---------------- 3 files changed, 124 insertions(+), 113 deletions(-) create mode 100644 modules/attention/__init__.py create mode 100644 modules/attention/dispatcher.py rename modules/{attention.py => attention/hijacks.py} (70%) diff --git a/modules/attention/__init__.py b/modules/attention/__init__.py new file mode 100644 index 000000000..a0eae843f --- /dev/null +++ b/modules/attention/__init__.py @@ -0,0 +1,8 @@ +"""Attention backends: the SDPA hijacks stacked by devices.set_sdpa_params, plus the diffusers-side processor and dispatcher setup.""" +from modules.attention.hijacks import set_dynamic_attention, set_sdnq_attention, set_triton_flash_attention, set_flex_attention, set_ck_flash_attention, set_sage_attention +from modules.attention.dispatcher import set_diffusers_attention, set_attention_dispatcher, hijack_kernels, get_kernel_hijack, get_hf_api_hijack + +__all__ = [ + 'set_dynamic_attention', 'set_sdnq_attention', 'set_triton_flash_attention', 'set_flex_attention', 'set_ck_flash_attention', 'set_sage_attention', + 'set_diffusers_attention', 'set_attention_dispatcher', 'hijack_kernels', 'get_kernel_hijack', 'get_hf_api_hijack', +] diff --git a/modules/attention/dispatcher.py b/modules/attention/dispatcher.py new file mode 100644 index 000000000..4cf232022 --- /dev/null +++ b/modules/attention/dispatcher.py @@ -0,0 +1,115 @@ +from modules import errors +from modules.logger import log +from installer import install, torch_info + + +def set_diffusers_attention(pipe, quiet = False): + from modules import shared, devices + import diffusers.models.attention_processor as p + + def set_attn(pipe, attention, name: str | None = None): + if attention is None: + return + # other models uses their own attention processor + if getattr(pipe, "unet", None) is not None and hasattr(pipe.unet, "set_attn_processor"): + try: + pipe.unet.set_attn_processor(attention) + except Exception as e: + if 'Nunchaku' in pipe.unet.__class__.__name__: + pass + else: + log.error(f'Torch attention: type="{name}" cls={attention.__class__.__name__} pipe={pipe.__class__.__name__} {e}') + + log.quiet(quiet, f'Setting model: attention="{shared.opts.cross_attention_optimization}"') + if shared.opts.cross_attention_optimization == "Disabled": + torch_info.set(attention="disabled") + elif shared.opts.cross_attention_optimization == "Scaled-Dot-Product": # The default set by Diffusers + devices.set_sdpa_params() + # set_attn(pipe, p.AttnProcessor2_0(), name="Scaled-Dot-Product") + elif shared.opts.cross_attention_optimization == "xFormers": + if hasattr(pipe, 'enable_xformers_memory_efficient_attention'): + torch_info.set(attention="xformers") + pipe.enable_xformers_memory_efficient_attention() + else: + log.warning(f"Attention: xFormers is not compatible with {pipe.__class__.__name__}") + elif shared.opts.cross_attention_optimization == "Batch matrix-matrix": + torch_info.set(attention="bmm") + set_attn(pipe, p.AttnProcessor(), name="Batch matrix-matrix") + elif shared.opts.cross_attention_optimization == "Dynamic Attention BMM": + from modules.sd_hijack_dynamic_atten import DynamicAttnProcessorBMM + torch_info.set(attention="dynamic_bmm") + set_attn(pipe, DynamicAttnProcessorBMM(), name="Dynamic Attention BMM") + + if shared.opts.attention_slicing != "Default" and hasattr(pipe, "enable_attention_slicing") and hasattr(pipe, "disable_attention_slicing"): + if shared.opts.attention_slicing: + pipe.enable_attention_slicing() + else: + pipe.disable_attention_slicing() + log.debug(f"Torch attention: slicing={shared.opts.attention_slicing}") + + pipe.current_attn_name = shared.opts.cross_attention_optimization + + +orig_get_kernel = None +def get_kernel_hijack(repo_id, revision=None, version=None, backend=None, user_agent=None, trust_remote_code: bool | list[str] = False): # pylint: disable=unused-argument + log.debug(f'Attention dispatcher hub: repo="{repo_id}" revision={revision} version={version} backend={backend}') + user_agent = 'kernels/0.16.0' + module = None + try: + module = orig_get_kernel(repo_id, revision=revision, version=version, backend=backend, user_agent=user_agent, trust_remote_code=True) + except Exception as e: + log.error(f'Attention dispatcher hub: {e}') + errors.display(e, 'kernels') + return module + + +def get_hf_api_hijack(user_agent = None): # pylint: disable=unused-argument + from huggingface_hub import HfApi + return HfApi(library_name="kernels", user_agent="donottrack") + + +def hijack_kernels(): + global orig_get_kernel # pylint: disable=global-statement + try: + install('kernels==0.16.0') + import kernels + import kernels.utils + log.debug(f'Attention dispatcher: kernels={kernels.__version__}') + if orig_get_kernel is None: + orig_get_kernel = kernels.get_kernel + kernels.get_kernel = get_kernel_hijack + kernels.utils._get_hf_api = get_hf_api_hijack # pylint: disable=protected-access + from diffusers.utils import import_utils + import_utils._kernels_available = True # pylint: disable=protected-access + import_utils._kernels_version = kernels.__version__ # pylint: disable=protected-access + except Exception as e: + log.error(f'Attention dispatcher kernels: {e}') + return + + +def set_attention_dispatcher(pipe): + from modules import shared + attn = shared.opts.hf_attention.strip().lower() + if pipe is None or not hasattr(pipe, 'transformer') or not hasattr(pipe.transformer, 'set_attention_backend'): + return + + from diffusers.models import attention_dispatch as a + backends = [b.value for b in a._AttentionBackendRegistry.list_backends()] # pylint: disable=protected-access + # https://huggingface.co/docs/kernels/index + # https://huggingface.co/docs/diffusers/optimization/attention_backends#available-backends + + if 'hub' in attn: + hijack_kernels() + + prev = a._AttentionBackendRegistry.get_active_backend() # pylint: disable=protected-access + if attn in backends: + try: + pipe.transformer.set_attention_backend(attn) + except Exception as e: + log.error(f'Attention dispatcher: target={attn} {e}') + current = a._AttentionBackendRegistry.get_active_backend() # pylint: disable=protected-access + log.debug(f'Attention dispatcher: target={attn} previous={prev[0].value} active={current[0]} list={backends}') + elif len(attn) > 0: + log.warning(f'Attention dispatcher: active={prev[0].value} list={backends} target={attn} not found') + else: + log.debug(f'Attention dispatcher: active={prev[0].value} list={backends}') diff --git a/modules/attention.py b/modules/attention/hijacks.py similarity index 70% rename from modules/attention.py rename to modules/attention/hijacks.py index 1aad29692..e837f79cf 100644 --- a/modules/attention.py +++ b/modules/attention/hijacks.py @@ -1,6 +1,6 @@ from functools import wraps import torch -from modules import rocm, errors, devices +from modules import rocm from modules.logger import log from installer import install, installed, torch_info @@ -240,115 +240,3 @@ def set_sage_attention(backend: str, device: torch.device): log.debug(f'Torch attention: type="Sage attention" backend={"cuda" if use_cuda_backend else "auto"}') except Exception as err: log.error(f'Torch attention: type="Sage attention" {err}') - - -def set_diffusers_attention(pipe, quiet = False): - from modules import shared - import diffusers.models.attention_processor as p - - def set_attn(pipe, attention, name: str | None = None): - if attention is None: - return - # other models uses their own attention processor - if getattr(pipe, "unet", None) is not None and hasattr(pipe.unet, "set_attn_processor"): - try: - pipe.unet.set_attn_processor(attention) - except Exception as e: - if 'Nunchaku' in pipe.unet.__class__.__name__: - pass - else: - log.error(f'Torch attention: type="{name}" cls={attention.__class__.__name__} pipe={pipe.__class__.__name__} {e}') - - log.quiet(quiet, f'Setting model: attention="{shared.opts.cross_attention_optimization}"') - if shared.opts.cross_attention_optimization == "Disabled": - torch_info.set(attention="disabled") - elif shared.opts.cross_attention_optimization == "Scaled-Dot-Product": # The default set by Diffusers - devices.set_sdpa_params() - # set_attn(pipe, p.AttnProcessor2_0(), name="Scaled-Dot-Product") - elif shared.opts.cross_attention_optimization == "xFormers": - if hasattr(pipe, 'enable_xformers_memory_efficient_attention'): - torch_info.set(attention="xformers") - pipe.enable_xformers_memory_efficient_attention() - else: - log.warning(f"Attention: xFormers is not compatible with {pipe.__class__.__name__}") - elif shared.opts.cross_attention_optimization == "Batch matrix-matrix": - torch_info.set(attention="bmm") - set_attn(pipe, p.AttnProcessor(), name="Batch matrix-matrix") - elif shared.opts.cross_attention_optimization == "Dynamic Attention BMM": - from modules.sd_hijack_dynamic_atten import DynamicAttnProcessorBMM - torch_info.set(attention="dynamic_bmm") - set_attn(pipe, DynamicAttnProcessorBMM(), name="Dynamic Attention BMM") - - if shared.opts.attention_slicing != "Default" and hasattr(pipe, "enable_attention_slicing") and hasattr(pipe, "disable_attention_slicing"): - if shared.opts.attention_slicing: - pipe.enable_attention_slicing() - else: - pipe.disable_attention_slicing() - log.debug(f"Torch attention: slicing={shared.opts.attention_slicing}") - - pipe.current_attn_name = shared.opts.cross_attention_optimization - - -orig_get_kernel = None -def get_kernel_hijack(repo_id, revision=None, version=None, backend=None, user_agent=None, trust_remote_code: bool | list[str] = False): # pylint: disable=unused-argument - log.debug(f'Attention dispatcher hub: repo="{repo_id}" revision={revision} version={version} backend={backend}') - user_agent = 'kernels/0.16.0' - module = None - try: - module = orig_get_kernel(repo_id, revision=revision, version=version, backend=backend, user_agent=user_agent, trust_remote_code=True) - except Exception as e: - log.error(f'Attention dispatcher hub: {e}') - errors.display(e, 'kernels') - return module - - -def get_hf_api_hijack(user_agent = None): # pylint: disable=unused-argument - from huggingface_hub import HfApi - return HfApi(library_name="kernels", user_agent="donottrack") - - -def hijack_kernels(): - global orig_get_kernel # pylint: disable=global-statement - try: - install('kernels==0.16.0') - import kernels - import kernels.utils - log.debug(f'Attention dispatcher: kernels={kernels.__version__}') - if orig_get_kernel is None: - orig_get_kernel = kernels.get_kernel - kernels.get_kernel = get_kernel_hijack - kernels.utils._get_hf_api = get_hf_api_hijack # pylint: disable=protected-access - from diffusers.utils import import_utils - import_utils._kernels_available = True # pylint: disable=protected-access - import_utils._kernels_version = kernels.__version__ # pylint: disable=protected-access - except Exception as e: - log.error(f'Attention dispatcher kernels: {e}') - return - - -def set_attention_dispatcher(pipe): - from modules import shared - attn = shared.opts.hf_attention.strip().lower() - if pipe is None or not hasattr(pipe, 'transformer') or not hasattr(pipe.transformer, 'set_attention_backend'): - return - - from diffusers.models import attention_dispatch as a - backends = [b.value for b in a._AttentionBackendRegistry.list_backends()] # pylint: disable=protected-access - # https://huggingface.co/docs/kernels/index - # https://huggingface.co/docs/diffusers/optimization/attention_backends#available-backends - - if 'hub' in attn: - hijack_kernels() - - prev = a._AttentionBackendRegistry.get_active_backend() # pylint: disable=protected-access - if attn in backends: - try: - pipe.transformer.set_attention_backend(attn) - except Exception as e: - log.error(f'Attention dispatcher: target={attn} {e}') - current = a._AttentionBackendRegistry.get_active_backend() # pylint: disable=protected-access - log.debug(f'Attention dispatcher: target={attn} previous={prev[0].value} active={current[0]} list={backends}') - elif len(attn) > 0: - log.warning(f'Attention dispatcher: active={prev[0].value} list={backends} target={attn} not found') - else: - log.debug(f'Attention dispatcher: active={prev[0].value} list={backends}') From 3302e78af631f81acffb37b42febe0debc53867c Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 21:51:29 +0100 Subject: [PATCH 002/270] refactor(attention): backend registry and a single sdpa router Replace the six closure hijacks stacked in devices.set_sdpa_params with a registry of declarative backends and one router installed in their place. Each backend declares the constraints its closure carried as a predicate, a priority matching its old stacking position, and a prepare step that imports and configures the implementation; the router walks the prepared entries by priority and hands declined calls to the terminal backend (dynamic, flex) or the original sdpa, so fallback is the router's job rather than each closure's. - parity held: gates transcribed literally, the same kernel kwargs, enable_gqa passed to the original only when set, torch_info keeps the last prepared backend, the dynamic pin still set - a backend enabled on a platform without it warns instead of silently doing nothing - the legacy set_* entry points are gone; devices.py installs the router - test/test-attention-router.py checks every override subset against the old stacking order, gate parity over 16,000 shape cases, dispatch, terminal handoff and prepare isolation, offline --- modules/attention/__init__.py | 10 +- modules/attention/backends/__init__.py | 10 + modules/attention/backends/dynamic.py | 11 + modules/attention/backends/flash_ck.py | 44 +++ modules/attention/backends/flex.py | 38 +++ modules/attention/backends/sage.py | 53 ++++ modules/attention/backends/sdnq.py | 28 ++ modules/attention/backends/triton_amd.py | 32 +++ modules/attention/hijacks.py | 242 ---------------- modules/attention/registry.py | 91 ++++++ modules/attention/router.py | 90 ++++++ modules/devices.py | 22 +- test/test-attention-router.py | 343 +++++++++++++++++++++++ 13 files changed, 748 insertions(+), 266 deletions(-) create mode 100644 modules/attention/backends/__init__.py create mode 100644 modules/attention/backends/dynamic.py create mode 100644 modules/attention/backends/flash_ck.py create mode 100644 modules/attention/backends/flex.py create mode 100644 modules/attention/backends/sage.py create mode 100644 modules/attention/backends/sdnq.py create mode 100644 modules/attention/backends/triton_amd.py delete mode 100644 modules/attention/hijacks.py create mode 100644 modules/attention/registry.py create mode 100644 modules/attention/router.py create mode 100644 test/test-attention-router.py diff --git a/modules/attention/__init__.py b/modules/attention/__init__.py index a0eae843f..7b923ca6b 100644 --- a/modules/attention/__init__.py +++ b/modules/attention/__init__.py @@ -1,8 +1,12 @@ -"""Attention backends: the SDPA hijacks stacked by devices.set_sdpa_params, plus the diffusers-side processor and dispatcher setup.""" -from modules.attention.hijacks import set_dynamic_attention, set_sdnq_attention, set_triton_flash_attention, set_flex_attention, set_ck_flash_attention, set_sage_attention +"""Attention backends: one scaled_dot_product_attention router over the registered backends, plus the diffusers-side processor and dispatcher setup.""" +from modules.attention.registry import AttentionBackend, AttentionCall, Constraints, Platform, Registry, registry +from modules.attention.router import Plan, PlanEntry, build_plan, get_plan, install_router from modules.attention.dispatcher import set_diffusers_attention, set_attention_dispatcher, hijack_kernels, get_kernel_hijack, get_hf_api_hijack +from modules.attention import backends __all__ = [ - 'set_dynamic_attention', 'set_sdnq_attention', 'set_triton_flash_attention', 'set_flex_attention', 'set_ck_flash_attention', 'set_sage_attention', + 'AttentionBackend', 'AttentionCall', 'Constraints', 'Platform', 'Registry', 'registry', + 'Plan', 'PlanEntry', 'build_plan', 'get_plan', 'install_router', 'set_diffusers_attention', 'set_attention_dispatcher', 'hijack_kernels', 'get_kernel_hijack', 'get_hf_api_hijack', + 'backends', ] diff --git a/modules/attention/backends/__init__.py b/modules/attention/backends/__init__.py new file mode 100644 index 000000000..49d166e9c --- /dev/null +++ b/modules/attention/backends/__init__.py @@ -0,0 +1,10 @@ +"""Built-in backends, registered in ascending priority.""" +from modules.attention.registry import registry +from modules.attention.backends import dynamic, flex, triton_amd, flash_ck, sage, sdnq + +registry.register(dynamic.backend) +registry.register(flex.backend) +registry.register(triton_amd.backend) +registry.register(flash_ck.backend) +registry.register(sage.backend) +registry.register(sdnq.backend) diff --git a/modules/attention/backends/dynamic.py b/modules/attention/backends/dynamic.py new file mode 100644 index 000000000..dcbdd8a5a --- /dev/null +++ b/modules/attention/backends/dynamic.py @@ -0,0 +1,11 @@ +from modules.attention.registry import AttentionBackend, Platform + + +def prepare(platform: Platform, original): # pylint: disable=unused-argument + from modules import devices + devices.sdpa_pre_dyanmic_atten = original # the sliced path calls this pin for every slice + from modules.sd_hijack_dynamic_atten import dynamic_scaled_dot_product_attention + return dynamic_scaled_dot_product_attention + + +backend = AttentionBackend(name='dynamic', label='Dynamic attention', priority=10, prepare=prepare, terminal=True) diff --git a/modules/attention/backends/flash_ck.py b/modules/attention/backends/flash_ck.py new file mode 100644 index 000000000..09bd86e75 --- /dev/null +++ b/modules/attention/backends/flash_ck.py @@ -0,0 +1,44 @@ +from installer import install, installed +from modules import rocm +from modules.logger import log +from modules.attention.registry import AttentionBackend, Constraints, Platform + + +def prepare(platform: Platform, original): # pylint: disable=unused-argument + if platform.backend == 'rocm': + if not installed('flash-attn'): + log.info('Torch attention: type="Flash attention" building...') + agent = rocm.Agent(platform.device) + install(rocm.get_flash_attention_command(agent), reinstall=True) + else: + install('flash-attn') + from flash_attn import flash_attn_func + + def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa): # pylint: disable=unused-argument + is_unsqueezed = False + if query.dim() == 3: + query = query.unsqueeze(0) + is_unsqueezed = True + if key.dim() == 3: + key = key.unsqueeze(0) + if value.dim() == 3: + value = value.unsqueeze(0) + if enable_gqa: + key = key.repeat_interleave(query.size(-3)//key.size(-3), -3) + value = value.repeat_interleave(query.size(-3)//value.size(-3), -3) + query = query.transpose(1, 2) + key = key.transpose(1, 2) + value = value.transpose(1, 2) + attn_output = flash_attn_func(q=query, k=key, v=value, dropout_p=dropout_p, causal=is_causal, softmax_scale=scale).transpose(1, 2) + if is_unsqueezed: + attn_output = attn_output.squeeze(0) + return attn_output + + log.debug('Torch attention: type="Flash attention"') + return call + + +backend = AttentionBackend( + name='flash', label='Flash attention', priority=40, prepare=prepare, + constraints=Constraints(max_head_dim=128, allow_mask=False, allow_float32=False, same_device=True), +) diff --git a/modules/attention/backends/flex.py b/modules/attention/backends/flex.py new file mode 100644 index 000000000..7997d54fd --- /dev/null +++ b/modules/attention/backends/flex.py @@ -0,0 +1,38 @@ +import torch +from modules.logger import log +from modules.attention.registry import AttentionBackend, Platform + + +def prepare(platform: Platform, original): # pylint: disable=unused-argument + from torch.nn.attention.flex_attention import flex_attention, create_block_mask + + def causal_mask(b, h, q_idx, kv_idx): # pylint: disable=unused-argument + return q_idx >= kv_idx + + def call(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, scale=None, enable_gqa=False, **kwargs): # pylint: disable=unused-argument + score_mod = None + block_mask = None + if attn_mask is not None: + batch_size, num_heads = query.shape[:2] + seq_len_q = query.shape[-2] + seq_len_kv = key.shape[-2] + if attn_mask.ndim == 2: + attn_mask = attn_mask.view(attn_mask.shape[0], 1, attn_mask.size[1], 1) + attn_mask = attn_mask.expand(batch_size, num_heads, seq_len_q, seq_len_kv) + if attn_mask.dtype == torch.bool: + def mask_mod(batch_idx, head_idx, q_idx, kv_idx): + return attn_mask[batch_idx, head_idx, q_idx, kv_idx] + block_mask = create_block_mask(mask_mod, batch_size, None, seq_len_q, seq_len_kv, device=query.device) + else: + def score_mod_fn(score, batch_idx, head_idx, q_idx, kv_idx): + return score + attn_mask[batch_idx, head_idx, q_idx, kv_idx] + score_mod = score_mod_fn + elif is_causal: + block_mask = create_block_mask(causal_mask, query.shape[0], query.shape[1], query.shape[-2], key.shape[-2], device=query.device) + return flex_attention(query, key, value, score_mod=score_mod, block_mask=block_mask, scale=scale, enable_gqa=enable_gqa) + + log.debug('Torch attention: type="Flex attention"') + return call + + +backend = AttentionBackend(name='flex', label='Flex attention', priority=20, prepare=prepare, terminal=True) diff --git a/modules/attention/backends/sage.py b/modules/attention/backends/sage.py new file mode 100644 index 000000000..d51055970 --- /dev/null +++ b/modules/attention/backends/sage.py @@ -0,0 +1,53 @@ +import torch +from installer import install +from modules.logger import log +from modules.attention.registry import AttentionBackend, Constraints, Platform + + +def prepare(platform: Platform, original): # pylint: disable=unused-argument + install('sageattention') + + use_cuda_backend = False + if platform.backend == 'cuda' and torch.cuda.get_device_capability(platform.device) == (8, 6): + use_cuda_backend = True # sm86 needs the cuda backend, sage attention over triton produces NaNs there + try: + from sageattention import sageattn_qk_int8_pv_fp16_cuda + except Exception: + use_cuda_backend = False + + if use_cuda_backend: + from sageattention import sageattn_qk_int8_pv_fp16_cuda + def sage_attn_impl(query, key, value, is_causal, scale): + return sageattn_qk_int8_pv_fp16_cuda( + q=query, k=key, v=value, + tensor_layout="HND", + is_causal=is_causal, + sm_scale=scale, + return_lse=False, + pv_accum_dtype="fp32", + ) + else: + from sageattention import sageattn + def sage_attn_impl(query, key, value, is_causal, scale): + return sageattn( + q=query, k=key, v=value, + attn_mask=None, + dropout_p=0.0, + is_causal=is_causal, + scale=scale, + ) + + def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa): # pylint: disable=unused-argument + if enable_gqa: + key = key.repeat_interleave(query.size(-3)//key.size(-3), -3) + value = value.repeat_interleave(query.size(-3)//value.size(-3), -3) + return sage_attn_impl(query, key, value, is_causal, scale) + + log.debug(f'Torch attention: type="Sage attention" backend={"cuda" if use_cuda_backend else "auto"}') + return call + + +backend = AttentionBackend( + name='sage', label='Sage attention', priority=50, prepare=prepare, + constraints=Constraints(head_dims=frozenset({64, 96, 128}), allow_mask=False, same_device=True), +) diff --git a/modules/attention/backends/sdnq.py b/modules/attention/backends/sdnq.py new file mode 100644 index 000000000..c0c49da67 --- /dev/null +++ b/modules/attention/backends/sdnq.py @@ -0,0 +1,28 @@ +from modules.logger import log +from modules.attention.registry import AttentionBackend, Constraints, Platform + + +def prepare(platform: Platform, original): # pylint: disable=unused-argument + from modules import shared + from sdnq.kernels.triton_atten import sdnq_triton_atten + + def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa): # pylint: disable=unused-argument + return sdnq_triton_atten( + query=query, key=key, value=value, attn_mask=attn_mask, + is_causal=is_causal, scale=scale, enable_gqa=enable_gqa, + matmul_dtype=shared.opts.sdnq_attention_matmul_type, + pv_matmul_dtype=shared.opts.sdnq_attention_pv_matmul_type, + smooth_k=shared.opts.sdnq_attention_smooth_k, + use_hadamard=shared.opts.sdnq_attention_use_hadamard, + hadamard_group_size=shared.opts.sdnq_attention_hadamard_group_size, + use_fp16_accum=shared.opts.sdnq_attention_use_fp16_accum, + ) + + log.debug(f'Torch attention: type="SDNQ attention" matmul={shared.opts.sdnq_attention_matmul_type}:{shared.opts.sdnq_attention_pv_matmul_type} smooth={shared.opts.sdnq_attention_smooth_k} hadamard={shared.opts.sdnq_attention_use_hadamard} fp16_accum={shared.opts.sdnq_attention_use_fp16_accum}') + return call + + +backend = AttentionBackend( + name='sdnq', label='SDNQ attention', priority=60, prepare=prepare, + constraints=Constraints(min_tokens=32, min_long_side=512, min_heads=2), # sequences of 512 or fewer are text encoders, single-head calls the vae +) diff --git a/modules/attention/backends/triton_amd.py b/modules/attention/backends/triton_amd.py new file mode 100644 index 000000000..a1f3be7df --- /dev/null +++ b/modules/attention/backends/triton_amd.py @@ -0,0 +1,32 @@ +import torch +from modules.logger import log +from modules.attention.registry import AttentionBackend, Constraints, Platform + + +def prepare(platform: Platform, original): # pylint: disable=unused-argument + from modules.flash_attn_triton_amd import interface_fa + + def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa): # pylint: disable=unused-argument + if scale is None: + scale = query.shape[-1] ** (-0.5) + head_size_og = query.size(3) + if head_size_og % 8 != 0: + query = torch.nn.functional.pad(query, [0, 8 - head_size_og % 8]) + key = torch.nn.functional.pad(key, [0, 8 - head_size_og % 8]) + value = torch.nn.functional.pad(value, [0, 8 - head_size_og % 8]) + query = query.transpose(1, 2) + key = key.transpose(1, 2) + value = value.transpose(1, 2) + out_padded = torch.zeros_like(query) + interface_fa.fwd(query, key, value, out_padded, dropout_p, scale, is_causal) + return out_padded[..., :head_size_og].transpose(1, 2) + + log.debug('Torch attention: type="Triton Flash attention"') + return call + + +backend = AttentionBackend( + name='triton', label='Triton Flash attention', priority=30, prepare=prepare, + constraints=Constraints(max_head_dim=128, allow_mask=False, same_device=True), + platforms=frozenset({'rocm', 'zluda'}), +) diff --git a/modules/attention/hijacks.py b/modules/attention/hijacks.py deleted file mode 100644 index e837f79cf..000000000 --- a/modules/attention/hijacks.py +++ /dev/null @@ -1,242 +0,0 @@ -from functools import wraps -import torch -from modules import rocm -from modules.logger import log -from installer import install, installed, torch_info - - -def set_dynamic_attention(): - try: - sdpa_pre_dyanmic_atten = torch.nn.functional.scaled_dot_product_attention - from modules.sd_hijack_dynamic_atten import dynamic_scaled_dot_product_attention - torch.nn.functional.scaled_dot_product_attention = dynamic_scaled_dot_product_attention - torch_info.set(attention='dynamic') - return sdpa_pre_dyanmic_atten - except Exception as err: - log.error(f'Torch attention: type="dynamic attention" {err}') - return None - - -def set_sdnq_attention(): - try: - from modules import shared - from sdnq.kernels.triton_atten import sdnq_triton_atten - sdpa_pre_sdnq_atten = torch.nn.functional.scaled_dot_product_attention - @wraps(sdpa_pre_sdnq_atten) - def sdpa_sdnq_atten(query: torch.FloatTensor, key: torch.FloatTensor, value: torch.FloatTensor, attn_mask: torch.Tensor | None = None, dropout_p: float = 0.0, is_causal: bool = False, scale: float | None = None, enable_gqa: bool = False, **kwargs) -> torch.Tensor: - if ( - query.device.type != "cpu" - and (query.shape[-2] >= 32 and key.shape[-2] >= 32) - and (query.shape[-2] > 512 or key.shape[-2] > 512) # Skip TE - and query.shape[-3] > 1 # Skip VAE - ): - return sdnq_triton_atten( - query=query, key=key, value=value, attn_mask=attn_mask, - is_causal=is_causal, scale=scale, enable_gqa=enable_gqa, - matmul_dtype=shared.opts.sdnq_attention_matmul_type, - pv_matmul_dtype=shared.opts.sdnq_attention_pv_matmul_type, - smooth_k=shared.opts.sdnq_attention_smooth_k, - use_hadamard=shared.opts.sdnq_attention_use_hadamard, - hadamard_group_size=shared.opts.sdnq_attention_hadamard_group_size, - use_fp16_accum=shared.opts.sdnq_attention_use_fp16_accum, - ) - else: - if enable_gqa: - kwargs["enable_gqa"] = enable_gqa - return sdpa_pre_sdnq_atten(query=query, key=key, value=value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, scale=scale, **kwargs) - torch.nn.functional.scaled_dot_product_attention = sdpa_sdnq_atten - torch_info.set(attention='sdnq') - log.debug(f'Torch attention: type="SDNQ attention" matmul={shared.opts.sdnq_attention_matmul_type}:{shared.opts.sdnq_attention_pv_matmul_type} smooth={shared.opts.sdnq_attention_smooth_k} hadamard={shared.opts.sdnq_attention_use_hadamard} fp16_accum={shared.opts.sdnq_attention_use_fp16_accum}') - except Exception as err: - log.error(f'Torch attention: type="SDNQ attention" {err}') - - -def set_triton_flash_attention(backend: str): - try: - if backend in {"rocm", "zluda"}: # flash_attn_triton_amd only works with AMD - from modules.flash_attn_triton_amd import interface_fa - - sdpa_pre_triton_flash_atten = torch.nn.functional.scaled_dot_product_attention - @wraps(sdpa_pre_triton_flash_atten) - def sdpa_triton_flash_atten(query: torch.FloatTensor, key: torch.FloatTensor, value: torch.FloatTensor, attn_mask: torch.Tensor | None = None, dropout_p: float = 0.0, is_causal: bool = False, scale: float | None = None, enable_gqa: bool = False, **kwargs) -> torch.Tensor: - use_triton = ( - query.shape[-1] <= 128 - and attn_mask is None - and query.device.type != "cpu" - and key.device == query.device - and value.device == query.device - ) - if use_triton: - if scale is None: - scale = query.shape[-1] ** (-0.5) - head_size_og = query.size(3) - if head_size_og % 8 != 0: - query = torch.nn.functional.pad(query, [0, 8 - head_size_og % 8]) - key = torch.nn.functional.pad(key, [0, 8 - head_size_og % 8]) - value = torch.nn.functional.pad(value, [0, 8 - head_size_og % 8]) - query = query.transpose(1, 2) - key = key.transpose(1, 2) - value = value.transpose(1, 2) - out_padded = torch.zeros_like(query) - interface_fa.fwd(query, key, value, out_padded, dropout_p, scale, is_causal) - return out_padded[..., :head_size_og].transpose(1, 2) - else: - if enable_gqa: - kwargs["enable_gqa"] = enable_gqa - return sdpa_pre_triton_flash_atten(query=query, key=key, value=value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, scale=scale, **kwargs) - torch.nn.functional.scaled_dot_product_attention = sdpa_triton_flash_atten - torch_info.set(attention='triton') - log.debug('Torch attention: type="Triton Flash attention"') - except Exception as err: - log.error(f'Torch attention: type="Triton Flash attention" {err}') - - -def set_flex_attention(): - try: - from torch.nn.attention.flex_attention import flex_attention, create_block_mask - def flex_attention_causal_mask(b, h, q_idx, kv_idx): # pylint: disable=unused-argument - return q_idx >= kv_idx - - sdpa_pre_flex_atten = torch.nn.functional.scaled_dot_product_attention - @wraps(sdpa_pre_flex_atten) - def sdpa_flex_atten(query: torch.FloatTensor, key: torch.FloatTensor, value: torch.FloatTensor, attn_mask: torch.Tensor | None = None, dropout_p: float = 0.0, is_causal: bool = False, scale: float | None = None, enable_gqa: bool = False, **kwargs) -> torch.Tensor: # pylint: disable=unused-argument - score_mod = None - block_mask = None - if attn_mask is not None: - batch_size, num_heads = query.shape[:2] - seq_len_q = query.shape[-2] - seq_len_kv = key.shape[-2] - if attn_mask.ndim == 2: - attn_mask = attn_mask.view(attn_mask.shape[0], 1, attn_mask.size[1], 1) - attn_mask = attn_mask.expand(batch_size, num_heads, seq_len_q, seq_len_kv) - if attn_mask.dtype == torch.bool: - def mask_mod(batch_idx, head_idx, q_idx, kv_idx): - return attn_mask[batch_idx, head_idx, q_idx, kv_idx] - block_mask = create_block_mask(mask_mod, batch_size, None, seq_len_q, seq_len_kv, device=query.device) - else: - def score_mod_fn(score, batch_idx, head_idx, q_idx, kv_idx): - return score + attn_mask[batch_idx, head_idx, q_idx, kv_idx] - score_mod = score_mod_fn - elif is_causal: - block_mask = create_block_mask(flex_attention_causal_mask, query.shape[0], query.shape[1], query.shape[-2], key.shape[-2], device=query.device) - return flex_attention(query, key, value, score_mod=score_mod, block_mask=block_mask, scale=scale, enable_gqa=enable_gqa) - - torch.nn.functional.scaled_dot_product_attention = sdpa_flex_atten - torch_info.set(attention="flex") - log.debug('Torch attention: type="Flex attention"') - except Exception as err: - log.error(f'Torch attention: type="Flex attention" {err}') - - -def set_ck_flash_attention(backend: str, device: torch.device): - try: - if backend == "rocm": - if not installed('flash-attn'): - log.info('Torch attention: type="Flash attention" building...') - agent = rocm.Agent(device) - install(rocm.get_flash_attention_command(agent), reinstall=True) - else: - install('flash-attn') - from flash_attn import flash_attn_func - - sdpa_pre_flash_atten = torch.nn.functional.scaled_dot_product_attention - @wraps(sdpa_pre_flash_atten) - def sdpa_flash_atten(query: torch.FloatTensor, key: torch.FloatTensor, value: torch.FloatTensor, attn_mask: torch.Tensor | None = None, dropout_p: float = 0.0, is_causal: bool = False, scale: float | None = None, enable_gqa: bool = False, **kwargs) -> torch.Tensor: - use_flash = ( - query.shape[-1] <= 128 - and attn_mask is None - and query.dtype != torch.float32 - and query.device.type != "cpu" - and key.device == query.device - and value.device == query.device - ) - if use_flash: - is_unsqueezed = False - if query.dim() == 3: - query = query.unsqueeze(0) - is_unsqueezed = True - if key.dim() == 3: - key = key.unsqueeze(0) - if value.dim() == 3: - value = value.unsqueeze(0) - if enable_gqa: - key = key.repeat_interleave(query.size(-3)//key.size(-3), -3) - value = value.repeat_interleave(query.size(-3)//value.size(-3), -3) - query = query.transpose(1, 2) - key = key.transpose(1, 2) - value = value.transpose(1, 2) - attn_output = flash_attn_func(q=query, k=key, v=value, dropout_p=dropout_p, causal=is_causal, softmax_scale=scale).transpose(1, 2) - if is_unsqueezed: - attn_output = attn_output.squeeze(0) - return attn_output - else: - if enable_gqa: - kwargs["enable_gqa"] = enable_gqa - return sdpa_pre_flash_atten(query=query, key=key, value=value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, scale=scale, **kwargs) - torch.nn.functional.scaled_dot_product_attention = sdpa_flash_atten - torch_info.set(attention="flash") - log.debug('Torch attention: type="Flash attention"') - except Exception as err: - log.error(f'Torch attention: type="Flash attention" {err}') - - -def set_sage_attention(backend: str, device: torch.device): - try: - install('sageattention') - - use_cuda_backend = False - if (backend == "cuda") and (torch.cuda.get_device_capability(device) == (8, 6)): - use_cuda_backend = True # Detect GPU architecture - sm86 confirmed to need CUDA backend workaround as Sage Attention + Triton causes NaNs - try: - from sageattention import sageattn_qk_int8_pv_fp16_cuda - except Exception: - use_cuda_backend = False - - if use_cuda_backend: - from sageattention import sageattn_qk_int8_pv_fp16_cuda - def sage_attn_impl(query, key, value, is_causal, scale): - return sageattn_qk_int8_pv_fp16_cuda( - q=query, k=key, v=value, - tensor_layout="HND", - is_causal=is_causal, - sm_scale=scale, - return_lse=False, - pv_accum_dtype="fp32", - ) - else: - from sageattention import sageattn - def sage_attn_impl(query, key, value, is_causal, scale): - return sageattn( - q=query, k=key, v=value, - attn_mask=None, - dropout_p=0.0, - is_causal=is_causal, - scale=scale, - ) - - sdpa_pre_sage_atten = torch.nn.functional.scaled_dot_product_attention - @wraps(sdpa_pre_sage_atten) - def sdpa_sage_atten(query: torch.FloatTensor, key: torch.FloatTensor, value: torch.FloatTensor, attn_mask: torch.Tensor | None = None, dropout_p: float = 0.0, is_causal: bool = False, scale: float | None = None, enable_gqa: bool = False, **kwargs) -> torch.Tensor: - use_sage = ( - query.shape[-1] in {128, 96, 64} - and attn_mask is None - and query.device.type != "cpu" - and key.device == query.device - and value.device == query.device - ) - if use_sage: - if enable_gqa: - key = key.repeat_interleave(query.size(-3)//key.size(-3), -3) - value = value.repeat_interleave(query.size(-3)//value.size(-3), -3) - - # Call preselected sage attention implementation - return sage_attn_impl(query, key, value, is_causal, scale) - else: - if enable_gqa: - kwargs["enable_gqa"] = enable_gqa - return sdpa_pre_sage_atten(query=query, key=key, value=value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, scale=scale, **kwargs) - torch.nn.functional.scaled_dot_product_attention = sdpa_sage_atten - torch_info.set(attention="sage") - log.debug(f'Torch attention: type="Sage attention" backend={"cuda" if use_cuda_backend else "auto"}') - except Exception as err: - log.error(f'Torch attention: type="Sage attention" {err}') diff --git a/modules/attention/registry.py b/modules/attention/registry.py new file mode 100644 index 000000000..ef33d009e --- /dev/null +++ b/modules/attention/registry.py @@ -0,0 +1,91 @@ +"""Declarative backend registry behind the scaled_dot_product_attention router.""" +from dataclasses import dataclass, field +from typing import Callable +import torch + + +AttentionCall = Callable[..., torch.Tensor] + + +@dataclass(frozen=True) +class Platform: + """Where the router runs: the devices backend name and the selected device.""" + backend: str + device: torch.device | None = None + + +@dataclass(frozen=True) +class Constraints: + """Shape, dtype and device conditions a backend serves; a call failing any of them moves on to the next entry.""" + allow_cpu: bool = False + allow_mask: bool = True + allow_float32: bool = True + same_device: bool = False + head_dims: frozenset[int] | None = None + max_head_dim: int | None = None + min_tokens: int = 0 # query and key sequences both at least this long + min_long_side: int = 0 # query or key sequence longer than this + min_heads: int = 0 + + def accepts(self, query: torch.Tensor, key: torch.Tensor, value: torch.Tensor, attn_mask: torch.Tensor | None) -> bool: + if not self.allow_cpu and query.device.type == 'cpu': + return False + if not self.allow_mask and attn_mask is not None: + return False + if not self.allow_float32 and query.dtype == torch.float32: + return False + if self.same_device and (key.device != query.device or value.device != query.device): + return False + head_dim = query.shape[-1] + if self.head_dims is not None and head_dim not in self.head_dims: + return False + if self.max_head_dim is not None and head_dim > self.max_head_dim: + return False + if self.min_tokens and (query.shape[-2] < self.min_tokens or key.shape[-2] < self.min_tokens): + return False + if self.min_long_side and query.shape[-2] <= self.min_long_side and key.shape[-2] <= self.min_long_side: + return False + if self.min_heads and query.shape[-3] < self.min_heads: + return False + return True + + +@dataclass(frozen=True) +class AttentionBackend: + """One attention implementation: how to prepare it once and which calls it serves.""" + name: str + label: str # the sdp_overrides choice that enables it + priority: int # higher priority entries are tried first + prepare: Callable[[Platform, AttentionCall], AttentionCall | None] # imports and configures the implementation, returns its call or None + constraints: Constraints = field(default_factory=Constraints) + terminal: bool = False # serves every call the entries decline, in place of the original sdpa + platforms: frozenset[str] | None = None # devices backends the implementation exists for, None for all + + def available_on(self, platform: Platform) -> bool: + return self.platforms is None or platform.backend in self.platforms + + +class Registry: + def __init__(self): + self.backends: dict[str, AttentionBackend] = {} + + def register(self, backend: AttentionBackend) -> AttentionBackend: + if backend.name in self.backends: + raise ValueError(f'attention backend registered twice: name={backend.name}') + if self.by_label(backend.label) is not None: + raise ValueError(f'attention backend label registered twice: label="{backend.label}"') + self.backends[backend.name] = backend + return backend + + def by_label(self, label: str) -> AttentionBackend | None: + return next((backend for backend in self.backends.values() if backend.label == label), None) + + def ordered(self) -> list[AttentionBackend]: + """Backends by ascending priority, the order they are prepared in.""" + return sorted(self.backends.values(), key=lambda backend: backend.priority) + + def labels(self) -> list[str]: + return [backend.label for backend in self.ordered()] + + +registry = Registry() diff --git a/modules/attention/router.py b/modules/attention/router.py new file mode 100644 index 000000000..f917424cd --- /dev/null +++ b/modules/attention/router.py @@ -0,0 +1,90 @@ +"""The single scaled_dot_product_attention entry point over the prepared backends.""" +from dataclasses import dataclass +from functools import wraps +import torch +from installer import torch_info +from modules.logger import log +from modules.attention.registry import AttentionBackend, AttentionCall, Platform, Registry, registry as default_registry + + +@dataclass(frozen=True) +class PlanEntry: + backend: AttentionBackend + call: AttentionCall + + +@dataclass(frozen=True) +class Plan: + """The prepared chain for one set of overrides: entries by descending priority, then the terminal or the original sdpa.""" + entries: tuple[PlanEntry, ...] + terminal: PlanEntry | None + original: AttentionCall + platform: Platform + labels: tuple[str, ...] + + def chain(self) -> list[str]: + names = [entry.backend.name for entry in self.entries] + names.append(self.terminal.backend.name if self.terminal is not None else 'sdpa') + return names + + +current_plan: Plan | None = None + + +def build_plan(labels, platform: Platform, original: AttentionCall, reg: Registry | None = None) -> Plan: + reg = reg if reg is not None else default_registry + entries: list[PlanEntry] = [] + terminal: PlanEntry | None = None + for backend in reg.ordered(): # ascending priority: the last prepared backend is tried first and owns the torch_info record + if backend.label not in labels: + continue + if not backend.available_on(platform): + log.warning(f'Torch attention: type="{backend.label}" not available on backend={platform.backend}') + continue + try: + call = backend.prepare(platform, original) + except Exception as err: + log.error(f'Torch attention: type="{backend.label}" {err}') + continue + if call is None: + continue + entry = PlanEntry(backend=backend, call=call) + if backend.terminal: + terminal = entry + else: + entries.append(entry) + torch_info.set(attention=backend.name) + entries.reverse() + return Plan(entries=tuple(entries), terminal=terminal, original=original, platform=platform, labels=tuple(labels)) + + +def make_router(plan: Plan) -> AttentionCall: + entries = plan.entries + terminal = plan.terminal.call if plan.terminal is not None else None + original = plan.original + + @wraps(original) + def sdpa_router(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, scale=None, enable_gqa=False, **kwargs): + for entry in entries: + if entry.backend.constraints.accepts(query, key, value, attn_mask): + return entry.call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa) + if terminal is not None: + return terminal(query, key, value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, scale=scale, enable_gqa=enable_gqa, **kwargs) + if enable_gqa: # older sdpa signatures and platform wrappers reject the keyword, so it only travels when set + kwargs['enable_gqa'] = enable_gqa + return original(query=query, key=key, value=value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, scale=scale, **kwargs) + + return sdpa_router + + +def install_router(labels, platform: Platform, original: AttentionCall, reg: Registry | None = None) -> Plan: + """Prepare the enabled backends and install the router; an empty plan leaves the original sdpa in place.""" + global current_plan # pylint: disable=global-statement + plan = build_plan(labels, platform, original, reg) + torch.nn.functional.scaled_dot_product_attention = make_router(plan) if (plan.entries or plan.terminal is not None) else original + current_plan = plan + return plan + + +def get_plan() -> Plan | None: + return current_plan diff --git a/modules/devices.py b/modules/devices.py index 901014505..b29b0213c 100644 --- a/modules/devices.py +++ b/modules/devices.py @@ -515,27 +515,7 @@ def set_sdpa_params(): except Exception as err: log.warning(f'Torch attention: type="sdpa" {err}') - # Stack hijcaks in reverse order. This gives priority to the last added hijack. - # If the last hijack is not compatible, it will use the one before it and so on. - - if 'Dynamic attention' in opts.sdp_overrides: - global sdpa_pre_dyanmic_atten # pylint: disable=global-statement - sdpa_pre_dyanmic_atten = attention.set_dynamic_attention() - - if 'Flex attention' in opts.sdp_overrides: - attention.set_flex_attention() - - if 'Triton Flash attention' in opts.sdp_overrides: - attention.set_triton_flash_attention(backend) - - if 'Flash attention' in opts.sdp_overrides: - attention.set_ck_flash_attention(backend, device) - - if 'Sage attention' in opts.sdp_overrides: - attention.set_sage_attention(backend, device) - - if 'SDNQ attention' in opts.sdp_overrides: - attention.set_sdnq_attention() + attention.install_router(opts.sdp_overrides, attention.Platform(backend=backend, device=device), sdpa_original) from importlib.metadata import version try: diff --git a/test/test-attention-router.py b/test/test-attention-router.py new file mode 100644 index 000000000..c51f4b3f5 --- /dev/null +++ b/test/test-attention-router.py @@ -0,0 +1,343 @@ +#!/usr/bin/env python +""" +Offline unit tests for the attention router in modules.attention. + +Covers: + +- plan construction over every subset of the sdp_overrides choices on cuda, rocm, zluda and cpu + against an oracle of the stacking order the closure hijacks used: priority, terminal selection, + platform gating +- gate parity: every backend's declared constraints against a literal transcription of the + predicate its closure carried, over a grid of shapes, dtypes, devices and masks +- every sdp_overrides choice maps to a registered backend and every backend to a choice +- router dispatch: the first accepting entry wins, the terminal receives declined calls, the + original sdpa only receives enable_gqa when it is set +- a backend whose prepare raises is skipped without disturbing the rest +- install_router leaves the original sdpa in place for an empty plan +- the dynamic backend pins the pre-dynamic sdpa the sliced path reads + +No running server required. Nothing is moved to the accelerator. + +Usage: + python test/test-attention-router.py +""" + +import itertools +import logging +import os +import sys +from dataclasses import replace + +import torch + +script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, script_dir) +os.chdir(script_dir) + +os.environ['SD_INSTALL_QUIET'] = '1' + +# Bootstrap cmd_args before any module that pulls in shared.py. +import modules.cmd_args # pylint: disable=wrong-import-position +import installer # pylint: disable=wrong-import-position +orig_argv = sys.argv +sys.argv = [sys.argv[0]] +try: + modules.cmd_args.parse_args() +finally: + sys.argv = orig_argv +installer.add_args(modules.cmd_args.parser) +modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) + +stock_sdpa = torch.nn.functional.scaled_dot_product_attention # importing shared installs the configured hijacks in-process + +from modules.errors import log # pylint: disable=wrong-import-position +from modules import attention # pylint: disable=wrong-import-position +from modules.attention import router as attention_router # pylint: disable=wrong-import-position + + +# ============================================================ +# Test infrastructure +# ============================================================ + +results: dict[str, dict] = {} + + +def category(name: str): + if name not in results: + results[name] = {'passed': 0, 'failed': 0, 'tests': []} + return name + + +def record(cat: str, passed: bool, name: str, detail: str = ''): + status = 'PASS' if passed else 'FAIL' + results[cat]['passed' if passed else 'failed'] += 1 + results[cat]['tests'].append((status, name)) + msg = f' {status}: {name}' + if detail: + msg += f' ({detail})' + if passed: + log.info(msg) + else: + log.error(msg) + + +def run_test(cat: str, fn): + name = fn.__name__ + try: + ok = fn() + if ok is False: + record(cat, False, name) + else: + record(cat, True, name) + except AssertionError as e: + record(cat, False, name, str(e)) + except Exception as e: # pylint: disable=broad-except + record(cat, False, name, f'exception: {e}') + import traceback + traceback.print_exc() + + +# ============================================================ +# The closure hijacks this router replaces, transcribed +# ============================================================ + +# devices.set_sdpa_params applied the hijacks in this order; each wrapped the previous, so the +# last applied was tried first. Dynamic and flex replaced the chain end instead of wrapping it. +OLD_ORDER = ['Dynamic attention', 'Flex attention', 'Triton Flash attention', 'Flash attention', 'Sage attention', 'SDNQ attention'] +OLD_TERMINALS = {'Dynamic attention', 'Flex attention'} +OLD_NAMES = { + 'Dynamic attention': 'dynamic', + 'Flex attention': 'flex', + 'Triton Flash attention': 'triton', + 'Flash attention': 'flash', + 'Sage attention': 'sage', + 'SDNQ attention': 'sdnq', +} +# mirrors shared_defaults.get_default_modes: five choices everywhere, Triton Flash attention added on rocm and zluda +CHOICES = OLD_ORDER +TRITON_PLATFORMS = {'rocm', 'zluda'} + +OLD_GATES = { + 'sdnq': lambda q, k, v, m: q.device.type != "cpu" and (q.shape[-2] >= 32 and k.shape[-2] >= 32) and (q.shape[-2] > 512 or k.shape[-2] > 512) and q.shape[-3] > 1, + 'triton': lambda q, k, v, m: q.shape[-1] <= 128 and m is None and q.device.type != "cpu" and k.device == q.device and v.device == q.device, + 'flash': lambda q, k, v, m: q.shape[-1] <= 128 and m is None and q.dtype != torch.float32 and q.device.type != "cpu" and k.device == q.device and v.device == q.device, + 'sage': lambda q, k, v, m: q.shape[-1] in {128, 96, 64} and m is None and q.device.type != "cpu" and k.device == q.device and v.device == q.device, +} + + +def oracle_chain(labels, platform_backend): + enabled = [label for label in OLD_ORDER if label in labels] + if platform_backend not in TRITON_PLATFORMS: + enabled = [label for label in enabled if label != 'Triton Flash attention'] + terminal = None + entries = [] + for label in enabled: + if label in OLD_TERMINALS: + terminal = label + else: + entries.append(label) + entries.reverse() + return [OLD_NAMES[label] for label in entries], (OLD_NAMES[terminal] if terminal else None) + + +def stub_registry(failing=()): + """The registered backends with prepares that return a tagged call instead of importing anything.""" + reg = attention.Registry() + for backend in attention.registry.ordered(): + def prepare(platform, original, name=backend.name): # pylint: disable=unused-argument + if name in failing: + raise RuntimeError(f'{name} unavailable') + def call(*args, **kwargs): # pylint: disable=unused-argument + return name + return call + reg.register(replace(backend, prepare=prepare)) + return reg + + +def shaped(shape, dtype=torch.float16, device='meta'): + """A tensor of the given shape without allocating it.""" + return torch.empty(1, dtype=dtype, device=device).expand(*shape) + + +def sdpa_stub(**kwargs): # pylint: disable=unused-argument + return 'sdpa' + + +# ============================================================ +# Tests +# ============================================================ + +def test_plan_matches_stacking_oracle(): + level = log.level + log.setLevel(logging.ERROR) # platform gating warns per plan + try: + plans = 0 + for platform_backend in ('cuda', 'rocm', 'zluda', 'cpu'): + reg = stub_registry() + platform = attention.Platform(backend=platform_backend) + for count in range(len(OLD_ORDER) + 1): + for labels in itertools.combinations(OLD_ORDER, count): + plan = attention.build_plan(list(labels), platform, sdpa_stub, reg) + expected_entries, expected_terminal = oracle_chain(labels, platform_backend) + got_entries = [entry.backend.name for entry in plan.entries] + got_terminal = plan.terminal.backend.name if plan.terminal is not None else None + assert got_entries == expected_entries, f'{platform_backend} {labels}: entries {got_entries} != {expected_entries}' + assert got_terminal == expected_terminal, f'{platform_backend} {labels}: terminal {got_terminal} != {expected_terminal}' + assert plan.chain() == got_entries + [got_terminal or 'sdpa'] + plans += 1 + finally: + log.setLevel(level) + log.info(f' {plans} plans match the stacking oracle') + return True + + +def test_gates_match_transcribed_predicates(): + cases = 0 + lengths = (16, 32, 512, 513, 4096) + for q_device, kv_device, dtype, heads, q_len, k_len, head_dim, masked in itertools.product(('cpu', 'meta'), ('cpu', 'meta'), (torch.float16, torch.float32), (1, 8), lengths, lengths, (40, 64, 96, 128, 256), (False, True)): + q = shaped((1, heads, q_len, head_dim), dtype, q_device) + k = shaped((1, heads, k_len, head_dim), dtype, kv_device) + v = shaped((1, heads, k_len, head_dim), dtype, kv_device) + m = shaped((1, 1, q_len, k_len), torch.bool, q_device) if masked else None + for name, gate in OLD_GATES.items(): + expected = bool(gate(q, k, v, m)) + got = attention.registry.backends[name].constraints.accepts(q, k, v, m) + assert got == expected, f'{name}: q={tuple(q.shape)} k={tuple(k.shape)} dtype={dtype} devices={q_device}/{kv_device} mask={masked} got={got} expected={expected}' + cases += 1 + log.info(f' {cases} gate cases match the transcribed predicates') + return True + + +def test_terminals_carry_no_gate(): + for name in ('dynamic', 'flex'): + backend = attention.registry.backends[name] + assert backend.terminal, name + assert backend.constraints == attention.Constraints(), name + return True + + +def test_choices_match_backends(): + labels = attention.registry.labels() + assert sorted(labels) == sorted(CHOICES), f'registered={labels} choices={CHOICES}' + for label in CHOICES: + assert attention.registry.by_label(label) is not None, label + triton = attention.registry.backends['triton'] + assert triton.platforms == frozenset(TRITON_PLATFORMS), triton.platforms + for name, backend in attention.registry.backends.items(): + if name != 'triton': + assert backend.platforms is None, name + return True + + +def test_router_dispatch_prefers_priority_then_terminal_then_original(): + calls = [] + + def original(**kwargs): + calls.append(('sdpa', kwargs)) + return 'sdpa' + + reg = attention.Registry() + + def add(name, constraints, priority, terminal=False): + def prepare(platform, orig): # pylint: disable=unused-argument + def call(*args, **kwargs): # pylint: disable=unused-argument + calls.append((name, kwargs)) + return name + return call + reg.register(attention.AttentionBackend(name=name, label=f'{name} attention', priority=priority, prepare=prepare, constraints=constraints, terminal=terminal)) + + add('narrow', attention.Constraints(head_dims=frozenset({64})), priority=20) + add('wide', attention.Constraints(), priority=10) + platform = attention.Platform(backend='cuda') + router = attention_router.make_router(attention.build_plan(['narrow attention', 'wide attention'], platform, original, reg)) + q64 = shaped((1, 8, 128, 64)) + q128 = shaped((1, 8, 128, 128)) + cpu = shaped((1, 8, 128, 64), device='cpu') + assert router(q64, q64, q64) == 'narrow' + assert router(q128, q128, q128) == 'wide' + assert router(cpu, cpu, cpu) == 'sdpa' + assert 'enable_gqa' not in calls[-1][1], calls[-1] + assert router(cpu, cpu, cpu, enable_gqa=True) == 'sdpa' + assert calls[-1][1].get('enable_gqa') is True, calls[-1] + + add('term', attention.Constraints(), priority=5, terminal=True) + router = attention_router.make_router(attention.build_plan(['narrow attention', 'term attention'], platform, original, reg)) + assert router(q64, q64, q64) == 'narrow' + assert router(cpu, cpu, cpu, extra=1) == 'term' + assert calls[-1][1].get('extra') == 1 and calls[-1][1].get('enable_gqa') is False, calls[-1] + return True + + +def test_prepare_failure_skips_backend(): + reg = stub_registry(failing=('sage',)) + plan = attention.build_plan(['Sage attention', 'SDNQ attention', 'Flash attention'], attention.Platform(backend='cuda'), sdpa_stub, reg) + assert [entry.backend.name for entry in plan.entries] == ['sdnq', 'flash'], plan.chain() + return True + + +def test_install_router_keeps_original_for_empty_plan(): + saved = torch.nn.functional.scaled_dot_product_attention + saved_plan = attention_router.current_plan + try: + platform = attention.Platform(backend='cuda') + plan = attention.install_router([], platform, sdpa_stub, stub_registry()) + assert torch.nn.functional.scaled_dot_product_attention is sdpa_stub + assert plan.chain() == ['sdpa'], plan.chain() + plan = attention.install_router(['SDNQ attention', 'Sage attention'], platform, sdpa_stub, stub_registry()) + assert torch.nn.functional.scaled_dot_product_attention is not sdpa_stub + assert plan.chain() == ['sdnq', 'sage', 'sdpa'], plan.chain() + assert attention.get_plan() is plan + finally: + torch.nn.functional.scaled_dot_product_attention = saved + attention_router.current_plan = saved_plan + return True + + +def test_dynamic_backend_pins_pre_dynamic_sdpa(): + from modules import devices + saved = devices.sdpa_pre_dyanmic_atten + try: + call = attention.registry.backends['dynamic'].prepare(attention.Platform(backend='cuda'), sdpa_stub) + from modules.sd_hijack_dynamic_atten import dynamic_scaled_dot_product_attention + assert call is dynamic_scaled_dot_product_attention + assert devices.sdpa_pre_dyanmic_atten is sdpa_stub + finally: + devices.sdpa_pre_dyanmic_atten = saved + return True + + +def run_all(): + log.warning('=== attention router ===') + cat = category('router') + for fn in [ + test_plan_matches_stacking_oracle, + test_gates_match_transcribed_predicates, + test_terminals_carry_no_gate, + test_choices_match_backends, + test_router_dispatch_prefers_priority_then_terminal_then_original, + test_prepare_failure_skips_backend, + test_install_router_keeps_original_for_empty_plan, + test_dynamic_backend_pins_pre_dynamic_sdpa, + ]: + run_test(cat, fn) + + log.warning('=== Results ===') + total_passed = 0 + total_failed = 0 + for cat_name, info in results.items(): + ok = info['failed'] == 0 + status = 'PASS' if ok else 'FAIL' + log.info(f" {cat_name}: {info['passed']} passed, {info['failed']} failed [{status}]") + total_passed += info['passed'] + total_failed += info['failed'] + log.warning(f'Total: {total_passed} passed, {total_failed} failed') + return total_failed == 0 + + +if __name__ == '__main__': + import time + t0 = time.time() + ok = run_all() + torch.nn.functional.scaled_dot_product_attention = stock_sdpa + log.warning(f'Total time: {time.time() - t0:.2f}s') + sys.exit(0 if ok else 1) From bb0cc5328ea2bff208674a5eb9486b00f65bd17e Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 21:59:54 +0100 Subject: [PATCH 003/270] fix(attention): flex joins the chain instead of ending it The flex backend never called the sdpa it replaced, so any backend stacked before it was unreachable and every call it could not serve, cpu or 3d inputs included, failed inside flex_attention. It is now an ordinary entry gated on what flex_attention accepts: 4d tensors on one non-cpu device. The mask path drops the 2d special case, which indexed attn_mask.size and reshaped the mask onto the wrong axis; expanding to (batch, heads, q, kv) already follows sdpa broadcast semantics. --- modules/attention/backends/flex.py | 13 ++++++------ modules/attention/registry.py | 3 +++ test/test-attention-router.py | 33 ++++++++++++++++-------------- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/modules/attention/backends/flex.py b/modules/attention/backends/flex.py index 7997d54fd..4ca29be3e 100644 --- a/modules/attention/backends/flex.py +++ b/modules/attention/backends/flex.py @@ -1,6 +1,6 @@ import torch from modules.logger import log -from modules.attention.registry import AttentionBackend, Platform +from modules.attention.registry import AttentionBackend, Constraints, Platform def prepare(platform: Platform, original): # pylint: disable=unused-argument @@ -9,16 +9,14 @@ def prepare(platform: Platform, original): # pylint: disable=unused-argument def causal_mask(b, h, q_idx, kv_idx): # pylint: disable=unused-argument return q_idx >= kv_idx - def call(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, scale=None, enable_gqa=False, **kwargs): # pylint: disable=unused-argument + def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa): # pylint: disable=unused-argument score_mod = None block_mask = None if attn_mask is not None: batch_size, num_heads = query.shape[:2] seq_len_q = query.shape[-2] seq_len_kv = key.shape[-2] - if attn_mask.ndim == 2: - attn_mask = attn_mask.view(attn_mask.shape[0], 1, attn_mask.size[1], 1) - attn_mask = attn_mask.expand(batch_size, num_heads, seq_len_q, seq_len_kv) + attn_mask = attn_mask.expand(batch_size, num_heads, seq_len_q, seq_len_kv) # sdpa masks broadcast over the trailing dims if attn_mask.dtype == torch.bool: def mask_mod(batch_idx, head_idx, q_idx, kv_idx): return attn_mask[batch_idx, head_idx, q_idx, kv_idx] @@ -35,4 +33,7 @@ def prepare(platform: Platform, original): # pylint: disable=unused-argument return call -backend = AttentionBackend(name='flex', label='Flex attention', priority=20, prepare=prepare, terminal=True) +backend = AttentionBackend( + name='flex', label='Flex attention', priority=20, prepare=prepare, + constraints=Constraints(min_ndim=4, same_device=True), # flex_attention takes 4d tensors on one device and compiles on cpu +) diff --git a/modules/attention/registry.py b/modules/attention/registry.py index ef33d009e..820dc77f8 100644 --- a/modules/attention/registry.py +++ b/modules/attention/registry.py @@ -26,10 +26,13 @@ class Constraints: min_tokens: int = 0 # query and key sequences both at least this long min_long_side: int = 0 # query or key sequence longer than this min_heads: int = 0 + min_ndim: int = 0 def accepts(self, query: torch.Tensor, key: torch.Tensor, value: torch.Tensor, attn_mask: torch.Tensor | None) -> bool: if not self.allow_cpu and query.device.type == 'cpu': return False + if self.min_ndim and query.ndim < self.min_ndim: + return False if not self.allow_mask and attn_mask is not None: return False if not self.allow_float32 and query.dtype == torch.float32: diff --git a/test/test-attention-router.py b/test/test-attention-router.py index c51f4b3f5..44a95c150 100644 --- a/test/test-attention-router.py +++ b/test/test-attention-router.py @@ -102,9 +102,10 @@ def run_test(cat: str, fn): # ============================================================ # devices.set_sdpa_params applied the hijacks in this order; each wrapped the previous, so the -# last applied was tried first. Dynamic and flex replaced the chain end instead of wrapping it. +# last applied was tried first. Dynamic replaced the chain end instead of wrapping it; flex did +# too, which left everything stacked before it unreachable, so it is an ordinary entry now. OLD_ORDER = ['Dynamic attention', 'Flex attention', 'Triton Flash attention', 'Flash attention', 'Sage attention', 'SDNQ attention'] -OLD_TERMINALS = {'Dynamic attention', 'Flex attention'} +OLD_TERMINALS = {'Dynamic attention'} OLD_NAMES = { 'Dynamic attention': 'dynamic', 'Flex attention': 'flex', @@ -117,11 +118,13 @@ OLD_NAMES = { CHOICES = OLD_ORDER TRITON_PLATFORMS = {'rocm', 'zluda'} -OLD_GATES = { +# the four closure predicates transcribed literally, plus the contract flex_attention itself enforces +GATES = { 'sdnq': lambda q, k, v, m: q.device.type != "cpu" and (q.shape[-2] >= 32 and k.shape[-2] >= 32) and (q.shape[-2] > 512 or k.shape[-2] > 512) and q.shape[-3] > 1, 'triton': lambda q, k, v, m: q.shape[-1] <= 128 and m is None and q.device.type != "cpu" and k.device == q.device and v.device == q.device, 'flash': lambda q, k, v, m: q.shape[-1] <= 128 and m is None and q.dtype != torch.float32 and q.device.type != "cpu" and k.device == q.device and v.device == q.device, 'sage': lambda q, k, v, m: q.shape[-1] in {128, 96, 64} and m is None and q.device.type != "cpu" and k.device == q.device and v.device == q.device, + 'flex': lambda q, k, v, m: q.ndim == 4 and q.device.type != "cpu" and k.device == q.device and v.device == q.device, } @@ -194,12 +197,13 @@ def test_plan_matches_stacking_oracle(): def test_gates_match_transcribed_predicates(): cases = 0 lengths = (16, 32, 512, 513, 4096) - for q_device, kv_device, dtype, heads, q_len, k_len, head_dim, masked in itertools.product(('cpu', 'meta'), ('cpu', 'meta'), (torch.float16, torch.float32), (1, 8), lengths, lengths, (40, 64, 96, 128, 256), (False, True)): - q = shaped((1, heads, q_len, head_dim), dtype, q_device) - k = shaped((1, heads, k_len, head_dim), dtype, kv_device) - v = shaped((1, heads, k_len, head_dim), dtype, kv_device) - m = shaped((1, 1, q_len, k_len), torch.bool, q_device) if masked else None - for name, gate in OLD_GATES.items(): + for q_device, kv_device, dtype, heads, q_len, k_len, head_dim, masked, batched in itertools.product(('cpu', 'meta'), ('cpu', 'meta'), (torch.float16, torch.float32), (1, 8), lengths, lengths, (40, 64, 96, 128, 256), (False, True), (False, True)): + lead = (1,) if batched else () + q = shaped((*lead, heads, q_len, head_dim), dtype, q_device) + k = shaped((*lead, heads, k_len, head_dim), dtype, kv_device) + v = shaped((*lead, heads, k_len, head_dim), dtype, kv_device) + m = shaped((*lead, 1, q_len, k_len), torch.bool, q_device) if masked else None + for name, gate in GATES.items(): expected = bool(gate(q, k, v, m)) got = attention.registry.backends[name].constraints.accepts(q, k, v, m) assert got == expected, f'{name}: q={tuple(q.shape)} k={tuple(k.shape)} dtype={dtype} devices={q_device}/{kv_device} mask={masked} got={got} expected={expected}' @@ -208,11 +212,10 @@ def test_gates_match_transcribed_predicates(): return True -def test_terminals_carry_no_gate(): - for name in ('dynamic', 'flex'): - backend = attention.registry.backends[name] - assert backend.terminal, name - assert backend.constraints == attention.Constraints(), name +def test_only_dynamic_is_terminal(): + for name, backend in attention.registry.backends.items(): + assert backend.terminal == (name == 'dynamic'), name + assert attention.registry.backends['dynamic'].constraints == attention.Constraints() return True @@ -312,7 +315,7 @@ def run_all(): for fn in [ test_plan_matches_stacking_oracle, test_gates_match_transcribed_predicates, - test_terminals_carry_no_gate, + test_only_dynamic_is_terminal, test_choices_match_backends, test_router_dispatch_prefers_priority_then_terminal_then_original, test_prepare_failure_skips_backend, From 9d1d7c839afb1e1c10b6e314149a430213677155 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 22:06:36 +0100 Subject: [PATCH 004/270] fix(processing): re-apply attention when the overrides change The generate-time gate compared the stored processor name against the sdp_overrides list, which can never be equal, so the check reduced to the processor name alone and a changed override set was never applied until the next model load. set_diffusers_attention now stamps the override set it applied beside the processor name, the gate compares both, and pipe switches carry the new attribute with the old one. --- modules/attention/dispatcher.py | 1 + modules/processing_diffusers.py | 5 +++-- modules/sd_models.py | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/attention/dispatcher.py b/modules/attention/dispatcher.py index 4cf232022..e7d31e477 100644 --- a/modules/attention/dispatcher.py +++ b/modules/attention/dispatcher.py @@ -48,6 +48,7 @@ def set_diffusers_attention(pipe, quiet = False): log.debug(f"Torch attention: slicing={shared.opts.attention_slicing}") pipe.current_attn_name = shared.opts.cross_attention_optimization + pipe.current_attn_overrides = list(shared.opts.sdp_overrides) orig_get_kernel = None diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index 0efbc4904..9e71050e3 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -546,8 +546,9 @@ def update_pipeline(sd_model, p: processing.StableDiffusionProcessing): global orig_pipeline # pylint: disable=global-statement orig_pipeline = updated_model # processed ONNX pipeline should not be replaced with original pipeline. current_attn = getattr(updated_model, "current_attn_name", None) - if (current_attn != shared.opts.cross_attention_optimization) and (current_attn != shared.opts.sdp_overrides): - log.info(f"Setting attention optimization: {shared.opts.cross_attention_optimization}") + current_overrides = getattr(updated_model, "current_attn_overrides", None) + if current_attn != shared.opts.cross_attention_optimization or current_overrides != list(shared.opts.sdp_overrides): + log.info(f"Setting attention optimization: {shared.opts.cross_attention_optimization} overrides={shared.opts.sdp_overrides}") attention.set_diffusers_attention(updated_model) return updated_model diff --git a/modules/sd_models.py b/modules/sd_models.py index a21877dc8..6140571e9 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -1261,6 +1261,7 @@ def copy_diffuser_options(new_pipe, orig_pipe): new_pipe.sd_model_hash = getattr(orig_pipe, 'sd_model_hash', None) new_pipe.has_accelerate = getattr(orig_pipe, 'has_accelerate', False) new_pipe.current_attn_name = getattr(orig_pipe, 'current_attn_name', None) + new_pipe.current_attn_overrides = getattr(orig_pipe, 'current_attn_overrides', None) new_pipe.default_scheduler = getattr(orig_pipe, 'default_scheduler', None) new_pipe.image_encoder = getattr(orig_pipe, 'image_encoder', None) new_pipe.feature_extractor = getattr(orig_pipe, 'feature_extractor', None) @@ -1288,6 +1289,7 @@ def backup_pipe_components(pipe): 'sd_model_hash': getattr(pipe, "sd_model_hash", None), 'has_accelerate': getattr(pipe, "has_accelerate", None), 'current_attn_name': getattr(pipe, "current_attn_name", None), + 'current_attn_overrides': getattr(pipe, "current_attn_overrides", None), 'default_scheduler': getattr(pipe, "default_scheduler", None), 'image_encoder': getattr(pipe, "image_encoder", None), 'feature_extractor': getattr(pipe, "feature_extractor", None), @@ -1309,6 +1311,7 @@ def restore_pipe_components(pipe, components): pipe.sd_model_hash = components['sd_model_hash'] pipe.has_accelerate = components['has_accelerate'] pipe.current_attn_name = components['current_attn_name'] + pipe.current_attn_overrides = components.get('current_attn_overrides') pipe.default_scheduler = components['default_scheduler'] if components['image_encoder'] is not None: From 4509b145cd6c9dd7a0ebe48c0a6f181e466c7147 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 22:16:26 +0100 Subject: [PATCH 005/270] feat(attention): generation context A module-level context tells attention consumers what is running: the component role (transformer, text encoder, vae), the index of the denoiser forward about to run, the pass length, and the model. It is opened and closed around process_images, reset per denoising pass beside the callback setup, and advanced by both step sources: the classic callback passes the completed step plus one, the modular pre-forward hook counts forwards. Roles come from the existing text encoder and vae hijacks and the modular phase hooks. The step also lives in a device scalar updated in place, so a compiled reader keeps its graph across steps. --- modules/attention/__init__.py | 6 +-- modules/attention/context.py | 77 +++++++++++++++++++++++++++++++++ modules/modular_load.py | 6 +++ modules/processing.py | 3 ++ modules/processing_args.py | 2 + modules/processing_callbacks.py | 2 + modules/sd_hijack_te.py | 10 +++-- modules/sd_hijack_vae.py | 25 ++++++----- test/test-attention-router.py | 62 ++++++++++++++++++++++++++ 9 files changed, 176 insertions(+), 17 deletions(-) create mode 100644 modules/attention/context.py diff --git a/modules/attention/__init__.py b/modules/attention/__init__.py index 7b923ca6b..359ab81ca 100644 --- a/modules/attention/__init__.py +++ b/modules/attention/__init__.py @@ -1,12 +1,12 @@ -"""Attention backends: one scaled_dot_product_attention router over the registered backends, plus the diffusers-side processor and dispatcher setup.""" +"""Attention backends: one scaled_dot_product_attention router over the registered backends, the per-generation context, and the diffusers-side processor and dispatcher setup.""" from modules.attention.registry import AttentionBackend, AttentionCall, Constraints, Platform, Registry, registry from modules.attention.router import Plan, PlanEntry, build_plan, get_plan, install_router from modules.attention.dispatcher import set_diffusers_attention, set_attention_dispatcher, hijack_kernels, get_kernel_hijack, get_hf_api_hijack -from modules.attention import backends +from modules.attention import backends, context __all__ = [ 'AttentionBackend', 'AttentionCall', 'Constraints', 'Platform', 'Registry', 'registry', 'Plan', 'PlanEntry', 'build_plan', 'get_plan', 'install_router', 'set_diffusers_attention', 'set_attention_dispatcher', 'hijack_kernels', 'get_kernel_hijack', 'get_hf_api_hijack', - 'backends', + 'backends', 'context', ] diff --git a/modules/attention/context.py b/modules/attention/context.py new file mode 100644 index 000000000..24aa8300a --- /dev/null +++ b/modules/attention/context.py @@ -0,0 +1,77 @@ +"""Per-generation state for attention consumers: the component running, the denoiser forward about to run, and the model.""" +from contextlib import contextmanager +from dataclasses import dataclass +import torch + + +@dataclass +class GenerationContext: + active: bool = False + role: str | None = None # 'transformer', 'te' or 'vae' while a generation runs, None outside one + step: int = 0 # index of the denoiser forward about to run + steps: int = 0 # forwards in the current pass + forwards: int = 0 + model_key: tuple[str, str | None] | None = None # pipeline class and denoiser class, telemetry only + step_buffer: torch.Tensor | None = None # the step as a device scalar updated in place, so compiled readers keep their graph + + +current = GenerationContext() + + +def denoiser_name(pipe) -> str | None: + for name in ('transformer', 'unet'): + module = getattr(pipe, name, None) + if module is not None: + return module.__class__.__name__ + return None + + +def begin(pipe, steps: int = 0) -> None: + from modules import devices + current.active = True + current.role = 'transformer' + current.model_key = (pipe.__class__.__name__, denoiser_name(pipe)) if pipe is not None else None + device = devices.device if devices.device is not None else torch.device('cpu') + if current.step_buffer is None or current.step_buffer.device != device: + current.step_buffer = torch.zeros((), dtype=torch.int64, device=device) + new_pass(steps) + + +def new_pass(steps: int = 0) -> None: + """Restart the step count for a denoising pass: base, hires or refiner.""" + current.steps = int(steps or 0) + current.forwards = 0 + set_step(0) + + +def set_step(step: int) -> None: + current.step = int(step) + if current.step_buffer is not None: + current.step_buffer.fill_(current.step) + + +def tick(step: int | None = None) -> None: + """Advance to the next forward: the classic callback passes the completed step plus one, the modular pre-hook passes nothing and counts forwards.""" + set_step(current.forwards if step is None else step) + current.forwards = current.step + 1 + + +def end() -> None: + current.active = False + current.role = None + current.model_key = None + new_pass(0) + + +def set_role(name: str | None) -> None: + current.role = name + + +@contextmanager +def role(name: str): + previous = current.role + current.role = name + try: + yield + finally: + current.role = previous diff --git a/modules/modular_load.py b/modules/modular_load.py index b8e8b8cc0..b5c784c39 100644 --- a/modules/modular_load.py +++ b/modules/modular_load.py @@ -3,6 +3,7 @@ import logging import torch from modules import shared, errors, devices, sd_offload from modules.logger import log +from modules.attention import context as attention_context class InterruptLogFilter(logging.Filter): @@ -41,6 +42,7 @@ def install_state_hook(pipe): def _pre_transformer_hook(module, args): # pylint: disable=unused-argument new_phase = set_phase('Generate', module) + attention_context.set_role('transformer') if new_phase: sd_offload.offload_ondemand(pipe, exclude=['transformer', 'transformer_ref'], reason='generate', force=hasattr(pipe, 'sdnext_force_offload')) if shared.state.sampling_steps == 0 and getattr(pipe, 'num_timesteps', 0) > 0: @@ -52,11 +54,13 @@ def install_state_hook(pipe): raise AssertionError('Interrupted...') time.sleep(0.1) shared.state.step() + attention_context.tick() if shared.state.interrupted or shared.state.skipped: raise AssertionError('Interrupted...') def _pre_text_encode_hook(module, args): # pylint: disable=unused-argument new_phase = set_phase('Text Encode', module) + attention_context.set_role('te') if new_phase: sd_offload.offload_ondemand(pipe, exclude=['text_encoder'], reason='text encode', force=hasattr(pipe, 'sdnext_force_offload')) if shared.state.interrupted or shared.state.skipped: @@ -64,6 +68,7 @@ def install_state_hook(pipe): def _pre_vae_decode_hook(module, args): # pylint: disable=unused-argument new_phase = set_phase('Decode', module) + attention_context.set_role('vae') if new_phase: sd_offload.offload_ondemand(pipe, exclude=['vae', 'audio_vae'], reason='vae decode', force=hasattr(pipe, 'sdnext_force_offload')) if shared.state.interrupted or shared.state.skipped: # fires per tile, so tiled decodes abort promptly @@ -71,6 +76,7 @@ def install_state_hook(pipe): def _pre_vae_encode_hook(module, args): # pylint: disable=unused-argument new_phase = set_phase('Encode', module) + attention_context.set_role('vae') if new_phase: sd_offload.offload_ondemand(pipe, exclude=['vae', 'audio_vae'], reason='vae encode', force=hasattr(pipe, 'sdnext_force_offload')) if shared.state.interrupted or shared.state.skipped: # fires per tile, so tiled encodes abort promptly diff --git a/modules/processing.py b/modules/processing.py index b72c8e151..0e919cd23 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -5,6 +5,7 @@ import numpy as np from PIL import Image, ImageOps from modules import shared, devices, errors, images, scripts_manager, memstats, script_callbacks, extra_networks, sd_models, sd_checkpoint, sd_vae, processing_helpers, processing_grading, timer, masking from modules.logger import log +from modules.attention import context as attention_context from modules.sd_hijack_hypertile import context_hypertile_vae, context_hypertile_unet from modules.processing_info import create_infotext from modules.processing_class import ( # pylint: disable=unused-import @@ -199,6 +200,7 @@ def process_images(p: StableDiffusionProcessing) -> Processed | None: script_callbacks.before_process_callback(p) timer.process.record('pre') + attention_context.begin(shared.sd_model, p.steps) if shared.cmd_opts.profile: timer.startup.profile = True @@ -232,6 +234,7 @@ def process_images(p: StableDiffusionProcessing) -> Processed | None: results = process_images_inner(p) finally: + attention_context.end() script_callbacks.after_process_callback(p) if p.override_settings_restore_afterwards: # restore opts to original state diff --git a/modules/processing_args.py b/modules/processing_args.py index 94a66153f..115bc6c61 100644 --- a/modules/processing_args.py +++ b/modules/processing_args.py @@ -8,6 +8,7 @@ import numpy as np from PIL import Image from modules import shared, sd_models, processing, processing_vae, processing_helpers, sd_hijack_hypertile, sd_vae from modules.logger import log +from modules.attention import context as attention_context from modules.processing_callbacks import diffusers_callback_legacy, diffusers_callback, set_callbacks_p from modules.processing_helpers import get_generator, apply_circular # pylint: disable=unused-import from modules.processing_prompt import set_prompt @@ -366,6 +367,7 @@ def set_pipeline_args(p, model, prompts:list, negative_prompts:list, prompts_2:l args['callback_steps'] = 1 set_callbacks_p(p) + attention_context.new_pass(steps) if 'prior_callback_on_step_end' in possible: # Wuerstchen / Cascade args['prior_callback_on_step_end'] = diffusers_callback if 'prior_callback_on_step_end_tensor_inputs' in possible: diff --git a/modules/processing_callbacks.py b/modules/processing_callbacks.py index 48ac6e75b..9b8728695 100644 --- a/modules/processing_callbacks.py +++ b/modules/processing_callbacks.py @@ -4,6 +4,7 @@ import torch import numpy as np from modules import shared, devices, processing_correction, timer, prompt_parser_diffusers from modules.logger import log +from modules.attention import context as attention_context p = None @@ -87,6 +88,7 @@ def diffusers_callback(pipe, step: int = 0, timestep: int = 0, kwargs: dict | No if shared.state.sampling_steps == 0 and getattr(pipe, 'num_timesteps', 0) > 0: shared.state.sampling_steps = pipe.num_timesteps shared.state.step() + attention_context.tick(step + 1) if shared.state.interrupted or shared.state.skipped: raise AssertionError('Interrupted...') if latents is None or p is None: diff --git a/modules/sd_hijack_te.py b/modules/sd_hijack_te.py index 0e9111c09..06826cd33 100644 --- a/modules/sd_hijack_te.py +++ b/modules/sd_hijack_te.py @@ -2,6 +2,7 @@ import os import time from modules import shared, errors, timer, sd_models from modules.logger import log +from modules.attention import context as attention_context class PromptCache: @@ -65,10 +66,11 @@ def hijack_encode_prompt(*args, **kwargs): res = cached else: log.debug(f'Encode: prompt="{prompt}" hijack=True') - if hasattr(shared.sd_model, 'orig_encode_prompt'): - res = shared.sd_model.orig_encode_prompt(*args_copy, **kwargs) - else: - res = shared.sd_model.encode_prompt(*args_copy, **kwargs) + with attention_context.role('te'): + if hasattr(shared.sd_model, 'orig_encode_prompt'): + res = shared.sd_model.orig_encode_prompt(*args_copy, **kwargs) + else: + res = shared.sd_model.encode_prompt(*args_copy, **kwargs) prompt_cache.set(prompt, res) if hasattr(shared.sd_model, 'after_prompt_encode'): diff --git a/modules/sd_hijack_vae.py b/modules/sd_hijack_vae.py index cc6b83919..990495782 100644 --- a/modules/sd_hijack_vae.py +++ b/modules/sd_hijack_vae.py @@ -3,6 +3,7 @@ import time import torch from modules import shared, sd_models, devices, timer, errors from modules.logger import log +from modules.attention import context as attention_context debug = log.trace if os.environ.get('SD_VIDEO_DEBUG', None) is not None else lambda *args, **kwargs: None @@ -25,20 +26,22 @@ def hijack_vae_decode(*args, **kwargs): sd_models.move_model(shared.sd_model.vae, devices.device) if torch.is_tensor(args[0]): latents = args[0].to(device=devices.device, dtype=shared.sd_model.vae.dtype) # upcast to vae dtype - if hasattr(shared.sd_model.vae, '_asymmetric_upscale_vae'): - res = hijack_vae_upscale(latents, *args[1:], **kwargs) - elif getattr(shared.sd_model, 'sdnext_vae_type', None) == 'Tiny': - from modules.video_models import video_vae - res = video_vae.vae_decode_tiny(latents) # None when the model has no tiny counterpart, and it says so - if res is None: - res = shared.sd_model.vae.orig_decode(latents, *args[1:], **kwargs) + with attention_context.role('vae'): + if hasattr(shared.sd_model.vae, '_asymmetric_upscale_vae'): + res = hijack_vae_upscale(latents, *args[1:], **kwargs) + elif getattr(shared.sd_model, 'sdnext_vae_type', None) == 'Tiny': + from modules.video_models import video_vae + res = video_vae.vae_decode_tiny(latents) # None when the model has no tiny counterpart, and it says so + if res is None: + res = shared.sd_model.vae.orig_decode(latents, *args[1:], **kwargs) t1 = time.time() try: log.debug(f'Decode: vae={shared.sd_model.vae.__class__.__name__} dtype={latents.dtype} latents={list(latents.shape)}:{latents.device} decoded={list(res[0].shape)} slicing={getattr(shared.sd_model.vae, "use_slicing", None)} tiling={getattr(shared.sd_model.vae, "use_tiling", None)} time={t1-t0:.3f}') except Exception: pass else: - res = shared.sd_model.vae.orig_decode(*args, **kwargs) + with attention_context.role('vae'): + res = shared.sd_model.vae.orig_decode(*args, **kwargs) except Exception as e: log.error(f'Decode: vae={shared.sd_model.vae.__class__.__name__} {e}') errors.display(e, 'vae') @@ -58,11 +61,13 @@ def hijack_vae_encode(*args, **kwargs): sd_models.move_model(shared.sd_model.vae, devices.device) if torch.is_tensor(args[0]): latents = args[0].to(device=devices.device, dtype=shared.sd_model.vae.dtype) # upcast to vae dtype - res = shared.sd_model.vae.orig_encode(latents, *args[1:], **kwargs) + with attention_context.role('vae'): + res = shared.sd_model.vae.orig_encode(latents, *args[1:], **kwargs) t1 = time.time() log.debug(f'Encode: vae={shared.sd_model.vae.__class__.__name__} slicing={getattr(shared.sd_model.vae, "use_slicing", None)} tiling={getattr(shared.sd_model.vae, "use_tiling", None)} latents={list(latents.shape)}:{latents.device}:{latents.dtype} time={t1-t0:.3f}') else: - res = shared.sd_model.vae.orig_encode(*args, **kwargs) + with attention_context.role('vae'): + res = shared.sd_model.vae.orig_encode(*args, **kwargs) except Exception as e: log.error(f'Encode: vae={shared.sd_model.vae.__class__.__name__} {e}') errors.display(e, 'vae') diff --git a/test/test-attention-router.py b/test/test-attention-router.py index 44a95c150..91c56145b 100644 --- a/test/test-attention-router.py +++ b/test/test-attention-router.py @@ -15,6 +15,8 @@ Covers: - a backend whose prepare raises is skipped without disturbing the rest - install_router leaves the original sdpa in place for an empty plan - the dynamic backend pins the pre-dynamic sdpa the sliced path reads +- the generation context: step normalized to the forward about to run on both the classic + callback and the modular pre-hook, per-pass resets, the in-place step buffer, role scopes No running server required. Nothing is moved to the accelerator. @@ -309,6 +311,57 @@ def test_dynamic_backend_pins_pre_dynamic_sdpa(): return True +def test_context_classic_ticks_follow_the_callback(): + ctx = attention.context + + class Pipe: + transformer = object() + + ctx.begin(Pipe(), steps=4) + assert ctx.current.active and ctx.current.role == 'transformer' and ctx.current.step == 0 and ctx.current.steps == 4 + assert ctx.current.model_key == ('Pipe', 'object'), ctx.current.model_key + buffer = ctx.current.step_buffer + for completed in range(4): + ctx.tick(completed + 1) # the diffusers callback reports the step just completed + assert ctx.current.step == completed + 1 + assert ctx.current.step_buffer is buffer and int(buffer.item()) == completed + 1 + ctx.new_pass(2) # hires or refiner pass + assert ctx.current.step == 0 and ctx.current.steps == 2 and int(buffer.item()) == 0 + ctx.end() + assert not ctx.current.active and ctx.current.role is None and ctx.current.model_key is None and ctx.current.step == 0 + return True + + +def test_context_modular_ticks_count_forwards(): + ctx = attention.context + ctx.begin(None, steps=3) + assert ctx.current.model_key is None + for expected in range(3): + ctx.tick() # the modular pre-hook fires before each forward + assert ctx.current.step == expected, ctx.current.step + ctx.end() + return True + + +def test_context_roles_nest_and_stick(): + ctx = attention.context + ctx.begin(None) + with ctx.role('te'): + assert ctx.current.role == 'te' + with ctx.role('vae'): + assert ctx.current.role == 'vae' + assert ctx.current.role == 'te' + assert ctx.current.role == 'transformer' + ctx.set_role('vae') + assert ctx.current.role == 'vae' + ctx.end() + assert ctx.current.role is None + with ctx.role('te'): # outside a generation the scope still restores what it found + assert ctx.current.role == 'te' + assert ctx.current.role is None + return True + + def run_all(): log.warning('=== attention router ===') cat = category('router') @@ -324,6 +377,15 @@ def run_all(): ]: run_test(cat, fn) + log.warning('=== generation context ===') + cat = category('context') + for fn in [ + test_context_classic_ticks_follow_the_callback, + test_context_modular_ticks_count_forwards, + test_context_roles_nest_and_stick, + ]: + run_test(cat, fn) + log.warning('=== Results ===') total_passed = 0 total_failed = 0 From 125ae8e2bf3737b7a1d673d02cf178057f81b599 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 22:23:47 +0100 Subject: [PATCH 006/270] feat(attention): route tracing and chain telemetry SD_ATTN_DEBUG logs each distinct route once: backend, component role, step, shapes, dtype and mask presence. The router takes an optional observer for it, so the clean path carries one pointer check. report() returns the active chain and generation context, and torch_info records the whole chain as one string instead of the last prepared backend. --- modules/attention/__init__.py | 8 ++--- modules/attention/debug.py | 21 +++++++++++++ modules/attention/router.py | 30 +++++++++++++++--- test/test-attention-router.py | 58 +++++++++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+), 8 deletions(-) create mode 100644 modules/attention/debug.py diff --git a/modules/attention/__init__.py b/modules/attention/__init__.py index 359ab81ca..f34edf81e 100644 --- a/modules/attention/__init__.py +++ b/modules/attention/__init__.py @@ -1,12 +1,12 @@ """Attention backends: one scaled_dot_product_attention router over the registered backends, the per-generation context, and the diffusers-side processor and dispatcher setup.""" from modules.attention.registry import AttentionBackend, AttentionCall, Constraints, Platform, Registry, registry -from modules.attention.router import Plan, PlanEntry, build_plan, get_plan, install_router +from modules.attention.router import Plan, PlanEntry, build_plan, get_plan, install_router, report from modules.attention.dispatcher import set_diffusers_attention, set_attention_dispatcher, hijack_kernels, get_kernel_hijack, get_hf_api_hijack -from modules.attention import backends, context +from modules.attention import backends, context, debug __all__ = [ 'AttentionBackend', 'AttentionCall', 'Constraints', 'Platform', 'Registry', 'registry', - 'Plan', 'PlanEntry', 'build_plan', 'get_plan', 'install_router', + 'Plan', 'PlanEntry', 'build_plan', 'get_plan', 'install_router', 'report', 'set_diffusers_attention', 'set_attention_dispatcher', 'hijack_kernels', 'get_kernel_hijack', 'get_hf_api_hijack', - 'backends', 'context', + 'backends', 'context', 'debug', ] diff --git a/modules/attention/debug.py b/modules/attention/debug.py new file mode 100644 index 000000000..0b69ed76b --- /dev/null +++ b/modules/attention/debug.py @@ -0,0 +1,21 @@ +"""Opt-in route tracing for the sdpa router, enabled by SD_ATTN_DEBUG.""" +import os +import torch +from modules.logger import log +from modules.attention import context + +enabled = os.environ.get('SD_ATTN_DEBUG', None) is not None +seen: set[tuple] = set() + + +def observe(name: str, query: torch.Tensor, key: torch.Tensor, attn_mask: torch.Tensor | None) -> None: + """Log each distinct route once: backend, component role, step, shapes, dtype and mask presence.""" + signature = (name, context.current.role, tuple(query.shape), tuple(key.shape), str(query.dtype), attn_mask is not None) + if signature in seen: + return + seen.add(signature) + log.debug(f'Attention route: backend={name} role={context.current.role} step={context.current.step} q={list(query.shape)} k={list(key.shape)} dtype={query.dtype} mask={attn_mask is not None}') + + +def reset() -> None: + seen.clear() diff --git a/modules/attention/router.py b/modules/attention/router.py index f917424cd..46539427f 100644 --- a/modules/attention/router.py +++ b/modules/attention/router.py @@ -1,9 +1,11 @@ """The single scaled_dot_product_attention entry point over the prepared backends.""" from dataclasses import dataclass from functools import wraps +from typing import Callable import torch from installer import torch_info from modules.logger import log +from modules.attention import context, debug from modules.attention.registry import AttentionBackend, AttentionCall, Platform, Registry, registry as default_registry @@ -35,7 +37,7 @@ def build_plan(labels, platform: Platform, original: AttentionCall, reg: Registr reg = reg if reg is not None else default_registry entries: list[PlanEntry] = [] terminal: PlanEntry | None = None - for backend in reg.ordered(): # ascending priority: the last prepared backend is tried first and owns the torch_info record + for backend in reg.ordered(): # ascending priority: the last prepared backend is tried first if backend.label not in labels: continue if not backend.available_on(platform): @@ -53,21 +55,25 @@ def build_plan(labels, platform: Platform, original: AttentionCall, reg: Registr terminal = entry else: entries.append(entry) - torch_info.set(attention=backend.name) entries.reverse() return Plan(entries=tuple(entries), terminal=terminal, original=original, platform=platform, labels=tuple(labels)) -def make_router(plan: Plan) -> AttentionCall: +def make_router(plan: Plan, observer: Callable | None = None) -> AttentionCall: entries = plan.entries terminal = plan.terminal.call if plan.terminal is not None else None + terminal_name = plan.terminal.backend.name if plan.terminal is not None else 'sdpa' original = plan.original @wraps(original) def sdpa_router(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, scale=None, enable_gqa=False, **kwargs): for entry in entries: if entry.backend.constraints.accepts(query, key, value, attn_mask): + if observer is not None: + observer(entry.backend.name, query, key, attn_mask) return entry.call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa) + if observer is not None: + observer(terminal_name, query, key, attn_mask) if terminal is not None: return terminal(query, key, value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, scale=scale, enable_gqa=enable_gqa, **kwargs) if enable_gqa: # older sdpa signatures and platform wrappers reject the keyword, so it only travels when set @@ -81,10 +87,26 @@ def install_router(labels, platform: Platform, original: AttentionCall, reg: Reg """Prepare the enabled backends and install the router; an empty plan leaves the original sdpa in place.""" global current_plan # pylint: disable=global-statement plan = build_plan(labels, platform, original, reg) - torch.nn.functional.scaled_dot_product_attention = make_router(plan) if (plan.entries or plan.terminal is not None) else original + debug.reset() + observer = debug.observe if debug.enabled else None + torch.nn.functional.scaled_dot_product_attention = make_router(plan, observer) if (plan.entries or plan.terminal is not None) else original current_plan = plan + torch_info.set(attention='>'.join(plan.chain())) + log.debug(f'Torch attention: chain={">".join(plan.chain())} overrides={list(labels)} backend={platform.backend}') return plan def get_plan() -> Plan | None: return current_plan + + +def report() -> dict: + """The active chain and generation context, for the api and the debug log.""" + plan = current_plan + state = context.current + return { + 'chain': plan.chain() if plan is not None else ['sdpa'], + 'overrides': list(plan.labels) if plan is not None else [], + 'backend': plan.platform.backend if plan is not None else None, + 'context': {'active': state.active, 'role': state.role, 'step': state.step, 'steps': state.steps, 'model': state.model_key}, + } diff --git a/test/test-attention-router.py b/test/test-attention-router.py index 91c56145b..1a69ff757 100644 --- a/test/test-attention-router.py +++ b/test/test-attention-router.py @@ -17,6 +17,8 @@ Covers: - the dynamic backend pins the pre-dynamic sdpa the sliced path reads - the generation context: step normalized to the forward about to run on both the classic callback and the modular pre-hook, per-pass resets, the in-place step buffer, role scopes +- telemetry: the route observer, the chain string recorded in torch_info, report(), and the + SD_ATTN_DEBUG route log deduplication No running server required. Nothing is moved to the accelerator. @@ -362,6 +364,53 @@ def test_context_roles_nest_and_stick(): return True +def test_router_observer_sees_each_route(): + routes = [] + reg = attention.Registry() + + def prepare(platform, original): # pylint: disable=unused-argument + return lambda *args, **kwargs: 'narrow' + + reg.register(attention.AttentionBackend(name='narrow', label='narrow attention', priority=20, prepare=prepare, constraints=attention.Constraints(head_dims=frozenset({64})))) + plan = attention.build_plan(['narrow attention'], attention.Platform(backend='cuda'), sdpa_stub, reg) + router = attention_router.make_router(plan, observer=lambda name, q, k, m: routes.append(name)) + q64 = shaped((1, 8, 128, 64)) + q128 = shaped((1, 8, 128, 128)) + router(q64, q64, q64) + router(q128, q128, q128) + assert routes == ['narrow', 'sdpa'], routes + return True + + +def test_install_router_records_the_chain(): + saved = torch.nn.functional.scaled_dot_product_attention + saved_plan = attention_router.current_plan + saved_info = installer.torch_info.get('attention') + try: + attention.install_router(['SDNQ attention', 'Dynamic attention'], attention.Platform(backend='cuda'), sdpa_stub, stub_registry()) + assert installer.torch_info.get('attention') == 'sdnq>dynamic', installer.torch_info.get('attention') + info = attention.report() + assert info['chain'] == ['sdnq', 'dynamic'] and info['overrides'] == ['SDNQ attention', 'Dynamic attention'] and info['backend'] == 'cuda', info + assert info['context']['active'] is False and info['context']['role'] is None, info + finally: + torch.nn.functional.scaled_dot_product_attention = saved + attention_router.current_plan = saved_plan + installer.torch_info.set(attention=saved_info) + return True + + +def test_debug_observe_logs_each_route_once(): + attention.debug.reset() + q = shaped((1, 8, 128, 64)) + attention.debug.observe('sdnq', q, q, None) + attention.debug.observe('sdnq', q, q, None) + attention.debug.observe('sdnq', q, q, shaped((1, 1, 128, 128), torch.bool)) + assert len(attention.debug.seen) == 2, attention.debug.seen + attention.debug.reset() + assert not attention.debug.seen + return True + + def run_all(): log.warning('=== attention router ===') cat = category('router') @@ -386,6 +435,15 @@ def run_all(): ]: run_test(cat, fn) + log.warning('=== telemetry ===') + cat = category('telemetry') + for fn in [ + test_router_observer_sees_each_route, + test_install_router_records_the_chain, + test_debug_observe_logs_each_route_once, + ]: + run_test(cat, fn) + log.warning('=== Results ===') total_passed = 0 total_failed = 0 From b57b8c6a64c3b71c2f936ef1766e0c21f56b65de Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 22:31:14 +0100 Subject: [PATCH 007/270] perf(attention): capture backend options once per chain The sdnq backend read six settings on every call; it now captures them when the chain is built. Each backend declares the settings its call captures, and webui registers one onchange over those names plus the override set and the torch kernel flags, so a change rebuilds the chain between jobs. When a compiled model is resident the rebuild also resets dynamo, since its graphs hold the previous router. --- modules/attention/__init__.py | 4 ++-- modules/attention/backends/sdnq.py | 22 +++++++++++----------- modules/attention/registry.py | 4 ++++ modules/attention/router.py | 16 ++++++++++++++++ test/test-attention-router.py | 13 +++++++++++++ webui.py | 3 +++ 6 files changed, 49 insertions(+), 13 deletions(-) diff --git a/modules/attention/__init__.py b/modules/attention/__init__.py index f34edf81e..78994780c 100644 --- a/modules/attention/__init__.py +++ b/modules/attention/__init__.py @@ -1,12 +1,12 @@ """Attention backends: one scaled_dot_product_attention router over the registered backends, the per-generation context, and the diffusers-side processor and dispatcher setup.""" from modules.attention.registry import AttentionBackend, AttentionCall, Constraints, Platform, Registry, registry -from modules.attention.router import Plan, PlanEntry, build_plan, get_plan, install_router, report +from modules.attention.router import Plan, PlanEntry, build_plan, get_plan, install_router, reapply, reapply_options, report from modules.attention.dispatcher import set_diffusers_attention, set_attention_dispatcher, hijack_kernels, get_kernel_hijack, get_hf_api_hijack from modules.attention import backends, context, debug __all__ = [ 'AttentionBackend', 'AttentionCall', 'Constraints', 'Platform', 'Registry', 'registry', - 'Plan', 'PlanEntry', 'build_plan', 'get_plan', 'install_router', 'report', + 'Plan', 'PlanEntry', 'build_plan', 'get_plan', 'install_router', 'reapply', 'reapply_options', 'report', 'set_diffusers_attention', 'set_attention_dispatcher', 'hijack_kernels', 'get_kernel_hijack', 'get_hf_api_hijack', 'backends', 'context', 'debug', ] diff --git a/modules/attention/backends/sdnq.py b/modules/attention/backends/sdnq.py index c0c49da67..61fc14bbf 100644 --- a/modules/attention/backends/sdnq.py +++ b/modules/attention/backends/sdnq.py @@ -5,24 +5,24 @@ from modules.attention.registry import AttentionBackend, Constraints, Platform def prepare(platform: Platform, original): # pylint: disable=unused-argument from modules import shared from sdnq.kernels.triton_atten import sdnq_triton_atten + options = { + 'matmul_dtype': shared.opts.sdnq_attention_matmul_type, + 'pv_matmul_dtype': shared.opts.sdnq_attention_pv_matmul_type, + 'smooth_k': shared.opts.sdnq_attention_smooth_k, + 'use_hadamard': shared.opts.sdnq_attention_use_hadamard, + 'hadamard_group_size': shared.opts.sdnq_attention_hadamard_group_size, + 'use_fp16_accum': shared.opts.sdnq_attention_use_fp16_accum, + } def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa): # pylint: disable=unused-argument - return sdnq_triton_atten( - query=query, key=key, value=value, attn_mask=attn_mask, - is_causal=is_causal, scale=scale, enable_gqa=enable_gqa, - matmul_dtype=shared.opts.sdnq_attention_matmul_type, - pv_matmul_dtype=shared.opts.sdnq_attention_pv_matmul_type, - smooth_k=shared.opts.sdnq_attention_smooth_k, - use_hadamard=shared.opts.sdnq_attention_use_hadamard, - hadamard_group_size=shared.opts.sdnq_attention_hadamard_group_size, - use_fp16_accum=shared.opts.sdnq_attention_use_fp16_accum, - ) + return sdnq_triton_atten(query=query, key=key, value=value, attn_mask=attn_mask, is_causal=is_causal, scale=scale, enable_gqa=enable_gqa, **options) - log.debug(f'Torch attention: type="SDNQ attention" matmul={shared.opts.sdnq_attention_matmul_type}:{shared.opts.sdnq_attention_pv_matmul_type} smooth={shared.opts.sdnq_attention_smooth_k} hadamard={shared.opts.sdnq_attention_use_hadamard} fp16_accum={shared.opts.sdnq_attention_use_fp16_accum}') + log.debug(f'Torch attention: type="SDNQ attention" matmul={options["matmul_dtype"]}:{options["pv_matmul_dtype"]} smooth={options["smooth_k"]} hadamard={options["use_hadamard"]} fp16_accum={options["use_fp16_accum"]}') return call backend = AttentionBackend( name='sdnq', label='SDNQ attention', priority=60, prepare=prepare, constraints=Constraints(min_tokens=32, min_long_side=512, min_heads=2), # sequences of 512 or fewer are text encoders, single-head calls the vae + options=('sdnq_attention_matmul_type', 'sdnq_attention_pv_matmul_type', 'sdnq_attention_smooth_k', 'sdnq_attention_use_hadamard', 'sdnq_attention_hadamard_group_size', 'sdnq_attention_use_fp16_accum'), ) diff --git a/modules/attention/registry.py b/modules/attention/registry.py index 820dc77f8..23ca24d1a 100644 --- a/modules/attention/registry.py +++ b/modules/attention/registry.py @@ -63,6 +63,7 @@ class AttentionBackend: constraints: Constraints = field(default_factory=Constraints) terminal: bool = False # serves every call the entries decline, in place of the original sdpa platforms: frozenset[str] | None = None # devices backends the implementation exists for, None for all + options: tuple[str, ...] = () # settings the prepared call captures; a change to one rebuilds the chain def available_on(self, platform: Platform) -> bool: return self.platforms is None or platform.backend in self.platforms @@ -90,5 +91,8 @@ class Registry: def labels(self) -> list[str]: return [backend.label for backend in self.ordered()] + def options(self) -> list[str]: + return sorted({name for backend in self.backends.values() for name in backend.options}) + registry = Registry() diff --git a/modules/attention/router.py b/modules/attention/router.py index 46539427f..c9ae07a48 100644 --- a/modules/attention/router.py +++ b/modules/attention/router.py @@ -100,6 +100,22 @@ def get_plan() -> Plan | None: return current_plan +def reapply_options(reg: Registry | None = None) -> list[str]: + """Settings whose change rebuilds the chain: the override set, the torch kernel flags, and every option a backend captures.""" + reg = reg if reg is not None else default_registry + return ['sdp_options', 'sdp_overrides', *reg.options()] + + +def reapply() -> None: + """Rebuild the chain from the current settings; a resident compiled model is reset so its graphs trace the new router.""" + from modules import devices, shared + devices.set_sdpa_params() + compiled = getattr(shared, 'compiled_model_state', None) + if compiled is not None and getattr(compiled, 'is_compiled', False): + torch._dynamo.reset() # pylint: disable=protected-access + log.debug('Torch attention: dynamo reset, compiled model resident') + + def report() -> dict: """The active chain and generation context, for the api and the debug log.""" plan = current_plan diff --git a/test/test-attention-router.py b/test/test-attention-router.py index 1a69ff757..7438e36ea 100644 --- a/test/test-attention-router.py +++ b/test/test-attention-router.py @@ -411,6 +411,18 @@ def test_debug_observe_logs_each_route_once(): return True +def test_reapply_options_cover_declared_backend_options(): + from modules import shared + names = attention.reapply_options() + assert names[:2] == ['sdp_options', 'sdp_overrides'], names + declared = attention.registry.options() + assert set(declared) <= set(names), (declared, names) + assert attention.registry.backends['sdnq'].options and set(attention.registry.backends['sdnq'].options) <= set(declared) + for name in names: + assert name in shared.opts.data_labels, name + return True + + def run_all(): log.warning('=== attention router ===') cat = category('router') @@ -441,6 +453,7 @@ def run_all(): test_router_observer_sees_each_route, test_install_router_records_the_chain, test_debug_observe_logs_each_route_once, + test_reapply_options_cover_declared_backend_options, ]: run_test(cat, fn) diff --git a/webui.py b/webui.py index 911d35ccf..378cfc184 100644 --- a/webui.py +++ b/webui.py @@ -17,6 +17,7 @@ import modules.loader import modules.hashes import modules.paths import modules.devices +import modules.attention import modules.migrate from modules import shared from modules import call_queue @@ -205,6 +206,8 @@ def load_model(): shared.opts.onchange("temp_dir", modules.gr_tempdir.on_tmpdir_changed) for opt in modules.sd_offload_state.offload_reapply_options: shared.opts.onchange(opt, call_queue.wrap_queued_call(modules.sd_models.reapply_offload), call=False) + for opt in modules.attention.reapply_options(): + shared.opts.onchange(opt, call_queue.wrap_queued_call(modules.attention.reapply), call=False) timer.startup.record("onchange") From e0c3e00af2938eb88950a3923c174acd85511869 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 22:40:09 +0100 Subject: [PATCH 008/270] chore(settings): remove dead attention options xformers_options had no reader, and Sub-quadratic has not been an attention choice for a long time, so the hypertile branches keyed on it never ran. Configs that still store xformers_options load without the unknown-setting warning. --- modules/options_handler.py | 2 +- modules/sd_hijack_hypertile.py | 7 ------- modules/ui_definitions.py | 1 - 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/modules/options_handler.py b/modules/options_handler.py index 9006673f6..d0bb8d454 100644 --- a/modules/options_handler.py +++ b/modules/options_handler.py @@ -17,7 +17,7 @@ if TYPE_CHECKING: import builtins cmd_opts = cmd_args.parse_args() -compatibility_opts = ['clip_skip', 'uni_pc_lower_order_final', 'uni_pc_order'] +compatibility_opts = ['clip_skip', 'uni_pc_lower_order_final', 'uni_pc_order', 'xformers_options'] secrets_pattern = ['_version', '_token', '_key', '_secret', '_password'] diff --git a/modules/sd_hijack_hypertile.py b/modules/sd_hijack_hypertile.py index eead36266..0cfe4e220 100644 --- a/modules/sd_hijack_hypertile.py +++ b/modules/sd_hijack_hypertile.py @@ -186,12 +186,8 @@ def context_hypertile_vae(p): from modules import shared if shared.sd_model is None or not get_opt(p, 'hypertile_vae_enabled'): return nullcontext() - if shared.opts.cross_attention_optimization == 'Sub-quadratic': - log.warning('Hypertile UNet is not compatible with Sub-quadratic cross-attention optimization') - return nullcontext() global max_h, max_w, error_reported # pylint: disable=global-statement error_reported = False - error_reported = False set_resolution(p) max_h, max_w = 0, 0 vae = getattr(shared.sd_model, "vae", None) @@ -217,9 +213,6 @@ def context_hypertile_unet(p): from modules import shared if shared.sd_model is None or not get_opt(p, 'hypertile_unet_enabled'): return nullcontext() - if shared.opts.cross_attention_optimization == 'Sub-quadratic' and not shared.cmd_opts.experimental: - log.warning('Hypertile UNet is not compatible with Sub-quadratic cross-attention optimization') - return nullcontext() global max_h, max_w, error_reported # pylint: disable=global-statement error_reported = False set_resolution(p) diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index f77ec04d1..552ca6d97 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -250,7 +250,6 @@ def create_settings(cmd_opts): "sdp_options": OptionInfo(startup_sdp_options, "SDP kernels", gr.CheckboxGroup, {"choices": startup_sdp_choices}), "sdp_overrides": OptionInfo(startup_sdp_override_options, "SDP overrides", gr.CheckboxGroup, {"choices": startup_sdp_override_choices}), "attention_slicing": OptionInfo('Default', "Attention slicing", gr.Radio, {"choices": ['Default', 'Enabled', 'Disabled']}), - "xformers_options": OptionInfo(['Flash attention'], "xFormers options", gr.CheckboxGroup, {"choices": ['Flash attention'] }), "dynamic_attention_slice_rate": OptionInfo(0.5, "Dynamic Attention slicing rate", gr.Slider, {"minimum": 0.01, "maximum": max(gpu_memory,4), "step": 0.01}), "dynamic_attention_trigger_rate": OptionInfo(1, "Dynamic Attention trigger rate", gr.Slider, {"minimum": 0.01, "maximum": max(gpu_memory,4)*2, "step": 0.01}), From b0f004bf83c882fcfb16033fb36b7cf208ecfa53 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 23:05:07 +0100 Subject: [PATCH 009/270] test(attention): cover the sdpa escape hatches bypass_sdpa_hijacks and llm_context restore the pinned original over the router and put the router back, including when the body raises. Captioners and detailers run inside them, so the router must be removable. --- test/test-attention-router.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/test/test-attention-router.py b/test/test-attention-router.py index 7438e36ea..70154f140 100644 --- a/test/test-attention-router.py +++ b/test/test-attention-router.py @@ -19,6 +19,8 @@ Covers: callback and the modular pre-hook, per-pass resets, the in-place step buffer, role scopes - telemetry: the route observer, the chain string recorded in torch_info, report(), and the SD_ATTN_DEBUG route log deduplication +- the escape hatches captioners and detailers depend on: bypass_sdpa_hijacks and llm_context + restore the original sdpa over the router, and put the router back even when the body raises No running server required. Nothing is moved to the accelerator. @@ -411,6 +413,35 @@ def test_debug_observe_logs_each_route_once(): return True +def test_escape_hatch_bypasses_the_router(): + from modules import devices + saved_sdpa = torch.nn.functional.scaled_dot_product_attention + saved_plan = attention_router.current_plan + saved_original = devices.sdpa_original + try: + devices.sdpa_original = sdpa_stub # what set_sdpa_params pinned before building the chain + attention.install_router(['SDNQ attention'], attention.Platform(backend='cuda'), sdpa_stub, stub_registry()) + router = torch.nn.functional.scaled_dot_product_attention + assert router is not sdpa_stub + with devices.bypass_sdpa_hijacks(): + assert torch.nn.functional.scaled_dot_product_attention is sdpa_stub # captioners and detailers run here + assert torch.nn.functional.scaled_dot_product_attention is router + with devices.llm_context(): + assert torch.nn.functional.scaled_dot_product_attention is sdpa_stub + assert torch.nn.functional.scaled_dot_product_attention is router + try: + with devices.bypass_sdpa_hijacks(): + raise RuntimeError('captioner failed') + except RuntimeError: + pass + assert torch.nn.functional.scaled_dot_product_attention is router, 'the chain must survive a failure inside the bypass' + finally: + devices.sdpa_original = saved_original + torch.nn.functional.scaled_dot_product_attention = saved_sdpa + attention_router.current_plan = saved_plan + return True + + def test_reapply_options_cover_declared_backend_options(): from modules import shared names = attention.reapply_options() @@ -454,6 +485,7 @@ def run_all(): test_install_router_records_the_chain, test_debug_observe_logs_each_route_once, test_reapply_options_cover_declared_backend_options, + test_escape_hatch_bypasses_the_router, ]: run_test(cat, fn) From 26d922371db551655b0f3cb1e36f44e413e92aec Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 24 Aug 2026 19:00:10 +0100 Subject: [PATCH 010/270] fix(attention): honor the disabled choice for attention slicing attention_slicing holds one of Default, Enabled or Disabled, so testing the string for truth sent Disabled down the enable branch and left the disable call unreachable, while the log line below it reported the choice rather than the action taken. --- modules/attention/dispatcher.py | 2 +- test/test-attention-router.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/modules/attention/dispatcher.py b/modules/attention/dispatcher.py index e7d31e477..82cbc323c 100644 --- a/modules/attention/dispatcher.py +++ b/modules/attention/dispatcher.py @@ -41,7 +41,7 @@ def set_diffusers_attention(pipe, quiet = False): set_attn(pipe, DynamicAttnProcessorBMM(), name="Dynamic Attention BMM") if shared.opts.attention_slicing != "Default" and hasattr(pipe, "enable_attention_slicing") and hasattr(pipe, "disable_attention_slicing"): - if shared.opts.attention_slicing: + if shared.opts.attention_slicing == "Enabled": pipe.enable_attention_slicing() else: pipe.disable_attention_slicing() diff --git a/test/test-attention-router.py b/test/test-attention-router.py index 70154f140..245467326 100644 --- a/test/test-attention-router.py +++ b/test/test-attention-router.py @@ -413,6 +413,36 @@ def test_debug_observe_logs_each_route_once(): return True +def test_attention_slicing_follows_the_choice(): + from modules import shared + + class Pipe: + def __init__(self): + self.calls = [] + + def enable_attention_slicing(self): + self.calls.append('enable') + + def disable_attention_slicing(self): + self.calls.append('disable') + + saved = {key: shared.opts.data.get(key, None) for key in ['attention_slicing', 'cross_attention_optimization']} + try: + shared.opts.data['cross_attention_optimization'] = 'Disabled' # the branch under test is the only one that should act + for choice, expected in [('Default', []), ('Enabled', ['enable']), ('Disabled', ['disable'])]: + shared.opts.data['attention_slicing'] = choice + pipe = Pipe() + attention.set_diffusers_attention(pipe, quiet=True) + assert pipe.calls == expected, f'{choice} produced {pipe.calls}' + finally: + for key, value in saved.items(): + if value is None: + shared.opts.data.pop(key, None) + else: + shared.opts.data[key] = value + return True + + def test_escape_hatch_bypasses_the_router(): from modules import devices saved_sdpa = torch.nn.functional.scaled_dot_product_attention @@ -485,6 +515,7 @@ def run_all(): test_install_router_records_the_chain, test_debug_observe_logs_each_route_once, test_reapply_options_cover_declared_backend_options, + test_attention_slicing_follows_the_choice, test_escape_hatch_bypasses_the_router, ]: run_test(cat, fn) From 4d6f2b65c8ce0bdcbda847382e90b1f2bb982752 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 24 Aug 2026 19:59:41 +0100 Subject: [PATCH 011/270] chore(settings): remove the bmm attention methods Batch matrix-matrix and Dynamic Attention BMM applied a legacy Attention processor to pipe.unet, which a diffusion transformer does not have, so they served unet models alone and said nothing elsewhere. The choices, the processor and its slice helper are removed, an unrecognized method now warns rather than selecting nothing, and a stored value is rewritten to Scaled-Dot-Product on load. --- modules/attention/dispatcher.py | 24 +---- modules/options_handler.py | 16 +++ modules/sd_hijack_dynamic_atten.py | 157 ----------------------------- modules/shared_items.py | 2 - test/test-attention-router.py | 22 ++++ ui/locale/locale_en.json | 2 - 6 files changed, 40 insertions(+), 183 deletions(-) diff --git a/modules/attention/dispatcher.py b/modules/attention/dispatcher.py index 82cbc323c..19d58e99b 100644 --- a/modules/attention/dispatcher.py +++ b/modules/attention/dispatcher.py @@ -5,40 +5,20 @@ from installer import install, torch_info def set_diffusers_attention(pipe, quiet = False): from modules import shared, devices - import diffusers.models.attention_processor as p - - def set_attn(pipe, attention, name: str | None = None): - if attention is None: - return - # other models uses their own attention processor - if getattr(pipe, "unet", None) is not None and hasattr(pipe.unet, "set_attn_processor"): - try: - pipe.unet.set_attn_processor(attention) - except Exception as e: - if 'Nunchaku' in pipe.unet.__class__.__name__: - pass - else: - log.error(f'Torch attention: type="{name}" cls={attention.__class__.__name__} pipe={pipe.__class__.__name__} {e}') log.quiet(quiet, f'Setting model: attention="{shared.opts.cross_attention_optimization}"') if shared.opts.cross_attention_optimization == "Disabled": torch_info.set(attention="disabled") elif shared.opts.cross_attention_optimization == "Scaled-Dot-Product": # The default set by Diffusers devices.set_sdpa_params() - # set_attn(pipe, p.AttnProcessor2_0(), name="Scaled-Dot-Product") elif shared.opts.cross_attention_optimization == "xFormers": if hasattr(pipe, 'enable_xformers_memory_efficient_attention'): torch_info.set(attention="xformers") pipe.enable_xformers_memory_efficient_attention() else: log.warning(f"Attention: xFormers is not compatible with {pipe.__class__.__name__}") - elif shared.opts.cross_attention_optimization == "Batch matrix-matrix": - torch_info.set(attention="bmm") - set_attn(pipe, p.AttnProcessor(), name="Batch matrix-matrix") - elif shared.opts.cross_attention_optimization == "Dynamic Attention BMM": - from modules.sd_hijack_dynamic_atten import DynamicAttnProcessorBMM - torch_info.set(attention="dynamic_bmm") - set_attn(pipe, DynamicAttnProcessorBMM(), name="Dynamic Attention BMM") + else: + log.warning(f'Torch attention: method="{shared.opts.cross_attention_optimization}" unknown, pipe={pipe.__class__.__name__} keeps its own attention processor') if shared.opts.attention_slicing != "Default" and hasattr(pipe, "enable_attention_slicing") and hasattr(pipe, "disable_attention_slicing"): if shared.opts.attention_slicing == "Enabled": diff --git a/modules/options_handler.py b/modules/options_handler.py index d0bb8d454..2400a2069 100644 --- a/modules/options_handler.py +++ b/modules/options_handler.py @@ -18,9 +18,22 @@ if TYPE_CHECKING: cmd_opts = cmd_args.parse_args() compatibility_opts = ['clip_skip', 'uni_pc_lower_order_final', 'uni_pc_order', 'xformers_options'] +removed_values = { # a stored choice that no longer exists is kept by validate, so it has to be rewritten or it selects nothing + 'cross_attention_optimization': (['Batch matrix-matrix', 'Dynamic Attention BMM'], 'Scaled-Dot-Product'), +} secrets_pattern = ['_version', '_token', '_key', '_secret', '_password'] +def migrate_removed_values(data: dict) -> list: + """Rewrite stored settings whose choice was removed, returning what changed.""" + migrated = [] + for key, (removed, replacement) in removed_values.items(): + if data.get(key, None) in removed: + migrated.append(f'{key}={data[key]} replaced={replacement}') + data[key] = replacement + return migrated + + class Options: data_labels: dict[str, OptionInfo | LegacyOption] data: dict[str, Any] @@ -203,6 +216,9 @@ class Options: self.secrets = readfile(secretsfn, lock=True, as_type="dict") if self.data.get('quicksettings') is not None and self.data.get('quicksettings_list') is None: self.data['quicksettings_list'] = [i.strip() for i in self.data.get('quicksettings', '').split(',')] + migrated = migrate_removed_values(self.data) + if len(migrated) > 0: + log.warning(f"Setting migration: {migrated}") unknown_settings = [] for k, v in self.data.items(): info = self.data_labels.get(k, None) diff --git a/modules/sd_hijack_dynamic_atten.py b/modules/sd_hijack_dynamic_atten.py index 0c0c4771d..cf932496d 100644 --- a/modules/sd_hijack_dynamic_atten.py +++ b/modules/sd_hijack_dynamic_atten.py @@ -113,160 +113,3 @@ def dynamic_scaled_dot_product_attention(query: torch.FloatTensor, key: torch.Fl if is_unsqueezed: hidden_states = hidden_states.squeeze(0) return hidden_states - - -@cache -def find_bmm_slice_sizes(query_shape, query_element_size, slice_rate=2, trigger_rate=4): - if len(query_shape) == 3: - batch_size_attention, query_tokens, shape_three = query_shape - shape_four = 1 - else: - batch_size_attention, query_tokens, shape_three, shape_four = query_shape - - slice_block_size = query_tokens * shape_three * shape_four / 1024 / 1024 * query_element_size - block_size = batch_size_attention * slice_block_size - - split_slice_size = batch_size_attention - split_2_slice_size = query_tokens - split_3_slice_size = shape_three - - do_split = False - do_split_2 = False - do_split_3 = False - - if block_size > trigger_rate: - do_split = True - split_slice_size = find_split_size(split_slice_size, slice_block_size, slice_rate=slice_rate) - if split_slice_size * slice_block_size > slice_rate: - slice_2_block_size = split_slice_size * shape_three * shape_four / 1024 / 1024 * query_element_size - do_split_2 = True - split_2_slice_size = find_split_size(split_2_slice_size, slice_2_block_size, slice_rate=slice_rate) - if split_2_slice_size * slice_2_block_size > slice_rate: - slice_3_block_size = split_slice_size * split_2_slice_size * shape_four / 1024 / 1024 * query_element_size - do_split_3 = True - split_3_slice_size = find_split_size(split_3_slice_size, slice_3_block_size, slice_rate=slice_rate) - - return do_split, do_split_2, do_split_3, split_slice_size, split_2_slice_size, split_3_slice_size - - -class DynamicAttnProcessorBMM: - r""" - dynamically slices attention queries in order to keep them under the slice rate - slicing will not get triggered if the query size is smaller than the slice rate to gain performance - - slice rate is in GB - based on AttnProcessor V1 - """ - - def __call__(self, attn, hidden_states: torch.Tensor, encoder_hidden_states=None, attention_mask=None, temb=None, *args, **kwargs) -> torch.Tensor: # pylint: disable=too-many-statements, too-many-locals, too-many-branches, keyword-arg-before-vararg - - residual = hidden_states - - if attn.spatial_norm is not None: - hidden_states = attn.spatial_norm(hidden_states, temb) - - input_ndim = hidden_states.ndim - - if input_ndim == 4: - batch_size, channel, height, width = hidden_states.shape - hidden_states = hidden_states.view(batch_size, channel, height * width).transpose(1, 2) - - batch_size, sequence_length, _ = ( - hidden_states.shape if encoder_hidden_states is None else encoder_hidden_states.shape - ) - attention_mask = attn.prepare_attention_mask(attention_mask, sequence_length, batch_size) - - if attn.group_norm is not None: - hidden_states = attn.group_norm(hidden_states.transpose(1, 2)).transpose(1, 2) - - query = attn.to_q(hidden_states) - - if encoder_hidden_states is None: - encoder_hidden_states = hidden_states - elif attn.norm_cross: - encoder_hidden_states = attn.norm_encoder_hidden_states(encoder_hidden_states) - - key = attn.to_k(encoder_hidden_states) - value = attn.to_v(encoder_hidden_states) - - query = attn.head_to_batch_dim(query) - key = attn.head_to_batch_dim(key) - value = attn.head_to_batch_dim(value) - - #################################################################### - # Slicing parts: - batch_size_attention, query_tokens, shape_three = query.shape[0], query.shape[1], query.shape[2] - hidden_states = torch.zeros(query.shape, device=query.device, dtype=query.dtype) - do_split, do_split_2, do_split_3, split_slice_size, split_2_slice_size, split_3_slice_size = find_bmm_slice_sizes(query.shape, query.element_size(), slice_rate=shared.opts.dynamic_attention_slice_rate*4, trigger_rate=shared.opts.dynamic_attention_trigger_rate*4) - - if do_split: - for i in range(batch_size_attention // split_slice_size): - start_idx = i * split_slice_size - end_idx = (i + 1) * split_slice_size - if do_split_2: - for i2 in range(query_tokens // split_2_slice_size): # pylint: disable=invalid-name - start_idx_2 = i2 * split_2_slice_size - end_idx_2 = (i2 + 1) * split_2_slice_size - if do_split_3: - for i3 in range(shape_three // split_3_slice_size): # pylint: disable=invalid-name - start_idx_3 = i3 * split_3_slice_size - end_idx_3 = (i3 + 1) * split_3_slice_size - - query_slice = query[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3] - key_slice = key[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3] - attn_mask_slice = attention_mask[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3] if attention_mask is not None else None - - attn_slice = attn.get_attention_scores(query_slice, key_slice, attn_mask_slice) - del query_slice - del key_slice - del attn_mask_slice - attn_slice = torch.bmm(attn_slice, value[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3]) - - hidden_states[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3] = attn_slice - del attn_slice - else: - query_slice = query[start_idx:end_idx, start_idx_2:end_idx_2] - key_slice = key[start_idx:end_idx, start_idx_2:end_idx_2] - attn_mask_slice = attention_mask[start_idx:end_idx, start_idx_2:end_idx_2] if attention_mask is not None else None - - attn_slice = attn.get_attention_scores(query_slice, key_slice, attn_mask_slice) - del query_slice - del key_slice - del attn_mask_slice - attn_slice = torch.bmm(attn_slice, value[start_idx:end_idx, start_idx_2:end_idx_2]) - - hidden_states[start_idx:end_idx, start_idx_2:end_idx_2] = attn_slice - del attn_slice - else: - query_slice = query[start_idx:end_idx] - key_slice = key[start_idx:end_idx] - attn_mask_slice = attention_mask[start_idx:end_idx] if attention_mask is not None else None - - attn_slice = attn.get_attention_scores(query_slice, key_slice, attn_mask_slice) - del query_slice - del key_slice - del attn_mask_slice - attn_slice = torch.bmm(attn_slice, value[start_idx:end_idx]) - - hidden_states[start_idx:end_idx] = attn_slice - del attn_slice - else: - attention_probs = attn.get_attention_scores(query, key, attention_mask) - hidden_states = torch.bmm(attention_probs, value) - #################################################################### - hidden_states = attn.batch_to_head_dim(hidden_states) - - # linear proj - hidden_states = attn.to_out[0](hidden_states) - # dropout - hidden_states = attn.to_out[1](hidden_states) - - if input_ndim == 4: - hidden_states = hidden_states.transpose(-1, -2).reshape(batch_size, channel, height, width) - - if attn.residual_connection: - hidden_states = hidden_states + residual - - hidden_states = hidden_states / attn.rescale_output_factor - - return hidden_states diff --git a/modules/shared_items.py b/modules/shared_items.py index e7d8dab8e..ad37125db 100644 --- a/modules/shared_items.py +++ b/modules/shared_items.py @@ -142,8 +142,6 @@ def list_crossattention(): "Disabled", "Scaled-Dot-Product", "xFormers", - "Batch matrix-matrix", - "Dynamic Attention BMM" ] diff --git a/test/test-attention-router.py b/test/test-attention-router.py index 245467326..d100e6168 100644 --- a/test/test-attention-router.py +++ b/test/test-attention-router.py @@ -443,6 +443,27 @@ def test_attention_slicing_follows_the_choice(): return True +def test_removed_attention_methods_are_gone(): + from modules import shared_items + from modules import options_handler + from modules import sd_hijack_dynamic_atten + + removed = ['Batch matrix-matrix', 'Dynamic Attention BMM'] + choices = shared_items.list_crossattention() + assert not [name for name in removed if name in choices], choices + for name in removed: + data = {'cross_attention_optimization': name} + migrated = options_handler.migrate_removed_values(data) + assert data['cross_attention_optimization'] == 'Scaled-Dot-Product', data + assert len(migrated) == 1, migrated + kept = {'cross_attention_optimization': 'xFormers'} + assert options_handler.migrate_removed_values(kept) == [], 'a live choice is left alone' + assert kept['cross_attention_optimization'] == 'xFormers', kept + assert not hasattr(sd_hijack_dynamic_atten, 'DynamicAttnProcessorBMM'), 'the bmm processor is removed' + assert hasattr(sd_hijack_dynamic_atten, 'dynamic_scaled_dot_product_attention'), 'the sliced sdpa path stays' + return True + + def test_escape_hatch_bypasses_the_router(): from modules import devices saved_sdpa = torch.nn.functional.scaled_dot_product_attention @@ -516,6 +537,7 @@ def run_all(): test_debug_observe_logs_each_route_once, test_reapply_options_cover_declared_backend_options, test_attention_slicing_follows_the_choice, + test_removed_attention_methods_are_gone, test_escape_hatch_bypasses_the_router, ]: run_test(cat, fn) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 089b239b6..d9260dc01 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -189,7 +189,6 @@ {"id":"","label":"block_level","localized":"","hint":"","ui":"settings_offload"}, {"id":"","label":"Backend storage","localized":"","hint":"","ui":"settings_quantization"}, {"id":"","label":"BF16","localized":"","hint":"Use modified 16-bit floating point precision for calculations","ui":"settings_cuda"}, - {"id":"","label":"Batch matrix-matrix","localized":"","hint":"Standard batched matrix multiplication for attention. Reliable but not VRAM-efficient.","ui":"settings_cuda"}, {"id":"","label":"BCFHW","localized":"","hint":"","ui":"settings_advanced"}, {"id":"","label":"BFCHW","localized":"","hint":"","ui":"settings_advanced"}, {"id":"","label":"BCHW","localized":"","hint":"","ui":"settings_advanced"}, @@ -397,7 +396,6 @@ {"id":"","label":"Dequantize using torch.compile","localized":"","hint":"Compiles the dequantization step with torch.compile for faster inference. Requires Triton.

Changing this needs a full restart to take effect.

Enabled by default when Triton is available.","reload":"server","ui":"settings_quantization"}, {"id":"","label":"Dequantize using full precision","localized":"","hint":"Uses FP32 for the dequantization step for better numerical accuracy, at a small speed cost.

Enabled by default.","reload":"model","ui":"settings_quantization"}, {"id":"","label":"Disabled","localized":"","hint":"","ui":"settings_cuda"}, - {"id":"","label":"Dynamic Attention BMM","localized":"","hint":"Performs attention computation in steps instead of all at once. Slower inference times, but greatly reduced memory usage","ui":"settings_cuda"}, {"id":"","label":"Dynamic attention","localized":"","hint":"Adjusts attention computation dynamically per step. Saves VRAM but slows generation.","ui":"settings_cuda"}, {"id":"","label":"Dynamic Attention slicing rate","localized":"","hint":"","ui":"settings_cuda"}, {"id":"","label":"Dynamic Attention trigger rate","localized":"","hint":"","ui":"settings_cuda"}, From fcadb4fa9b0fdb9f12342f0bd15429eb905caa65 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 24 Aug 2026 21:59:58 +0100 Subject: [PATCH 012/270] docs(settings): hint the attention settings Everything under Cross Attention, SDNQ Attention and Attention Dispatcher shipped with no hint, which left the layering invisible: the SDP kernel boxes are candidates torch chooses from per call rather than a selection, and the Flash box is torch's own build of the kernel rather than the flash-attn package that the Flash attention override installs. - cover attention method, sdp kernels, sdp overrides and attention slicing - give the dynamic attention rates their unit and the estimate they compare against - cover the sdnq attention kernel settings, including the head dimension clamp that the hadamard group size resolves through - cover the diffusers attention dispatcher and the backend names it takes - record the constraints each override serves, leaving the throughput comparison to the workload rather than naming a winner --- ui/locale/locale_en.json | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index d9260dc01..3019dfb1f 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -152,7 +152,11 @@ {"id":"","label":"Adapter 2","localized":"","hint":"","ui":"txt2img"}, {"id":"","label":"Adapter 3","localized":"","hint":"","ui":"txt2img"}, {"id":"","label":"Adapter 4","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"Audio","localized":"","hint":"","ui":"video"} + {"id":"","label":"Audio","localized":"","hint":"","ui":"video"}, + {"id":"","label":"Attention method","localized":"","hint":"Attention processor the pipeline is loaded with.

Scaled-Dot-Product uses torch attention and is the path the rest of this section builds on; SDP kernels and SDP overrides apply to it and to nothing else.
xFormers uses the xFormers library on the modules that accept it.
Disabled leaves whatever the pipeline was built with.

Default Scaled-Dot-Product.","ui":"settings_cuda"}, + {"id":"","label":"Attention slicing","localized":"","hint":"Computes attention in slices instead of one pass, trading speed for a lower memory peak. Applied by the pipeline rather than by the kernel, so it stacks on whichever Attention method is active.

Default leaves the pipeline's own choice untouched, which for most models means off.
Enabled and Disabled override that choice.

Unrelated to Dynamic attention, which slices by a memory estimate; this one is diffusers' fixed slicing.

Default Default.","ui":"settings_cuda"}, + {"id":"","label":"Attention Dispatcher","localized":"","hint":"Diffusers keeps its own attention backend registry, separate from the torch level settings above. A backend chosen here is installed on the model itself and changes what diffusers dispatches to inside its transformer blocks.

Applies to diffusion transformer models that expose the call. UNet models and pipelines without it are left alone.","ui":"settings_cuda"}, + {"id":"","label":"Attention dispatcher kernel","localized":"","hint":"Name of the diffusers attention backend to install on the model. Empty leaves the diffusers default in place.

Accepted names come from the diffusers build in use and currently include native, flash, flash_varlen, flex, sage, sage_varlen and xformers, alongside underscore-prefixed variants that pin one specific kernel.
A name is checked against that list, and an unrecognized one is logged as a warning with the full list while the model keeps its current backend. A recognized name whose package is missing is logged as an error at the same point, with the same result.
Names ending in _hub fetch the kernel from the Hugging Face Hub on first use, which needs a download and the kernels package.

Empty by default.","ui":"settings_cuda"} ], "b": [ {"id":"","label":"Batch","localized":"","hint":"Batch processing settings","ui":"img2img"}, @@ -233,7 +237,7 @@ {"id":"","label":"Control Media","localized":"","hint":"Add input image as separate initialization image for control processing","ui":"control"}, {"id":"","label":"Create Video","localized":"","hint":"","ui":"extras"}, {"id":"","label":"ChronoEdit","localized":"","hint":"","ui":"settings_model_options"}, - {"id":"","label":"Cross Attention","localized":"","hint":"","ui":"settings_cuda"}, + {"id":"","label":"Cross Attention","localized":"","hint":"Selects how attention is computed during generation. Attention is where a diffusion model spends most of its time and most of its peak memory, so these settings move both.

Three layers apply in order. Attention method picks the attention processor the pipeline is loaded with. SDP kernels limits which kernels torch may choose from inside its own attention. SDP overrides replaces torch attention with a different implementation for the calls that implementation accepts.
Overrides are tried in priority order and each one declines the calls it cannot serve, so several can be enabled at once and whatever is left over falls back to torch.","ui":"settings_cuda"}, {"id":"","label":"CLiP Skip","localized":"","hint":"Early stopping parameter for the CLiP text encoder; 1 is stop at last layer as usual, 2 is stop at penultimate layer, etc","ui":"settings_advanced"}, {"id":"","label":"Cache-DiT","localized":"","hint":"","ui":"settings_advanced"}, {"id":"","label":"CFG-Zero","localized":"","hint":"","ui":"settings_advanced"}, @@ -397,8 +401,8 @@ {"id":"","label":"Dequantize using full precision","localized":"","hint":"Uses FP32 for the dequantization step for better numerical accuracy, at a small speed cost.

Enabled by default.","reload":"model","ui":"settings_quantization"}, {"id":"","label":"Disabled","localized":"","hint":"","ui":"settings_cuda"}, {"id":"","label":"Dynamic attention","localized":"","hint":"Adjusts attention computation dynamically per step. Saves VRAM but slows generation.","ui":"settings_cuda"}, - {"id":"","label":"Dynamic Attention slicing rate","localized":"","hint":"","ui":"settings_cuda"}, - {"id":"","label":"Dynamic Attention trigger rate","localized":"","hint":"","ui":"settings_cuda"}, + {"id":"","label":"Dynamic Attention slicing rate","localized":"","hint":"Target size in GB for each attention slice once Dynamic attention starts slicing. Smaller slices hold the peak lower and add more per-slice overhead.
Slicing is applied across the batch first, then across attention heads, then across query tokens, going a level deeper whenever the level above is still over target.

Applies while Dynamic attention is enabled in SDP overrides.
Default 0.5.","ui":"settings_cuda"}, + {"id":"","label":"Dynamic Attention trigger rate","localized":"","hint":"Estimated attention matrix size in GB above which Dynamic attention begins slicing. Below it the call runs in one pass.
The estimate is batch x heads x query length x key length x bytes per element, so it grows with the square of the sequence length and crosses the threshold at high resolution or on video long before it does anywhere else.

Applies while Dynamic attention is enabled in SDP overrides.
Default 1.","ui":"settings_cuda"}, {"id":"","label":"Deterministic mode","localized":"","hint":"Forces deterministic output across runs. Useful for reproducibility, but may disable some optimizations.","ui":"settings_backends"}, {"id":"","label":"DirectML retry ops for NaN","localized":"","hint":"","ui":"settings_backends"}, {"id":"","label":"deep-cache","localized":"","hint":"","ui":"settings_compile"}, @@ -1452,7 +1456,16 @@ {"id":"","label":"Specify model revision","localized":"","hint":"","ui":"models_huggingface_tab"}, {"id":"","label":"SegmentAnything","localized":"","hint":"","ui":"control"}, {"id":"","label":"Sections","localized":"","hint":"","ui":"video"}, - {"id":"","label":"Samplers","localized":"","hint":"Samplers/schedulers advanced settings","ui":"tab_txt2img"} + {"id":"","label":"Samplers","localized":"","hint":"Samplers/schedulers advanced settings","ui":"tab_txt2img"}, + {"id":"","label":"SDP kernels","localized":"","hint":"Which of torch's built-in attention kernels torch is allowed to choose from. These are permissions rather than a selection: torch picks one per call from whatever is left enabled, preferring Flash, dropping to Memory for calls flash cannot serve such as those carrying an arbitrary attention mask, and to Math when neither fits. Clearing a box removes a candidate; it never pins the remaining one to every call.

Flash is torch's own build of the FlashAttention kernel. It is not the same thing as the Flash attention entry in SDP overrides, which calls the separately installed flash-attn package and bypasses torch entirely.
Memory is the memory-efficient kernel, which accepts arbitrary masks that flash does not.
Math is the unfused reference path, the widest in what it accepts and the least optimized. Leaving it enabled keeps a fallback for calls the other two decline.

Applies while Attention method is Scaled-Dot-Product, and continues to govern the calls that an enabled override declines.

All three by default. ZLUDA starts with Math alone.","ui":"settings_cuda"}, + {"id":"","label":"SDP overrides","localized":"","hint":"Replaces torch attention with another implementation. Each entry declares the shapes, dtypes and mask conditions it can serve; a call that fails them moves to the next entry and finally back to torch, so several can be enabled together and the chain resolves per call.

Flash attention installs and calls the flash-attn package directly, for calls with no attention mask, half precision inputs and a head dimension of 128 or less.
Sage attention computes attention with quantized matmuls, for head dimensions of 64, 96 or 128 and no attention mask.
SDNQ attention is SD.Next's own quantized Triton kernel, configured in the section below. It takes attention masks, which the other quantized backends do not.
Flex attention uses torch's compiled flex_attention.
Dynamic attention slices attention to fit available memory and serves every call the others decline, standing in for the torch fallback.
Triton Flash attention is a Triton implementation for ROCm and ZLUDA, listed only on those backends.

The quantized and compiled backends trade some numerical accuracy for throughput. How much of each arrives depends on the model, the sequence length and the GPU, so comparing them on the actual workload settles it faster than picking by reputation.

None by default on CUDA. ZLUDA, CPU and MPS start with Dynamic attention, as do ROCm GPUs older than RDNA3.","ui":"settings_cuda"}, + {"id":"","label":"SDNQ Attention","localized":"","hint":"Settings for the SDNQ attention entry in SDP overrides. They do nothing until that override is enabled.

The kernel quantizes the two matmuls inside attention, computing them on lower precision operands and rescaling the result. It is written in Triton, so it needs a working Triton for the active device.
Short sequences and single-head calls are left to the rest of the chain, so text encoders and the VAE keep ordinary attention.","ui":"settings_cuda"}, + {"id":"","label":"SDNQ Attention use Smooth K","localized":"","hint":"Subtracts the mean of the keys before quantizing them. Keys carry a large offset that is shared across the sequence, which spends most of the quantized range representing a value identical for every key and leaves little of it for the differences that decide the attention.
Softmax ignores a constant shift applied to every score in a row, so removing that offset changes the quantization error and not the attention.

Costs one mean and one subtraction per call.
Enabled by default.","ui":"settings_cuda"}, + {"id":"","label":"SDNQ Attention use Hadamard","localized":"","hint":"Rotates queries and keys by a Hadamard transform before quantizing them. The rotation spreads a few oversized channels across all of them, which is the error shape quantization handles worst. The transform is orthogonal, so the scores it produces are the ones the unrotated tensors would produce, minus the quantization error it removes.
With SDNQ Attention PV MatMul type also set, the values are rotated as well and the output is rotated back.

Costs a rotation pass on every attention call, so it is worth enabling where a model shows quantization artifacts without it.
Idle while SDNQ Attention MatMul type is disabled, since nothing is quantized then.

Disabled by default.","ui":"settings_cuda"}, + {"id":"","label":"SDNQ Attention use FP16 Accumulation","localized":"","hint":"Accumulates the floating point matmuls in fp16 rather than fp32. Some tensor cores run fp16 accumulation at a higher rate than fp32, and on those the kernel is cheaper for it.
Operands are pre-scaled to keep products inside the fp16 range, which covers ordinary activations with less headroom than fp32 leaves.

Reaches the parts of the kernel that run in floating point. An int8 matmul accumulates in int32 and is unaffected, so at the default SDNQ Attention MatMul type this applies to the probability-value matmul alone.

Disabled by default.","ui":"settings_cuda"}, + {"id":"","label":"SDNQ Attention MatMul type","localized":"","hint":"Precision the query-key matmul is computed in, the first of the two matmuls in attention.

enabled selects int8, and int8 and uint8 reach the same kernel.
float16 and float8_e4m3fn take the floating point path. fp8 needs a GPU with fp8 tensor cores and fails on hardware without them rather than falling back.
disabled leaves queries and keys in the model's own precision, which also idles SDNQ Attention use Smooth K and SDNQ Attention use Hadamard.

Default enabled.","ui":"settings_cuda"}, + {"id":"","label":"SDNQ Attention PV MatMul type","localized":"","hint":"Precision the probability-value matmul is computed in, the second of the two matmuls in attention. Choices match SDNQ Attention MatMul type.

Quantizing this one as well takes out the floating point work the first setting leaves behind, and it is the more delicate of the two: its inputs are already normalized probabilities, and the small ones among them carry the fine detail.
disabled keeps this matmul in the model's own precision.

Default disabled.","ui":"settings_cuda"}, + {"id":"","label":"SDNQ Attention Hadamard Group Size","localized":"","hint":"Width of the Hadamard rotation in channels. Wider groups mix more channels together and spread outliers further.

Clamped to the head dimension of the running model, rounded down to a power of two that divides it. On a model with 64 or 128 channels per head the upper part of this range resolves to that head dimension rather than to the number shown. Rotation is skipped below 4.
Applies while SDNQ Attention use Hadamard is enabled.

Default 256.","ui":"settings_cuda"} ], "t": [ {"id":"txt2img_nav","label":"T2I","localized":"","hint":"Create image from text
Legacy interface that mimics original text-to-image interface and behavior"}, From 9b37a1535c482e50d6de5a4dc4c87a926e6a8dc1 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 02:55:03 +0100 Subject: [PATCH 013/270] fix(lora): exact lora application on sdnq-quantized layers Baking a lora into a quantized weight requantizes it, and on low-bit formats round-to-nearest erases sub-step deltas (uint4 retains roughly 2/group_size of the signal). Plain lora deltas now ride the sdnq svd side-channel: factors append to svd_up/svd_down with the down factor hadamard-rotated, applied by the dequantizer at full precision in every forward mode. Apply and remove are exact and take no weight backup. - non-factorable families (dora, lokr, loha, oft, cp mid, dense bias) fall back to requantize with a per-pass summary warning - native fuse now honors the quantized-model guard; fuse requantized in place on every network swap and accumulated drift - layers that fell back on a mixed set restore from backup before re-entering the factor path; untargeted quantized layers are no longer flagged - test/test-sdnq-lora-factors.py pins the erasure law, factor-path exactness, memory accounting and set transitions --- modules/lora/extra_networks_lora.py | 4 +- modules/lora/lora_apply.py | 8 +- modules/lora/lora_diffusers.py | 3 +- modules/lora/lora_load.py | 4 +- modules/lora/lora_overrides.py | 53 ++- modules/lora/lora_sdnq.py | 169 +++++++++ modules/lora/networks.py | 38 +- test/test-sdnq-lora-factors.py | 534 ++++++++++++++++++++++++++++ 8 files changed, 793 insertions(+), 20 deletions(-) create mode 100644 modules/lora/lora_sdnq.py create mode 100644 test/test-sdnq-lora-factors.py diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index 35605e95e..42d39ec72 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -254,7 +254,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): if has_changed: jobid = shared.state.begin('LoRA') if len(l.previously_loaded_networks) > 0: - log.info(f'Network unload: type=LoRA networks={[n.name for n in l.previously_loaded_networks]} mode={"fuse" if shared.opts.lora_fuse_native else "backup"}') + log.info(f'Network unload: type=LoRA networks={[n.name for n in l.previously_loaded_networks]} mode={"fuse" if lora_overrides.fuse_native() else "backup"}') networks.network_deactivate(include, exclude) networks.network_activate(include, exclude) debug_log(f'Network change: type=LoRA previous={[n.name for n in l.previously_loaded_networks]} current={[n.name for n in l.loaded_networks]}') @@ -267,7 +267,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): prompt(p) if has_changed and len(include) == 0: # print only once actual_method = 'native' if any(len(n.modules) > 0 for n in l.loaded_networks) else load_method - log.info(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} load={load_method}({load_reason}) method={actual_method} mode={"fuse" if shared.opts.lora_fuse_native else "backup"} te={te_multipliers} unet={unet_multipliers} time={l.timer.summary} reason="{reason}"') + log.info(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} load={load_method}({load_reason}) method={actual_method} mode={"fuse" if lora_overrides.fuse_native() else "backup"} te={te_multipliers} unet={unet_multipliers} time={l.timer.summary} reason="{reason}"') def deactivate(self, p, force=False): if len(lora_diffusers.diffuser_loaded) > 0 and (shared.opts.lora_force_reload or force): diff --git a/modules/lora/lora_apply.py b/modules/lora/lora_apply.py index c1b46c4ab..3cb8688c0 100644 --- a/modules/lora/lora_apply.py +++ b/modules/lora/lora_apply.py @@ -16,7 +16,7 @@ if TYPE_CHECKING: re_network_name = re.compile(r"(.*)\s*\([0-9a-fA-F]+\)") -def network_backup_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.GroupNorm | torch.nn.LayerNorm | diffusers.models.lora.LoRACompatibleLinear | diffusers.models.lora.LoRACompatibleConv, network_layer_name: str, wanted_names: tuple): +def network_backup_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.GroupNorm | torch.nn.LayerNorm | diffusers.models.lora.LoRACompatibleLinear | diffusers.models.lora.LoRACompatibleConv, network_layer_name: str, wanted_names: tuple, fuse: bool): backup_size = 0 if len(l.loaded_networks) > 0 and network_layer_name is not None and any([net.modules.get(network_layer_name, None) for net in l.loaded_networks]): # noqa: C419 # pylint: disable=R1729 t0 = time.time() @@ -24,7 +24,7 @@ def network_backup_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.Gr weights_backup = getattr(self, "network_weights_backup", None) bias_backup = getattr(self, "network_bias_backup", None) if weights_backup is not None or bias_backup is not None: - if (shared.opts.lora_fuse_native and not isinstance(weights_backup, bool)) or (not shared.opts.lora_fuse_native and isinstance(weights_backup, bool)): # invalidate so we can change direct/backup on-the-fly + if (fuse and not isinstance(weights_backup, bool)) or (not fuse and isinstance(weights_backup, bool)): # invalidate so we can change direct/backup on-the-fly weights_backup = None bias_backup = None self.network_weights_backup = weights_backup @@ -33,7 +33,7 @@ def network_backup_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.Gr if weights_backup is None and wanted_names != (): # pylint: disable=C1803 weight = getattr(self, 'weight', None) self.network_weights_backup = None - if shared.opts.lora_fuse_native: + if fuse: self.network_weights_backup = True else: self.network_weights_backup = weight.clone().to(devices.cpu) @@ -53,7 +53,7 @@ def network_backup_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.Gr if bias_backup is None: if getattr(self, 'bias', None) is not None: - if shared.opts.lora_fuse_native: + if fuse: self.network_bias_backup = True else: bias_backup = self.bias.clone() diff --git a/modules/lora/lora_diffusers.py b/modules/lora/lora_diffusers.py index 94ad716c7..e8321f8a0 100644 --- a/modules/lora/lora_diffusers.py +++ b/modules/lora/lora_diffusers.py @@ -4,6 +4,7 @@ import diffusers from modules import shared, errors from modules.logger import log from modules.lora import network +from modules.lora import lora_overrides from modules.lora import lora_common as l @@ -54,7 +55,7 @@ def load_diffusers(name: str, network_on_disk: network.NetworkOnDisk, lora_scale t0 = time.time() name = name.replace(".", "_") sd_model: diffusers.DiffusionPipeline = getattr(shared.sd_model, "pipe", shared.sd_model) - log.debug(f'Network load: type=LoRA name="{name}" file="{network_on_disk.filename}" detected={network_on_disk.sd_version} method=diffusers reason={reason or "unknown"} scale={lora_scale} fuse={shared.opts.lora_fuse_native}:{shared.opts.lora_fuse_diffusers}') + log.debug(f'Network load: type=LoRA name="{name}" file="{network_on_disk.filename}" detected={network_on_disk.sd_version} method=diffusers reason={reason or "unknown"} scale={lora_scale} fuse={lora_overrides.fuse_native()}:{shared.opts.lora_fuse_diffusers}') if not hasattr(sd_model, 'load_lora_weights'): log.error(f'Network load: type=LoRA class={sd_model.__class__} does not implement load lora') return None diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index 7993ffe9a..b297108bd 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -149,7 +149,7 @@ def load_safetensors(name, network_on_disk: network.NetworkOnDisk) -> network.Ne if l.debug: log.debug(f'Network load: type=LoRA name="{name}" unmatched={keys_failed_to_match}') else: - log.debug(f'Network load: type=LoRA name="{name}" type={set(network_types)} keys={len(matched_networks)} dtypes={dtypes} fuse={shared.opts.lora_fuse_native}:{shared.opts.lora_fuse_diffusers}') + log.debug(f'Network load: type=LoRA name="{name}" type={set(network_types)} keys={len(matched_networks)} dtypes={dtypes} fuse={lora_overrides.fuse_native()}:{shared.opts.lora_fuse_diffusers}') if len(matched_networks) == 0: return None lora_cache[name] = net @@ -350,7 +350,7 @@ def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=Non networks.network_activate() if len(l.loaded_networks) > 0 and l.debug: - log.debug(f'Network load: type=LoRA loaded={[n.name for n in l.loaded_networks]} cache={list(lora_cache)} fuse={shared.opts.lora_fuse_native}:{shared.opts.lora_fuse_diffusers}') + log.debug(f'Network load: type=LoRA loaded={[n.name for n in l.loaded_networks]} cache={list(lora_cache)} fuse={lora_overrides.fuse_native()}:{shared.opts.lora_fuse_diffusers}') if recompile_model: log.info("Network load: type=LoRA recompiling model") diff --git a/modules/lora/lora_overrides.py b/modules/lora/lora_overrides.py index 2d27f7b88..eb629896e 100644 --- a/modules/lora/lora_overrides.py +++ b/modules/lora/lora_overrides.py @@ -77,13 +77,56 @@ def get_method(shorthash=''): return 'native', 'default' +# Roles a LoRA is fused into; a quantized component in any of them makes fusing unsafe. +fuse_roots = ('transformer', 'unet', 'text_encoder', 'llm_adapter') + + +def fuse_components(sd_model): + """Component names a network fuses into, matched by role prefix so numbered and reference siblings are covered.""" + names = getattr(sd_model, 'components', None) + if not isinstance(names, dict): + names = vars(sd_model) + return [name for name in names if name.startswith(fuse_roots)] + + +def is_quantized(module): + """Return True when ``module`` carries a quantization config. + + ``config.quantization_config`` is read first: SDNQ sets both it and the plain + attribute when it quantizes in place, but a checkpoint that ships pre-quantized + only reaches the plain attribute through the diffusers ConfigMixin name proxy, + which is deprecated for removal. + """ + if module is None: + return False + config = getattr(module, 'config', None) + if config is not None and getattr(config, 'quantization_config', None) is not None: + return True + return getattr(module, 'quantization_config', None) is not None + + def disable_fuse(): - if hasattr(shared.sd_model, 'quantization_config'): + """Return True when fusing a network into model weights is unsafe. + + Fusing keeps no pristine copy of the weight, so each apply and restore + round-trips it through its storage format. On quantized weights that is a + dequantize-add-requantize cycle per network swap whose error compounds. + """ + sd_model = getattr(shared.sd_model, 'pipe', shared.sd_model) + if is_quantized(sd_model): return True - if hasattr(shared.sd_model, 'transformer') and hasattr(shared.sd_model.transformer, 'quantization_config'): + if any(is_quantized(getattr(sd_model, name, None)) for name in fuse_components(sd_model)): return True - if hasattr(shared.sd_model, 'transformer_2') and hasattr(shared.sd_model.transformer_2, 'quantization_config'): - return True - if hasattr(shared.sd_model, '_lora_partial'): + if hasattr(sd_model, '_lora_partial'): return True return shared.sd_model_type in fuse_ignore + + +def fuse_native(): + """Return True when the native apply path may fuse into model weights. + + The single source of truth for the native fuse decision: it must agree across + the backup, activate and deactivate passes, since backup mode restores from a + stored tensor while fuse mode restores by subtracting the delta. + """ + return shared.opts.lora_fuse_native and not disable_fuse() diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py new file mode 100644 index 000000000..1cdbb8d22 --- /dev/null +++ b/modules/lora/lora_sdnq.py @@ -0,0 +1,169 @@ +"""Exact LoRA application for SDNQ-quantized layers. + +Baking a LoRA into a quantized weight requantizes it: dequantize, add the +delta, re-round onto the integer grid. When the per-element delta is smaller +than half a quantization step (a rank-decomposed delta on a uint4 layer sits +at a few percent of a step), rounding erases it; what survives is the two +grid-extrema elements per quantization group (2/group_size of the signal) +plus grid-shift noise of the same norm as the delta. The optimal in-grid +representation provably retains ~0%, so no rewrite of the stored integers +can fix this. + +The exact path instead rides the SDNQ svd side-channel: the dequantizer +computes ``W = dq(q) + svd_up @ svd_down`` in the rotated domain at full +precision, in every forward mode. A LoRA delta ``B @ A`` is appended as +extra columns of ``svd_up`` and rows of ``svd_down``; because the Hadamard +rotation is block-diagonal, symmetric and self-inverse, storing ``A·H`` for +the down factor makes the round trip exact: ``(B @ (A·H)) · H = B @ A``. +Quantized weights are never touched, so apply and remove are exact and no +weight backup is needed. + +Only additive low-rank modules qualify (plain LoRA: no DoRA, no CP ``mid``, +no LyCORIS dense-bias, no ``diff_b``). Layers with any non-factorable +contribution fall back to the dequantize-add-requantize path. +""" + +import torch + +from modules import devices +from modules.lora import lora_common as l +from modules.logger import log + + +fallback_layers: list[str] = [] + + +def get_module_factors(module, device, dtype): + """Return ``(up_eff, down)`` reproducing ``calc_updown`` exactly, or None. + + ``updown = up @ down * calc_scale() * multiplier()`` for a plain linear + LoRA; the scalars fold into the up factor. ``dyn_dim`` slices ranks the + same way ``lyco_helpers.rebuild_conventional`` does. + """ + if module.__class__.__name__ != 'NetworkModuleLora': + return None + if module.dora_scale is not None or module.bias is not None or module.ex_bias is not None: + return None + if getattr(module, 'mid_model', None) is not None: + return None + up = module.up_model.weight + down = module.down_model.weight + if up.ndim != 2 or down.ndim != 2: + return None + dyn_dim = module.network.dyn_dim + if dyn_dim is not None and up.shape[1] != dyn_dim: + up = up[:, :dyn_dim] + down = down[:dyn_dim] + scalar = module.calc_scale() * module.multiplier() + up_eff = up.to(device=device, dtype=torch.float32) * scalar + return up_eff.to(dtype=dtype), down.to(device=device, dtype=dtype) + + +def factor_candidate(self, network_layer_name, wanted_names, use_previous=False): + """True when this layer should take the exact svd-append path. + + Requires an SDNQ linear layer whose active networks all contribute plain + factorable LoRA modules for this layer. An empty ``wanted_names`` is a + removal request and qualifies whenever factors are currently attached. + """ + if getattr(self, 'sdnq_dequantizer', None) is None or self.__class__.__name__ != 'SDNQLinear': + return False + if hasattr(self, 'sdnq_lora_svd_stash'): + return True + if wanted_names == (): # nothing attached, nothing to remove + return False + loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks + seen = False + for net in loaded: + module = net.modules.get(network_layer_name, None) + if module is None: + continue + seen = True + if module.__class__.__name__ != 'NetworkModuleLora': + return False + if module.dora_scale is not None or module.bias is not None or module.ex_bias is not None or getattr(module, 'mid_model', None) is not None: + return False + if module.up_model.weight.ndim != 2 or module.down_model.weight.ndim != 2: + return False + if module.up_model.weight.shape[0] != self.sdnq_dequantizer.original_shape[0] or module.down_model.weight.shape[1] != self.sdnq_dequantizer.original_shape[-1]: + return False + return seen + + +def remove_factors(self): + """Restore the layer's original svd factors; True when factors were attached.""" + stash = getattr(self, 'sdnq_lora_svd_stash', None) + if stash is None: + return False + svd_up, svd_down = stash + self.svd_up = svd_up + self.svd_down = svd_down + del self.sdnq_lora_svd_stash + return True + + +def apply_factors(self, network_layer_name, wanted_names, use_previous=False): + """Attach the active networks' LoRA factors to this layer's svd side-channel. + + Replaces any previously attached factors (multiplier changes re-enter + here with a new ``wanted_names`` signature). Returns True when the layer + changed. Falls back to the caller's requantize path by returning None + when factor extraction fails at this stage. + """ + from sdnq.quant_utils import rotate_hadamard + + changed = remove_factors(self) + if wanted_names == (): + return changed + + deq = self.sdnq_dequantizer + device = self.scale.device + dtype = deq.result_dtype + loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks + ups, downs = [], [] + for net in loaded: + module = net.modules.get(network_layer_name, None) + if module is None: + continue + factors = get_module_factors(module, devices.device, dtype) + if factors is None: + return None + up_eff, down = factors + if deq.use_hadamard: + down = rotate_hadamard(down.to(dtype=torch.float32), group_size=deq.hadamard_group_size).to(dtype=dtype) + ups.append(up_eff) + downs.append(down) + if not ups: + return changed + + orig_up, orig_down = self.svd_up, self.svd_down + if deq.use_quantized_matmul: + # matmul layout stores factors transposed: svd_up [r, out], svd_down [in, r] + parts_up = ([orig_up.to(device=devices.device, dtype=dtype)] if orig_up is not None else []) + [u.t() for u in ups] + parts_down = ([orig_down.to(device=devices.device, dtype=dtype)] if orig_down is not None else []) + [d.t() for d in downs] + new_up = torch.cat(parts_up, dim=0).contiguous() + new_down = torch.cat(parts_down, dim=1).contiguous() + else: + parts_up = ([orig_up.to(device=devices.device, dtype=dtype)] if orig_up is not None else []) + ups + parts_down = ([orig_down.to(device=devices.device, dtype=dtype)] if orig_down is not None else []) + downs + new_up = torch.cat(parts_up, dim=1).contiguous() + new_down = torch.cat(parts_down, dim=0).contiguous() + + self.sdnq_lora_svd_stash = (orig_up, orig_down) + self.svd_up = torch.nn.Parameter(new_up.to(device=device), requires_grad=False) + self.svd_down = torch.nn.Parameter(new_down.to(device=device), requires_grad=False) + return True + + +def note_fallback(self, network_layer_name): + """Record a quantized layer taking the lossy requantize path (summary-logged per pass).""" + if getattr(self, 'sdnq_dequantizer', None) is not None: + fallback_layers.append(network_layer_name) + + +def report_fallbacks(): + if len(fallback_layers) > 0: + log.warning(f'Network load: type=LoRA quant=sdnq layers={len(fallback_layers)} non-factorable networks requantized in place (reduced fidelity on quantized weights)') + if l.debug: + log.debug(f'Network load: type=LoRA quant=sdnq requantized={fallback_layers[:8]}{"..." if len(fallback_layers) > 8 else ""}') + fallback_layers.clear() diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 31945c27d..50d5d27aa 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -3,6 +3,8 @@ import time import rich.progress as rp from modules.errorlimiter import limit_errors from modules.lora import lora_common as l +from modules.lora import lora_overrides +from modules.lora import lora_sdnq from modules.lora.lora_apply import network_apply_weights, network_apply_direct, network_backup_weights, network_calc_weights from modules import shared, devices, sd_models from modules.logger import log, console @@ -53,6 +55,7 @@ def network_activate(include=None, exclude=None): net.unet_multiplier = pending['unet'] net.dyn_dim = pending['dyn'] t0 = time.time() + fuse = lora_overrides.fuse_native() # resolve once: backup and apply passes must agree with limit_errors("network_activate") as elimit: sd_model = getattr(shared.sd_model, "pipe", shared.sd_model) if shared.opts.diffusers_offload_mode == "sequential": @@ -100,7 +103,20 @@ def network_activate(include=None, exclude=None): continue if group_offload and component not in group_stripped and group_will_mutate(module, network_layer_name, l.loaded_networks): device = group_offload_strip(sd_model, component, group_stripped) - backup_size += network_backup_weights(module, network_layer_name, component_wanted) + if lora_sdnq.factor_candidate(module, network_layer_name, component_wanted): + weights_backup = getattr(module, "network_weights_backup", None) + if weights_backup is not None and not isinstance(weights_backup, bool): + network_apply_weights(module, None, None, device=device) # an earlier non-factorable set requantized this layer, restore the pristine base before attaching factors + applied = lora_sdnq.apply_factors(module, network_layer_name, component_wanted) + if applied is not None: # exact path took the layer; None falls through to requantize + if applied and component_wanted: + applied_layers.append(network_layer_name) + applied_weight += 1 + module.network_current_names = component_wanted + if task is not None: + pbar.update(task, advance=1) + continue + backup_size += network_backup_weights(module, network_layer_name, component_wanted, fuse) if not component_wanted: weights_backup = getattr(module, "network_weights_backup", None) if weights_backup is None or isinstance(weights_backup, bool): # fuse mode has no tensor backup, restore stays with network_deactivate @@ -110,7 +126,9 @@ def network_activate(include=None, exclude=None): batch_updown, batch_ex_bias = None, None # restore-only pass, apply with no weights reverts to backup else: batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, elimit=elimit) - if shared.opts.lora_fuse_native: + if batch_updown is not None: + lora_sdnq.note_fallback(module, network_layer_name) # only layers whose quantized weight actually takes a delta + if fuse: weight_written, bias_written = network_apply_direct(module, batch_updown, batch_ex_bias, device=device) else: weight_written, bias_written = network_apply_weights(module, batch_updown, batch_ex_bias, device=device) @@ -129,13 +147,14 @@ def network_activate(include=None, exclude=None): if task is not None and len(applied_layers) == 0: pbar.remove_task(task) # hide progress bar for no action global native_active, refused_writes # pylint: disable=global-statement + lora_sdnq.report_fallbacks() native_active = len(l.loaded_networks) > 0 refused_writes = refused l.timer.activate += time.time() - t0 if refused > 0: log.error(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} weights={applied_weight} bias={applied_bias} refused={refused} network partially applied') if l.debug and len(l.loaded_networks) > 0: - log.debug(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} modules={active_components} layers={total} weights={applied_weight} bias={applied_bias} refused={refused} backup={round(backup_size/1024/1024/1024, 2)} fuse={shared.opts.lora_fuse_native}:{shared.opts.lora_fuse_diffusers} device={device} time={l.timer.summary}') + log.debug(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} modules={active_components} layers={total} weights={applied_weight} bias={applied_bias} refused={refused} backup={round(backup_size/1024/1024/1024, 2)} fuse={fuse}:{shared.opts.lora_fuse_diffusers} device={device} time={l.timer.summary}') modules.clear() if len(applied_layers) > 0 or shared.opts.diffusers_offload_mode == "sequential" or len(group_stripped) > 0: sd_models.set_diffuser_offload(sd_model, op="model") @@ -146,7 +165,8 @@ def network_deactivate(include=None, exclude=None): exclude = [] if include is None: include = [] - if not shared.opts.lora_fuse_native or shared.opts.lora_force_diffusers: + fuse = lora_overrides.fuse_native() # must match network_activate: backup mode restores in its restore-only pass instead + if not fuse or shared.opts.lora_force_diffusers: return if len(l.previously_loaded_networks) == 0: return @@ -190,8 +210,14 @@ def network_deactivate(include=None, exclude=None): continue if group_offload and component not in group_stripped and group_will_mutate(module, network_layer_name, l.previously_loaded_networks): device = group_offload_strip(sd_model, component, group_stripped) + if lora_sdnq.remove_factors(module): # exact inverse for factor-mode layers, weights were never touched + applied_layers.append(network_layer_name) + module.network_current_names = () + if task is not None: + pbar.update(task, advance=1) + continue batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, use_previous=True, elimit=elimit) - if shared.opts.lora_fuse_native: + if fuse: weight_written, bias_written = network_apply_direct(module, batch_updown, batch_ex_bias, device=device, deactivate=True) else: weight_written, bias_written = network_apply_weights(module, batch_updown, batch_ex_bias, device=device, deactivate=True) @@ -206,7 +232,7 @@ def network_deactivate(include=None, exclude=None): if refused > 0: log.error(f'Network unload: type=LoRA networks={[n.name for n in l.previously_loaded_networks]} unapply={len(applied_layers)} refused={refused} network partially removed') if l.debug and len(l.previously_loaded_networks) > 0: - log.debug(f'Network deactivate: type=LoRA networks={[n.name for n in l.previously_loaded_networks]} modules={active_components} layers={total} apply={len(applied_layers)} refused={refused} fuse={shared.opts.lora_fuse_native}:{shared.opts.lora_fuse_diffusers} time={l.timer.summary}') + log.debug(f'Network deactivate: type=LoRA networks={[n.name for n in l.previously_loaded_networks]} modules={active_components} layers={total} apply={len(applied_layers)} refused={refused} fuse={fuse}:{shared.opts.lora_fuse_diffusers} time={l.timer.summary}') modules.clear() if len(applied_layers) > 0 or shared.opts.diffusers_offload_mode == "sequential" or len(group_stripped) > 0: sd_models.set_diffuser_offload(sd_model, op="model") diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py new file mode 100644 index 000000000..7eb0c2943 --- /dev/null +++ b/test/test-sdnq-lora-factors.py @@ -0,0 +1,534 @@ +#!/usr/bin/env python +""" +Offline unit tests for LoRA application on SDNQ-quantized layers. + +Pins two facts established on real checkpoints (see cli/lora-quant-fidelity.py +for the per-model analyzer): + +- The requantize path (dequantize + add + requantize) erases sub-step deltas + on low-bit formats: retention collapses to the ~2/group_size grid-extrema + floor on uint4, while int8 retains most of the delta. Guards against the + erasure law silently changing. +- The factor path (modules/lora/lora_sdnq.py) applies plain LoRA deltas + through the svd side-channel exactly, in both svd layouts, with exact + stacking, multiplier scaling and bit-exact removal, wired through the real + networks.network_activate / network_deactivate control flow. +- Multi-LoRA set transitions keep the base pristine: a layer that fell back + to requantize (mixed factorable/non-factorable set) restores from backup + before re-entering the factor path, layers targeted by only some of the + loaded networks stay independent, and untargeted quantized layers are not + flagged as requantized. + +All tensors are synthetic; no model files or running server required. + +Usage: + python test/test-sdnq-lora-factors.py +""" + +import os +import sys +import time +from contextlib import contextmanager + +import torch + +script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, script_dir) +os.chdir(script_dir) + +os.environ['SD_INSTALL_QUIET'] = '1' + +# Bootstrap cmd_args before any module that pulls in shared.py. +import modules.cmd_args # pylint: disable=wrong-import-position +import installer # pylint: disable=wrong-import-position +_orig_argv = sys.argv +sys.argv = [sys.argv[0]] +try: + modules.cmd_args.parse_args() +finally: + sys.argv = _orig_argv +installer.add_args(modules.cmd_args.parser) +modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) + +from modules.errors import log # pylint: disable=wrong-import-position +from modules import shared, sd_models # pylint: disable=wrong-import-position +from modules.lora import network, network_lora, lora_sdnq, networks # pylint: disable=wrong-import-position +from modules.lora import lora_common as l_common # pylint: disable=wrong-import-position +from sdnq.quantizer import sdnq_quantize_layer, SDNQConfig # pylint: disable=wrong-import-position + +DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') +OUT_F, IN_F, RANK = 512, 512, 8 + +results: dict[str, dict] = {} + + +def category(name: str): + if name not in results: + results[name] = {'passed': 0, 'failed': 0, 'tests': []} + return name + + +def record(cat: str, passed: bool, name: str, detail: str = ''): + status = 'PASS' if passed else 'FAIL' + results[cat]['passed' if passed else 'failed'] += 1 + results[cat]['tests'].append((status, name)) + msg = f' {status}: {name}' + if detail: + msg += f' ({detail})' + if passed: + log.info(msg) + else: + log.error(msg) + + +def run_test(cat: str, fn): + name = fn.__name__ + try: + ok = fn() + record(cat, ok is not False, name) + except AssertionError as e: + record(cat, False, name, str(e)) + except Exception as e: # pylint: disable=broad-except + record(cat, False, name, f'exception: {e}') + import traceback + traceback.print_exc() + + +def build_layer(weights_dtype='uint4', use_quantized_matmul=False, seed=0): + torch.manual_seed(seed) + lin = torch.nn.Linear(IN_F, OUT_F, bias=False, dtype=torch.bfloat16, device=DEVICE) + with torch.no_grad(): + lin.weight.copy_(torch.randn(OUT_F, IN_F, device=DEVICE) * 0.04) + cfg = SDNQConfig(weights_dtype=weights_dtype, group_size=0, hadamard_group_size=256, use_hadamard=True, + use_svd=False, use_quantized_matmul=use_quantized_matmul, dequantize_fp32=False, + quantization_device=str(DEVICE), return_device=str(DEVICE)) + layer, _ = sdnq_quantize_layer(lin, cfg, torch_dtype=torch.bfloat16, param_name='test.weight') + layer.network_layer_name = 'lora_transformer_test' + layer.network_current_names = () + return layer + + +def dq(layer): + return layer.sdnq_dequantizer(layer.weight, layer.scale, zero_point=layer.zero_point, + svd_up=layer.svd_up, svd_down=layer.svd_down, + skip_quantized_matmul=layer.sdnq_dequantizer.use_quantized_matmul, + dtype=torch.float32, skip_compile=True) + + +def make_delta(seed=1, sigma=3e-4): + torch.manual_seed(seed) + A = torch.randn(RANK, IN_F, device=DEVICE) * (sigma ** 0.5) + B = torch.randn(OUT_F, RANK, device=DEVICE) * (sigma ** 0.5) + return A, B, B @ A + + +class MockNOD: + def __init__(self, name): + self.filename = f'/tmp/{name}.safetensors' + self.name = name + self.shorthash = '' + self.sd_version = 'unknown' + + +def make_net(name, layer, A, B, te_mult=1.0, alpha=None, dora=False): + net = network.Network(name, MockNOD(name)) + net.te_multiplier = te_mult + net.unet_multiplier = [te_mult] * 3 + w = {'lora_up.weight': B.cpu(), 'lora_down.weight': A.cpu()} + if alpha is not None: + w['alpha'] = torch.tensor(float(alpha)) + if dora: + w['dora_scale'] = torch.ones(B.shape[0], 1) + nw = network.NetworkWeights(network_key=layer.network_layer_name, sd_key=layer.network_layer_name, w=w, sd_module=layer) + mod = network_lora.NetworkModuleLora(net, nw) + net.modules[layer.network_layer_name] = mod + return net + + +def rho_of(E, D): + return float(E.flatten() @ D.flatten() / D.flatten().square().sum()) + + +def requant_effective(layer, D): + """The lossy fallback path: quantize(W_dq + D) fresh with the layer's own params.""" + from sdnq.quantizer import sdnq_quantize_layer_weight + deq = layer.sdnq_dequantizer + Wdq = dq(layer) + deq2, data2 = sdnq_quantize_layer_weight(Wdq + D, layer_class_name='Linear', weights_dtype=deq.weights_dtype, + group_size=deq.group_size, hadamard_group_size=deq.hadamard_group_size, + use_hadamard=deq.use_hadamard, use_svd=False, use_quantized_matmul=False, + dequantize_fp32=False, torch_dtype=torch.bfloat16) + W2 = deq2(data2['weight'], data2['scale'], zero_point=data2['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) + return W2 - Wdq + + +# ============================================================ +# Tests - the erasure law (why the factor path exists) +# ============================================================ + +CAT_LAW = category('erasure-law') + + +def test_uint4_erases_substep_delta(): + layer = build_layer('uint4') + _A, _B, D = make_delta(sigma=2e-4) + rho = rho_of(requant_effective(layer, D), D) + group = layer.sdnq_dequantizer.group_size + floor = 2.0 / group + assert rho < 4 * floor, f'rho={rho:.4f} expected near extrema floor {floor:.4f}' + return True + + +def test_int8_retains_delta(): + layer = build_layer('int8') + _A, _B, D = make_delta(sigma=2e-4) + rho = rho_of(requant_effective(layer, D), D) + assert rho > 0.5, f'rho={rho:.4f} expected int8 to retain most of the delta' + return True + + +# ============================================================ +# Tests - factor path exactness +# ============================================================ + +CAT_FACTOR = category('factor-path') + + +def test_apply_exact_and_remove_bitexact(): + layer = build_layer('uint4') + A, B, D = make_delta() + net = make_net('one', layer, A, B) + l_common.loaded_networks.clear() + l_common.loaded_networks.append(net) + wanted = (('one', 1.0, 1.0, None),) + assert lora_sdnq.factor_candidate(layer, layer.network_layer_name, wanted) is True + Wdq0 = dq(layer) + assert lora_sdnq.apply_factors(layer, layer.network_layer_name, wanted) is True + rho = rho_of(dq(layer) - Wdq0, D) + assert rho > 0.99, f'rho={rho:.4f}' + assert lora_sdnq.remove_factors(layer) is True + assert torch.equal(dq(layer), Wdq0), 'remove must be bit-exact' + assert layer.svd_up is None and not hasattr(layer, 'sdnq_lora_svd_stash') + l_common.loaded_networks.clear() + return True + + +def test_multiplier_and_alpha_scaling(): + layer = build_layer('uint4') + A, B, D = make_delta() + net = make_net('one', layer, A, B, te_mult=0.5, alpha=RANK // 2) # alpha/rank = 0.5 + l_common.loaded_networks.clear() + l_common.loaded_networks.append(net) + Wdq0 = dq(layer) + lora_sdnq.apply_factors(layer, layer.network_layer_name, (('one', 0.5, 0.5, None),)) + rho = rho_of(dq(layer) - Wdq0, D) + assert abs(rho - 0.25) < 0.01, f'expected 0.5*0.5 scaling, rho={rho:.4f}' + lora_sdnq.remove_factors(layer) + l_common.loaded_networks.clear() + return True + + +def test_stacking_two_networks(): + layer = build_layer('uint4') + A1, B1, D1 = make_delta(seed=1) + A2, B2, D2 = make_delta(seed=2) + l_common.loaded_networks.clear() + l_common.loaded_networks.extend([make_net('a', layer, A1, B1), make_net('b', layer, A2, B2)]) + Wdq0 = dq(layer) + lora_sdnq.apply_factors(layer, layer.network_layer_name, (('a', 1.0, 1.0, None), ('b', 1.0, 1.0, None))) + rho = rho_of(dq(layer) - Wdq0, D1 + D2) + assert rho > 0.99, f'rho={rho:.4f}' + lora_sdnq.remove_factors(layer) + l_common.loaded_networks.clear() + return True + + +def test_matmul_layout_transposed(): + layer = build_layer('uint4', use_quantized_matmul=True) + A, B, D = make_delta() + l_common.loaded_networks.clear() + l_common.loaded_networks.append(make_net('one', layer, A, B)) + Wdq0 = dq(layer) + res = lora_sdnq.apply_factors(layer, layer.network_layer_name, (('one', 1.0, 1.0, None),)) + rho = rho_of(dq(layer) - Wdq0, D) + assert res is True and rho > 0.99, f'rho={rho:.4f}' + lora_sdnq.remove_factors(layer) + assert torch.equal(dq(layer), Wdq0) + l_common.loaded_networks.clear() + return True + + +def test_dora_falls_back(): + layer = build_layer('uint4') + A, B, _D = make_delta() + l_common.loaded_networks.clear() + l_common.loaded_networks.append(make_net('dora', layer, A, B, dora=True)) + assert lora_sdnq.factor_candidate(layer, layer.network_layer_name, (('dora', 1.0, 1.0, None),)) is False + l_common.loaded_networks.clear() + return True + + +# ============================================================ +# Tests - memory accounting across apply modes +# ============================================================ + +CAT_MEM = category('memory') + + +def tensor_bytes(t): + return t.numel() * t.element_size() if isinstance(t, torch.Tensor) else 0 + + +def test_factor_path_memory_is_factors_only(): + """Factor path: no weight/quant-state backups; added memory = the factor tensors.""" + layer = build_layer('uint4') + A, B, _D = make_delta() + l_common.loaded_networks.clear() + l_common.loaded_networks.append(make_net('one', layer, A, B)) + lora_sdnq.apply_factors(layer, layer.network_layer_name, (('one', 1.0, 1.0, None),)) + assert getattr(layer, 'network_weights_backup', None) is None + assert not hasattr(layer, 'sdnq_dequantizer_backup') and not hasattr(layer, 'sdnq_scale_backup') + added = tensor_bytes(layer.svd_up) + tensor_bytes(layer.svd_down) + expected = RANK * (OUT_F + IN_F) * 2 # bf16 factors + assert added == expected, f'factor bytes {added} != expected {expected}' + would_be_backup = tensor_bytes(layer.weight) + tensor_bytes(layer.scale) + tensor_bytes(layer.zero_point) + assert added < would_be_backup / 4, f'factors {added}B should undercut the {would_be_backup}B backup this layer would otherwise clone' + lora_sdnq.remove_factors(layer) + assert layer.svd_up is None and layer.svd_down is None + l_common.loaded_networks.clear() + return True + + +def test_backup_mode_clones_full_quant_state(): + """Fallback in backup mode: packed weight + scale + zero_point are cloned to cpu.""" + from modules.lora.lora_apply import network_backup_weights + layer = build_layer('uint4') + A, B, _D = make_delta() + l_common.loaded_networks.clear() + l_common.loaded_networks.append(make_net('dora', layer, A, B, dora=True)) # non-factorable + reported = network_backup_weights(layer, layer.network_layer_name, (('dora', 1.0, 1.0, None),), fuse=False) + assert isinstance(layer.network_weights_backup, torch.Tensor) and layer.network_weights_backup.device.type == 'cpu' + assert hasattr(layer, 'sdnq_dequantizer_backup') and isinstance(layer.sdnq_scale_backup, torch.Tensor) + assert reported == tensor_bytes(layer.weight), f'reported {reported} != packed weight bytes {tensor_bytes(layer.weight)}' + total = reported + tensor_bytes(layer.sdnq_scale_backup) + tensor_bytes(layer.sdnq_zero_point_backup) + expected_min = OUT_F * IN_F // 2 # uint4 packs two weights per byte + assert total >= expected_min, f'backup {total}B below packed-weight floor {expected_min}B' + l_common.loaded_networks.clear() + return True + + +def test_fuse_mode_marker_takes_no_memory(): + """Fuse mode stores a boolean marker instead of tensors; guard forces backup on quantized models.""" + from modules.lora.lora_apply import network_backup_weights + from modules.lora import lora_overrides + layer = build_layer('uint4') + A, B, _D = make_delta() + l_common.loaded_networks.clear() + l_common.loaded_networks.append(make_net('dora', layer, A, B, dora=True)) + reported = network_backup_weights(layer, layer.network_layer_name, (('dora', 1.0, 1.0, None),), fuse=True) + assert layer.network_weights_backup is True and reported == 0 + assert not hasattr(layer, 'sdnq_dequantizer_backup') + + # the guard: a quantized component forces fuse off model-wide regardless of the option + class MockCfg: + quantization_config = {'quant_method': 'sdnq'} + class MockSd: + pass + sd = MockSd() + sd.transformer = torch.nn.Linear(4, 4) + sd.transformer.config = MockCfg() + from modules.modeldata import model_data + prev_model = model_data.sd_model + old_fuse = shared.opts.lora_fuse_native + try: + model_data.sd_model = sd + shared.opts.lora_fuse_native = True + assert lora_overrides.disable_fuse() is True + assert lora_overrides.fuse_native() is False + finally: + shared.opts.lora_fuse_native = old_fuse + model_data.sd_model = prev_model + l_common.loaded_networks.clear() + return True + + +# ============================================================ +# Tests - integration through networks.network_activate +# ============================================================ + +CAT_E2E = category('activate-e2e') + + +class MockHolder(torch.nn.Module): + @property + def device(self): + return DEVICE + + +@contextmanager +def mock_model(**layers): + """Install a one-component mock pipeline holding the given layers as shared.sd_model.""" + class MockPipe: + pass + class MockSd: + pass + holder = MockHolder() + for attr, lyr in layers.items(): + setattr(holder, attr, lyr) + pipe = MockPipe() + pipe.transformer = holder + sd = MockSd() + sd.pipe = pipe + from modules.modeldata import model_data + model_data.sd_model = sd + real_offload = sd_models.set_diffuser_offload + sd_models.set_diffuser_offload = lambda *a, **k: None + old_fuse = shared.opts.lora_fuse_native + shared.opts.lora_fuse_native = False # a real quantized model forces backup mode; the mock carries no quantization config, so pin it instead of inheriting the running config + try: + yield + finally: + shared.opts.lora_fuse_native = old_fuse + sd_models.set_diffuser_offload = real_offload + l_common.loaded_networks.clear() + l_common.previously_loaded_networks.clear() + + +def activate(*nets): + l_common.loaded_networks.clear() + l_common.loaded_networks.extend(nets) + networks.network_activate() + + +def test_network_activate_roundtrip(): + layer = build_layer('uint4') + A, B, D = make_delta() + net = make_net('one', layer, A, B) + + with mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net) + rho = rho_of(dq(layer) - Wdq0, D) + assert rho > 0.99, f'rho={rho:.4f}' + assert getattr(layer, 'network_weights_backup', None) is None, 'factor path must not take weight backups' + + activate() # restore pass + assert torch.equal(dq(layer), Wdq0), 'unload must restore bit-exact' + + # fuse-mode deactivate route + layer.network_current_names = () + activate(net) + l_common.previously_loaded_networks[:] = l_common.loaded_networks + shared.opts.lora_fuse_native = True + networks.network_deactivate() + assert torch.equal(dq(layer), Wdq0), 'fuse-mode deactivate must restore bit-exact' + return True + + +# ============================================================ +# Tests - multi-LoRA set transitions between the two paths +# ============================================================ + +CAT_TRANS = category('transitions') + + +def test_mixed_family_transition_restores_base(): + layer = build_layer('uint4') + bystander = build_layer('uint4', seed=7) + bystander.network_layer_name = 'lora_transformer_bystander' + A, B, D = make_delta() + net_plain = make_net('plain', layer, A, B) + A2, B2, _ = make_delta(seed=5, sigma=3e-3) + net_dora = make_net('doranet', layer, A2, B2, dora=True) + + noted = [] + real_report = lora_sdnq.report_fallbacks + def capture_report(): + noted.append(len(lora_sdnq.fallback_layers)) + real_report() + lora_sdnq.report_fallbacks = capture_report + try: + with mock_model(lin=layer, bystander=bystander): + Wdq0 = dq(layer) + activate(net_plain) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'plain set must take the factor path' + assert noted[-1] == 0, f'untargeted quantized layers must not be flagged as requantized: noted={noted[-1]}' + + activate(net_plain, net_dora) + assert not hasattr(layer, 'sdnq_lora_svd_stash') and isinstance(layer.network_weights_backup, torch.Tensor), 'mixed set must fall back with a tensor backup' + assert not torch.equal(dq(layer), Wdq0), 'fallback must have requantized the weights' + assert noted[-1] == 1, f'exactly the requantized layer must be flagged: noted={noted[-1]}' + + activate(net_plain) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'plain-only set must re-enter the factor path' + rho = rho_of(dq(layer) - Wdq0, D) + assert rho > 0.99, f'rho={rho:.4f}' + stash, up, down = layer.sdnq_lora_svd_stash, layer.svd_up, layer.svd_down + lora_sdnq.remove_factors(layer) + base_clean = torch.equal(dq(layer), Wdq0) + layer.sdnq_lora_svd_stash, layer.svd_up, layer.svd_down = stash, up, down + assert base_clean, 'base under factors must be restored from backup on mixed-set exit' + + activate() + assert torch.equal(dq(layer), Wdq0), 'unload must return bit-exact pristine' + finally: + lora_sdnq.report_fallbacks = real_report + return True + + +def test_partial_coverage_layers_stay_independent(): + layer_plain = build_layer('uint4') + layer_dora = build_layer('uint4', seed=7) + layer_dora.network_layer_name = 'lora_transformer_other' + A, B, D = make_delta() + net_plain = make_net('plain', layer_plain, A, B) + A2, B2, _ = make_delta(seed=5, sigma=3e-3) + net_dora = make_net('dorafar', layer_dora, A2, B2, dora=True) + + with mock_model(lin=layer_plain, other=layer_dora): + Wdq0, Wdq0_dora = dq(layer_plain), dq(layer_dora) + activate(net_plain, net_dora) + assert hasattr(layer_plain, 'sdnq_lora_svd_stash') and getattr(layer_plain, 'network_weights_backup', None) is None, 'plain layer must stay on the factor path' + assert isinstance(getattr(layer_dora, 'network_weights_backup', None), torch.Tensor), 'dora layer must take the backup fallback' + rho = rho_of(dq(layer_plain) - Wdq0, D) + assert rho > 0.99, f'rho={rho:.4f}' + activate() + assert torch.equal(dq(layer_plain), Wdq0), 'factor layer must restore bit-exact' + assert torch.equal(dq(layer_dora), Wdq0_dora), 'fallback layer must restore bit-exact' + return True + + +def run_tests(): + t0 = time.time() + log.warning('=== Erasure law ===') + for fn in [test_uint4_erases_substep_delta, test_int8_retains_delta]: + run_test(CAT_LAW, fn) + log.warning('=== Factor path ===') + for fn in [test_apply_exact_and_remove_bitexact, test_multiplier_and_alpha_scaling, test_stacking_two_networks, test_matmul_layout_transposed, test_dora_falls_back]: + run_test(CAT_FACTOR, fn) + log.warning('=== Memory accounting ===') + for fn in [test_factor_path_memory_is_factors_only, test_backup_mode_clones_full_quant_state, test_fuse_mode_marker_takes_no_memory]: + run_test(CAT_MEM, fn) + log.warning('=== Activate integration ===') + for fn in [test_network_activate_roundtrip]: + run_test(CAT_E2E, fn) + log.warning('=== Set transitions ===') + for fn in [test_mixed_family_transition_restores_base, test_partial_coverage_layers_stay_independent]: + run_test(CAT_TRANS, fn) + + elapsed = time.time() - t0 + log.warning('=== Results ===') + total_pass = total_fail = 0 + for cat, info in results.items(): + status = 'PASS' if info['failed'] == 0 else 'FAIL' + log.info(f' {cat}: {info["passed"]} passed, {info["failed"]} failed [{status}]') + total_pass += info['passed'] + total_fail += info['failed'] + log.warning(f'Total: {total_pass} passed, {total_fail} failed in {elapsed:.2f}s') + return total_fail == 0 + + +if __name__ == '__main__': + with torch.inference_mode(): + ok = run_tests() + sys.exit(0 if ok else 1) From 9906afae083a94dd753071edb2900189ef23b88c Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 02:55:20 +0100 Subject: [PATCH 014/270] feat(cli): lora quantization fidelity analyzer Offline analyzer for a (model, lora) pair: maps lora modules onto the transformer, measures per-module delta-to-step ratio and requantize retention, and reports factor-path eligibility. Loads pre-quantized sdnq repos or simulates quantization on bf16 repos; supports --json and --fail-under for scripted checks. --- cli/lora-quant-fidelity.py | 299 +++++++++++++++++++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 cli/lora-quant-fidelity.py diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py new file mode 100644 index 000000000..e39af8f14 --- /dev/null +++ b/cli/lora-quant-fidelity.py @@ -0,0 +1,299 @@ +#!/usr/bin/env python +"""LoRA fidelity analyzer for quantized base models. + +Measures, in weight space, how faithfully a LoRA lands on an SDNQ-quantized +model. For every LoRA-targeted module it reports where the delta sits relative +to the quantization grid and what each apply path preserves: + +- requantize path (dequantize + add + requantize, the fallback for + non-factorable families): retention ``rho`` of the intended delta. On-grid + rounding erases sub-step deltas down to a ``2/group_size`` floor, so low-bit + formats (<=6 bits) typically show rho ~= 0.02-0.03. +- factor path (plain LoRA riding the svd side-channel): exact by construction; + the tool verifies each module qualifies and flags families that fall back. +- unquantized modules: the LoRA applies exactly regardless. + +Works offline against a pre-quantized SDNQ repo (stored tensors + config) or +a bf16 repo with simulated quantization settings, so a combination can be +assessed before committing to a quantized checkpoint. + +Examples: + python cli/lora-quant-fidelity.py --model vladmandic/Krea-2-Base-sdnq-hadamard-uint4 --arch krea2 --lora "~/models/Lora/Krea 2/krea2_turbo_distill_r256.safetensors" + python cli/lora-quant-fidelity.py --model CalamitousFelicitousness/Krea-2-Base-Diffusers --arch krea2 --dtype uint4 --lora lora.safetensors --json report.json +""" + +import os +import sys +import json +import argparse + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +os.environ.setdefault('SD_INSTALL_QUIET', '1') + + +def parse_cli(): + parser = argparse.ArgumentParser(description='lora-quant-fidelity') + parser.add_argument('--model', required=True, help='model dir, transformer dir, or org/name repo id') + parser.add_argument('--arch', default='generic', help='lora key resolver: a native arch (e.g. krea2, zimage, f2) or generic') + parser.add_argument('--lora', required=True, nargs='+', help='lora safetensors file(s)') + parser.add_argument('--dtype', default=None, help='simulate quantization of a bf16 repo at this sdnq dtype (e.g. uint4, int8)') + parser.add_argument('--group', type=int, default=0, help='sdnq group_size for simulation') + parser.add_argument('--hadamard-group', type=int, default=256, help='sdnq hadamard group for simulation') + parser.add_argument('--sample', type=int, default=40, help='max modules analyzed per lora (evenly sampled)') + parser.add_argument('--full', action='store_true', help='analyze every matched module') + parser.add_argument('--json', default=None, help='write full report to this json file') + parser.add_argument('--fail-under', type=float, default=None, help='exit 2 when effective fidelity of any lora is below this') + return parser.parse_args() + + +cli_args = parse_cli() +sys.argv = [sys.argv[0]] # sdnext arg parsing during imports must not see tool args (prefix matching eats --model/--lora) + +import modules.cmd_args # pylint: disable=wrong-import-position +import installer # pylint: disable=wrong-import-position +modules.cmd_args.parse_args() +installer.add_args(modules.cmd_args.parser) +modules.cmd_args.parsed, _unknown = modules.cmd_args.parser.parse_known_args([]) + +import torch # pylint: disable=wrong-import-position +from safetensors import safe_open # pylint: disable=wrong-import-position +from rich import print as rprint # pylint: disable=wrong-import-position + +from modules.lora import native_adapter # pylint: disable=wrong-import-position +from modules.lora.lora_load import NATIVE_DISPATCH # pylint: disable=wrong-import-position +from sdnq.quantizer import sdnq_quantize_layer_weight # pylint: disable=wrong-import-position +from sdnq.quant_utils import rotate_hadamard # pylint: disable=wrong-import-position + + +MODEL_ROOTS = [ + os.path.expanduser('~/database/models/huggingface'), + os.path.expanduser('~/database/models/Diffusers'), +] +FACTORABLE_SUFFIX = 'lora' # only plain lora groups are factor-path eligible +device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + + +def resolve_model_dir(spec): + """Return the transformer directory for a local path or org/name repo id.""" + candidates = [spec, os.path.join(spec, 'transformer')] + cache_name = 'models--' + spec.replace('/', '--') + for root in MODEL_ROOTS: + snap_root = os.path.join(root, cache_name, 'snapshots') + if os.path.isdir(snap_root): + for snap in sorted(os.listdir(snap_root), reverse=True): + candidates.append(os.path.join(snap_root, snap, 'transformer')) + candidates.append(os.path.join(snap_root, snap)) + for c in candidates: + if os.path.isfile(os.path.join(c, 'config.json')): + return c + raise SystemExit(f'model not found: {spec}') + + +def resolve_arch(name): + """Return the arch lora module for key resolution, or None for generic matching.""" + if name == 'generic': + return None + path = NATIVE_DISPATCH.get({'flux2': 'f2', 'ernie': 'ernieimage'}.get(name, name)) + if path is None: + raise SystemExit(f'unknown arch {name}; choices: {sorted(NATIVE_DISPATCH)} or generic') + import importlib + return importlib.import_module(path) + + +def map_lora_modules(lora_path, arch_mod): + """Return {model_module_path: (down, up, alpha)} for the file's plain-lora groups plus a family census.""" + with safe_open(lora_path, framework='pt', device='cpu') as f: + state_dict = {k: f.get_tensor(k) for k in f.keys()} + prefixes = getattr(arch_mod, 'KNOWN_PREFIXES', native_adapter.KNOWN_PREFIXES_DEFAULT) + bare = getattr(arch_mod, 'BARE_DIFFUSERS_PREFIXES', ()) + resolve = getattr(arch_mod, 'resolve_targets', None) or (lambda prefix, base: [(base, None)]) + families = {} + for fam, suffixes in (('lora', native_adapter.LORA_SUFFIXES), ('lokr', native_adapter.LOKR_SUFFIXES), ('loha', native_adapter.LOHA_SUFFIXES), ('oft', native_adapter.OFT_SUFFIXES)): + groups = native_adapter.group_by_suffixes(state_dict, suffixes, prefixes=prefixes, bare_diffusers_prefixes=bare) + if fam == 'lora': + groups = {k: w for k, w in groups.items() if 'lora_down.weight' in w and 'lora_up.weight' in w} + else: + groups = {k: w for k, w in groups.items() if native_adapter.has_marker({f'x.{s}': None for s in w}, getattr(native_adapter, f'{fam.upper()}_MARKERS'))} + families[fam] = groups + mapped = {} + for (prefix, base), w in families['lora'].items(): + for path, chunk in native_adapter.resolve_group_targets(resolve, prefix, base): + if chunk is not None: + continue # fused-split groups are arch-handled; out of scope here + alpha = w.get('alpha') + mapped[path] = (w['lora_down.weight'], w['lora_up.weight'], float(alpha) if alpha is not None else None) + return mapped, {fam: len(g) for fam, g in families.items() if fam != 'lora' and len(g) > 0} + + +def resolve_transformer_cls(arch, class_name): + """Prefer an sdnext-owned transformer class over the upstream diffusers one. + + Arches like krea2 keep checkpoint-style module names in their own class; + the diffusers class of the same name expects diffusers-style keys and + cannot load these state dicts. + """ + if arch and class_name: + try: + import importlib + pkg = importlib.import_module(f'pipelines.{ {"zimage": "z_image", "f2": "flux"}.get(arch, arch) }') + for attr in dir(pkg): + if attr.endswith('_SPEC'): + cls = getattr(getattr(pkg, attr), 'cls', None) + if cls is not None and cls.__name__ == class_name: + return cls + except Exception: + pass + return None + + +def load_quantized_model(model_dir, arch=None, class_name=None): + from sdnq.loader import load_sdnq_model + model = load_sdnq_model(model_dir, model_cls=resolve_transformer_cls(arch, class_name), dtype=torch.bfloat16, device='cpu') + layers = {} + for name, module in model.named_modules(): + if getattr(module, 'sdnq_dequantizer', None) is not None: + layers[name] = module + elif module.__class__.__name__ == 'Linear' and getattr(module, 'weight', None) is not None: + layers[name] = module + del model # layer modules own their tensors; the dict keeps them alive + return layers + + +class Bf16Repo: + """Lazy per-module weight access for a sharded bf16 transformer repo.""" + + def __init__(self, model_dir): + self.model_dir = model_dir + index = os.path.join(model_dir, 'diffusion_pytorch_model.safetensors.index.json') + if os.path.isfile(index): + with open(index, encoding='utf-8') as f: + self.weight_map = json.load(f)['weight_map'] + else: + single = os.path.join(model_dir, 'diffusion_pytorch_model.safetensors') + with safe_open(single, framework='pt', device='cpu') as f: + self.weight_map = dict.fromkeys(f.keys(), 'diffusion_pytorch_model.safetensors') + + def get(self, key): + shard = self.weight_map.get(key) + if shard is None: + return None + with safe_open(os.path.join(self.model_dir, shard), framework='pt', device='cpu') as f: + return f.get_tensor(key) + + +def analyze_module(W_dq, deq_params, down, up, alpha): + """Return fidelity metrics for one quantized module and one lora delta.""" + rank = down.shape[0] + scale = (alpha / rank) if alpha is not None else 1.0 + D = (up.to(device, torch.float32) @ down.to(device, torch.float32)) * scale + kw = dict(layer_class_name='Linear', torch_dtype=torch.bfloat16, group_size=deq_params['group_size'], + hadamard_group_size=deq_params['hadamard_group_size'], use_hadamard=deq_params['use_hadamard'], + weights_dtype=deq_params['weights_dtype'], use_svd=False, use_quantized_matmul=False, dequantize_fp32=False) + deq2, data2 = sdnq_quantize_layer_weight(W_dq + D, **kw) + W2 = deq2(data2['weight'], data2['scale'], zero_point=data2['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) + E = W2 - W_dq + nD = D.norm() + rho = float(E.flatten() @ D.flatten() / nD.square()) + resid = float((E - D).norm() / nD) + if deq_params['use_hadamard']: + Dh = rotate_hadamard(D, group_size=deq_params['hadamard_group_size']) + else: + Dh = D + step = data2['scale'].float() + Dg = Dh.unflatten(-1, (step.shape[1], -1)) if step.ndim == 3 else Dh + step_ratio = float((Dg.abs() / step).mean()) + crossers = float((Dg.abs() > step / 2).float().mean()) + return dict(rank=rank, rms_delta=float(D.pow(2).mean().sqrt()), rms_weight=float(W_dq.pow(2).mean().sqrt()), + step_ratio=step_ratio, crossers=crossers, requant_rho=rho, requant_resid=resid) + + +def main(): + args = cli_args + model_dir = resolve_model_dir(args.model) + arch_mod = resolve_arch(args.arch) + with open(os.path.join(model_dir, 'config.json'), encoding='utf-8') as f: + model_config = json.load(f) + pre_quantized = model_config.get('quantization_config') is not None + + quant_layers, bf16_repo = {}, None + if pre_quantized: + rprint(f'model: "{model_dir}" pre-quantized={pre_quantized}') + quant_layers = load_quantized_model(model_dir, arch=args.arch, class_name=model_config.get('_class_name')) + else: + bf16_repo = Bf16Repo(model_dir) + if args.dtype is None: + rprint('model is not quantized and no --dtype given: loras apply exactly, nothing to analyze') + return 0 + rprint(f'model: "{model_dir}" simulating dtype={args.dtype} group={args.group} hadamard={args.hadamard_group}') + + report = {'model': model_dir, 'pre_quantized': pre_quantized, 'loras': []} + worst_effective = 1.0 + for lora_path in args.lora: + lora_path = os.path.expanduser(lora_path) + mapped, other_families = map_lora_modules(lora_path, arch_mod) + rows, unquantized, unmatched = [], [], [] + keys = sorted(mapped) + if not args.full and len(keys) > args.sample: + keys = keys[::max(1, len(keys) // args.sample)][:args.sample] + for path in keys: + down, up, alpha = mapped[path] + if down.ndim != 2 or up.ndim != 2: + continue + if pre_quantized: + layer = quant_layers.get(path) + if layer is None: + unmatched.append(path) + continue + deq = getattr(layer, 'sdnq_dequantizer', None) + if deq is None: + unquantized.append(path) + continue + W_dq = deq(layer.weight, layer.scale, zero_point=layer.zero_point, svd_up=layer.svd_up, svd_down=layer.svd_down, + skip_quantized_matmul=deq.use_quantized_matmul, dtype=torch.float32, skip_compile=True).to(device) + params = dict(weights_dtype=deq.weights_dtype, group_size=deq.group_size, hadamard_group_size=deq.hadamard_group_size, use_hadamard=deq.use_hadamard) + else: + W = bf16_repo.get(f'{path}.weight') + if W is None: + unmatched.append(path) + continue + deq0, data0 = sdnq_quantize_layer_weight(W.to(device, torch.float32), layer_class_name='Linear', weights_dtype=args.dtype, + group_size=args.group, hadamard_group_size=args.hadamard_group, use_hadamard=args.hadamard_group > 0, + use_svd=False, use_quantized_matmul=False, dequantize_fp32=False, torch_dtype=torch.bfloat16) + W_dq = deq0(data0['weight'], data0['scale'], zero_point=data0['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) + params = dict(weights_dtype=args.dtype, group_size=deq0.group_size, hadamard_group_size=deq0.hadamard_group_size, use_hadamard=deq0.use_hadamard) + row = analyze_module(W_dq, params, down, up, alpha) + row['module'] = path + row['dtype'] = params['weights_dtype'] + rows.append(row) + del W_dq + if device.type == 'cuda': + torch.cuda.empty_cache() + + rhos = sorted(r['requant_rho'] for r in rows) + median_rho = rhos[len(rhos) // 2] if rhos else 1.0 + effective = 1.0 if len(other_families) == 0 else median_rho # factor path covers plain lora exactly + worst_effective = min(worst_effective, effective) + rprint(f'\nlora: "{os.path.basename(lora_path)}" targets={len(mapped)} analyzed={len(rows)} unquantized={len(unquantized)} unmatched={len(unmatched)} other_families={other_families or "none"}') + rprint(f' requantize path: median rho={median_rho:.3f} (fallback families would land at this fidelity)') + rprint(f' factor path: {"exact (plain lora, all analyzed modules eligible)" if len(other_families) == 0 else "partial: non-lora families fall back to requantize"}') + if rows: + worst = sorted(rows, key=lambda r: r['requant_rho'])[:5] + rprint(' lowest-retention modules (requantize path):') + for r in worst: + rprint(f' {r["module"]:52s} dtype={r["dtype"]} step-ratio={r["step_ratio"]:.3f} crossers={r["crossers"]*100:5.1f}% rho={r["requant_rho"]:.3f}') + report['loras'].append({'file': lora_path, 'targets': len(mapped), 'unquantized': unquantized, 'unmatched': unmatched, + 'other_families': other_families, 'median_requant_rho': median_rho, 'effective_fidelity': effective, 'modules': rows}) + + if args.json: + with open(args.json, 'w', encoding='utf-8') as f: + json.dump(report, f, indent=2) + rprint(f'\nreport: "{args.json}"') + if args.fail_under is not None and worst_effective < args.fail_under: + rprint(f'FAIL: effective fidelity {worst_effective:.3f} < {args.fail_under}') + return 2 + return 0 + + +if __name__ == '__main__': + with torch.inference_mode(): + sys.exit(main()) From 2fcd99a4092729cb6655f65df8b4ddc453245559 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 03:04:58 +0100 Subject: [PATCH 015/270] test(lora): cover sdnq config matrix in factor path suite Checkpoints quantized without hadamard must attach factors unrotated; checkpoints carrying their own svd correction must keep it under apply and get the original factors back on remove. Both pinned in both svd layouts. --- test/test-sdnq-lora-factors.py | 51 +++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 7eb0c2943..6a91380a2 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -10,9 +10,11 @@ for the per-model analyzer): floor on uint4, while int8 retains most of the delta. Guards against the erasure law silently changing. - The factor path (modules/lora/lora_sdnq.py) applies plain LoRA deltas - through the svd side-channel exactly, in both svd layouts, with exact - stacking, multiplier scaling and bit-exact removal, wired through the real - networks.network_activate / network_deactivate control flow. + through the svd side-channel exactly, in both svd layouts and across + quantization configs (hadamard on/off, checkpoint svd correction present + or absent), with exact stacking, multiplier scaling and bit-exact + removal, wired through the real networks.network_activate / + network_deactivate control flow. - Multi-LoRA set transitions keep the base pristine: a layer that fell back to requantize (mixed factorable/non-factorable set) restores from backup before re-entering the factor path, layers targeted by only some of the @@ -94,13 +96,13 @@ def run_test(cat: str, fn): traceback.print_exc() -def build_layer(weights_dtype='uint4', use_quantized_matmul=False, seed=0): +def build_layer(weights_dtype='uint4', use_quantized_matmul=False, seed=0, use_hadamard=True, use_svd=False): torch.manual_seed(seed) lin = torch.nn.Linear(IN_F, OUT_F, bias=False, dtype=torch.bfloat16, device=DEVICE) with torch.no_grad(): lin.weight.copy_(torch.randn(OUT_F, IN_F, device=DEVICE) * 0.04) - cfg = SDNQConfig(weights_dtype=weights_dtype, group_size=0, hadamard_group_size=256, use_hadamard=True, - use_svd=False, use_quantized_matmul=use_quantized_matmul, dequantize_fp32=False, + cfg = SDNQConfig(weights_dtype=weights_dtype, group_size=0, hadamard_group_size=256, use_hadamard=use_hadamard, + use_svd=use_svd, svd_rank=32, use_quantized_matmul=use_quantized_matmul, dequantize_fp32=False, quantization_device=str(DEVICE), return_device=str(DEVICE)) layer, _ = sdnq_quantize_layer(lin, cfg, torch_dtype=torch.bfloat16, param_name='test.weight') layer.network_layer_name = 'lora_transformer_test' @@ -268,6 +270,41 @@ def test_dora_falls_back(): return True +def assert_factor_roundtrip(layer, tag): + """Apply-exact plus bit-exact removal on the given layer, whatever its quantization config.""" + A, B, D = make_delta() + Wdq0 = dq(layer) + orig_up = layer.svd_up + l_common.loaded_networks.clear() + l_common.loaded_networks.append(make_net('one', layer, A, B)) + wanted = (('one', 1.0, 1.0, None),) + assert lora_sdnq.factor_candidate(layer, layer.network_layer_name, wanted) is True, f'{tag}: not a factor candidate' + assert lora_sdnq.apply_factors(layer, layer.network_layer_name, wanted) is True, f'{tag}: apply failed' + E = dq(layer) - Wdq0 + rho = rho_of(E, D) + resid = float((E - D).norm() / D.norm()) + assert rho > 0.99 and resid < 0.2, f'{tag}: rho={rho:.4f} resid={resid:.4f}' + assert lora_sdnq.remove_factors(layer) and torch.equal(dq(layer), Wdq0), f'{tag}: remove not bit-exact' + assert layer.svd_up is orig_up, f'{tag}: original svd factors not restored' + l_common.loaded_networks.clear() + + +def test_no_hadamard_checkpoint(): + """Checkpoints quantized without hadamard: factors attach unrotated.""" + assert_factor_roundtrip(build_layer('uint4', use_hadamard=False), 'plain') + assert_factor_roundtrip(build_layer('uint4', use_hadamard=False, use_quantized_matmul=True), 'matmul') + return True + + +def test_checkpoint_svd_factors_preserved(): + """Checkpoints quantized with their own svd correction keep it under apply/remove.""" + layer = build_layer('uint4', use_svd=True) + assert layer.svd_up is not None, 'quantizer produced no svd correction' + assert_factor_roundtrip(layer, 'plain') + assert_factor_roundtrip(build_layer('uint4', use_svd=True, use_quantized_matmul=True), 'matmul') + return True + + # ============================================================ # Tests - memory accounting across apply modes # ============================================================ @@ -504,7 +541,7 @@ def run_tests(): for fn in [test_uint4_erases_substep_delta, test_int8_retains_delta]: run_test(CAT_LAW, fn) log.warning('=== Factor path ===') - for fn in [test_apply_exact_and_remove_bitexact, test_multiplier_and_alpha_scaling, test_stacking_two_networks, test_matmul_layout_transposed, test_dora_falls_back]: + for fn in [test_apply_exact_and_remove_bitexact, test_multiplier_and_alpha_scaling, test_stacking_two_networks, test_matmul_layout_transposed, test_dora_falls_back, test_no_hadamard_checkpoint, test_checkpoint_svd_factors_preserved]: run_test(CAT_FACTOR, fn) log.warning('=== Memory accounting ===') for fn in [test_factor_path_memory_is_factors_only, test_backup_mode_clones_full_quant_state, test_fuse_mode_marker_takes_no_memory]: From 6ea2c50d5d881cecc93022a74ce3eacd71a7c562 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 04:18:20 +0100 Subject: [PATCH 016/270] fix(cli): measure every adapter family in the fidelity analyzer The analyzer only mapped plain-lora groups, so a file carrying no plain lora (a pure lokr, for example) analyzed zero modules and fell through to a 1.0 default: it reported perfect fidelity for exactly the files that degrade most. Measured on the shipped krea 2 uint4 checkpoint, those files land between 0.04 and 0.34. Every targeted module is now rebuilt with the loader's own module class and its delta read from the production calc_updown, so lokr, loha, oft, full, ia3, glora, norm and the dora / dense-bias / diff_b variants are measured as they apply; factor-path eligibility is decided by calling the loader's own predicate. Modules carrying several families sum their deltas the way the loader stacks them, and a family the tool cannot rebuild is reported instead of counting as clean. - report per-module applied fidelity (1.0 on the factor path, measured rho on the requantize path) as a median and an energy-weighted mean - add --dtype bf16 to measure the unquantized reference rather than assert it - drop the per-module empty_cache: it cost 16ms per module against 1ms of reuse, and the caching allocator already reuses the buffers - keep shard handles open across modules --- cli/lora-quant-fidelity.py | 246 +++++++++++++++++++++++++------------ 1 file changed, 169 insertions(+), 77 deletions(-) diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py index e39af8f14..1219d7189 100644 --- a/cli/lora-quant-fidelity.py +++ b/cli/lora-quant-fidelity.py @@ -2,17 +2,23 @@ """LoRA fidelity analyzer for quantized base models. Measures, in weight space, how faithfully a LoRA lands on an SDNQ-quantized -model. For every LoRA-targeted module it reports where the delta sits relative -to the quantization grid and what each apply path preserves: +model. Every targeted module is rebuilt with the loader's own module class and +its delta taken from the production ``calc_updown``, so all adapter families +(LoRA, LoKR, LoHA, OFT, full, IA3, GLoRA, norm, plus DoRA and bias variants) +are measured as they would actually apply: -- requantize path (dequantize + add + requantize, the fallback for - non-factorable families): retention ``rho`` of the intended delta. On-grid - rounding erases sub-step deltas down to a ``2/group_size`` floor, so low-bit - formats (<=6 bits) typically show rho ~= 0.02-0.03. -- factor path (plain LoRA riding the svd side-channel): exact by construction; - the tool verifies each module qualifies and flags families that fall back. +- factor path (plain additive LoRA riding the svd side-channel): exact by + construction. Eligibility is decided by the loader's own predicate. +- requantize path (dequantize + add + requantize, taken by every other + family): retention ``rho`` of the intended delta. On-grid rounding erases + sub-step deltas down to a ``2/group_size`` floor, so low-bit formats + (<=6 bits) typically show rho ~= 0.02-0.03. - unquantized modules: the LoRA applies exactly regardless. +Reported fidelity is per-module ``applied_rho`` (1.0 when the module takes the +factor path, measured rho when it falls back), summarized as a median and an +energy-weighted mean over the file's modules. + Works offline against a pre-quantized SDNQ repo (stored tensors + config) or a bf16 repo with simulated quantization settings, so a combination can be assessed before committing to a quantized checkpoint. @@ -36,13 +42,13 @@ def parse_cli(): parser.add_argument('--model', required=True, help='model dir, transformer dir, or org/name repo id') parser.add_argument('--arch', default='generic', help='lora key resolver: a native arch (e.g. krea2, zimage, f2) or generic') parser.add_argument('--lora', required=True, nargs='+', help='lora safetensors file(s)') - parser.add_argument('--dtype', default=None, help='simulate quantization of a bf16 repo at this sdnq dtype (e.g. uint4, int8)') + parser.add_argument('--dtype', default=None, help='simulate quantization of a bf16 repo at this sdnq dtype (e.g. uint4, int8); bf16 measures the unquantized reference') parser.add_argument('--group', type=int, default=0, help='sdnq group_size for simulation') parser.add_argument('--hadamard-group', type=int, default=256, help='sdnq hadamard group for simulation') parser.add_argument('--sample', type=int, default=40, help='max modules analyzed per lora (evenly sampled)') parser.add_argument('--full', action='store_true', help='analyze every matched module') parser.add_argument('--json', default=None, help='write full report to this json file') - parser.add_argument('--fail-under', type=float, default=None, help='exit 2 when effective fidelity of any lora is below this') + parser.add_argument('--fail-under', type=float, default=None, help='exit 2 when median applied fidelity of any lora is below this') return parser.parse_args() @@ -59,7 +65,7 @@ import torch # pylint: disable=wrong-import-position from safetensors import safe_open # pylint: disable=wrong-import-position from rich import print as rprint # pylint: disable=wrong-import-position -from modules.lora import native_adapter # pylint: disable=wrong-import-position +from modules.lora import native_adapter, network, network_lora, network_lokr, network_hada, network_oft, network_full, network_ia3, network_glora, network_norm, lora_sdnq # pylint: disable=wrong-import-position from modules.lora.lora_load import NATIVE_DISPATCH # pylint: disable=wrong-import-position from sdnq.quantizer import sdnq_quantize_layer_weight # pylint: disable=wrong-import-position from sdnq.quant_utils import rotate_hadamard # pylint: disable=wrong-import-position @@ -69,9 +75,30 @@ MODEL_ROOTS = [ os.path.expanduser('~/database/models/huggingface'), os.path.expanduser('~/database/models/Diffusers'), ] -FACTORABLE_SUFFIX = 'lora' # only plain lora groups are factor-path eligible device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') +# every adapter family the native loader can build, with the module class that owns its +# apply-time math. deltas are taken from the production calc_updown so the tool cannot +# drift from the loader, and eligibility is decided by the production predicate itself. +FAMILY_SPECS = ( + ('lora', network_lora.NetworkModuleLora, native_adapter.LORA_SUFFIXES, native_adapter.LORA_MARKERS), + ('lokr', network_lokr.NetworkModuleLokr, native_adapter.LOKR_SUFFIXES, native_adapter.LOKR_MARKERS), + ('loha', network_hada.NetworkModuleHada, native_adapter.LOHA_SUFFIXES, native_adapter.LOHA_MARKERS), + ('oft', network_oft.NetworkModuleOFT, native_adapter.OFT_SUFFIXES, native_adapter.OFT_MARKERS), + ('full', network_full.NetworkModuleFull, native_adapter.FULL_SUFFIXES, native_adapter.FULL_MARKERS), + ('ia3', network_ia3.NetworkModuleIa3, native_adapter.IA3_SUFFIXES, native_adapter.IA3_MARKERS), + ('glora', network_glora.NetworkModuleGLora, native_adapter.GLORA_SUFFIXES, native_adapter.GLORA_MARKERS), + ('norm', network_norm.NetworkModuleNorm, native_adapter.NORM_SUFFIXES, native_adapter.NORM_MARKERS), +) + + +class StubOnDisk: + def __init__(self, path): + self.filename = path + self.name = os.path.splitext(os.path.basename(path))[0] + self.shorthash = '' + self.sd_version = 'unknown' + def resolve_model_dir(spec): """Return the transformer directory for a local path or org/name repo id.""" @@ -101,28 +128,51 @@ def resolve_arch(name): def map_lora_modules(lora_path, arch_mod): - """Return {model_module_path: (down, up, alpha)} for the file's plain-lora groups plus a family census.""" + """Return {model_module_path: (family, weights)} across every adapter family, plus a census. + + Grouping mirrors the native loader: a family is only considered when its + marker is present, and groups resolve to model paths through the arch's own + resolver. Fused-split chunks are counted but not analyzed (their apply-time + math is arch-owned). + """ with safe_open(lora_path, framework='pt', device='cpu') as f: state_dict = {k: f.get_tensor(k) for k in f.keys()} prefixes = getattr(arch_mod, 'KNOWN_PREFIXES', native_adapter.KNOWN_PREFIXES_DEFAULT) bare = getattr(arch_mod, 'BARE_DIFFUSERS_PREFIXES', ()) resolve = getattr(arch_mod, 'resolve_targets', None) or (lambda prefix, base: [(base, None)]) - families = {} - for fam, suffixes in (('lora', native_adapter.LORA_SUFFIXES), ('lokr', native_adapter.LOKR_SUFFIXES), ('loha', native_adapter.LOHA_SUFFIXES), ('oft', native_adapter.OFT_SUFFIXES)): + mapped, census, chunked = {}, {}, 0 + for fam, _cls, suffixes, markers in FAMILY_SPECS: + if not native_adapter.has_marker(state_dict, markers): + continue groups = native_adapter.group_by_suffixes(state_dict, suffixes, prefixes=prefixes, bare_diffusers_prefixes=bare) if fam == 'lora': groups = {k: w for k, w in groups.items() if 'lora_down.weight' in w and 'lora_up.weight' in w} else: - groups = {k: w for k, w in groups.items() if native_adapter.has_marker({f'x.{s}': None for s in w}, getattr(native_adapter, f'{fam.upper()}_MARKERS'))} - families[fam] = groups - mapped = {} - for (prefix, base), w in families['lora'].items(): - for path, chunk in native_adapter.resolve_group_targets(resolve, prefix, base): - if chunk is not None: - continue # fused-split groups are arch-handled; out of scope here - alpha = w.get('alpha') - mapped[path] = (w['lora_down.weight'], w['lora_up.weight'], float(alpha) if alpha is not None else None) - return mapped, {fam: len(g) for fam, g in families.items() if fam != 'lora' and len(g) > 0} + groups = {k: w for k, w in groups.items() if native_adapter.has_marker({f'x.{s}': None for s in w}, markers)} + if not groups: + continue + census[fam] = len(groups) + for (prefix, base), w in groups.items(): + for path, chunk in native_adapter.resolve_group_targets(resolve, prefix, base): + if chunk is not None: + chunked += 1 + continue + mapped.setdefault(path, []).append((fam, w)) # a module can carry several families; the loader applies each + return mapped, census, chunked + + +def make_stub(shape, dtype=torch.bfloat16): + """Minimal sd_module standing in for a bf16 repo weight: the module classes key off its type and shape.""" + if len(shape) == 2: + return torch.nn.Linear(shape[1], shape[0], bias=False, dtype=dtype, device='meta') + return torch.nn.Conv2d(shape[1], shape[0], shape[2:], bias=False, dtype=dtype, device='meta') + + +def build_module(fam, path, w, net, sd_module): + """Instantiate the family's production NetworkModule for one target.""" + cls = next(c for f, c, _s, _m in FAMILY_SPECS if f == fam) + weights = network.NetworkWeights(network_key=path, sd_key=path, w=w, sd_module=sd_module) + return cls(net, weights) def resolve_transformer_cls(arch, class_name): @@ -164,6 +214,7 @@ class Bf16Repo: def __init__(self, model_dir): self.model_dir = model_dir + self.handles = {} # reopening a multi-gb shard per module dominates runtime over many loras index = os.path.join(model_dir, 'diffusion_pytorch_model.safetensors.index.json') if os.path.isfile(index): with open(index, encoding='utf-8') as f: @@ -177,34 +228,49 @@ class Bf16Repo: shard = self.weight_map.get(key) if shard is None: return None - with safe_open(os.path.join(self.model_dir, shard), framework='pt', device='cpu') as f: - return f.get_tensor(key) + f = self.handles.get(shard) + if f is None: + f = safe_open(os.path.join(self.model_dir, shard), framework='pt', device='cpu') + self.handles[shard] = f + return f.get_tensor(key) -def analyze_module(W_dq, deq_params, down, up, alpha): - """Return fidelity metrics for one quantized module and one lora delta.""" - rank = down.shape[0] - scale = (alpha / rank) if alpha is not None else 1.0 - D = (up.to(device, torch.float32) @ down.to(device, torch.float32)) * scale - kw = dict(layer_class_name='Linear', torch_dtype=torch.bfloat16, group_size=deq_params['group_size'], - hadamard_group_size=deq_params['hadamard_group_size'], use_hadamard=deq_params['use_hadamard'], - weights_dtype=deq_params['weights_dtype'], use_svd=False, use_quantized_matmul=False, dequantize_fp32=False) - deq2, data2 = sdnq_quantize_layer_weight(W_dq + D, **kw) - W2 = deq2(data2['weight'], data2['scale'], zero_point=data2['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) - E = W2 - W_dq +def analyze_module(W_dq, deq_params, mods): + """Return fidelity metrics for one quantized module and the adapters targeting it. + + Deltas come from each module's production calc_updown and sum the way the + loader stacks them, so every family (and dora / dense-bias / diff_b variant) + is measured as applied. A module is factor-path eligible only when every + contribution is a plain additive lora. + """ + D = None + for mod in mods: + d = mod.calc_updown(W_dq)[0].to(device, torch.float32).reshape(W_dq.shape) + D = d if D is None else D + d nD = D.norm() + control = deq_params['weights_dtype'] == 'bf16' # unquantized reference: the delta just rounds into bf16 + factor_eligible = (not control) and all(lora_sdnq.get_module_factors(m, device, torch.bfloat16) is not None for m in mods) + step_ratio, crossers = None, None + if control: + W2 = (W_dq + D).to(torch.bfloat16).float() + else: + kw = dict(layer_class_name='Linear', torch_dtype=torch.bfloat16, group_size=deq_params['group_size'], + hadamard_group_size=deq_params['hadamard_group_size'], use_hadamard=deq_params['use_hadamard'], + weights_dtype=deq_params['weights_dtype'], use_svd=False, use_quantized_matmul=False, dequantize_fp32=False) + deq2, data2 = sdnq_quantize_layer_weight(W_dq + D, **kw) + W2 = deq2(data2['weight'], data2['scale'], zero_point=data2['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) + Dh = rotate_hadamard(D, group_size=deq_params['hadamard_group_size']) if deq_params['use_hadamard'] else D + step = data2['scale'].float() + Dg = Dh.unflatten(-1, (step.shape[1], -1)) if step.ndim == 3 else Dh + step_ratio = float((Dg.abs() / step).mean()) + crossers = float((Dg.abs() > step / 2).float().mean()) + E = W2 - W_dq rho = float(E.flatten() @ D.flatten() / nD.square()) resid = float((E - D).norm() / nD) - if deq_params['use_hadamard']: - Dh = rotate_hadamard(D, group_size=deq_params['hadamard_group_size']) - else: - Dh = D - step = data2['scale'].float() - Dg = Dh.unflatten(-1, (step.shape[1], -1)) if step.ndim == 3 else Dh - step_ratio = float((Dg.abs() / step).mean()) - crossers = float((Dg.abs() > step / 2).float().mean()) - return dict(rank=rank, rms_delta=float(D.pow(2).mean().sqrt()), rms_weight=float(W_dq.pow(2).mean().sqrt()), - step_ratio=step_ratio, crossers=crossers, requant_rho=rho, requant_resid=resid) + return dict(rank=getattr(mods[0], 'dim', None), rms_delta=float(D.pow(2).mean().sqrt()), rms_weight=float(W_dq.pow(2).mean().sqrt()), + step_ratio=step_ratio, crossers=crossers, requant_rho=rho, requant_resid=resid, + factor_eligible=factor_eligible, applied_rho=1.0 if factor_eligible else rho, + delta_energy=float(nD.square())) def main(): @@ -230,15 +296,14 @@ def main(): worst_effective = 1.0 for lora_path in args.lora: lora_path = os.path.expanduser(lora_path) - mapped, other_families = map_lora_modules(lora_path, arch_mod) - rows, unquantized, unmatched = [], [], [] + mapped, census, chunked = map_lora_modules(lora_path, arch_mod) + net = network.Network(os.path.basename(lora_path), StubOnDisk(lora_path)) + rows, unquantized, unmatched, failed = [], [], [], [] keys = sorted(mapped) if not args.full and len(keys) > args.sample: keys = keys[::max(1, len(keys) // args.sample)][:args.sample] for path in keys: - down, up, alpha = mapped[path] - if down.ndim != 2 or up.ndim != 2: - continue + entries = mapped[path] if pre_quantized: layer = quant_layers.get(path) if layer is None: @@ -251,38 +316,65 @@ def main(): W_dq = deq(layer.weight, layer.scale, zero_point=layer.zero_point, svd_up=layer.svd_up, svd_down=layer.svd_down, skip_quantized_matmul=deq.use_quantized_matmul, dtype=torch.float32, skip_compile=True).to(device) params = dict(weights_dtype=deq.weights_dtype, group_size=deq.group_size, hadamard_group_size=deq.hadamard_group_size, use_hadamard=deq.use_hadamard) + sd_module = layer else: W = bf16_repo.get(f'{path}.weight') if W is None: unmatched.append(path) continue - deq0, data0 = sdnq_quantize_layer_weight(W.to(device, torch.float32), layer_class_name='Linear', weights_dtype=args.dtype, - group_size=args.group, hadamard_group_size=args.hadamard_group, use_hadamard=args.hadamard_group > 0, - use_svd=False, use_quantized_matmul=False, dequantize_fp32=False, torch_dtype=torch.bfloat16) - W_dq = deq0(data0['weight'], data0['scale'], zero_point=data0['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) - params = dict(weights_dtype=args.dtype, group_size=deq0.group_size, hadamard_group_size=deq0.hadamard_group_size, use_hadamard=deq0.use_hadamard) - row = analyze_module(W_dq, params, down, up, alpha) - row['module'] = path - row['dtype'] = params['weights_dtype'] + if args.dtype == 'bf16': + W_dq = W.to(device, torch.bfloat16).float() + params = dict(weights_dtype='bf16', group_size=0, hadamard_group_size=0, use_hadamard=False) + else: + deq0, data0 = sdnq_quantize_layer_weight(W.to(device, torch.float32), layer_class_name='Linear', weights_dtype=args.dtype, + group_size=args.group, hadamard_group_size=args.hadamard_group, use_hadamard=args.hadamard_group > 0, + use_svd=False, use_quantized_matmul=False, dequantize_fp32=False, torch_dtype=torch.bfloat16) + W_dq = deq0(data0['weight'], data0['scale'], zero_point=data0['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) + params = dict(weights_dtype=args.dtype, group_size=deq0.group_size, hadamard_group_size=deq0.hadamard_group_size, use_hadamard=deq0.use_hadamard) + sd_module = make_stub(W.shape) + if W_dq.ndim != 2: + continue + try: + mods = [build_module(fam, path, w, net, sd_module) for fam, w in entries] + row = analyze_module(W_dq, params, mods) + except Exception as e: # a family the tool cannot rebuild must not read as a clean module + failed.append(f'{path}: {type(e).__name__}: {e}') + del W_dq + continue + row.update(module=path, dtype=params['weights_dtype'], family='+'.join(f for f, _w in entries)) rows.append(row) - del W_dq - if device.type == 'cuda': - torch.cuda.empty_cache() + del W_dq # the caching allocator reuses these; emptying it per module costs more than it saves - rhos = sorted(r['requant_rho'] for r in rows) - median_rho = rhos[len(rhos) // 2] if rhos else 1.0 - effective = 1.0 if len(other_families) == 0 else median_rho # factor path covers plain lora exactly - worst_effective = min(worst_effective, effective) - rprint(f'\nlora: "{os.path.basename(lora_path)}" targets={len(mapped)} analyzed={len(rows)} unquantized={len(unquantized)} unmatched={len(unmatched)} other_families={other_families or "none"}') - rprint(f' requantize path: median rho={median_rho:.3f} (fallback families would land at this fidelity)') - rprint(f' factor path: {"exact (plain lora, all analyzed modules eligible)" if len(other_families) == 0 else "partial: non-lora families fall back to requantize"}') - if rows: - worst = sorted(rows, key=lambda r: r['requant_rho'])[:5] - rprint(' lowest-retention modules (requantize path):') + applied = sorted(r['applied_rho'] for r in rows) + median_applied = applied[len(applied) // 2] if applied else None + energy = sum(r['delta_energy'] for r in rows) + weighted = (sum(r['applied_rho'] * r['delta_energy'] for r in rows) / energy) if energy > 0 else None + n_exact = sum(1 for r in rows if r['factor_eligible']) + fb = [r['requant_rho'] for r in rows if not r['factor_eligible']] + fb_median = sorted(fb)[len(fb) // 2] if fb else None + if median_applied is not None: + worst_effective = min(worst_effective, median_applied) + rprint(f'\nlora: "{os.path.basename(lora_path)}" families={census or "none"} targets={len(mapped)} analyzed={len(rows)} exact={n_exact} fallback={len(fb)} unquantized={len(unquantized)} unmatched={len(unmatched)} chunked={chunked} failed={len(failed)}') + if median_applied is None: + rprint(' no analyzable modules: nothing measured') + else: + rprint(f' applied fidelity: median={median_applied:.3f} energy-weighted={weighted:.3f}' + (f' (fallback modules land at median rho={fb_median:.3f})' if fb_median is not None else '')) + for f in failed[:3]: + rprint(f' [red]could not rebuild[/red]: {f}') + if fb: + worst = sorted((r for r in rows if not r['factor_eligible']), key=lambda r: r['requant_rho'])[:5] + rprint(' lowest-retention modules:') for r in worst: - rprint(f' {r["module"]:52s} dtype={r["dtype"]} step-ratio={r["step_ratio"]:.3f} crossers={r["crossers"]*100:5.1f}% rho={r["requant_rho"]:.3f}') - report['loras'].append({'file': lora_path, 'targets': len(mapped), 'unquantized': unquantized, 'unmatched': unmatched, - 'other_families': other_families, 'median_requant_rho': median_rho, 'effective_fidelity': effective, 'modules': rows}) + grid = f'step-ratio={r["step_ratio"]:.3f} crossers={r["crossers"]*100:5.1f}%' if r['step_ratio'] is not None else 'unquantized reference' + rprint(f' {r["module"]:48s} fam={r["family"]:5s} dtype={r["dtype"]} {grid} rho={r["requant_rho"]:.3f}') + n_targets = len(mapped) + del mapped, net + if device.type == 'cuda': + torch.cuda.empty_cache() # once per file, after its modules are done + report['loras'].append({'file': lora_path, 'families': census, 'targets': n_targets, 'unquantized': unquantized, + 'unmatched': unmatched, 'chunked': chunked, 'failed': failed, + 'exact_modules': n_exact, 'fallback_modules': len(fb), 'fallback_median_rho': fb_median, + 'median_applied_rho': median_applied, 'weighted_applied_rho': weighted, 'modules': rows}) if args.json: with open(args.json, 'w', encoding='utf-8') as f: From 329d69f5dff483d3a55d2aee359a886ae075c70a Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 04:52:27 +0100 Subject: [PATCH 017/270] fix(cli): match module paths the way the loader does Kohya-style files carry an already-underscored base (lora_unet_layers_0_ mlp_gate_proj), which the loader resolves by comparing network_prefix + path.replace('.', '_') against each module's stamped name, so both sides are underscored and the file loads. The analyzer instead looked the base up as a literal dotted module path, so every module of such a file was reported unmatched: 76 files in a local collection, including 36 of 57 anima and 5 of 10 chroma. Fall back to a stamped-name index when the direct lookup misses. Dotted bases are unaffected. --- cli/lora-quant-fidelity.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py index 1219d7189..8b8051d95 100644 --- a/cli/lora-quant-fidelity.py +++ b/cli/lora-quant-fidelity.py @@ -161,6 +161,17 @@ def map_lora_modules(lora_path, arch_mod): return mapped, census, chunked +def stamp_index(paths): + """Map each module path to its stamped form, the way the loader matches. + + The loader compares ``network_prefix + path.replace('.', '_')`` against each + module's stamped ``network_layer_name``, so kohya-style ``lora_unet_`` keys + (whose base arrives already underscored) resolve fine there. Matching on the + stamped form reproduces that and keeps dotted bases working unchanged. + """ + return {p.replace('.', '_'): p for p in paths} + + def make_stub(shape, dtype=torch.bfloat16): """Minimal sd_module standing in for a bf16 repo weight: the module classes key off its type and shape.""" if len(shape) == 2: @@ -282,11 +293,14 @@ def main(): pre_quantized = model_config.get('quantization_config') is not None quant_layers, bf16_repo = {}, None + quant_stamps, bf16_stamps = {}, {} if pre_quantized: rprint(f'model: "{model_dir}" pre-quantized={pre_quantized}') quant_layers = load_quantized_model(model_dir, arch=args.arch, class_name=model_config.get('_class_name')) + quant_stamps = stamp_index(quant_layers) else: bf16_repo = Bf16Repo(model_dir) + bf16_stamps = stamp_index(k[:-len('.weight')] for k in bf16_repo.weight_map if k.endswith('.weight')) if args.dtype is None: rprint('model is not quantized and no --dtype given: loras apply exactly, nothing to analyze') return 0 @@ -305,7 +319,7 @@ def main(): for path in keys: entries = mapped[path] if pre_quantized: - layer = quant_layers.get(path) + layer = quant_layers.get(path) or quant_layers.get(quant_stamps.get(path.replace('.', '_'), '')) if layer is None: unmatched.append(path) continue @@ -319,6 +333,8 @@ def main(): sd_module = layer else: W = bf16_repo.get(f'{path}.weight') + if W is None: + W = bf16_repo.get(f'{bf16_stamps.get(path.replace(".", "_"), "")}.weight') if W is None: unmatched.append(path) continue From 0b606b8b2ab50d8f63d357648ebb8e84079af544 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 06:20:26 +0100 Subject: [PATCH 018/270] fix(cli): replicate the loader's requantize and survive non-matrix targets Three defects surfaced by running the analyzer over a full local collection against shipped checkpoints. The requantize path hardcoded use_svd=False, but network_add_weights requantizes with the layer's own svd setting and rank. On an svd checkpoint the dequantized weight is not on the plain integer grid, so requantizing without svd produced an error dominated by the discarded correction and roughly orthogonal to the delta, which read back as a retention near 1.0 on a grid where the delta is 0.005 of a step. Thread use_svd, svd_rank and svd_steps through and reuse the returned factors. Targets whose weight is not a matrix (norm and scale parameters, 205 of them in one z-image extraction) reached the quantizer and the module stub, both of which unpack two dimensions and raised. Skip and count them before either. An all-zero delta (some full-rank extractions ship empty .diff) divided by its own norm and reported nan; its retention is undefined rather than erased, so it is excluded from the medians and counted. --- cli/lora-quant-fidelity.py | 41 ++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py index 8b8051d95..807e663ca 100644 --- a/cli/lora-quant-fidelity.py +++ b/cli/lora-quant-fidelity.py @@ -261,15 +261,24 @@ def analyze_module(W_dq, deq_params, mods): nD = D.norm() control = deq_params['weights_dtype'] == 'bf16' # unquantized reference: the delta just rounds into bf16 factor_eligible = (not control) and all(lora_sdnq.get_module_factors(m, device, torch.bfloat16) is not None for m in mods) + if float(nD) == 0.0: # an all-zero delta (some full-rank extractions carry empty .diff): retention is undefined, not erased + return dict(rank=getattr(mods[0], 'dim', None), rms_delta=0.0, rms_weight=float(W_dq.pow(2).mean().sqrt()), + step_ratio=None, crossers=None, requant_rho=None, requant_resid=None, + factor_eligible=factor_eligible, applied_rho=None, delta_energy=0.0) step_ratio, crossers = None, None if control: W2 = (W_dq + D).to(torch.bfloat16).float() else: + # mirror network_add_weights: it requantizes with the layer's own svd setting and rank, + # and an svd checkpoint's dequantized weight is not on the plain integer grid + use_svd = deq_params.get('use_svd', False) kw = dict(layer_class_name='Linear', torch_dtype=torch.bfloat16, group_size=deq_params['group_size'], hadamard_group_size=deq_params['hadamard_group_size'], use_hadamard=deq_params['use_hadamard'], - weights_dtype=deq_params['weights_dtype'], use_svd=False, use_quantized_matmul=False, dequantize_fp32=False) + weights_dtype=deq_params['weights_dtype'], use_svd=use_svd, svd_rank=deq_params.get('svd_rank', 32), + svd_steps=deq_params.get('svd_steps', 8), use_quantized_matmul=False, dequantize_fp32=False) deq2, data2 = sdnq_quantize_layer_weight(W_dq + D, **kw) - W2 = deq2(data2['weight'], data2['scale'], zero_point=data2['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) + W2 = deq2(data2['weight'], data2['scale'], zero_point=data2['zero_point'], + svd_up=data2['svd_up'], svd_down=data2['svd_down'], dtype=torch.float32, skip_compile=True) Dh = rotate_hadamard(D, group_size=deq_params['hadamard_group_size']) if deq_params['use_hadamard'] else D step = data2['scale'].float() Dg = Dh.unflatten(-1, (step.shape[1], -1)) if step.ndim == 3 else Dh @@ -312,7 +321,7 @@ def main(): lora_path = os.path.expanduser(lora_path) mapped, census, chunked = map_lora_modules(lora_path, arch_mod) net = network.Network(os.path.basename(lora_path), StubOnDisk(lora_path)) - rows, unquantized, unmatched, failed = [], [], [], [] + rows, unquantized, unmatched, failed, non_matrix = [], [], [], [], [] keys = sorted(mapped) if not args.full and len(keys) > args.sample: keys = keys[::max(1, len(keys) // args.sample)][:args.sample] @@ -327,9 +336,13 @@ def main(): if deq is None: unquantized.append(path) continue + if len(deq.original_shape) != 2: + non_matrix.append(path) + continue W_dq = deq(layer.weight, layer.scale, zero_point=layer.zero_point, svd_up=layer.svd_up, svd_down=layer.svd_down, skip_quantized_matmul=deq.use_quantized_matmul, dtype=torch.float32, skip_compile=True).to(device) - params = dict(weights_dtype=deq.weights_dtype, group_size=deq.group_size, hadamard_group_size=deq.hadamard_group_size, use_hadamard=deq.use_hadamard) + params = dict(weights_dtype=deq.weights_dtype, group_size=deq.group_size, hadamard_group_size=deq.hadamard_group_size, + use_hadamard=deq.use_hadamard, use_svd=layer.svd_up is not None, svd_rank=deq.svd_rank, svd_steps=deq.svd_steps) sd_module = layer else: W = bf16_repo.get(f'{path}.weight') @@ -338,6 +351,9 @@ def main(): if W is None: unmatched.append(path) continue + if W.ndim != 2: # norm/scale targets (e.g. adaLN_modulation) are 1-D; the quantizer and the stub both expect a matrix + non_matrix.append(path) + continue if args.dtype == 'bf16': W_dq = W.to(device, torch.bfloat16).float() params = dict(weights_dtype='bf16', group_size=0, hadamard_group_size=0, use_hadamard=False) @@ -348,8 +364,6 @@ def main(): W_dq = deq0(data0['weight'], data0['scale'], zero_point=data0['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) params = dict(weights_dtype=args.dtype, group_size=deq0.group_size, hadamard_group_size=deq0.hadamard_group_size, use_hadamard=deq0.use_hadamard) sd_module = make_stub(W.shape) - if W_dq.ndim != 2: - continue try: mods = [build_module(fam, path, w, net, sd_module) for fam, w in entries] row = analyze_module(W_dq, params, mods) @@ -361,16 +375,17 @@ def main(): rows.append(row) del W_dq # the caching allocator reuses these; emptying it per module costs more than it saves - applied = sorted(r['applied_rho'] for r in rows) + scored = [r for r in rows if r['applied_rho'] is not None] # zero-delta modules have no retention to report + applied = sorted(r['applied_rho'] for r in scored) median_applied = applied[len(applied) // 2] if applied else None - energy = sum(r['delta_energy'] for r in rows) - weighted = (sum(r['applied_rho'] * r['delta_energy'] for r in rows) / energy) if energy > 0 else None - n_exact = sum(1 for r in rows if r['factor_eligible']) - fb = [r['requant_rho'] for r in rows if not r['factor_eligible']] + energy = sum(r['delta_energy'] for r in scored) + weighted = (sum(r['applied_rho'] * r['delta_energy'] for r in scored) / energy) if energy > 0 else None + n_exact = sum(1 for r in scored if r['factor_eligible']) + fb = [r['requant_rho'] for r in scored if not r['factor_eligible']] fb_median = sorted(fb)[len(fb) // 2] if fb else None if median_applied is not None: worst_effective = min(worst_effective, median_applied) - rprint(f'\nlora: "{os.path.basename(lora_path)}" families={census or "none"} targets={len(mapped)} analyzed={len(rows)} exact={n_exact} fallback={len(fb)} unquantized={len(unquantized)} unmatched={len(unmatched)} chunked={chunked} failed={len(failed)}') + rprint(f'\nlora: "{os.path.basename(lora_path)}" families={census or "none"} targets={len(mapped)} analyzed={len(rows)} scored={len(scored)} exact={n_exact} fallback={len(fb)} unquantized={len(unquantized)} unmatched={len(unmatched)} non_matrix={len(non_matrix)} chunked={chunked} failed={len(failed)}') if median_applied is None: rprint(' no analyzable modules: nothing measured') else: @@ -388,7 +403,7 @@ def main(): if device.type == 'cuda': torch.cuda.empty_cache() # once per file, after its modules are done report['loras'].append({'file': lora_path, 'families': census, 'targets': n_targets, 'unquantized': unquantized, - 'unmatched': unmatched, 'chunked': chunked, 'failed': failed, + 'unmatched': unmatched, 'non_matrix': non_matrix, 'chunked': chunked, 'failed': failed, 'exact_modules': n_exact, 'fallback_modules': len(fb), 'fallback_median_rho': fb_median, 'median_applied_rho': median_applied, 'weighted_applied_rho': weighted, 'modules': rows}) From b5c58151be741dd31ecb1e696ad855eccb06f8a5 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 11:48:03 +0100 Subject: [PATCH 019/270] fix(lora): harden the sdnq factor path - restore stashed svd factors onto the layer's current device; the stash tuple does not follow module device moves, so an offload between apply and remove left restored factors on a stale device - recheck factor shapes for layers already in factor mode, so a malformed stacked network downgrades to the legacy path instead of raising in the concat - clear the fallback log at activate entry so a raise mid-pass cannot leak stale entries into the next report - pin both behaviors in the suite and state the compute-dtype fidelity floor in the module docstring --- modules/lora/lora_sdnq.py | 15 ++++++++-- modules/lora/networks.py | 1 + test/test-sdnq-lora-factors.py | 52 ++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 3 deletions(-) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 1cdbb8d22..d07c0db8a 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -16,7 +16,10 @@ extra columns of ``svd_up`` and rows of ``svd_down``; because the Hadamard rotation is block-diagonal, symmetric and self-inverse, storing ``A·H`` for the down factor makes the round trip exact: ``(B @ (A·H)) · H = B @ A``. Quantized weights are never touched, so apply and remove are exact and no -weight backup is needed. +weight backup is needed. The side-channel storage is lossless; realized +fidelity floors at the compute dtype, because the dequantizer materializes +``base + factors`` in the result dtype and a delta below its ULP of the +base rounds exactly as it would on an unquantized model of that dtype. Only additive low-rank modules qualify (plain LoRA: no DoRA, no CP ``mid``, no LyCORIS dense-bias, no ``diff_b``). Layers with any non-factorable @@ -33,7 +36,7 @@ from modules.logger import log fallback_layers: list[str] = [] -def get_module_factors(module, device, dtype): +def get_module_factors(module, device, dtype, original_shape=None): """Return ``(up_eff, down)`` reproducing ``calc_updown`` exactly, or None. ``updown = up @ down * calc_scale() * multiplier()`` for a plain linear @@ -50,6 +53,8 @@ def get_module_factors(module, device, dtype): down = module.down_model.weight if up.ndim != 2 or down.ndim != 2: return None + if original_shape is not None and (up.shape[0] != original_shape[0] or down.shape[1] != original_shape[-1]): + return None # factor_candidate skips shape checks for layers already in factor mode; recheck here so a malformed stack falls back instead of raising in cat dyn_dim = module.network.dyn_dim if dyn_dim is not None and up.shape[1] != dyn_dim: up = up[:, :dyn_dim] @@ -96,6 +101,10 @@ def remove_factors(self): if stash is None: return False svd_up, svd_down = stash + device = self.scale.device # the stash tuple does not follow module device moves; restore onto wherever the layer lives now + if svd_up is not None and svd_up.device != device: + svd_up = torch.nn.Parameter(svd_up.to(device=device), requires_grad=False) + svd_down = torch.nn.Parameter(svd_down.to(device=device), requires_grad=False) self.svd_up = svd_up self.svd_down = svd_down del self.sdnq_lora_svd_stash @@ -125,7 +134,7 @@ def apply_factors(self, network_layer_name, wanted_names, use_previous=False): module = net.modules.get(network_layer_name, None) if module is None: continue - factors = get_module_factors(module, devices.device, dtype) + factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) if factors is None: return None up_eff, down = factors diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 50d5d27aa..c472da4ea 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -90,6 +90,7 @@ def network_activate(include=None, exclude=None): with devices.inference_context(), pbar: wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () applied_layers.clear() + lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind backup_size = 0 for component in modules.keys(): component_wanted = wanted_names if component in components else () diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 6a91380a2..4257f35fd 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -20,6 +20,9 @@ for the per-model analyzer): before re-entering the factor path, layers targeted by only some of the loaded networks stay independent, and untargeted quantized layers are not flagged as requantized. +- Robustness: factor removal restores onto the layer's current device after + an offload-style move, and a shape-mismatched network stacked onto a + factor-mode layer downgrades to the legacy path instead of raising. All tensors are synthetic; no model files or running server required. @@ -535,6 +538,52 @@ def test_partial_coverage_layers_stay_independent(): return True +CAT_ROBUST = category('robustness') + + +def test_remove_factors_after_device_move(): + layer = build_layer('uint4', use_svd=True) # checkpoint svd correction so the stash holds real tensors + A, B, _D = make_delta() + net = make_net('mover', layer, A, B) + with mock_model(lin=layer): + Wdq0 = dq(layer) + orig_up = layer.svd_up.detach().clone() + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash') + layer.to('cpu') # offload moves registered params, never the stash tuple + activate() + assert layer.svd_up.device == layer.scale.device, f'restored svd must live on the layer device, got {layer.svd_up.device} vs {layer.scale.device}' + assert torch.equal(layer.svd_up, orig_up.to('cpu')), 'restored svd values must match the original factors' + layer.to(DEVICE) + assert torch.equal(dq(layer), Wdq0), 'round trip must restore bit-exact' + return True + + +def test_stacked_shape_mismatch_falls_back(): + from types import SimpleNamespace + layer = build_layer('uint4') + A, B, _D = make_delta() + net_good = make_net('good', layer, A, B) + torch.manual_seed(9) + A_bad = torch.randn(RANK, IN_F, device=DEVICE) * 0.01 + B_bad = torch.randn(OUT_F // 2, RANK, device=DEVICE) * 0.01 # wrong out_features for this layer + net_bad = make_net('badshape', layer, A_bad, B_bad) + prev_enl = l_common.extra_network_lora + l_common.extra_network_lora = SimpleNamespace(errors={}) # the error path reports through the extra-networks registry + try: + with mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net_good) + assert hasattr(layer, 'sdnq_lora_svd_stash') + activate(net_good, net_bad) # must not raise: a malformed stack downgrades the layer to the legacy path + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'shape-mismatched stack must leave factor mode' + activate() + assert torch.equal(dq(layer), Wdq0), 'unload must restore bit-exact pristine' + finally: + l_common.extra_network_lora = prev_enl + return True + + def run_tests(): t0 = time.time() log.warning('=== Erasure law ===') @@ -552,6 +601,9 @@ def run_tests(): log.warning('=== Set transitions ===') for fn in [test_mixed_family_transition_restores_base, test_partial_coverage_layers_stay_independent]: run_test(CAT_TRANS, fn) + log.warning('=== Robustness ===') + for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back]: + run_test(CAT_ROBUST, fn) elapsed = time.time() - t0 log.warning('=== Results ===') From 9fa23b914ea17d82acae5e04a34705a5e359fbb3 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 11:48:17 +0100 Subject: [PATCH 020/270] fix(cli): measure realized factor-path fidelity instead of asserting it The analyzer scored factor-eligible modules applied_rho=1.0 by construction. The side-channel stores the delta losslessly, but the dequantizer materializes base + factors in the result dtype, so small deltas round at the bf16 ulp of the base weight. Score the realized delta through that rounding; sub-ulp loras now report the same floor an unquantized bf16 model gives them instead of a false 1.0. Also survive a broken file and keep completed work: per-lora failures are recorded and skipped, the report json rewrites after every file, and a complete flag marks a finished run. --- cli/lora-quant-fidelity.py | 193 ++++++++++++++++++++----------------- 1 file changed, 107 insertions(+), 86 deletions(-) diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py index 807e663ca..6691d72bc 100644 --- a/cli/lora-quant-fidelity.py +++ b/cli/lora-quant-fidelity.py @@ -287,9 +287,18 @@ def analyze_module(W_dq, deq_params, mods): E = W2 - W_dq rho = float(E.flatten() @ D.flatten() / nD.square()) resid = float((E - D).norm() / nD) + if factor_eligible: + # the factor path stores the delta losslessly, but the dequantizer materializes + # base + factors in the result dtype (bf16 here), so realized fidelity floors at + # the same ULP rounding an unquantized bf16 model applies to a merged delta + base16 = W_dq.to(torch.bfloat16).float() + realized = (W_dq.to(torch.bfloat16) + D.to(torch.bfloat16)).float() - base16 + applied_rho = float(realized.flatten() @ D.flatten() / nD.square()) + else: + applied_rho = rho return dict(rank=getattr(mods[0], 'dim', None), rms_delta=float(D.pow(2).mean().sqrt()), rms_weight=float(W_dq.pow(2).mean().sqrt()), step_ratio=step_ratio, crossers=crossers, requant_rho=rho, requant_resid=resid, - factor_eligible=factor_eligible, applied_rho=1.0 if factor_eligible else rho, + factor_eligible=factor_eligible, applied_rho=applied_rho, delta_energy=float(nD.square())) @@ -317,99 +326,111 @@ def main(): report = {'model': model_dir, 'pre_quantized': pre_quantized, 'loras': []} worst_effective = 1.0 + def write_report(): + if args.json: + with open(args.json, 'w', encoding='utf-8') as f: + json.dump(report, f, indent=2) + for lora_path in args.lora: lora_path = os.path.expanduser(lora_path) - mapped, census, chunked = map_lora_modules(lora_path, arch_mod) - net = network.Network(os.path.basename(lora_path), StubOnDisk(lora_path)) - rows, unquantized, unmatched, failed, non_matrix = [], [], [], [], [] - keys = sorted(mapped) - if not args.full and len(keys) > args.sample: - keys = keys[::max(1, len(keys) // args.sample)][:args.sample] - for path in keys: - entries = mapped[path] - if pre_quantized: - layer = quant_layers.get(path) or quant_layers.get(quant_stamps.get(path.replace('.', '_'), '')) - if layer is None: - unmatched.append(path) - continue - deq = getattr(layer, 'sdnq_dequantizer', None) - if deq is None: - unquantized.append(path) - continue - if len(deq.original_shape) != 2: - non_matrix.append(path) - continue - W_dq = deq(layer.weight, layer.scale, zero_point=layer.zero_point, svd_up=layer.svd_up, svd_down=layer.svd_down, - skip_quantized_matmul=deq.use_quantized_matmul, dtype=torch.float32, skip_compile=True).to(device) - params = dict(weights_dtype=deq.weights_dtype, group_size=deq.group_size, hadamard_group_size=deq.hadamard_group_size, - use_hadamard=deq.use_hadamard, use_svd=layer.svd_up is not None, svd_rank=deq.svd_rank, svd_steps=deq.svd_steps) - sd_module = layer - else: - W = bf16_repo.get(f'{path}.weight') - if W is None: - W = bf16_repo.get(f'{bf16_stamps.get(path.replace(".", "_"), "")}.weight') - if W is None: - unmatched.append(path) - continue - if W.ndim != 2: # norm/scale targets (e.g. adaLN_modulation) are 1-D; the quantizer and the stub both expect a matrix - non_matrix.append(path) - continue - if args.dtype == 'bf16': - W_dq = W.to(device, torch.bfloat16).float() - params = dict(weights_dtype='bf16', group_size=0, hadamard_group_size=0, use_hadamard=False) + try: + mapped, census, chunked = map_lora_modules(lora_path, arch_mod) + net = network.Network(os.path.basename(lora_path), StubOnDisk(lora_path)) + rows, unquantized, unmatched, failed, non_matrix = [], [], [], [], [] + keys = sorted(mapped) + if not args.full and len(keys) > args.sample: + keys = keys[::max(1, len(keys) // args.sample)][:args.sample] + for path in keys: + entries = mapped[path] + if pre_quantized: + layer = quant_layers.get(path) or quant_layers.get(quant_stamps.get(path.replace('.', '_'), '')) + if layer is None: + unmatched.append(path) + continue + deq = getattr(layer, 'sdnq_dequantizer', None) + if deq is None: + unquantized.append(path) + continue + if len(deq.original_shape) != 2: + non_matrix.append(path) + continue + W_dq = deq(layer.weight, layer.scale, zero_point=layer.zero_point, svd_up=layer.svd_up, svd_down=layer.svd_down, + skip_quantized_matmul=deq.use_quantized_matmul, dtype=torch.float32, skip_compile=True).to(device) + params = dict(weights_dtype=deq.weights_dtype, group_size=deq.group_size, hadamard_group_size=deq.hadamard_group_size, + use_hadamard=deq.use_hadamard, use_svd=layer.svd_up is not None, svd_rank=deq.svd_rank, svd_steps=deq.svd_steps) + sd_module = layer else: - deq0, data0 = sdnq_quantize_layer_weight(W.to(device, torch.float32), layer_class_name='Linear', weights_dtype=args.dtype, - group_size=args.group, hadamard_group_size=args.hadamard_group, use_hadamard=args.hadamard_group > 0, - use_svd=False, use_quantized_matmul=False, dequantize_fp32=False, torch_dtype=torch.bfloat16) - W_dq = deq0(data0['weight'], data0['scale'], zero_point=data0['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) - params = dict(weights_dtype=args.dtype, group_size=deq0.group_size, hadamard_group_size=deq0.hadamard_group_size, use_hadamard=deq0.use_hadamard) - sd_module = make_stub(W.shape) - try: - mods = [build_module(fam, path, w, net, sd_module) for fam, w in entries] - row = analyze_module(W_dq, params, mods) - except Exception as e: # a family the tool cannot rebuild must not read as a clean module - failed.append(f'{path}: {type(e).__name__}: {e}') - del W_dq - continue - row.update(module=path, dtype=params['weights_dtype'], family='+'.join(f for f, _w in entries)) - rows.append(row) - del W_dq # the caching allocator reuses these; emptying it per module costs more than it saves + W = bf16_repo.get(f'{path}.weight') + if W is None: + W = bf16_repo.get(f'{bf16_stamps.get(path.replace(".", "_"), "")}.weight') + if W is None: + unmatched.append(path) + continue + if W.ndim != 2: # norm/scale targets (e.g. adaLN_modulation) are 1-D; the quantizer and the stub both expect a matrix + non_matrix.append(path) + continue + if args.dtype == 'bf16': + W_dq = W.to(device, torch.bfloat16).float() + params = dict(weights_dtype='bf16', group_size=0, hadamard_group_size=0, use_hadamard=False) + else: + deq0, data0 = sdnq_quantize_layer_weight(W.to(device, torch.float32), layer_class_name='Linear', weights_dtype=args.dtype, + group_size=args.group, hadamard_group_size=args.hadamard_group, use_hadamard=args.hadamard_group > 0, + use_svd=False, use_quantized_matmul=False, dequantize_fp32=False, torch_dtype=torch.bfloat16) + W_dq = deq0(data0['weight'], data0['scale'], zero_point=data0['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) + params = dict(weights_dtype=args.dtype, group_size=deq0.group_size, hadamard_group_size=deq0.hadamard_group_size, use_hadamard=deq0.use_hadamard) + sd_module = make_stub(W.shape) + try: + mods = [build_module(fam, path, w, net, sd_module) for fam, w in entries] + row = analyze_module(W_dq, params, mods) + except Exception as e: # a family the tool cannot rebuild must not read as a clean module + failed.append(f'{path}: {type(e).__name__}: {e}') + del W_dq + continue + row.update(module=path, dtype=params['weights_dtype'], family='+'.join(f for f, _w in entries)) + rows.append(row) + del W_dq # the caching allocator reuses these; emptying it per module costs more than it saves - scored = [r for r in rows if r['applied_rho'] is not None] # zero-delta modules have no retention to report - applied = sorted(r['applied_rho'] for r in scored) - median_applied = applied[len(applied) // 2] if applied else None - energy = sum(r['delta_energy'] for r in scored) - weighted = (sum(r['applied_rho'] * r['delta_energy'] for r in scored) / energy) if energy > 0 else None - n_exact = sum(1 for r in scored if r['factor_eligible']) - fb = [r['requant_rho'] for r in scored if not r['factor_eligible']] - fb_median = sorted(fb)[len(fb) // 2] if fb else None - if median_applied is not None: - worst_effective = min(worst_effective, median_applied) - rprint(f'\nlora: "{os.path.basename(lora_path)}" families={census or "none"} targets={len(mapped)} analyzed={len(rows)} scored={len(scored)} exact={n_exact} fallback={len(fb)} unquantized={len(unquantized)} unmatched={len(unmatched)} non_matrix={len(non_matrix)} chunked={chunked} failed={len(failed)}') - if median_applied is None: - rprint(' no analyzable modules: nothing measured') - else: - rprint(f' applied fidelity: median={median_applied:.3f} energy-weighted={weighted:.3f}' + (f' (fallback modules land at median rho={fb_median:.3f})' if fb_median is not None else '')) - for f in failed[:3]: - rprint(f' [red]could not rebuild[/red]: {f}') - if fb: - worst = sorted((r for r in rows if not r['factor_eligible']), key=lambda r: r['requant_rho'])[:5] - rprint(' lowest-retention modules:') - for r in worst: - grid = f'step-ratio={r["step_ratio"]:.3f} crossers={r["crossers"]*100:5.1f}%' if r['step_ratio'] is not None else 'unquantized reference' - rprint(f' {r["module"]:48s} fam={r["family"]:5s} dtype={r["dtype"]} {grid} rho={r["requant_rho"]:.3f}') - n_targets = len(mapped) - del mapped, net + scored = [r for r in rows if r['applied_rho'] is not None] # zero-delta modules have no retention to report + applied = sorted(r['applied_rho'] for r in scored) + median_applied = applied[len(applied) // 2] if applied else None + energy = sum(r['delta_energy'] for r in scored) + weighted = (sum(r['applied_rho'] * r['delta_energy'] for r in scored) / energy) if energy > 0 else None + n_exact = sum(1 for r in scored if r['factor_eligible']) + fb = [r['requant_rho'] for r in scored if not r['factor_eligible']] + fb_median = sorted(fb)[len(fb) // 2] if fb else None + if median_applied is not None: + worst_effective = min(worst_effective, median_applied) + report['loras'].append({'file': lora_path, 'families': census, 'targets': len(mapped), 'unquantized': unquantized, + 'unmatched': unmatched, 'non_matrix': non_matrix, 'chunked': chunked, 'failed': failed, + 'exact_modules': n_exact, 'fallback_modules': len(fb), 'fallback_median_rho': fb_median, + 'median_applied_rho': median_applied, 'weighted_applied_rho': weighted, 'modules': rows}) + write_report() # rewrite per file so a crash keeps completed work + rprint(f'\nlora: "{os.path.basename(lora_path)}" families={census or "none"} targets={len(mapped)} analyzed={len(rows)} scored={len(scored)} exact={n_exact} fallback={len(fb)} unquantized={len(unquantized)} unmatched={len(unmatched)} non_matrix={len(non_matrix)} chunked={chunked} failed={len(failed)}') + if median_applied is None: + rprint(' no analyzable modules: nothing measured') + else: + rprint(f' applied fidelity: median={median_applied:.3f} energy-weighted={weighted:.3f}' + (f' (fallback modules land at median rho={fb_median:.3f})' if fb_median is not None else '')) + for f in failed[:3]: + rprint(f' [red]could not rebuild[/red]: {f}') + if fb: + worst = sorted((r for r in scored if not r['factor_eligible']), key=lambda r: r['requant_rho'])[:5] + rprint(' lowest-retention modules:') + for r in worst: + grid = f'step-ratio={r["step_ratio"]:.3f} crossers={r["crossers"]*100:5.1f}%' if r['step_ratio'] is not None else 'unquantized reference' + rprint(f' {r["module"]:48s} fam={r["family"]:5s} dtype={r["dtype"]} {grid} rho={r["requant_rho"]:.3f}') + del mapped, net + except KeyboardInterrupt: + raise + except Exception as e: # one broken file must not cost the rest of the batch + rprint(f'\n[red]lora failed[/red]: "{os.path.basename(lora_path)}" {type(e).__name__}: {e}') + report['loras'].append({'file': lora_path, 'error': f'{type(e).__name__}: {e}'}) + write_report() if device.type == 'cuda': torch.cuda.empty_cache() # once per file, after its modules are done - report['loras'].append({'file': lora_path, 'families': census, 'targets': n_targets, 'unquantized': unquantized, - 'unmatched': unmatched, 'non_matrix': non_matrix, 'chunked': chunked, 'failed': failed, - 'exact_modules': n_exact, 'fallback_modules': len(fb), 'fallback_median_rho': fb_median, - 'median_applied_rho': median_applied, 'weighted_applied_rho': weighted, 'modules': rows}) + report['complete'] = True + write_report() if args.json: - with open(args.json, 'w', encoding='utf-8') as f: - json.dump(report, f, indent=2) rprint(f'\nreport: "{args.json}"') if args.fail_under is not None and worst_effective < args.fail_under: rprint(f'FAIL: effective fidelity {worst_effective:.3f} < {args.fail_under}') From 6c0dd0b15fc3433c3a45825728ef8e959fbb69aa Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 21:00:58 +0100 Subject: [PATCH 021/270] feat(lora): host non-factorable adapters on the sdnq side-channel Non-additive families (lokr, loha, oft, dora, full) merged into the quantized weight and lost most of their delta on low-bit formats. On sub-8-bit layers the set's calc_updown delta now rides the svd side-channel as its top singular directions instead: factorable members are subtracted out and appended exactly, so only the non-factorable remainder is truncated. Truncation keeps the dominant part of the effect and drops an orthogonal residual, where requantize keeps the grid extrema and adds grid-shift noise of the delta's own magnitude; on real lokr files retention rises from 0.04 to about 0.5 at the default rank. Hosted layers take no weight backup and unload bit-exactly. The svd runs under a forked rng so generation seeds are unaffected. At 8 bits and above requantize retains most of the delta and remains the path. lora_sdnq_host_rank caps the hosted rank; 0 disables hosting. --- modules/lora/lora_sdnq.py | 99 +++++++++++++++++++++++++-- modules/lora/networks.py | 22 +++++- modules/ui_definitions.py | 1 + test/test-sdnq-lora-factors.py | 120 ++++++++++++++++++++++++++++++++- ui/locale/locale_en.json | 1 + 5 files changed, 233 insertions(+), 10 deletions(-) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index d07c0db8a..c2a968630 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -21,19 +21,26 @@ fidelity floors at the compute dtype, because the dequantizer materializes ``base + factors`` in the result dtype and a delta below its ULP of the base rounds exactly as it would on an unquantized model of that dtype. -Only additive low-rank modules qualify (plain LoRA: no DoRA, no CP ``mid``, -no LyCORIS dense-bias, no ``diff_b``). Layers with any non-factorable -contribution fall back to the dequantize-add-requantize path. +Only additive low-rank modules ride the channel exactly (plain LoRA: no +DoRA, no CP ``mid``, no LyCORIS dense-bias, no ``diff_b``). On sub-8-bit +formats, sets with non-factorable contributions are hosted instead: the +families' own ``calc_updown`` delta is truncated to its top singular +directions and appended the same way. Truncation keeps the dominant part +of the effect and drops an orthogonal residual, where requantize keeps +only the grid extrema and adds grid-shift noise of the delta's own +magnitude. At 8 bits and above requantize retains most of the delta, so +hosting is skipped there and the requantize path remains. """ import torch -from modules import devices +from modules import devices, shared from modules.lora import lora_common as l from modules.logger import log fallback_layers: list[str] = [] +hosted_layers: list[tuple[str, float]] = [] def get_module_factors(module, device, dtype, original_shape=None): @@ -126,7 +133,6 @@ def apply_factors(self, network_layer_name, wanted_names, use_previous=False): return changed deq = self.sdnq_dequantizer - device = self.scale.device dtype = deq.result_dtype loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks ups, downs = [], [] @@ -144,7 +150,15 @@ def apply_factors(self, network_layer_name, wanted_names, use_previous=False): downs.append(down) if not ups: return changed + append_factors(self, ups, downs) + return True + +def append_factors(self, ups, downs): + """Concatenate ``[out, r]`` / ``[r, in]`` factor pairs onto the layer's svd channel and stash the originals.""" + deq = self.sdnq_dequantizer + device = self.scale.device + dtype = deq.result_dtype orig_up, orig_down = self.svd_up, self.svd_down if deq.use_quantized_matmul: # matmul layout stores factors transposed: svd_up [r, out], svd_down [in, r] @@ -157,10 +171,76 @@ def apply_factors(self, network_layer_name, wanted_names, use_previous=False): parts_down = ([orig_down.to(device=devices.device, dtype=dtype)] if orig_down is not None else []) + downs new_up = torch.cat(parts_up, dim=1).contiguous() new_down = torch.cat(parts_down, dim=0).contiguous() - self.sdnq_lora_svd_stash = (orig_up, orig_down) self.svd_up = torch.nn.Parameter(new_up.to(device=device), requires_grad=False) self.svd_down = torch.nn.Parameter(new_down.to(device=device), requires_grad=False) + + +def host_candidate(self, network_layer_name, wanted_names, use_previous=False): + """True when a non-factorable set on this layer should be hosted as a truncated svd.""" + if int(getattr(shared.opts, 'lora_sdnq_host_rank', 0) or 0) <= 0: + return False + if getattr(self, 'sdnq_dequantizer', None) is None or self.__class__.__name__ != 'SDNQLinear': + return False + if wanted_names == (): + return False + from sdnq.common import dtype_dict + if dtype_dict[self.sdnq_dequantizer.weights_dtype]['num_bits'] >= 8: + return False # requantize retains most of the delta at 8 bits and above; truncation would lose more than it saves + loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks + return any(net.modules.get(network_layer_name, None) is not None for net in loaded) + + +def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=False): + """Host a set's delta on the svd channel: exact factors for factorable + members, the top-k singular directions of the remainder for the rest. + + The delta comes from the families' own ``calc_updown``, so every family + and scaling quirk is included; factorable members are subtracted out and + appended exactly so they never compete with the hosted remainder for + rank. Returns None when the delta cannot ride the channel (wrong shape); + the caller falls back to requantize. + """ + from sdnq.quant_utils import rotate_hadamard + + deq = self.sdnq_dequantizer + changed = remove_factors(self) + if wanted_names == (): + return changed + if updown is None or updown.ndim != 2 or tuple(updown.shape) != tuple(deq.original_shape): + return None + dtype = deq.result_dtype + D = updown.detach().to(devices.device, torch.float32) + + ups, downs = [], [] + loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks + for net in loaded: + module = net.modules.get(network_layer_name, None) + if module is None: + continue + factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) + if factors is None: + continue + up_eff, down = factors + D = D.sub_(up_eff.to(torch.float32) @ down.to(torch.float32)) # factorable members ride exactly; host only the remainder + if deq.use_hadamard: + down = rotate_hadamard(down.to(dtype=torch.float32), group_size=deq.hadamard_group_size).to(dtype=dtype) + ups.append(up_eff) + downs.append(down) + + cap = int(shared.opts.lora_sdnq_host_rank) + q = min(cap, *D.shape) + # svd_lowrank draws random projections; fork so user generation seeds are untouched and re-applies are deterministic + with torch.random.fork_rng(devices=[D.device] if D.device.type == 'cuda' else []): + torch.manual_seed(0) + U, S, V = torch.svd_lowrank(D, q=q, niter=2) + energy = float(S.square().sum() / D.square().sum().clamp(min=1e-30)) + up_h = (U * S).to(dtype=dtype) + down_h = V.t() + if deq.use_hadamard: + down_h = rotate_hadamard(down_h, group_size=deq.hadamard_group_size) + append_factors(self, ups + [up_h], downs + [down_h.to(dtype=dtype)]) + hosted_layers.append((network_layer_name, energy)) return True @@ -171,6 +251,13 @@ def note_fallback(self, network_layer_name): def report_fallbacks(): + if len(hosted_layers) > 0: + energies = sorted(e for _name, e in hosted_layers) + median = energies[len(energies) // 2] + log.info(f'Network load: type=LoRA quant=sdnq hosted={len(hosted_layers)} rank={int(shared.opts.lora_sdnq_host_rank)} energy={median:.2f} min={energies[0]:.2f} non-factorable networks hosted on the svd side-channel') + if l.debug: + log.debug(f'Network load: type=LoRA quant=sdnq hosted={[(n, round(e, 3)) for n, e in hosted_layers[:8]]}{"..." if len(hosted_layers) > 8 else ""}') + hosted_layers.clear() if len(fallback_layers) > 0: log.warning(f'Network load: type=LoRA quant=sdnq layers={len(fallback_layers)} non-factorable networks requantized in place (reduced fidelity on quantized weights)') if l.debug: diff --git a/modules/lora/networks.py b/modules/lora/networks.py index c472da4ea..d027a5f81 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -91,6 +91,7 @@ def network_activate(include=None, exclude=None): wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () applied_layers.clear() lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind + lora_sdnq.hosted_layers.clear() backup_size = 0 for component in modules.keys(): component_wanted = wanted_names if component in components else () @@ -109,7 +110,7 @@ def network_activate(include=None, exclude=None): if weights_backup is not None and not isinstance(weights_backup, bool): network_apply_weights(module, None, None, device=device) # an earlier non-factorable set requantized this layer, restore the pristine base before attaching factors applied = lora_sdnq.apply_factors(module, network_layer_name, component_wanted) - if applied is not None: # exact path took the layer; None falls through to requantize + if applied is not None: # exact path took the layer; None falls through to hosting or requantize if applied and component_wanted: applied_layers.append(network_layer_name) applied_weight += 1 @@ -117,6 +118,25 @@ def network_activate(include=None, exclude=None): if task is not None: pbar.update(task, advance=1) continue + if lora_sdnq.host_candidate(module, network_layer_name, component_wanted): + weights_backup = getattr(module, "network_weights_backup", None) + if weights_backup is not None and not isinstance(weights_backup, bool): + network_apply_weights(module, None, None, device=device) # the hosted delta is measured against the pristine base + batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, elimit=elimit) + if batch_ex_bias is None: # bias deltas need the plain path; weight-only sets ride the side-channel without a weight backup + hosted = lora_sdnq.apply_hosted(module, network_layer_name, batch_updown, component_wanted) + if hosted is not None: + if hosted and component_wanted: + applied_layers.append(network_layer_name) + applied_weight += 1 + module.network_current_names = component_wanted + batch_updown, batch_ex_bias = None, None + del batch_updown, batch_ex_bias + if task is not None: + pbar.update(task, advance=1) + continue + batch_updown, batch_ex_bias = None, None + del batch_updown, batch_ex_bias backup_size += network_backup_weights(module, network_layer_name, component_wanted, fuse) if not component_wanted: weights_backup = getattr(module, "network_weights_backup", None) diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index ed0dab9c6..8e9284566 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -684,6 +684,7 @@ def create_settings(cmd_opts): "lora_apply_te": OptionInfo(False, "LoRA native apply to text encoder"), "lora_fuse_native": OptionInfo(True, "LoRA native fuse with model"), "lora_fuse_diffusers": OptionInfo(False, "LoRA diffusers fuse with model"), + "lora_sdnq_host_rank": OptionInfo(256, "LoRA quantized host rank", gr.Slider, {"minimum": 0, "maximum": 1024, "step": 32}), "lora_apply_tags": OptionInfo(0, "LoRA auto-apply tags", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1}), "lora_in_memory_limit": OptionInfo(1, "LoRA memory cache", gr.Slider, {"minimum": 0, "maximum": 32, "step": 1}), "lora_add_hashes_to_infotext": OptionInfo(False, "LoRA add hash info to metadata"), diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 4257f35fd..8514e9632 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -23,6 +23,11 @@ for the per-model analyzer): - Robustness: factor removal restores onto the layer's current device after an offload-style move, and a shape-mismatched network stacked onto a factor-mode layer downgrades to the legacy path instead of raising. +- Hosting: on sub-8-bit layers, non-factorable sets ride the side-channel as + a truncated svd of their calc_updown delta: low-rank content survives + whole, dense content beats the requantize floor by a wide margin, int8 + and rank 0 keep the requantize path, removal stays bit-exact, and the + svd's random projections never touch the generation rng stream. All tensors are synthetic; no model files or running server required. @@ -488,7 +493,7 @@ def test_mixed_family_transition_restores_base(): real_report() lora_sdnq.report_fallbacks = capture_report try: - with mock_model(lin=layer, bystander=bystander): + with host_rank(0), mock_model(lin=layer, bystander=bystander): # pins the requantize fallback; hosted transitions are covered in the hosting category Wdq0 = dq(layer) activate(net_plain) assert hasattr(layer, 'sdnq_lora_svd_stash'), 'plain set must take the factor path' @@ -525,7 +530,7 @@ def test_partial_coverage_layers_stay_independent(): A2, B2, _ = make_delta(seed=5, sigma=3e-3) net_dora = make_net('dorafar', layer_dora, A2, B2, dora=True) - with mock_model(lin=layer_plain, other=layer_dora): + with host_rank(0), mock_model(lin=layer_plain, other=layer_dora): # pins the requantize fallback for the non-factorable layer Wdq0, Wdq0_dora = dq(layer_plain), dq(layer_dora) activate(net_plain, net_dora) assert hasattr(layer_plain, 'sdnq_lora_svd_stash') and getattr(layer_plain, 'network_weights_backup', None) is None, 'plain layer must stay on the factor path' @@ -538,6 +543,111 @@ def test_partial_coverage_layers_stay_independent(): return True +CAT_HOST = category('hosting') + + +@contextmanager +def host_rank(rank): + old = getattr(shared.opts, 'lora_sdnq_host_rank', 0) + shared.opts.lora_sdnq_host_rank = rank + try: + yield + finally: + shared.opts.lora_sdnq_host_rank = old + + +def make_dense_net(name, layer, D): + """A full-family (dense diff) network module: non-factorable by construction.""" + from modules.lora import network_full + net = network.Network(name, MockNOD(name)) + net.te_multiplier = 1.0 + net.unet_multiplier = [1.0] * 3 + nw = network.NetworkWeights(network_key=layer.network_layer_name, sd_key=layer.network_layer_name, + w={'diff': D.cpu()}, sd_module=layer) + net.modules[layer.network_layer_name] = network_full.NetworkModuleFull(net, nw) + return net + + +def test_hosted_low_rank_delta_is_kept(): + layer = build_layer('uint4') + _A, _B, D = make_delta(sigma=3e-3) + net = make_dense_net('densenet', layer, D) # low-rank content in a non-factorable container + with host_rank(64), mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'hosted set must ride the side-channel' + assert getattr(layer, 'network_weights_backup', None) is None, 'hosted layers must not take a weight backup' + rho = rho_of(dq(layer) - Wdq0, D) + assert rho > 0.95, f'rank-8 delta under cap 64 must be kept nearly whole: rho={rho:.4f}' + activate() + assert torch.equal(dq(layer), Wdq0), 'unload must restore bit-exact' + return True + + +def test_hosted_dense_delta_beats_requant(): + layer = build_layer('uint4') + torch.manual_seed(3) + D = torch.randn(OUT_F, IN_F, device=DEVICE) * 3e-4 # full-rank, sub-step: requant erases it + requant_rho = rho_of(requant_effective(layer, D), D) + net = make_dense_net('densefull', layer, D) + with host_rank(256), mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net) + hosted_rho = rho_of(dq(layer) - Wdq0, D) + assert hosted_rho > 0.4, f'hosted rho={hosted_rho:.3f}' + assert hosted_rho > requant_rho + 0.3, f'hosting must beat requant by a wide margin: {hosted_rho:.3f} vs {requant_rho:.3f}' + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_hosted_skips_int8(): + layer = build_layer('int8') + _A, _B, D = make_delta(sigma=3e-3) + net = make_dense_net('int8net', layer, D) + with host_rank(256), mock_model(lin=layer): + activate(net) + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'int8 must keep the requantize path' + assert isinstance(getattr(layer, 'network_weights_backup', None), torch.Tensor), 'int8 fallback must take the backup' + activate() + return True + + +def test_hosted_disabled_by_option(): + layer = build_layer('uint4') + _A, _B, D = make_delta(sigma=3e-3) + net = make_dense_net('offnet', layer, D) + with host_rank(0), mock_model(lin=layer): + activate(net) + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'rank 0 must disable hosting' + activate() + return True + + +def test_hosted_transitions_and_rng_isolation(): + layer = build_layer('uint4') + A, B, D = make_delta() + net_plain = make_net('plainh', layer, A, B) + _A2, _B2, D2 = make_delta(seed=9, sigma=3e-3) + net_dense = make_dense_net('denseh', layer, D2) + with host_rank(256), mock_model(lin=layer): + Wdq0 = dq(layer) + rng0 = torch.cuda.get_rng_state() if DEVICE.type == 'cuda' else torch.get_rng_state() + activate(net_dense) # hosted + rng1 = torch.cuda.get_rng_state() if DEVICE.type == 'cuda' else torch.get_rng_state() + assert torch.equal(rng0, rng1), 'hosting must not consume the generation rng stream' + assert hasattr(layer, 'sdnq_lora_svd_stash') + activate(net_plain) # exact replaces hosted + rho = rho_of(dq(layer) - Wdq0, D) + assert rho > 0.99, f'exact set after hosted set: rho={rho:.4f}' + activate(net_plain, net_dense) # mixed set hosts the combined delta + rho_mix = rho_of(dq(layer) - Wdq0, D + D2) + assert rho_mix > 0.9, f'mixed hosted rho={rho_mix:.4f}' + activate() + assert torch.equal(dq(layer), Wdq0), 'unload must restore bit-exact' + return True + + CAT_ROBUST = category('robustness') @@ -571,7 +681,7 @@ def test_stacked_shape_mismatch_falls_back(): prev_enl = l_common.extra_network_lora l_common.extra_network_lora = SimpleNamespace(errors={}) # the error path reports through the extra-networks registry try: - with mock_model(lin=layer): + with host_rank(0), mock_model(lin=layer): Wdq0 = dq(layer) activate(net_good) assert hasattr(layer, 'sdnq_lora_svd_stash') @@ -601,6 +711,10 @@ def run_tests(): log.warning('=== Set transitions ===') for fn in [test_mixed_family_transition_restores_base, test_partial_coverage_layers_stay_independent]: run_test(CAT_TRANS, fn) + log.warning('=== Hosting ===') + for fn in [test_hosted_low_rank_delta_is_kept, test_hosted_dense_delta_beats_requant, test_hosted_skips_int8, + test_hosted_disabled_by_option, test_hosted_transitions_and_rng_isolation]: + run_test(CAT_HOST, fn) log.warning('=== Robustness ===') for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back]: run_test(CAT_ROBUST, fn) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 089b239b6..eb289bcdf 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -862,6 +862,7 @@ {"id":"","label":"LoRA native apply to text encoder","localized":"","hint":"","ui":"settings_extra_networks"}, {"id":"","label":"LoRA native fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_extra_networks"}, {"id":"","label":"LoRA diffusers fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage and torch.compile compatibility.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_extra_networks"}, + {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry non-factorable adapter types (LoKR, LoHA, OFT, DoRA) on the side-channel of SDNQ models quantized below 8 bits, where merging would erase most of the adapter. Higher values keep more of the adapter at proportionally higher memory cost. Set to 0 to disable and merge into the quantized weights instead.","ui":"settings_extra_networks"}, {"id":"","label":"LoRA auto-apply tags","localized":"","hint":"Automatically add trigger words/tags from LoRA metadata to your prompt.
Set to the number of tags to auto-apply, e.g., 3 = add top 3 trigger tags.
Set to 0 to disable, -1 to add all available tags.","ui":"settings_extra_networks"}, {"id":"","label":"LoRA memory cache","localized":"","hint":"How many LoRAs to keep in network for future use before requiring reloading from storage","ui":"settings_extra_networks"}, {"id":"","label":"LoRA add hash info to metadata","localized":"","hint":"Include LoRA file hashes in generated image metadata.
Useful for reproducibility and tracking which exact LoRA versions were used.","ui":"settings_extra_networks"}, From 37e33e467721123b935242d6156a29f13f7e3cd0 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 21:00:58 +0100 Subject: [PATCH 022/270] feat(cli): score hosted retention in the fidelity analyzer Non-factorable modules on sub-8-bit formats report the hosted figure: the seeded svd truncation at --host-rank realized through the bf16 materialize, mirroring the loader. The requantize figure stays in requant_rho; --host-rank 0 restores the old scoring. --- cli/lora-quant-fidelity.py | 41 ++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py index 6691d72bc..c8078de62 100644 --- a/cli/lora-quant-fidelity.py +++ b/cli/lora-quant-fidelity.py @@ -7,17 +7,21 @@ its delta taken from the production ``calc_updown``, so all adapter families (LoRA, LoKR, LoHA, OFT, full, IA3, GLoRA, norm, plus DoRA and bias variants) are measured as they would actually apply: -- factor path (plain additive LoRA riding the svd side-channel): exact by - construction. Eligibility is decided by the loader's own predicate. -- requantize path (dequantize + add + requantize, taken by every other - family): retention ``rho`` of the intended delta. On-grid rounding erases - sub-step deltas down to a ``2/group_size`` floor, so low-bit formats - (<=6 bits) typically show rho ~= 0.02-0.03. +- factor path (plain additive LoRA riding the svd side-channel): storage is + lossless; the reported figure is the delta realized through the result-dtype + materialize, the same bf16 rounding an unquantized model applies. + Eligibility is decided by the loader's own predicate. +- hosted path (non-factorable families on sub-8-bit formats): the seeded svd + truncation at ``--host-rank``, realized the same way. +- requantize path (all other fallbacks): retention ``rho`` of the intended + delta. On-grid rounding erases sub-step deltas down to a ``2/group_size`` + floor, so low-bit formats (<=6 bits) typically show rho ~= 0.02-0.03. - unquantized modules: the LoRA applies exactly regardless. -Reported fidelity is per-module ``applied_rho`` (1.0 when the module takes the -factor path, measured rho when it falls back), summarized as a median and an -energy-weighted mean over the file's modules. +Reported fidelity is per-module ``applied_rho`` (the measured figure for +whichever path the loader would take), summarized as a median and an +energy-weighted mean over the file's modules; ``requant_rho`` always carries +the if-merged figure. Works offline against a pre-quantized SDNQ repo (stored tensors + config) or a bf16 repo with simulated quantization settings, so a combination can be @@ -48,6 +52,7 @@ def parse_cli(): parser.add_argument('--sample', type=int, default=40, help='max modules analyzed per lora (evenly sampled)') parser.add_argument('--full', action='store_true', help='analyze every matched module') parser.add_argument('--json', default=None, help='write full report to this json file') + parser.add_argument('--host-rank', type=int, default=256, help='svd hosting cap for non-factorable modules on sub-8-bit formats, mirroring lora_sdnq_host_rank; 0 scores the requantize path instead') parser.add_argument('--fail-under', type=float, default=None, help='exit 2 when median applied fidelity of any lora is below this') return parser.parse_args() @@ -264,7 +269,7 @@ def analyze_module(W_dq, deq_params, mods): if float(nD) == 0.0: # an all-zero delta (some full-rank extractions carry empty .diff): retention is undefined, not erased return dict(rank=getattr(mods[0], 'dim', None), rms_delta=0.0, rms_weight=float(W_dq.pow(2).mean().sqrt()), step_ratio=None, crossers=None, requant_rho=None, requant_resid=None, - factor_eligible=factor_eligible, applied_rho=None, delta_energy=0.0) + factor_eligible=factor_eligible, hosted=False, applied_rho=None, delta_energy=0.0) step_ratio, crossers = None, None if control: W2 = (W_dq + D).to(torch.bfloat16).float() @@ -287,6 +292,7 @@ def analyze_module(W_dq, deq_params, mods): E = W2 - W_dq rho = float(E.flatten() @ D.flatten() / nD.square()) resid = float((E - D).norm() / nD) + hosted = False if factor_eligible: # the factor path stores the delta losslessly, but the dequantizer materializes # base + factors in the result dtype (bf16 here), so realized fidelity floors at @@ -296,9 +302,22 @@ def analyze_module(W_dq, deq_params, mods): applied_rho = float(realized.flatten() @ D.flatten() / nD.square()) else: applied_rho = rho + if (not control) and cli_args.host_rank > 0: + from sdnq.common import dtype_dict + if dtype_dict[deq_params['weights_dtype']]['num_bits'] < 8: + # mirror lora_sdnq.apply_hosted: seeded svd truncation, realized through the bf16 materialize + q = min(cli_args.host_rank, *D.shape) + with torch.random.fork_rng(devices=[D.device] if D.device.type == 'cuda' else []): + torch.manual_seed(0) + U, S, V = torch.svd_lowrank(D, q=q, niter=2) + Dk = (U * S) @ V.t() + base16 = W_dq.to(torch.bfloat16).float() + realized = (W_dq.to(torch.bfloat16) + Dk.to(torch.bfloat16)).float() - base16 + applied_rho = float(realized.flatten() @ D.flatten() / nD.square()) + hosted = True return dict(rank=getattr(mods[0], 'dim', None), rms_delta=float(D.pow(2).mean().sqrt()), rms_weight=float(W_dq.pow(2).mean().sqrt()), step_ratio=step_ratio, crossers=crossers, requant_rho=rho, requant_resid=resid, - factor_eligible=factor_eligible, applied_rho=applied_rho, + factor_eligible=factor_eligible, hosted=hosted, applied_rho=applied_rho, delta_energy=float(nD.square())) From 82a7e94450d399cf9796821ddca4ef7c4bb82c70 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 17 Jul 2026 23:22:34 +0100 Subject: [PATCH 023/270] feat(lora): activation-weighted hosting via per-checkpoint calibration Plain svd truncation of hosted deltas is optimal in weight space but not in output space: activations concentrate energy in a few input channels, so scaling the delta by per-channel input RMS before the svd spends the rank budget on output error instead. Statistics stream from the model's own forwards on sub-8-bit SDNQ checkpoints and cache per checkpoint; measured on real LoKR files this raises output-delta retention by ~0.05 at rank 256 and ~0.09 at rank 64, most on MLP down projections. - modules/lora/lora_calib.py: capture hooks, per-checkpoint cache under data/sdnq-calib, statistics land on layers as sdnq_calib_rms; gated by lora_sdnq_host_calib, skipped when the model is compiled - lora_sdnq.apply_hosted: weighted truncation when statistics exist, calib count in the load summary - cli/sdnq-calibrate.py: complete calibration now against a live server - cli/lora-quant-fidelity.py --calib: hosted rho scored in the activation-weighted norm - test/test-sdnq-lora-factors.py: calibration category, 5 tests --- cli/lora-quant-fidelity.py | 33 +++++-- modules/lora/lora_calib.py | 175 +++++++++++++++++++++++++++++++++ modules/lora/lora_sdnq.py | 37 +++++-- modules/ui_definitions.py | 1 + test/test-sdnq-lora-factors.py | 162 ++++++++++++++++++++++++++++++ ui/locale/locale_en.json | 1 + 6 files changed, 393 insertions(+), 16 deletions(-) create mode 100644 modules/lora/lora_calib.py diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py index c8078de62..74bd214cd 100644 --- a/cli/lora-quant-fidelity.py +++ b/cli/lora-quant-fidelity.py @@ -53,6 +53,7 @@ def parse_cli(): parser.add_argument('--full', action='store_true', help='analyze every matched module') parser.add_argument('--json', default=None, help='write full report to this json file') parser.add_argument('--host-rank', type=int, default=256, help='svd hosting cap for non-factorable modules on sub-8-bit formats, mirroring lora_sdnq_host_rank; 0 scores the requantize path instead') + parser.add_argument('--calib', default=None, help='activation statistics file (models/calibration/*.safetensors): hosting truncation is then channel-weighted as with lora_sdnq_host_calib, and hosted rho is measured in the activation-weighted norm (the output-error proxy)') parser.add_argument('--fail-under', type=float, default=None, help='exit 2 when median applied fidelity of any lora is below this') return parser.parse_args() @@ -251,13 +252,14 @@ class Bf16Repo: return f.get_tensor(key) -def analyze_module(W_dq, deq_params, mods): +def analyze_module(W_dq, deq_params, mods, calib_rms=None): """Return fidelity metrics for one quantized module and the adapters targeting it. Deltas come from each module's production calc_updown and sum the way the loader stacks them, so every family (and dora / dense-bias / diff_b variant) is measured as applied. A module is factor-path eligible only when every - contribution is a plain additive lora. + contribution is a plain additive lora. With ``calib_rms``, hosting mirrors + the calibrated production path and its rho is scored in the weighted norm. """ D = None for mod in mods: @@ -307,13 +309,23 @@ def analyze_module(W_dq, deq_params, mods): if dtype_dict[deq_params['weights_dtype']]['num_bits'] < 8: # mirror lora_sdnq.apply_hosted: seeded svd truncation, realized through the bf16 materialize q = min(cli_args.host_rank, *D.shape) + rms = None + if calib_rms is not None and calib_rms.shape[-1] == D.shape[-1]: + rms = calib_rms.to(D.device, torch.float32).clamp(min=1e-8) + Dw = D * rms if rms is not None else D with torch.random.fork_rng(devices=[D.device] if D.device.type == 'cuda' else []): torch.manual_seed(0) - U, S, V = torch.svd_lowrank(D, q=q, niter=2) + U, S, V = torch.svd_lowrank(Dw, q=q, niter=2) Dk = (U * S) @ V.t() + if rms is not None: + Dk = Dk / rms base16 = W_dq.to(torch.bfloat16).float() realized = (W_dq.to(torch.bfloat16) + Dk.to(torch.bfloat16)).float() - base16 - applied_rho = float(realized.flatten() @ D.flatten() / nD.square()) + if rms is not None: # weighted norm: the diagonal-covariance output-error proxy the calibrated truncation optimizes + Dr = D * rms + applied_rho = float((realized * rms).flatten() @ Dr.flatten() / Dr.square().sum()) + else: + applied_rho = float(realized.flatten() @ D.flatten() / nD.square()) hosted = True return dict(rank=getattr(mods[0], 'dim', None), rms_delta=float(D.pow(2).mean().sqrt()), rms_weight=float(W_dq.pow(2).mean().sqrt()), step_ratio=step_ratio, crossers=crossers, requant_rho=rho, requant_resid=resid, @@ -343,6 +355,12 @@ def main(): return 0 rprint(f'model: "{model_dir}" simulating dtype={args.dtype} group={args.group} hadamard={args.hadamard_group}') + calib_stats = {} + if args.calib: + with safe_open(os.path.expanduser(args.calib), framework='pt', device='cpu') as f: + calib_stats = {k: f.get_tensor(k) for k in f.keys()} + rprint(f'calib: "{args.calib}" layers={len(calib_stats)}') + report = {'model': model_dir, 'pre_quantized': pre_quantized, 'loras': []} worst_effective = 1.0 def write_report(): @@ -361,8 +379,11 @@ def main(): keys = keys[::max(1, len(keys) // args.sample)][:args.sample] for path in keys: entries = mapped[path] + lname = path if pre_quantized: - layer = quant_layers.get(path) or quant_layers.get(quant_stamps.get(path.replace('.', '_'), '')) + if path not in quant_layers: + lname = quant_stamps.get(path.replace('.', '_'), '') + layer = quant_layers.get(lname) if layer is None: unmatched.append(path) continue @@ -400,7 +421,7 @@ def main(): sd_module = make_stub(W.shape) try: mods = [build_module(fam, path, w, net, sd_module) for fam, w in entries] - row = analyze_module(W_dq, params, mods) + row = analyze_module(W_dq, params, mods, calib_rms=calib_stats.get(lname)) except Exception as e: # a family the tool cannot rebuild must not read as a clean module failed.append(f'{path}: {type(e).__name__}: {e}') del W_dq diff --git a/modules/lora/lora_calib.py b/modules/lora/lora_calib.py new file mode 100644 index 000000000..d854016d9 --- /dev/null +++ b/modules/lora/lora_calib.py @@ -0,0 +1,175 @@ +"""Per-checkpoint activation calibration for svd hosting on quantized layers. + +Plain svd truncation of a hosted delta is optimal in weight space but not in +output space: transformer activations concentrate energy in a few input +channels (per-channel RMS spreads by one to three orders of magnitude), so +the directions that matter most for the output are not the largest in +Frobenius norm. Scaling the delta by per-channel input RMS before the svd +and folding the inverse scale into the down factor spends the same rank +budget on output error instead; measured on real checkpoints this raises +output-delta retention by ~0.05 at rank 256 and ~0.09 at rank 64, most on +MLP down projections whose inputs carry the largest outlier channels. + +Statistics come from the model's own forwards: when a sub-8-bit SDNQ model +loads and no calibration is cached for it, streaming sum-of-squares hooks +attach to its quantized linears, accumulate during normal generations, +persist once enough tokens are seen, and go inert. Cached statistics load +at model load and sit on each layer as ``sdnq_calib_rms``; the hosting path +reads them through ``rms_for``. Capture is skipped when the model is +compiled (hooks would break the graph) and everything is gated by the +``lora_sdnq_host_calib`` option. +""" + +import os + +import torch + +from modules import paths, shared, script_callbacks +from modules.logger import log + + +TOKENS_DONE = 65536 +calib_root = os.path.join(paths.models_path, 'calibration') +capture = {'model': None, 'recs': {}, 'handles': [], 'complete': False} + + +def enabled(): + return bool(getattr(shared.opts, 'lora_sdnq_host_calib', False)) + + +def calib_file(model_name): + key = model_name.replace('/', '--').replace('\\', '--').replace(':', '-') + return os.path.join(calib_root, f'{key}.safetensors') + + +def checkpoint_name(sd_model): + info = getattr(sd_model, 'sd_checkpoint_info', None) + return getattr(info, 'name', None) + + +def eligible_modules(sd_model): + """Sub-8-bit 2-D SDNQ linears of the model's transformer: the layers hosting applies to.""" + transformer = getattr(sd_model, 'transformer', None) + if transformer is None: + return [] + from sdnq.common import dtype_dict + out = [] + for name, m in transformer.named_modules(): + deq = getattr(m, 'sdnq_dequantizer', None) + if deq is None or len(deq.original_shape) != 2: + continue + if dtype_dict[deq.weights_dtype]['num_bits'] >= 8: + continue + out.append((name, m)) + return out + + +def detach_capture(): + for h in capture['handles']: + h.remove() + capture['handles'].clear() + capture['recs'].clear() + capture['model'] = None + capture['complete'] = False + + +def hook_for(rec, in_features): + def hook(module, hook_args): # pylint: disable=unused-argument + if rec['done'] or capture['complete']: + return + x = hook_args[0] if hook_args else None + if not torch.is_tensor(x) or x.shape[-1] != in_features: + return + ss = x.detach().reshape(-1, in_features).float().square().sum(dim=0) + if rec['ss'] is None: + rec['ss'] = ss + else: + if rec['ss'].device != ss.device: # offload moves blocks between devices mid-run + rec['ss'] = rec['ss'].to(ss.device) + rec['ss'] += ss + rec['n'] += x.numel() // in_features + if rec['n'] >= TOKENS_DONE: + rec['done'] = True + if all(r['done'] for r in capture['recs'].values()): + persist() + return hook + + +def persist(): + """Write completed statistics and stamp them onto the layers. + + Runs from the last completing hook, inside a forward; the write is a few + MB once per checkpoint ever. Handles stay registered but inert until the + next safe point removes them (hook removal here would mutate the hook + dict the forward is iterating). + """ + if capture['complete']: + return + capture['complete'] = True + from safetensors.torch import save_file + tensors, min_n = {}, None + for name, rec in capture['recs'].items(): + rms = (rec['ss'] / max(rec['n'], 1)).sqrt().float().cpu().contiguous().clone() + tensors[name] = rms + rec['m'].sdnq_calib_rms = rms + min_n = rec['n'] if min_n is None else min(min_n, rec['n']) + path = calib_file(capture['model']) + try: + os.makedirs(calib_root, exist_ok=True) + save_file(tensors, path, metadata={'version': '1', 'model': capture['model'], 'tokens': str(min_n)}) + log.info(f'Network calibration: model="{capture["model"]}" layers={len(tensors)} tokens={min_n} saved="{path}"') + except Exception as e: + log.warning(f'Network calibration: save failed path="{path}" {e}') + + +def maybe_detach(): + """Remove inert hooks once capture finished; safe only outside a model forward.""" + if capture['complete'] and capture['handles']: + detach_capture() + + +def load_stats(model_name, modules_list): + from safetensors import safe_open + path = calib_file(model_name) + loaded = 0 + with safe_open(path, framework='pt', device='cpu') as f: + keys = set(f.keys()) + for name, m in modules_list: + if name in keys: + m.sdnq_calib_rms = f.get_tensor(name) + loaded += 1 + log.info(f'Network calibration: model="{model_name}" layers={loaded} loaded="{path}"') + + +def on_model_loaded(sd_model): + detach_capture() + if not enabled(): + return + name = checkpoint_name(sd_model) + if name is None: + return + modules_list = eligible_modules(sd_model) + if len(modules_list) == 0: + return + if os.path.isfile(calib_file(name)): + load_stats(name, modules_list) + return + if 'Model' in (getattr(shared.opts, 'cuda_compile', None) or []): + return # hooks inside a compiled module graph-break or misbehave; skip capture entirely + capture['model'] = name + for mod_name, m in modules_list: + rec = {'m': m, 'ss': None, 'n': 0, 'done': False} + capture['recs'][mod_name] = rec + capture['handles'].append(m.register_forward_pre_hook(hook_for(rec, int(m.sdnq_dequantizer.original_shape[-1])))) + log.info(f'Network calibration: model="{name}" layers={len(modules_list)} collecting activation statistics') + + +def rms_for(layer): + """Per-channel input RMS for a layer, or None when absent or disabled.""" + maybe_detach() + if not enabled(): + return None + return getattr(layer, 'sdnq_calib_rms', None) + + +script_callbacks.on_model_loaded(on_model_loaded) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index c2a968630..fb772a97d 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -28,19 +28,23 @@ families' own ``calc_updown`` delta is truncated to its top singular directions and appended the same way. Truncation keeps the dominant part of the effect and drops an orthogonal residual, where requantize keeps only the grid extrema and adds grid-shift noise of the delta's own -magnitude. At 8 bits and above requantize retains most of the delta, so -hosting is skipped there and the requantize path remains. +magnitude. When activation statistics for the checkpoint exist (see +``lora_calib``), the truncation is channel-weighted to minimize output +error instead of weight error. At 8 bits and above requantize retains +most of the delta, so hosting is skipped there and the requantize path +remains. """ import torch from modules import devices, shared +from modules.lora import lora_calib from modules.lora import lora_common as l from modules.logger import log fallback_layers: list[str] = [] -hosted_layers: list[tuple[str, float]] = [] +hosted_layers: list[tuple[str, float, bool]] = [] def get_module_factors(module, device, dtype, original_shape=None): @@ -198,8 +202,11 @@ def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=Fa The delta comes from the families' own ``calc_updown``, so every family and scaling quirk is included; factorable members are subtracted out and appended exactly so they never compete with the hosted remainder for - rank. Returns None when the delta cannot ride the channel (wrong shape); - the caller falls back to requantize. + rank. When per-checkpoint activation statistics exist (``lora_calib``), + input channels are weighted by their RMS before truncation so the kept + directions minimize output error rather than weight error. Returns None + when the delta cannot ride the channel (wrong shape); the caller falls + back to requantize. """ from sdnq.quant_utils import rotate_hadamard @@ -230,17 +237,26 @@ def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=Fa cap = int(shared.opts.lora_sdnq_host_rank) q = min(cap, *D.shape) + rms = lora_calib.rms_for(self) + if rms is not None and rms.shape[-1] == D.shape[-1]: + # scale input channels by their activation RMS so truncation minimizes output error rather than weight error + rms = rms.to(device=D.device, dtype=torch.float32).clamp(min=1e-8) + D = D.mul_(rms) + else: + rms = None # svd_lowrank draws random projections; fork so user generation seeds are untouched and re-applies are deterministic with torch.random.fork_rng(devices=[D.device] if D.device.type == 'cuda' else []): torch.manual_seed(0) U, S, V = torch.svd_lowrank(D, q=q, niter=2) - energy = float(S.square().sum() / D.square().sum().clamp(min=1e-30)) + energy = float(S.square().sum() / D.square().sum().clamp(min=1e-30)) # captured fraction, in the weighted domain when calibrated up_h = (U * S).to(dtype=dtype) down_h = V.t() + if rms is not None: + down_h = down_h / rms # unscale in the original input basis, before any rotation if deq.use_hadamard: down_h = rotate_hadamard(down_h, group_size=deq.hadamard_group_size) append_factors(self, ups + [up_h], downs + [down_h.to(dtype=dtype)]) - hosted_layers.append((network_layer_name, energy)) + hosted_layers.append((network_layer_name, energy, rms is not None)) return True @@ -252,11 +268,12 @@ def note_fallback(self, network_layer_name): def report_fallbacks(): if len(hosted_layers) > 0: - energies = sorted(e for _name, e in hosted_layers) + energies = sorted(e for _name, e, _c in hosted_layers) median = energies[len(energies) // 2] - log.info(f'Network load: type=LoRA quant=sdnq hosted={len(hosted_layers)} rank={int(shared.opts.lora_sdnq_host_rank)} energy={median:.2f} min={energies[0]:.2f} non-factorable networks hosted on the svd side-channel') + calibrated = sum(1 for _name, _e, c in hosted_layers if c) + log.info(f'Network load: type=LoRA quant=sdnq hosted={len(hosted_layers)} rank={int(shared.opts.lora_sdnq_host_rank)}{f" calib={calibrated}" if calibrated else ""} energy={median:.2f} min={energies[0]:.2f} non-factorable networks hosted on the svd side-channel') if l.debug: - log.debug(f'Network load: type=LoRA quant=sdnq hosted={[(n, round(e, 3)) for n, e in hosted_layers[:8]]}{"..." if len(hosted_layers) > 8 else ""}') + log.debug(f'Network load: type=LoRA quant=sdnq hosted={[(n, round(e, 3)) for n, e, _c in hosted_layers[:8]]}{"..." if len(hosted_layers) > 8 else ""}') hosted_layers.clear() if len(fallback_layers) > 0: log.warning(f'Network load: type=LoRA quant=sdnq layers={len(fallback_layers)} non-factorable networks requantized in place (reduced fidelity on quantized weights)') diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 8e9284566..b79adf892 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -685,6 +685,7 @@ def create_settings(cmd_opts): "lora_fuse_native": OptionInfo(True, "LoRA native fuse with model"), "lora_fuse_diffusers": OptionInfo(False, "LoRA diffusers fuse with model"), "lora_sdnq_host_rank": OptionInfo(256, "LoRA quantized host rank", gr.Slider, {"minimum": 0, "maximum": 1024, "step": 32}), + "lora_sdnq_host_calib": OptionInfo(True, "LoRA quantized host calibration"), "lora_apply_tags": OptionInfo(0, "LoRA auto-apply tags", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1}), "lora_in_memory_limit": OptionInfo(1, "LoRA memory cache", gr.Slider, {"minimum": 0, "maximum": 32, "step": 1}), "lora_add_hashes_to_infotext": OptionInfo(False, "LoRA add hash info to metadata"), diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 8514e9632..8012cd081 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -28,6 +28,12 @@ for the per-model analyzer): whole, dense content beats the requantize floor by a wide margin, int8 and rank 0 keep the requantize path, removal stays bit-exact, and the svd's random projections never touch the generation rng stream. +- Calibration: per-channel activation statistics weight the hosted + truncation toward loud input channels for better output-space retention; + low-rank content still survives whole, disabling the option reproduces + plain truncation bit-exact, and the capture hooks accumulate, persist + and reload statistics correctly, gated by option, format width and + model compile. All tensors are synthetic; no model files or running server required. @@ -648,6 +654,158 @@ def test_hosted_transitions_and_rng_isolation(): return True +CAT_CALIB = category('calibration') + + +@contextmanager +def host_calib(value): + old = getattr(shared.opts, 'lora_sdnq_host_calib', False) + shared.opts.lora_sdnq_host_calib = value + try: + yield + finally: + shared.opts.lora_sdnq_host_calib = old + + +def test_calibrated_hosting_beats_plain(): + layer = build_layer('uint4') + torch.manual_seed(11) + scale = torch.ones(IN_F, device=DEVICE) + scale[:32] = 40.0 # a few loud input channels, the shape real activations have + D = torch.randn(OUT_F, IN_F, device=DEVICE) * 3e-4 + X = torch.randn(1024, IN_F, device=DEVICE) * scale + Y = X @ D.t() + net = make_dense_net('calnet', layer, D) + + def out_rho(E): + return float((X @ E.t()).flatten() @ Y.flatten() / Y.square().sum()) + + with host_rank(32), host_calib(True), mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net) + plain = out_rho(dq(layer) - Wdq0) + activate() + layer.sdnq_calib_rms = scale.cpu() # statistics as the capture leaves them + activate(net) + weighted = out_rho(dq(layer) - Wdq0) + activate() + del layer.sdnq_calib_rms + assert torch.equal(dq(layer), Wdq0), 'unload must restore bit-exact' + assert weighted > plain + 0.2, f'calibrated hosting must beat plain in output space: {weighted:.3f} vs {plain:.3f}' + return True + + +def test_calibrated_low_rank_delta_survives(): + layer = build_layer('uint4') + _A, _B, D = make_delta(sigma=3e-3) + net = make_dense_net('calfull', layer, D) + with host_rank(64), host_calib(True), mock_model(lin=layer): + Wdq0 = dq(layer) + torch.manual_seed(21) + layer.sdnq_calib_rms = torch.rand(IN_F) * 10 + 0.1 # arbitrary positive statistics: unscale must round-trip + activate(net) + rho = rho_of(dq(layer) - Wdq0, D) + activate() + del layer.sdnq_calib_rms + assert rho > 0.95, f'rank-8 delta under weighted cap 64 must be kept nearly whole: rho={rho:.4f}' + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_calib_option_off_matches_plain(): + layer = build_layer('uint4') + torch.manual_seed(31) + D = torch.randn(OUT_F, IN_F, device=DEVICE) * 3e-4 + net = make_dense_net('caloff', layer, D) + with host_rank(64), mock_model(lin=layer): + Wdq0 = dq(layer) + with host_calib(False): + layer.sdnq_calib_rms = torch.rand(IN_F) + 0.5 + activate(net) + off = dq(layer) + activate() + del layer.sdnq_calib_rms + with host_calib(True): + activate(net) # no statistics attribute: plain truncation + plain = dq(layer) + activate() + assert torch.equal(off, plain), 'option off must reproduce the uncalibrated truncation bit-exact' + assert torch.equal(dq(layer), Wdq0) + return True + + +class MockCheckpointInfo: + def __init__(self, name): + self.name = name + + +class MockCalibSd: + def __init__(self, name, **layers): + self.transformer = MockHolder() + for attr, lyr in layers.items(): + setattr(self.transformer, attr, lyr) + self.sd_checkpoint_info = MockCheckpointInfo(name) + + +def test_calib_capture_persist_roundtrip(): + import tempfile + from modules.lora import lora_calib + layer_a = build_layer('uint4', seed=41) + layer_b = build_layer('uint4', seed=42) + sd = MockCalibSd('test/calib-model', la=layer_a, lb=layer_b) + old_root, old_tokens = lora_calib.calib_root, lora_calib.TOKENS_DONE + with tempfile.TemporaryDirectory() as tmp, host_calib(True): + try: + lora_calib.calib_root = tmp + lora_calib.TOKENS_DONE = 2048 + lora_calib.on_model_loaded(sd) + assert len(lora_calib.capture['handles']) == 2, 'both sub-8-bit linears must hook' + torch.manual_seed(51) + scale = torch.linspace(0.1, 4.0, IN_F, device=DEVICE) + xs = [] + for _ in range(2): # exactly the completion threshold, so statistics cover every forward + x = (torch.randn(1024, IN_F, device=DEVICE) * scale).to(torch.bfloat16) + xs.append(x.float()) + layer_a(x) + layer_b(x) + assert lora_calib.capture['complete'], 'capture must complete once enough tokens are seen' + path = lora_calib.calib_file('test/calib-model') + assert os.path.isfile(path), f'statistics must persist to {path}' + expected = torch.cat(xs).square().mean(dim=0).sqrt().cpu() + assert torch.allclose(layer_a.sdnq_calib_rms, expected, rtol=1e-3, atol=1e-5), 'streamed rms must match the seen activations' + del layer_a.sdnq_calib_rms, layer_b.sdnq_calib_rms + lora_calib.on_model_loaded(sd) # second load takes the cached path + assert len(lora_calib.capture['handles']) == 0, 'cached statistics must not re-attach capture hooks' + assert torch.allclose(layer_a.sdnq_calib_rms, expected, rtol=1e-3, atol=1e-5), 'reload must restore the persisted rms' + del layer_a.sdnq_calib_rms, layer_b.sdnq_calib_rms + finally: + lora_calib.calib_root, lora_calib.TOKENS_DONE = old_root, old_tokens + lora_calib.detach_capture() + return True + + +def test_calib_capture_gates(): + from modules.lora import lora_calib + sd_int8 = MockCalibSd('test/calib-int8', lin=build_layer('int8', seed=43)) + with host_calib(True): + lora_calib.on_model_loaded(sd_int8) + assert len(lora_calib.capture['handles']) == 0, 'int8-only models have nothing to calibrate' + sd_u4 = MockCalibSd('test/calib-gates', lin=build_layer('uint4', seed=44)) + with host_calib(False): + lora_calib.on_model_loaded(sd_u4) + assert len(lora_calib.capture['handles']) == 0, 'option off must disable capture' + old_compile = getattr(shared.opts, 'cuda_compile', None) + with host_calib(True): + shared.opts.cuda_compile = ['Model'] + try: + lora_calib.on_model_loaded(sd_u4) + assert len(lora_calib.capture['handles']) == 0, 'model compile must disable capture' + finally: + shared.opts.cuda_compile = old_compile + lora_calib.detach_capture() + return True + + CAT_ROBUST = category('robustness') @@ -715,6 +873,10 @@ def run_tests(): for fn in [test_hosted_low_rank_delta_is_kept, test_hosted_dense_delta_beats_requant, test_hosted_skips_int8, test_hosted_disabled_by_option, test_hosted_transitions_and_rng_isolation]: run_test(CAT_HOST, fn) + log.warning('=== Calibration ===') + for fn in [test_calibrated_hosting_beats_plain, test_calibrated_low_rank_delta_survives, test_calib_option_off_matches_plain, + test_calib_capture_persist_roundtrip, test_calib_capture_gates]: + run_test(CAT_CALIB, fn) log.warning('=== Robustness ===') for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back]: run_test(CAT_ROBUST, fn) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index eb289bcdf..f55493ccb 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -863,6 +863,7 @@ {"id":"","label":"LoRA native fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_extra_networks"}, {"id":"","label":"LoRA diffusers fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage and torch.compile compatibility.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_extra_networks"}, {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry non-factorable adapter types (LoKR, LoHA, OFT, DoRA) on the side-channel of SDNQ models quantized below 8 bits, where merging would erase most of the adapter. Higher values keep more of the adapter at proportionally higher memory cost. Set to 0 to disable and merge into the quantized weights instead.","ui":"settings_extra_networks"}, + {"id":"","label":"LoRA quantized host calibration","localized":"","hint":"Collection of per-channel activation statistics during normal generations on models quantized below 8 bits, cached per checkpoint. When available, the statistics weight side-channel hosting of non-factorable adapter types toward the channels carrying the most activation energy, improving delivered fidelity at the same host rank.","ui":"settings_extra_networks"}, {"id":"","label":"LoRA auto-apply tags","localized":"","hint":"Automatically add trigger words/tags from LoRA metadata to your prompt.
Set to the number of tags to auto-apply, e.g., 3 = add top 3 trigger tags.
Set to 0 to disable, -1 to add all available tags.","ui":"settings_extra_networks"}, {"id":"","label":"LoRA memory cache","localized":"","hint":"How many LoRAs to keep in network for future use before requiring reloading from storage","ui":"settings_extra_networks"}, {"id":"","label":"LoRA add hash info to metadata","localized":"","hint":"Include LoRA file hashes in generated image metadata.
Useful for reproducibility and tracking which exact LoRA versions were used.","ui":"settings_extra_networks"}, From 8c377aeeee9ca7756ae4a33089424b877fb671a8 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 21 Aug 2026 00:14:07 +0100 Subject: [PATCH 024/270] refactor(settings): dedicated lora settings tab The lora block moves out of Networks into its own settings tab, with header groups by what each option acts on: loading, prompt, application, quantized models and metadata. Locale hints follow to the new section. --- modules/ui_definitions.py | 38 ++++++++++++++++++++++++-------------- ui/locale/locale_en.json | 22 +++++++++++----------- 2 files changed, 35 insertions(+), 25 deletions(-) diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index b79adf892..643cda580 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -676,20 +676,6 @@ def create_settings(cmd_opts): "extra_network_reference_enable": OptionInfo(True, "Enable use of reference models", gr.Checkbox), "extra_network_reference_values": OptionInfo(False, "Use reference values when available", gr.Checkbox), - "extra_networks_lora_sep": OptionInfo("

LoRA

", "", gr.HTML), - "extra_networks_default_multiplier": OptionInfo(1.0, "Default strength", gr.Slider, {"minimum": 0.0, "maximum": 2.0, "step": 0.01}), - "lora_force_reload": OptionInfo(False, "LoRA force reload always"), - "lora_force_diffusers": OptionInfo(False if not cmd_opts.use_openvino else True, "LoRA load using Diffusers method"), - - "lora_apply_te": OptionInfo(False, "LoRA native apply to text encoder"), - "lora_fuse_native": OptionInfo(True, "LoRA native fuse with model"), - "lora_fuse_diffusers": OptionInfo(False, "LoRA diffusers fuse with model"), - "lora_sdnq_host_rank": OptionInfo(256, "LoRA quantized host rank", gr.Slider, {"minimum": 0, "maximum": 1024, "step": 32}), - "lora_sdnq_host_calib": OptionInfo(True, "LoRA quantized host calibration"), - "lora_apply_tags": OptionInfo(0, "LoRA auto-apply tags", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1}), - "lora_in_memory_limit": OptionInfo(1, "LoRA memory cache", gr.Slider, {"minimum": 0, "maximum": 32, "step": 1}), - "lora_add_hashes_to_infotext": OptionInfo(False, "LoRA add hash info to metadata"), - "extra_networks_styles_sep": OptionInfo("

Styles

", "", gr.HTML), "extra_networks_styles": OptionInfo(True, "Show reference styles"), "extra_networks_apply_unparsed": OptionInfo(True, "Restore unparsed prompt"), @@ -702,6 +688,30 @@ def create_settings(cmd_opts): "wildcards_enabled": OptionInfo(True, "Enable file wildcards support"), })) + # --- LoRA --- + options_templates.update(options_section(('lora', "LoRA"), { + "lora_load_sep": OptionInfo("

Load options

", "", gr.HTML), + "lora_force_reload": OptionInfo(False, "LoRA force reload always"), + "lora_force_diffusers": OptionInfo(False if not cmd_opts.use_openvino else True, "LoRA load using Diffusers method"), + "lora_in_memory_limit": OptionInfo(1, "LoRA memory cache", gr.Slider, {"minimum": 0, "maximum": 32, "step": 1}), + + "lora_prompt_sep": OptionInfo("

Prompt helpers

", "", gr.HTML), + "extra_networks_default_multiplier": OptionInfo(1.0, "Default strength", gr.Slider, {"minimum": 0.0, "maximum": 2.0, "step": 0.01}), + "lora_apply_tags": OptionInfo(0, "LoRA auto-apply tags", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1}), + + "lora_apply_sep": OptionInfo("

Apply method

", "", gr.HTML), + "lora_apply_te": OptionInfo(False, "LoRA native apply to text encoder"), + "lora_fuse_native": OptionInfo(True, "LoRA native fuse with model"), + "lora_fuse_diffusers": OptionInfo(False, "LoRA diffusers fuse with model"), + + "lora_quant_sep": OptionInfo("

Quantization options

", "", gr.HTML), + "lora_sdnq_host_rank": OptionInfo(256, "LoRA quantized host rank", gr.Slider, {"minimum": 0, "maximum": 1024, "step": 32}), + "lora_sdnq_host_calib": OptionInfo(True, "LoRA quantized host calibration"), + + "lora_meta_sep": OptionInfo("

Metadata

", "", gr.HTML), + "lora_add_hashes_to_infotext": OptionInfo(False, "LoRA add hash info to metadata"), + })) + # --- Extensions --- options_templates.update(options_section(('extensions', "Extensions"), { "disable_all_extensions": OptionInfo("none", "Disable all extensions", gr.Radio, {"choices": ["none", "user", "all"]}), diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index f55493ccb..1cdeeaf84 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -414,7 +414,7 @@ {"id":"","label":"Desktop","localized":"","hint":"","ui":"settings_ui"}, {"id":"","label":"Downscale high resolution live previews","localized":"","hint":"","ui":"settings_live-preview"}, {"id":"","label":"Detailer use model augment","localized":"","hint":"Run detailer detection models at extra precision","ui":"settings_postprocessing"}, - {"id":"","label":"Default strength","localized":"","hint":"When adding extra network such as Lora to prompt, use this multiplier for it","ui":"settings_extra_networks"}, + {"id":"","label":"Default strength","localized":"","hint":"When adding extra network such as Lora to prompt, use this multiplier for it","ui":"settings_lora"}, {"id":"","label":"Do not change selected model when reading generation parameters","localized":"","hint":"","ui":"settings_legacy_options"}, {"id":"","label":"Do conditional and unconditional denoising in one batch","localized":"","hint":"","ui":"settings_legacy_options"}, {"id":"","label":"Disable NaN check","localized":"","hint":"","ui":"settings_legacy_options"}, @@ -857,16 +857,16 @@ {"id":"","label":"Log view update period","localized":"","hint":"Log view update period, in milliseconds","ui":"settings_ui"}, {"id":"","label":"Live preview display period","localized":"","hint":"Request preview image every n steps, set to 0 to disable","ui":"settings_live-preview"}, {"id":"","label":"Load custom Diffusers pipeline","localized":"","hint":"","ui":"settings_huggingface"}, - {"id":"","label":"LoRA force reload always","localized":"","hint":"Forces LoRA networks to reload from storage on every generation, even if already cached.
Useful for debugging or when LoRA files are being modified externally.
Disable for normal use to benefit from caching.","ui":"settings_extra_networks"}, - {"id":"","label":"LoRA load using Diffusers method","localized":"","hint":"Alternative method uses diffusers built-in LoRA capabilities instead of native SD.Next implementation (may reduce LoRA compatibility)","ui":"settings_extra_networks"}, - {"id":"","label":"LoRA native apply to text encoder","localized":"","hint":"","ui":"settings_extra_networks"}, - {"id":"","label":"LoRA native fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_extra_networks"}, - {"id":"","label":"LoRA diffusers fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage and torch.compile compatibility.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_extra_networks"}, - {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry non-factorable adapter types (LoKR, LoHA, OFT, DoRA) on the side-channel of SDNQ models quantized below 8 bits, where merging would erase most of the adapter. Higher values keep more of the adapter at proportionally higher memory cost. Set to 0 to disable and merge into the quantized weights instead.","ui":"settings_extra_networks"}, - {"id":"","label":"LoRA quantized host calibration","localized":"","hint":"Collection of per-channel activation statistics during normal generations on models quantized below 8 bits, cached per checkpoint. When available, the statistics weight side-channel hosting of non-factorable adapter types toward the channels carrying the most activation energy, improving delivered fidelity at the same host rank.","ui":"settings_extra_networks"}, - {"id":"","label":"LoRA auto-apply tags","localized":"","hint":"Automatically add trigger words/tags from LoRA metadata to your prompt.
Set to the number of tags to auto-apply, e.g., 3 = add top 3 trigger tags.
Set to 0 to disable, -1 to add all available tags.","ui":"settings_extra_networks"}, - {"id":"","label":"LoRA memory cache","localized":"","hint":"How many LoRAs to keep in network for future use before requiring reloading from storage","ui":"settings_extra_networks"}, - {"id":"","label":"LoRA add hash info to metadata","localized":"","hint":"Include LoRA file hashes in generated image metadata.
Useful for reproducibility and tracking which exact LoRA versions were used.","ui":"settings_extra_networks"}, + {"id":"","label":"LoRA force reload always","localized":"","hint":"Forces LoRA networks to reload from storage on every generation, even if already cached.
Useful for debugging or when LoRA files are being modified externally.
Disable for normal use to benefit from caching.","ui":"settings_lora"}, + {"id":"","label":"LoRA load using Diffusers method","localized":"","hint":"Alternative method uses diffusers built-in LoRA capabilities instead of native SD.Next implementation (may reduce LoRA compatibility)","ui":"settings_lora"}, + {"id":"","label":"LoRA native apply to text encoder","localized":"","hint":"","ui":"settings_lora"}, + {"id":"","label":"LoRA native fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_lora"}, + {"id":"","label":"LoRA diffusers fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage and torch.compile compatibility.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_lora"}, + {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry non-factorable adapter types (LoKR, LoHA, OFT, DoRA) on the side-channel of SDNQ models quantized below 8 bits, where merging would erase most of the adapter. Higher values keep more of the adapter at proportionally higher memory cost. Set to 0 to disable and merge into the quantized weights instead.","ui":"settings_lora"}, + {"id":"","label":"LoRA quantized host calibration","localized":"","hint":"Collection of per-channel activation statistics during normal generations on models quantized below 8 bits, cached per checkpoint. When available, the statistics weight side-channel hosting of non-factorable adapter types toward the channels carrying the most activation energy, improving delivered fidelity at the same host rank.","ui":"settings_lora"}, + {"id":"","label":"LoRA auto-apply tags","localized":"","hint":"Automatically add trigger words/tags from LoRA metadata to your prompt.
Set to the number of tags to auto-apply, e.g., 3 = add top 3 trigger tags.
Set to 0 to disable, -1 to add all available tags.","ui":"settings_lora"}, + {"id":"","label":"LoRA memory cache","localized":"","hint":"How many LoRAs to keep in network for future use before requiring reloading from storage","ui":"settings_lora"}, + {"id":"","label":"LoRA add hash info to metadata","localized":"","hint":"Include LoRA file hashes in generated image metadata.
Useful for reproducibility and tracking which exact LoRA versions were used.","ui":"settings_lora"}, {"id":"","label":"LDSR Path","localized":"","hint":"","ui":"settings_legacy_options"}, {"id":"","label":"LoRA load using legacy method","localized":"","hint":"","ui":"settings_legacy_options"}, {"id":"","label":"Loaded LoRA","localized":"","hint":"","ui":"component-5851"}, From 4ae65151632d92c5b23618fc1cf69d95fb32176e Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 21 Aug 2026 00:18:05 +0100 Subject: [PATCH 025/270] feat(lora): quantized apply method setting New lora_sdnq_apply radio (exact, requantize) in the lora settings. requantize keeps the previous behavior: every quantized layer takes the dequantize-add-requantize path, with factor attach and svd hosting gated off. A settings-only flip re-applies loaded networks: the mechanism rides a per-module apply stamp and the network-changed signature, and the activate fallthrough strips factors a closed gate leaves attached. Requantize chosen by the setting logs as info instead of the reduced-fidelity warning. - locale hint covers fidelity and memory tradeoffs of both methods - suite: gate, legacy routing and flip-transition tests --- modules/lora/extra_networks_lora.py | 2 + modules/lora/lora_sdnq.py | 19 +++++- modules/lora/networks.py | 13 +++- modules/ui_definitions.py | 1 + test/test-sdnq-lora-factors.py | 95 ++++++++++++++++++++++++++++- ui/locale/locale_en.json | 1 + 6 files changed, 128 insertions(+), 3 deletions(-) diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index 42d39ec72..d0a6ffe85 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -178,6 +178,8 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): return [f'{name}:{te}:{unet}' for name, te, unet in zip(names, te_multipliers, unet_multipliers, strict=False)] def changed(self, requested: list[str], include: list[str] | None = None, exclude: list[str] | None = None) -> tuple[bool, str]: + from modules.lora import lora_sdnq + requested = requested + [f'stack={lora_sdnq.signature()}'] # settings-only mechanism changes must re-trigger activation if shared.opts.lora_force_reload: debug_log(f'Network check: type=LoRA requested={requested} status="forced"') return True, "forced" diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index fb772a97d..63597111b 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -47,6 +47,16 @@ fallback_layers: list[str] = [] hosted_layers: list[tuple[str, float, bool]] = [] +def enabled(): + """True while the exact svd-channel machinery may take quantized layers; the requantize choice routes every layer to the legacy weight-rewrite path.""" + return getattr(shared.opts, 'lora_sdnq_apply', 'exact') != 'requantize' + + +def signature(): + """Identity suffix for the per-module apply stamp; empty on the default exact mechanism.""" + return '' if enabled() else '|quant=requantize' + + def get_module_factors(module, device, dtype, original_shape=None): """Return ``(up_eff, down)`` reproducing ``calc_updown`` exactly, or None. @@ -82,6 +92,8 @@ def factor_candidate(self, network_layer_name, wanted_names, use_previous=False) factorable LoRA modules for this layer. An empty ``wanted_names`` is a removal request and qualifies whenever factors are currently attached. """ + if not enabled(): + return False # declined layers with factors still attached are stripped by the activate fallthrough if getattr(self, 'sdnq_dequantizer', None) is None or self.__class__.__name__ != 'SDNQLinear': return False if hasattr(self, 'sdnq_lora_svd_stash'): @@ -182,6 +194,8 @@ def append_factors(self, ups, downs): def host_candidate(self, network_layer_name, wanted_names, use_previous=False): """True when a non-factorable set on this layer should be hosted as a truncated svd.""" + if not enabled(): + return False if int(getattr(shared.opts, 'lora_sdnq_host_rank', 0) or 0) <= 0: return False if getattr(self, 'sdnq_dequantizer', None) is None or self.__class__.__name__ != 'SDNQLinear': @@ -276,7 +290,10 @@ def report_fallbacks(): log.debug(f'Network load: type=LoRA quant=sdnq hosted={[(n, round(e, 3)) for n, e, _c in hosted_layers[:8]]}{"..." if len(hosted_layers) > 8 else ""}') hosted_layers.clear() if len(fallback_layers) > 0: - log.warning(f'Network load: type=LoRA quant=sdnq layers={len(fallback_layers)} non-factorable networks requantized in place (reduced fidelity on quantized weights)') + if enabled(): + log.warning(f'Network load: type=LoRA quant=sdnq layers={len(fallback_layers)} non-factorable networks requantized in place (reduced fidelity on quantized weights)') + else: + log.info(f'Network load: type=LoRA quant=sdnq apply=requantize layers={len(fallback_layers)} reason=setting') if l.debug: log.debug(f'Network load: type=LoRA quant=sdnq requantized={fallback_layers[:8]}{"..." if len(fallback_layers) > 8 else ""}') fallback_layers.clear() diff --git a/modules/lora/networks.py b/modules/lora/networks.py index d027a5f81..95c7675a5 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -89,6 +89,7 @@ def network_activate(include=None, exclude=None): refused = 0 with devices.inference_context(), pbar: wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () + stack_sig = lora_sdnq.signature() # apply-mechanism token tracked beside network_current_names so a settings-only flip re-applies applied_layers.clear() lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind lora_sdnq.hosted_layers.clear() @@ -99,7 +100,7 @@ def network_activate(include=None, exclude=None): for _, module in modules[component]: network_layer_name = getattr(module, 'network_layer_name', None) current_names = getattr(module, "network_current_names", ()) - if getattr(module, 'weight', None) is None or shared.state.interrupted or (network_layer_name is None) or (current_names == component_wanted): + if getattr(module, 'weight', None) is None or shared.state.interrupted or (network_layer_name is None) or (current_names == component_wanted and getattr(module, 'network_current_stack', '') == stack_sig): if task is not None: pbar.update(task, advance=1) continue @@ -115,6 +116,7 @@ def network_activate(include=None, exclude=None): applied_layers.append(network_layer_name) applied_weight += 1 module.network_current_names = component_wanted + module.network_current_stack = stack_sig if task is not None: pbar.update(task, advance=1) continue @@ -130,6 +132,7 @@ def network_activate(include=None, exclude=None): applied_layers.append(network_layer_name) applied_weight += 1 module.network_current_names = component_wanted + module.network_current_stack = stack_sig batch_updown, batch_ex_bias = None, None del batch_updown, batch_ex_bias if task is not None: @@ -137,6 +140,13 @@ def network_activate(include=None, exclude=None): continue batch_updown, batch_ex_bias = None, None del batch_updown, batch_ex_bias + stripped = lora_sdnq.remove_factors(module) # the mechanism gate can decline a layer still carrying attached factors; the weight path must start from the pristine channel + if stripped and not component_wanted: # factor-mode layers have no tensor backup, dropping the factors is the whole restore + module.network_current_names = () + module.network_current_stack = stack_sig + if task is not None: + pbar.update(task, advance=1) + continue backup_size += network_backup_weights(module, network_layer_name, component_wanted, fuse) if not component_wanted: weights_backup = getattr(module, "network_weights_backup", None) @@ -161,6 +171,7 @@ def network_activate(include=None, exclude=None): batch_updown, batch_ex_bias = None, None del batch_updown, batch_ex_bias module.network_current_names = component_wanted + module.network_current_stack = stack_sig if task is not None: bs = round(backup_size/1024/1024/1024, 2) if backup_size > 0 else None pbar.update(task, advance=1, description=f'networks={len(l.loaded_networks)} modules={active_components} layers={total} weights={applied_weight} bias={applied_bias} backup={bs} device={device}') diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 643cda580..864d7d641 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -705,6 +705,7 @@ def create_settings(cmd_opts): "lora_fuse_diffusers": OptionInfo(False, "LoRA diffusers fuse with model"), "lora_quant_sep": OptionInfo("

Quantization options

", "", gr.HTML), + "lora_sdnq_apply": OptionInfo("exact", "LoRA quantized apply method", gr.Radio, {"choices": ["exact", "requantize"]}), "lora_sdnq_host_rank": OptionInfo(256, "LoRA quantized host rank", gr.Slider, {"minimum": 0, "maximum": 1024, "step": 32}), "lora_sdnq_host_calib": OptionInfo(True, "LoRA quantized host calibration"), diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 8012cd081..1c0ccb4f6 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -549,6 +549,97 @@ def test_partial_coverage_layers_stay_independent(): return True +@contextmanager +def apply_method(value): + old = getattr(shared.opts, 'lora_sdnq_apply', 'exact') + shared.opts.lora_sdnq_apply = value + try: + yield + finally: + shared.opts.lora_sdnq_apply = old + + +def test_mechanism_gate_declines_candidates(): + """The requantize option must gate every svd-channel entry point and flip the apply-stamp token.""" + layer = build_layer('uint4') + A, B, _D = make_delta() + l_common.loaded_networks.clear() + l_common.loaded_networks.append(make_net('one', layer, A, B)) + wanted = (('one', 1.0, 1.0, None),) + try: + assert lora_sdnq.factor_candidate(layer, layer.network_layer_name, wanted) + with host_rank(64): + assert lora_sdnq.host_candidate(layer, layer.network_layer_name, wanted) + assert lora_sdnq.signature() == '' + with apply_method('requantize'): + assert not lora_sdnq.factor_candidate(layer, layer.network_layer_name, wanted) + with host_rank(64): + assert not lora_sdnq.host_candidate(layer, layer.network_layer_name, wanted) + assert lora_sdnq.signature() == '|quant=requantize' + finally: + l_common.loaded_networks.clear() + return True + + +def test_requantize_option_routes_to_legacy_path(): + """With the option set, a factorable set must take the classic backup-and-requantize path end to end.""" + layer = build_layer('uint4') + A, B, _D = make_delta(sigma=3e-3) + net = make_net('one', layer, A, B) + with apply_method('requantize'), mock_model(lin=layer): + shared.opts.lora_fuse_native = False # a real quantized model forces backup mode; the mock carries no quantization config + Wdq0 = dq(layer) + activate(net) + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'legacy path must not touch the svd channel' + assert layer.svd_up is None, 'legacy path must leave the channel empty' + assert isinstance(layer.network_weights_backup, torch.Tensor), 'legacy path must take a tensor backup' + assert not torch.equal(dq(layer), Wdq0), 'legacy path must requantize the weights' + activate() + assert torch.equal(dq(layer), Wdq0), 'legacy restore must be bit-exact from backup' + return True + + +def test_mechanism_flip_strips_attached_factors(): + """Flipping to requantize with factors attached must strip them before the weight path takes the layer; flipping back must re-enter the factor path.""" + layer = build_layer('uint4') + A, B, _D = make_delta(sigma=3e-3) + net = make_net('one', layer, A, B) + with mock_model(lin=layer): + shared.opts.lora_fuse_native = False # a real quantized model forces backup mode; the mock carries no quantization config + Wdq0 = dq(layer) + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'default mechanism must take the factor path' + E_exact = dq(layer) - Wdq0 + with apply_method('requantize'): + activate(net) # same set; the mechanism token in the apply stamp must force re-processing + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'flip must strip the attached factors' + assert layer.svd_up is None, 'stripped channel must be empty, or the requantized delta double-applies' + assert isinstance(layer.network_weights_backup, torch.Tensor), 'flipped layer must continue on the backup path' + activate(net) # flip back within the same loaded set + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'flip back must re-enter the factor path' + assert torch.equal(dq(layer) - Wdq0, E_exact), 'exact re-apply must restore the base from backup before attaching' + activate() + assert torch.equal(dq(layer), Wdq0), 'unload must return bit-exact pristine' + return True + + +def test_mechanism_flip_restore_pass_strips(): + """A restore-only pass under the requantize option must still drop attached factors.""" + layer = build_layer('uint4') + A, B, _D = make_delta(sigma=3e-3) + net = make_net('one', layer, A, B) + with mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash') + with apply_method('requantize'): + activate() # unload with the gate closed: the fallthrough strip is the only removal route + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'restore pass must strip the factors' + assert torch.equal(dq(layer), Wdq0), 'strip must restore bit-exact' + assert layer.network_current_names == (), 'stripped layer must be stamped restored' + return True + + CAT_HOST = category('hosting') @@ -867,7 +958,9 @@ def run_tests(): for fn in [test_network_activate_roundtrip]: run_test(CAT_E2E, fn) log.warning('=== Set transitions ===') - for fn in [test_mixed_family_transition_restores_base, test_partial_coverage_layers_stay_independent]: + for fn in [test_mixed_family_transition_restores_base, test_partial_coverage_layers_stay_independent, + test_mechanism_gate_declines_candidates, test_requantize_option_routes_to_legacy_path, + test_mechanism_flip_strips_attached_factors, test_mechanism_flip_restore_pass_strips]: run_test(CAT_TRANS, fn) log.warning('=== Hosting ===') for fn in [test_hosted_low_rank_delta_is_kept, test_hosted_dense_delta_beats_requant, test_hosted_skips_int8, diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 1cdeeaf84..cdd66f749 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -862,6 +862,7 @@ {"id":"","label":"LoRA native apply to text encoder","localized":"","hint":"","ui":"settings_lora"}, {"id":"","label":"LoRA native fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_lora"}, {"id":"","label":"LoRA diffusers fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage and torch.compile compatibility.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_lora"}, + {"id":"","label":"LoRA quantized apply method","localized":"","hint":"How networks are applied to SDNQ-quantized model weights:
- exact: adapters are carried alongside the quantized weights at full precision; apply and removal are exact and the quantized weights are never modified. The carried factors take additional VRAM, growing with adapter rank, size and count
- requantize: adapters are merged into the quantized weights, matching the behavior of earlier releases. Uses no additional VRAM (a weight backup for network removal is held in system RAM); on models quantized below 8 bits rounding typically loses much of the adapter effect, with strong adapters retaining more

With requantize selected, the host rank and calibration options below have no effect.

Default is exact.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry non-factorable adapter types (LoKR, LoHA, OFT, DoRA) on the side-channel of SDNQ models quantized below 8 bits, where merging would erase most of the adapter. Higher values keep more of the adapter at proportionally higher memory cost. Set to 0 to disable and merge into the quantized weights instead.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized host calibration","localized":"","hint":"Collection of per-channel activation statistics during normal generations on models quantized below 8 bits, cached per checkpoint. When available, the statistics weight side-channel hosting of non-factorable adapter types toward the channels carrying the most activation energy, improving delivered fidelity at the same host rank.","ui":"settings_lora"}, {"id":"","label":"LoRA auto-apply tags","localized":"","hint":"Automatically add trigger words/tags from LoRA metadata to your prompt.
Set to the number of tags to auto-apply, e.g., 3 = add top 3 trigger tags.
Set to 0 to disable, -1 to add all available tags.","ui":"settings_lora"}, From b14ce1032b6126e34dba727c8aa2b7358a145939 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 26 Aug 2026 16:13:12 +0200 Subject: [PATCH 026/270] update changelog Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 13 ++++++++++++- modules/lora/lora_calib.py | 17 ++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9db1683e..8390e4e5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log for SD.Next -## Highlights for 2026-08-26 +## Update for 2026-08-27 + +- **LoRA** + - new calibration engine that allows lora to be applied with far smaller error when dealing with highly quantized models + - new apply engine that allows lora to be applied much faster + - *note*: calibration data is stored once calculated so it can be reused for future runs, location is `models/calibration` folder +- **Internal** + - attention mechanisms decision tree and apply method refactor + +## Update for 2026-08-26 + +### Highlights for 2026-08-26 Time for a new release, *this is a large one*! Main focus is improving video workflows which also brings full support for new [MiniMax H3](https://vladmandic.github.io/sdnext-docs/MiniMax) and [LTXVideo-2.5](https://vladmandic.github.io/sdnext-docs/LTX) diff --git a/modules/lora/lora_calib.py b/modules/lora/lora_calib.py index d854016d9..032148944 100644 --- a/modules/lora/lora_calib.py +++ b/modules/lora/lora_calib.py @@ -21,6 +21,7 @@ compiled (hooks would break the graph) and everything is gated by the """ import os +from typing import Optional, TypedDict import torch @@ -28,9 +29,23 @@ from modules import paths, shared, script_callbacks from modules.logger import log +class CaptureRecord(TypedDict): + m: torch.nn.Module + ss: Optional[torch.Tensor] + n: int + done: bool + + +class CaptureState(TypedDict): + model: Optional[str] + recs: dict[str, CaptureRecord] + handles: list[torch.utils.hooks.RemovableHandle] + complete: bool + + TOKENS_DONE = 65536 calib_root = os.path.join(paths.models_path, 'calibration') -capture = {'model': None, 'recs': {}, 'handles': [], 'complete': False} +capture: CaptureState = {'model': None, 'recs': {}, 'handles': [], 'complete': False} def enabled(): From a2daf9027c89a6c189bacb563a6598d0dedabc50 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 00:03:03 +0100 Subject: [PATCH 027/270] feat(lora): disk cache for hosted svd factors Hosting a non-factorable set costs one truncated svd per layer on every fresh apply. The factors are deterministic in the checkpoint, the loaded set, the host rank and the calibration statistics, so they persist under data/lora-factor-cache keyed by that identity and replay bit-identically on later applies. lora_sdnq_host_cache sets the disk budget in GB (0 disables), least-recently-used entries are evicted past it. With the cost paid once per configuration, svd subspace iterations rise from 2 to 4: about two thirds of the captured-energy gap to an exact decomposition for +45% one-time compute; an exact svd measures 200-400x slower at these shapes and is not viable. - modules/lora/lora_factor_cache.py: signature, store, flush, eviction - lora_sdnq.apply_hosted: fetch before computing, store after, hits in the load summary - cli/lora-quant-fidelity.py: matching niter for the hosted mirror - test/test-sdnq-lora-factors.py: factor-cache category, 3 tests --- cli/lora-quant-fidelity.py | 2 +- modules/lora/lora_factor_cache.py | 167 ++++++++++++++++++++++++++++++ modules/lora/lora_sdnq.py | 34 ++++-- modules/ui_definitions.py | 1 + test/test-sdnq-lora-factors.py | 102 ++++++++++++++++++ ui/locale/locale_en.json | 3 +- 6 files changed, 299 insertions(+), 10 deletions(-) create mode 100644 modules/lora/lora_factor_cache.py diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py index 74bd214cd..df2c64126 100644 --- a/cli/lora-quant-fidelity.py +++ b/cli/lora-quant-fidelity.py @@ -315,7 +315,7 @@ def analyze_module(W_dq, deq_params, mods, calib_rms=None): Dw = D * rms if rms is not None else D with torch.random.fork_rng(devices=[D.device] if D.device.type == 'cuda' else []): torch.manual_seed(0) - U, S, V = torch.svd_lowrank(Dw, q=q, niter=2) + U, S, V = torch.svd_lowrank(Dw, q=q, niter=4) Dk = (U * S) @ V.t() if rms is not None: Dk = Dk / rms diff --git a/modules/lora/lora_factor_cache.py b/modules/lora/lora_factor_cache.py new file mode 100644 index 000000000..220877c04 --- /dev/null +++ b/modules/lora/lora_factor_cache.py @@ -0,0 +1,167 @@ +"""Disk cache for hosted svd factors. + +Hosting a non-factorable adapter set costs one truncated svd per targeted +layer (tens of ms each, seconds per file) every time the set is applied +fresh. The resulting factors are deterministic in the checkpoint, the loaded +set (files, multipliers, dyn_dim), the host rank and the calibration +statistics, so they are cached on disk keyed by exactly that identity and +replayed bit-identically on the next apply of the same configuration. + +One safetensors file per configuration under ``models/lora-factor-cache``, +holding every hosted layer's post-rotation factor pair. Files are named by +the model and network set with an identity-hash suffix, and the exact +signature is embedded in the file metadata. The +``lora_sdnq_host_cache`` option is the size budget in GB (0 disables); +least-recently-used entries are evicted past the budget. Any doubt about +identity (unknown checkpoint, unreadable lora file, signature mismatch) +disables caching for the pass rather than risking a stale hit. +""" + +import os +import json +import hashlib + +import torch + +from modules import paths, shared +from modules.lora import lora_common as l +from modules.logger import log + + +cache_root = os.path.join(paths.models_path, 'lora-factor-cache') +state = {'wn': None, 'sig': None, 'path': None, 'store': {}, 'dirty': False, 'hits': 0, 'misses': 0} + + +def budget_gb(): + try: + return float(getattr(shared.opts, 'lora_sdnq_host_cache', 0) or 0) + except Exception: + return 0.0 + + +def signature(wanted_names): + """Content identity of a hosted-apply configuration, or None when caching is unsafe.""" + from modules.lora import lora_calib + model_name = lora_calib.checkpoint_name(getattr(shared, 'sd_model', None)) + if model_name is None: + return None + calib_path = lora_calib.calib_file(model_name) + parts = { + 'model': model_name, + 'rank': int(getattr(shared.opts, 'lora_sdnq_host_rank', 0) or 0), + 'calib': int(os.path.getmtime(calib_path)) if os.path.isfile(calib_path) else None, + 'nets': [], + } + for name, te, unet, dyn in wanted_names: + net = next((n for n in l.loaded_networks if n.name == name), None) + filename = getattr(getattr(net, 'network_on_disk', None), 'filename', None) + try: + st = os.stat(filename) + except Exception: + return None + parts['nets'].append([name, repr(te), repr(unet), repr(dyn), filename, int(st.st_mtime), st.st_size]) + return parts + + +def label(parts): + """Filename prefix from the model and net names, so the cache folder reads without tooling.""" + names = [parts['model'].replace('\\', '/').split('/')[-1]] + [n[0] for n in parts['nets']] + text = '-'.join(names) + text = ''.join(c if c.isalnum() or c in '._-' else '-' for c in text) + return text[:96] + + +def begin_pass(wanted_names): + """Bind the pass to its cache entry; identity-memoized on the wanted_names tuple.""" + if wanted_names is state['wn']: + return + state['wn'] = wanted_names + state.update(sig=None, path=None, dirty=False) + state['store'] = {} + if budget_gb() <= 0 or wanted_names == (): + return + parts = signature(wanted_names) + if parts is None: + return + sig = json.dumps(parts, sort_keys=True) + key = hashlib.sha256(sig.encode()).hexdigest()[:24] + path = os.path.join(cache_root, f'{label(parts)}-{key}.safetensors') + store = {} + if os.path.isfile(path): + try: + from safetensors import safe_open + with safe_open(path, framework='pt', device='cpu') as f: + if (f.metadata() or {}).get('sig') == sig: + for k in f.keys(): + store[k] = f.get_tensor(k) + os.utime(path, None) # freshness for LRU eviction + except Exception as e: + log.debug(f'Network cache: read failed path="{path}" {e}') + store = {} + state.update(sig=sig, path=path) + state['store'] = store + log.debug(f'Network cache: entry="{path}" keys={len(store)}') + + +def fetch(network_layer_name): + """Cached (up, down, energy, calibrated) for a layer, or None.""" + if state['sig'] is None: + return None + up = state['store'].get(f'{network_layer_name}.up') + down = state['store'].get(f'{network_layer_name}.down') + energy = state['store'].get(f'{network_layer_name}.energy') + calib = state['store'].get(f'{network_layer_name}.calib') + if up is None or down is None or energy is None or calib is None: + state['misses'] += 1 + return None + state['hits'] += 1 + return up, down, float(energy), bool(calib) + + +def put(network_layer_name, up, down, energy, calibrated): + if state['sig'] is None: + return + state['store'][f'{network_layer_name}.up'] = up.detach().to('cpu').contiguous() + state['store'][f'{network_layer_name}.down'] = down.detach().to('cpu').contiguous() + state['store'][f'{network_layer_name}.energy'] = torch.tensor(float(energy)) + state['store'][f'{network_layer_name}.calib'] = torch.tensor(1 if calibrated else 0, dtype=torch.uint8) + state['dirty'] = True + + +def evict(): + budget = budget_gb() * 2**30 + try: + files = [os.path.join(cache_root, f) for f in os.listdir(cache_root) if f.endswith('.safetensors')] + sizes = {p: os.path.getsize(p) for p in files} + except Exception: + return + total = sum(sizes.values()) + for p in sorted(files, key=os.path.getmtime): + if total <= budget: + break + if p == state['path']: + continue # never evict the entry of the live pass + try: + os.remove(p) + total -= sizes[p] + except Exception: + pass + + +def flush(): + """Persist a dirty pass store; returns (hits, misses) since the last flush.""" + hits, misses = state['hits'], state['misses'] + state['hits'] = state['misses'] = 0 + if not state['dirty'] or state['path'] is None: + return hits, misses + state['dirty'] = False + try: + from safetensors.torch import save_file + os.makedirs(cache_root, exist_ok=True) + tmp = state['path'] + '.tmp' + save_file(state['store'], tmp, metadata={'sig': state['sig']}) + os.replace(tmp, state['path']) + evict() + except Exception as e: + log.warning(f'Network cache: write failed path="{state["path"]}" {e}') + return hits, misses diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 63597111b..51f91044b 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -38,7 +38,7 @@ remains. import torch from modules import devices, shared -from modules.lora import lora_calib +from modules.lora import lora_calib, lora_factor_cache from modules.lora import lora_common as l from modules.logger import log @@ -218,9 +218,11 @@ def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=Fa appended exactly so they never compete with the hosted remainder for rank. When per-checkpoint activation statistics exist (``lora_calib``), input channels are weighted by their RMS before truncation so the kept - directions minimize output error rather than weight error. Returns None - when the delta cannot ride the channel (wrong shape); the caller falls - back to requantize. + directions minimize output error rather than weight error. Computed + factors are disk-cached per configuration (``lora_factor_cache``) and + replayed bit-identically on later applies. Returns None when the delta + cannot ride the channel (wrong shape); the caller falls back to + requantize. """ from sdnq.quant_utils import rotate_hadamard @@ -231,7 +233,11 @@ def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=Fa if updown is None or updown.ndim != 2 or tuple(updown.shape) != tuple(deq.original_shape): return None dtype = deq.result_dtype - D = updown.detach().to(devices.device, torch.float32) + cached = None + if not use_previous: + lora_factor_cache.begin_pass(wanted_names) + cached = lora_factor_cache.fetch(network_layer_name) + D = None if cached is not None else updown.detach().to(devices.device, torch.float32) ups, downs = [], [] loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks @@ -243,12 +249,19 @@ def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=Fa if factors is None: continue up_eff, down = factors - D = D.sub_(up_eff.to(torch.float32) @ down.to(torch.float32)) # factorable members ride exactly; host only the remainder + if D is not None: + D = D.sub_(up_eff.to(torch.float32) @ down.to(torch.float32)) # factorable members ride exactly; host only the remainder if deq.use_hadamard: down = rotate_hadamard(down.to(dtype=torch.float32), group_size=deq.hadamard_group_size).to(dtype=dtype) ups.append(up_eff) downs.append(down) + if cached is not None: + up_h, down_h, energy, calibrated = cached + append_factors(self, ups + [up_h.to(device=devices.device, dtype=dtype)], downs + [down_h.to(device=devices.device, dtype=dtype)]) + hosted_layers.append((network_layer_name, energy, calibrated)) + return True + cap = int(shared.opts.lora_sdnq_host_rank) q = min(cap, *D.shape) rms = lora_calib.rms_for(self) @@ -261,7 +274,7 @@ def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=Fa # svd_lowrank draws random projections; fork so user generation seeds are untouched and re-applies are deterministic with torch.random.fork_rng(devices=[D.device] if D.device.type == 'cuda' else []): torch.manual_seed(0) - U, S, V = torch.svd_lowrank(D, q=q, niter=2) + U, S, V = torch.svd_lowrank(D, q=q, niter=4) energy = float(S.square().sum() / D.square().sum().clamp(min=1e-30)) # captured fraction, in the weighted domain when calibrated up_h = (U * S).to(dtype=dtype) down_h = V.t() @@ -269,7 +282,9 @@ def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=Fa down_h = down_h / rms # unscale in the original input basis, before any rotation if deq.use_hadamard: down_h = rotate_hadamard(down_h, group_size=deq.hadamard_group_size) - append_factors(self, ups + [up_h], downs + [down_h.to(dtype=dtype)]) + down_h = down_h.to(dtype=dtype) + lora_factor_cache.put(network_layer_name, up_h, down_h, energy, rms is not None) + append_factors(self, ups + [up_h], downs + [down_h]) hosted_layers.append((network_layer_name, energy, rms is not None)) return True @@ -281,6 +296,9 @@ def note_fallback(self, network_layer_name): def report_fallbacks(): + hits, misses = lora_factor_cache.flush() + if hits > 0 or misses > 0: + log.info(f'Network load: type=LoRA quant=sdnq cache hits={hits} misses={misses}') if len(hosted_layers) > 0: energies = sorted(e for _name, e, _c in hosted_layers) median = energies[len(energies) // 2] diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index d59970138..a873ea68d 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -707,6 +707,7 @@ def create_settings(cmd_opts): "lora_sdnq_apply": OptionInfo("exact", "LoRA quantized apply method", gr.Radio, {"choices": ["exact", "requantize"]}), "lora_sdnq_host_rank": OptionInfo(256, "LoRA quantized host rank", gr.Slider, {"minimum": 0, "maximum": 1024, "step": 32}), "lora_sdnq_host_calib": OptionInfo(True, "LoRA quantized host calibration"), + "lora_sdnq_host_cache": OptionInfo(10, "LoRA quantized host cache", gr.Slider, {"minimum": 0, "maximum": 100, "step": 1}), "lora_meta_sep": OptionInfo("

Metadata

", "", gr.HTML), "lora_add_hashes_to_infotext": OptionInfo(False, "LoRA add hash info to metadata"), diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 1c0ccb4f6..95c6ddb35 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -34,6 +34,9 @@ for the per-model analyzer): plain truncation bit-exact, and the capture hooks accumulate, persist and reload statistics correctly, gated by option, format width and model compile. +- Factor cache: hosted factors replay bit-identically from the disk cache + without re-running the svd, a configuration change (multiplier) misses + and writes a separate entry, and budget 0 writes nothing. All tensors are synthetic; no model files or running server required. @@ -897,6 +900,102 @@ def test_calib_capture_gates(): return True +CAT_FCACHE = category('factor-cache') + + +@contextmanager +def host_cache(gb, root): + from modules.lora import lora_factor_cache + old_gb = getattr(shared.opts, 'lora_sdnq_host_cache', 0) + old_root = lora_factor_cache.cache_root + shared.opts.lora_sdnq_host_cache = gb + lora_factor_cache.cache_root = root + lora_factor_cache.state.update(wn=None, sig=None, path=None, dirty=False, hits=0, misses=0) + lora_factor_cache.state['store'] = {} + try: + yield lora_factor_cache + finally: + shared.opts.lora_sdnq_host_cache = old_gb + lora_factor_cache.cache_root = old_root + lora_factor_cache.state.update(wn=None, sig=None, path=None, dirty=False, hits=0, misses=0) + lora_factor_cache.state['store'] = {} + + +def cache_fixture(tmp, layer, name='cachenet', sigma=3e-4, seed=61): + """Dense net whose on-disk file exists (signature needs a stat-able path) plus a mock checkpoint identity.""" + torch.manual_seed(seed) + D = torch.randn(OUT_F, IN_F, device=DEVICE) * sigma + net = make_dense_net(name, layer, D) + lora_file = os.path.join(tmp, f'{name}.safetensors') + with open(lora_file, 'wb') as f: + f.write(b'0' * 64) + net.network_on_disk.filename = lora_file + from modules.modeldata import model_data + model_data.sd_model.sd_checkpoint_info = MockCheckpointInfo('test/cache-model') + return net, D + + +def raise_no_svd(*_args, **_kwargs): + raise AssertionError('svd must not run on a cache hit') + + +def test_factor_cache_roundtrip_bitexact(): + import tempfile + layer = build_layer('uint4') + with tempfile.TemporaryDirectory() as tmp: + with host_rank(64), host_cache(10, os.path.join(tmp, 'cache')), mock_model(lin=layer): + net, _D = cache_fixture(tmp, layer) + Wdq0 = dq(layer) + activate(net) + first_up = layer.svd_up.detach().clone() + first_down = layer.svd_down.detach().clone() + activate() # pass end flushed the entry; unload restores the base + files = os.listdir(os.path.join(tmp, 'cache')) + assert len(files) == 1, f'one cache entry expected, got {files}' + real_svd = torch.svd_lowrank + torch.svd_lowrank = raise_no_svd + try: + activate(net) # same configuration: must replay from disk without touching the svd + finally: + torch.svd_lowrank = real_svd + assert torch.equal(layer.svd_up, first_up), 'cache hit must replay bit-identical up factors' + assert torch.equal(layer.svd_down, first_down), 'cache hit must replay bit-identical down factors' + activate() + assert torch.equal(dq(layer), Wdq0), 'unload must restore bit-exact' + return True + + +def test_factor_cache_invalidates_on_multiplier(): + import tempfile + layer = build_layer('uint4') + with tempfile.TemporaryDirectory() as tmp: + with host_rank(64), host_cache(10, os.path.join(tmp, 'cache')), mock_model(lin=layer): + net, _D = cache_fixture(tmp, layer) + activate(net) + up_full = layer.svd_up.detach().clone() + activate() + net.te_multiplier = 0.7 + net.unet_multiplier = [0.7] * 3 + activate(net) # different multiplier: different signature, fresh svd, second entry + assert not torch.equal(layer.svd_up, up_full), 'multiplier change must produce different factors' + activate() + files = os.listdir(os.path.join(tmp, 'cache')) + assert len(files) == 2, f'two cache entries expected, got {files}' + return True + + +def test_factor_cache_disabled_at_zero(): + import tempfile + layer = build_layer('uint4') + with tempfile.TemporaryDirectory() as tmp: + with host_rank(64), host_cache(0, os.path.join(tmp, 'cache')), mock_model(lin=layer): + net, _D = cache_fixture(tmp, layer) + activate(net) + activate() + assert not os.path.isdir(os.path.join(tmp, 'cache')), 'budget 0 must write nothing' + return True + + CAT_ROBUST = category('robustness') @@ -970,6 +1069,9 @@ def run_tests(): for fn in [test_calibrated_hosting_beats_plain, test_calibrated_low_rank_delta_survives, test_calib_option_off_matches_plain, test_calib_capture_persist_roundtrip, test_calib_capture_gates]: run_test(CAT_CALIB, fn) + log.warning('=== Factor cache ===') + for fn in [test_factor_cache_roundtrip_bitexact, test_factor_cache_invalidates_on_multiplier, test_factor_cache_disabled_at_zero]: + run_test(CAT_FCACHE, fn) log.warning('=== Robustness ===') for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back]: run_test(CAT_ROBUST, fn) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 479d44eed..135283560 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -864,9 +864,10 @@ {"id":"","label":"LoRA native apply to text encoder","localized":"","hint":"","ui":"settings_lora"}, {"id":"","label":"LoRA native fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_lora"}, {"id":"","label":"LoRA diffusers fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage and torch.compile compatibility.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_lora"}, - {"id":"","label":"LoRA quantized apply method","localized":"","hint":"How networks are applied to SDNQ-quantized model weights:
- exact: adapters are carried alongside the quantized weights at full precision; apply and removal are exact and the quantized weights are never modified. The carried factors take additional VRAM, growing with adapter rank, size and count
- requantize: adapters are merged into the quantized weights, matching the behavior of earlier releases. Uses no additional VRAM (a weight backup for network removal is held in system RAM); on models quantized below 8 bits rounding typically loses much of the adapter effect, with strong adapters retaining more

With requantize selected, the host rank and calibration options below have no effect.

Default is exact.","ui":"settings_lora"}, + {"id":"","label":"LoRA quantized apply method","localized":"","hint":"How networks are applied to SDNQ-quantized model weights:
- exact: adapters are carried alongside the quantized weights at full precision; apply and removal are exact and the quantized weights are never modified. The carried factors take additional VRAM, growing with adapter rank, size and count
- requantize: adapters are merged into the quantized weights, matching the behavior of earlier releases. Uses no additional VRAM (a weight backup for network removal is held in system RAM); on models quantized below 8 bits rounding typically loses much of the adapter effect, with strong adapters retaining more

With requantize selected, the host rank, calibration and cache options below have no effect.

Default is exact.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry non-factorable adapter types (LoKR, LoHA, OFT, DoRA) on the side-channel of SDNQ models quantized below 8 bits, where merging would erase most of the adapter. Higher values keep more of the adapter at proportionally higher memory cost. Set to 0 to disable and merge into the quantized weights instead.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized host calibration","localized":"","hint":"Collection of per-channel activation statistics during normal generations on models quantized below 8 bits, cached per checkpoint. When available, the statistics weight side-channel hosting of non-factorable adapter types toward the channels carrying the most activation energy, improving delivered fidelity at the same host rank.","ui":"settings_lora"}, + {"id":"","label":"LoRA quantized host cache","localized":"","hint":"Disk budget in GB for caching the side-channel factors computed when hosting non-factorable adapter types on quantized models. A cached configuration skips the truncation math on reapply; least recently used entries are evicted past the budget. Set to 0 to disable.","ui":"settings_lora"}, {"id":"","label":"LoRA auto-apply tags","localized":"","hint":"Automatically add trigger words/tags from LoRA metadata to your prompt.
Set to the number of tags to auto-apply, e.g., 3 = add top 3 trigger tags.
Set to 0 to disable, -1 to add all available tags.","ui":"settings_lora"}, {"id":"","label":"LoRA memory cache","localized":"","hint":"How many LoRAs to keep in network for future use before requiring reloading from storage","ui":"settings_lora"}, {"id":"","label":"LoRA add hash info to metadata","localized":"","hint":"Include LoRA file hashes in generated image metadata.
Useful for reproducibility and tracking which exact LoRA versions were used.","ui":"settings_lora"}, From 03dfddaa96cc835228a12cb690e319c1ab4d7976 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 00:25:49 +0100 Subject: [PATCH 028/270] perf(lora): int8 storage for cached hosted factors Rowwise int8 with fp32 scales halves cache entries; measured in output space on real hosted deltas the roundtrip is fidelity-free (within 0.0003 of fp32 factors, bf16 storage likewise). Factors are quantized before first use and the dequantized roundtrip is what the apply attaches, so a fresh compute and a later cache hit stay bit-identical; the entry format is versioned and pre-int8 entries reload as misses. - lora_factor_cache: quantize_rowwise/dequantize_rowwise, store returns the applied pair, fmt guard on read - test/test-sdnq-lora-factors.py: int8 quantization test, entry-size assertion in the roundtrip test --- modules/lora/lora_factor_cache.py | 85 +++++++++++++++++++++---------- modules/lora/lora_sdnq.py | 2 +- test/test-sdnq-lora-factors.py | 20 +++++++- 3 files changed, 78 insertions(+), 29 deletions(-) diff --git a/modules/lora/lora_factor_cache.py b/modules/lora/lora_factor_cache.py index 220877c04..a5ef4041a 100644 --- a/modules/lora/lora_factor_cache.py +++ b/modules/lora/lora_factor_cache.py @@ -8,13 +8,17 @@ statistics, so they are cached on disk keyed by exactly that identity and replayed bit-identically on the next apply of the same configuration. One safetensors file per configuration under ``models/lora-factor-cache``, -holding every hosted layer's post-rotation factor pair. Files are named by -the model and network set with an identity-hash suffix, and the exact -signature is embedded in the file metadata. The -``lora_sdnq_host_cache`` option is the size budget in GB (0 disables); -least-recently-used entries are evicted past the budget. Any doubt about -identity (unknown checkpoint, unreadable lora file, signature mismatch) -disables caching for the pass rather than risking a stale hit. +holding every hosted layer's post-rotation factor pair as rowwise int8 +with fp32 scales (measured fidelity-free in output space, half the bytes +of bf16). Files are named by the model and network set with an +identity-hash suffix, and the exact signature is embedded in the file +metadata. Factors are quantized before first use: ``store`` returns the +dequantized round-trip for the caller to apply, so a fresh compute and a +later cache hit attach bit-identical tensors. The ``lora_sdnq_host_cache`` +option is the size budget in GB (0 disables); least-recently-used entries +are evicted past the budget. Any doubt about identity (unknown checkpoint, +unreadable lora file, signature mismatch) disables caching for the pass +rather than risking a stale hit. """ import os @@ -86,46 +90,73 @@ def begin_pass(wanted_names): sig = json.dumps(parts, sort_keys=True) key = hashlib.sha256(sig.encode()).hexdigest()[:24] path = os.path.join(cache_root, f'{label(parts)}-{key}.safetensors') - store = {} + entries = {} if os.path.isfile(path): try: from safetensors import safe_open with safe_open(path, framework='pt', device='cpu') as f: - if (f.metadata() or {}).get('sig') == sig: + meta = f.metadata() or {} + if meta.get('sig') == sig and meta.get('fmt') == '2': for k in f.keys(): - store[k] = f.get_tensor(k) + entries[k] = f.get_tensor(k) os.utime(path, None) # freshness for LRU eviction except Exception as e: log.debug(f'Network cache: read failed path="{path}" {e}') - store = {} + entries = {} state.update(sig=sig, path=path) - state['store'] = store - log.debug(f'Network cache: entry="{path}" keys={len(store)}') + state['store'] = entries + log.debug(f'Network cache: entry="{path}" keys={len(entries)}') + + +def quantize_rowwise(t): + t32 = t.detach().to(torch.float32) + scale = t32.abs().amax(dim=1, keepdim=True).clamp(min=1e-12) / 127.0 + q = (t32 / scale).round().clamp(-127, 127).to(torch.int8) + return q, scale + + +def dequantize_rowwise(q, scale): + # int8 * fp32 with a single fp32 rounding: identical on any device, so hit and miss replay the same values + return q.to(torch.float32) * scale def fetch(network_layer_name): - """Cached (up, down, energy, calibrated) for a layer, or None.""" + """Cached (up, down, energy, calibrated) for a layer, or None; factors return as fp32.""" if state['sig'] is None: return None - up = state['store'].get(f'{network_layer_name}.up') - down = state['store'].get(f'{network_layer_name}.down') - energy = state['store'].get(f'{network_layer_name}.energy') - calib = state['store'].get(f'{network_layer_name}.calib') - if up is None or down is None or energy is None or calib is None: + st = state['store'] + up_q, up_s = st.get(f'{network_layer_name}.up_q'), st.get(f'{network_layer_name}.up_s') + down_q, down_s = st.get(f'{network_layer_name}.down_q'), st.get(f'{network_layer_name}.down_s') + energy = st.get(f'{network_layer_name}.energy') + calib = st.get(f'{network_layer_name}.calib') + if up_q is None or up_s is None or down_q is None or down_s is None or energy is None or calib is None: state['misses'] += 1 return None state['hits'] += 1 - return up, down, float(energy), bool(calib) + return dequantize_rowwise(up_q, up_s), dequantize_rowwise(down_q, down_s), float(energy), bool(calib) -def put(network_layer_name, up, down, energy, calibrated): +def store(network_layer_name, up, down, energy, calibrated): + """Quantize-before-use: returns the pair the caller must apply. + + With caching inactive the inputs pass through untouched. Otherwise the + factors are stored as rowwise int8 and the dequantized round-trip comes + back, so the factors applied now and the factors a later hit replays are + the same tensors. + """ if state['sig'] is None: - return - state['store'][f'{network_layer_name}.up'] = up.detach().to('cpu').contiguous() - state['store'][f'{network_layer_name}.down'] = down.detach().to('cpu').contiguous() - state['store'][f'{network_layer_name}.energy'] = torch.tensor(float(energy)) - state['store'][f'{network_layer_name}.calib'] = torch.tensor(1 if calibrated else 0, dtype=torch.uint8) + return up, down + up_q, up_s = quantize_rowwise(up) + down_q, down_s = quantize_rowwise(down) + st = state['store'] + st[f'{network_layer_name}.up_q'] = up_q.to('cpu').contiguous() + st[f'{network_layer_name}.up_s'] = up_s.to('cpu').contiguous() + st[f'{network_layer_name}.down_q'] = down_q.to('cpu').contiguous() + st[f'{network_layer_name}.down_s'] = down_s.to('cpu').contiguous() + st[f'{network_layer_name}.energy'] = torch.tensor(float(energy)) + st[f'{network_layer_name}.calib'] = torch.tensor(1 if calibrated else 0, dtype=torch.uint8) state['dirty'] = True + return dequantize_rowwise(up_q, up_s).to(up.dtype), dequantize_rowwise(down_q, down_s).to(down.dtype) def evict(): @@ -159,7 +190,7 @@ def flush(): from safetensors.torch import save_file os.makedirs(cache_root, exist_ok=True) tmp = state['path'] + '.tmp' - save_file(state['store'], tmp, metadata={'sig': state['sig']}) + save_file(state['store'], tmp, metadata={'sig': state['sig'], 'fmt': '2'}) os.replace(tmp, state['path']) evict() except Exception as e: diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 51f91044b..8d5330e09 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -283,7 +283,7 @@ def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=Fa if deq.use_hadamard: down_h = rotate_hadamard(down_h, group_size=deq.hadamard_group_size) down_h = down_h.to(dtype=dtype) - lora_factor_cache.put(network_layer_name, up_h, down_h, energy, rms is not None) + up_h, down_h = lora_factor_cache.store(network_layer_name, up_h, down_h, energy, rms is not None) append_factors(self, ups + [up_h], downs + [down_h]) hosted_layers.append((network_layer_name, energy, rms is not None)) return True diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 95c6ddb35..58028801c 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -952,6 +952,9 @@ def test_factor_cache_roundtrip_bitexact(): activate() # pass end flushed the entry; unload restores the base files = os.listdir(os.path.join(tmp, 'cache')) assert len(files) == 1, f'one cache entry expected, got {files}' + bf16_bytes = (first_up.numel() + first_down.numel()) * 2 + entry_bytes = os.path.getsize(os.path.join(tmp, 'cache', files[0])) + assert entry_bytes < bf16_bytes * 0.62 + 8192, f'int8 entry must be about half the bf16 factor bytes: {entry_bytes} vs {bf16_bytes}' real_svd = torch.svd_lowrank torch.svd_lowrank = raise_no_svd try: @@ -984,6 +987,20 @@ def test_factor_cache_invalidates_on_multiplier(): return True +def test_factor_cache_int8_quantization(): + from modules.lora import lora_factor_cache as fc + torch.manual_seed(71) + t = torch.randn(64, 128, device=DEVICE) * torch.logspace(-3, 0, 64, device=DEVICE)[:, None] # rows spanning magnitudes + q, s = fc.quantize_rowwise(t) + assert q.dtype == torch.int8 + dq = fc.dequantize_rowwise(q, s) + err = (dq - t).abs().max(dim=1).values + assert bool((err <= s.squeeze(1) * 0.51).all()), 'rowwise int8 error must stay within half a step' + cos = torch.nn.functional.cosine_similarity(dq.flatten(), t.flatten(), dim=0) + assert float(cos) > 0.99995, f'int8 roundtrip cosine {float(cos):.6f}' + return True + + def test_factor_cache_disabled_at_zero(): import tempfile layer = build_layer('uint4') @@ -1070,7 +1087,8 @@ def run_tests(): test_calib_capture_persist_roundtrip, test_calib_capture_gates]: run_test(CAT_CALIB, fn) log.warning('=== Factor cache ===') - for fn in [test_factor_cache_roundtrip_bitexact, test_factor_cache_invalidates_on_multiplier, test_factor_cache_disabled_at_zero]: + for fn in [test_factor_cache_roundtrip_bitexact, test_factor_cache_invalidates_on_multiplier, + test_factor_cache_int8_quantization, test_factor_cache_disabled_at_zero]: run_test(CAT_FCACHE, fn) log.warning('=== Robustness ===') for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back]: From 74e68b58ce440ef3b29eb930de3e4f106d75b942 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 01:25:03 +0100 Subject: [PATCH 029/270] perf(lora): oversample the hosted-factor sketch to near-exact svd Sketch hosted deltas at rank+64 with eight power iterations and keep the top rank columns; this lands within noise of the exact decomposition at roughly twice a sketch cost the factor cache pays once per configuration. Bump the cache format so narrower-sketch entries reload as misses. --- cli/lora-quant-fidelity.py | 4 ++-- modules/lora/lora_factor_cache.py | 4 ++-- modules/lora/lora_sdnq.py | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py index df2c64126..1dc41bfe5 100644 --- a/cli/lora-quant-fidelity.py +++ b/cli/lora-quant-fidelity.py @@ -315,8 +315,8 @@ def analyze_module(W_dq, deq_params, mods, calib_rms=None): Dw = D * rms if rms is not None else D with torch.random.fork_rng(devices=[D.device] if D.device.type == 'cuda' else []): torch.manual_seed(0) - U, S, V = torch.svd_lowrank(Dw, q=q, niter=4) - Dk = (U * S) @ V.t() + U, S, V = torch.svd_lowrank(Dw, q=min(q + 64, *D.shape), niter=8) + Dk = (U[:, :q] * S[:q]) @ V[:, :q].t() if rms is not None: Dk = Dk / rms base16 = W_dq.to(torch.bfloat16).float() diff --git a/modules/lora/lora_factor_cache.py b/modules/lora/lora_factor_cache.py index a5ef4041a..6e7e46a0b 100644 --- a/modules/lora/lora_factor_cache.py +++ b/modules/lora/lora_factor_cache.py @@ -96,7 +96,7 @@ def begin_pass(wanted_names): from safetensors import safe_open with safe_open(path, framework='pt', device='cpu') as f: meta = f.metadata() or {} - if meta.get('sig') == sig and meta.get('fmt') == '2': + if meta.get('sig') == sig and meta.get('fmt') == '3': for k in f.keys(): entries[k] = f.get_tensor(k) os.utime(path, None) # freshness for LRU eviction @@ -190,7 +190,7 @@ def flush(): from safetensors.torch import save_file os.makedirs(cache_root, exist_ok=True) tmp = state['path'] + '.tmp' - save_file(state['store'], tmp, metadata={'sig': state['sig'], 'fmt': '2'}) + save_file(state['store'], tmp, metadata={'sig': state['sig'], 'fmt': '3'}) os.replace(tmp, state['path']) evict() except Exception as e: diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 8d5330e09..b2a91de6c 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -274,7 +274,9 @@ def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=Fa # svd_lowrank draws random projections; fork so user generation seeds are untouched and re-applies are deterministic with torch.random.fork_rng(devices=[D.device] if D.device.type == 'cuda' else []): torch.manual_seed(0) - U, S, V = torch.svd_lowrank(D, q=q, niter=4) + # oversampled sketch with extra power iterations lands within noise of exact svd; only the top q columns are kept + U, S, V = torch.svd_lowrank(D, q=min(q + 64, *D.shape), niter=8) + U, S, V = U[:, :q], S[:q], V[:, :q] energy = float(S.square().sum() / D.square().sum().clamp(min=1e-30)) # captured fraction, in the weighted domain when calibrated up_h = (U * S).to(dtype=dtype) down_h = V.t() From ff94565da879aa185274a0906ad03ddc103dc3e7 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 01:43:26 +0100 Subject: [PATCH 030/270] perf(lora): pad side-channel factor ranks to fixed buckets The compiled dequant specializes per factor rank, so each distinct lora set shape paid a compile stall on switch. Pad appended factors to a power-of-two rank ladder (multiples of 64 past the hosted cap) with zero fill: switches inside a bucket reuse the compiled graph, and common trained ranks land on their bucket exactly so padding is usually a no-op. Regression tests pin the factor add inside the single compiled graph and the bucket reuse. --- modules/lora/lora_sdnq.py | 23 ++++++++ test/test-sdnq-lora-factors.py | 104 +++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index b2a91de6c..5635f8495 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -46,6 +46,22 @@ from modules.logger import log fallback_layers: list[str] = [] hosted_layers: list[tuple[str, float, bool]] = [] +def rank_bucket(r): + """Fixed rank ladder for compiled-graph reuse: powers of two up to 256, multiples of 64 above (hosted rank plus exact members).""" + if r <= 8: + return 8 + if r <= 256: + return 1 << (r - 1).bit_length() + return -(-r // 64) * 64 + + +def pad_rank(t, dim, bucket): + if t.shape[dim] >= bucket: + return t + shape = list(t.shape) + shape[dim] = bucket - t.shape[dim] + return torch.cat([t, t.new_zeros(shape)], dim=dim) + def enabled(): """True while the exact svd-channel machinery may take quantized layers; the requantize choice routes every layer to the legacy weight-rewrite path.""" @@ -187,6 +203,13 @@ def append_factors(self, ups, downs): parts_down = ([orig_down.to(device=devices.device, dtype=dtype)] if orig_down is not None else []) + downs new_up = torch.cat(parts_up, dim=1).contiguous() new_down = torch.cat(parts_down, dim=0).contiguous() + from sdnq.common import use_torch_compile + if use_torch_compile: + # the compiled dequant specializes per factor rank; pad to a fixed bucket so set switches inside a bucket reuse the graph (zero columns contribute exactly nothing) + dim_up, dim_down = (0, 1) if deq.use_quantized_matmul else (1, 0) + bucket = rank_bucket(new_up.shape[dim_up]) + new_up = pad_rank(new_up, dim_up, bucket) + new_down = pad_rank(new_down, dim_down, bucket) self.sdnq_lora_svd_stash = (orig_up, orig_down) self.svd_up = torch.nn.Parameter(new_up.to(device=device), requires_grad=False) self.svd_down = torch.nn.Parameter(new_down.to(device=device), requires_grad=False) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 58028801c..4c2c17ce6 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -37,6 +37,11 @@ for the per-model analyzer): - Factor cache: hosted factors replay bit-identically from the disk cache without re-running the svd, a configuration change (multiplier) misses and writes a separate entry, and budget 0 writes nothing. +- Compile: the factor add runs inside the single compiled dequant graph + (fullgraph, no breaks) and matches the eager result; factor ranks pad to + a fixed bucket ladder so set switches inside a bucket reuse the compiled + graph while a novel bucket compiles exactly once, and padding changes + the dequantized weight by nothing beyond reduction-order ulp. All tensors are synthetic; no model files or running server required. @@ -1013,6 +1018,102 @@ def test_factor_cache_disabled_at_zero(): return True +CAT_COMPILE = category('compile') + + +def dq_compiled(layer): + # the production entry: skip_compile left at its default so the shared compiled dequant runs + return layer.sdnq_dequantizer(layer.weight, layer.scale, zero_point=layer.zero_point, + svd_up=layer.svd_up, svd_down=layer.svd_down, + skip_quantized_matmul=layer.sdnq_dequantizer.use_quantized_matmul, + dtype=torch.float32) + + +def graph_stats(): + from torch._dynamo.utils import counters + return int(counters['stats']['unique_graphs']), sum(counters['graph_break'].values()) + + +def test_factor_add_inside_compiled_graph(): + from sdnq.common import use_torch_compile + if not use_torch_compile: + return True # compile disabled at sdnq import (no triton); nothing to pin + import torch._dynamo + from torch._dynamo.utils import counters + layer = build_layer('uint4') + A, B, _D = make_delta() + dtype = layer.sdnq_dequantizer.result_dtype + torch._dynamo.reset() + counters.clear() + lora_sdnq.append_factors(layer, [B.to(dtype)], [A.to(dtype)]) + W_c = dq_compiled(layer) + graphs, breaks = graph_stats() + assert breaks == 0, f'graph breaks in the compiled dequant: {breaks}' + assert graphs == 1, f'factor-bearing dequant must be one compiled region, got {graphs} graphs' + W_e = dq(layer) + assert torch.allclose(W_c, W_e, rtol=1e-3, atol=1e-4), f'compiled vs eager dequant diverged, max {float((W_c - W_e).abs().max()):.3e}' + lora_sdnq.remove_factors(layer) + return True + + +def test_rank_bucket_graph_reuse(): + from sdnq.common import use_torch_compile + if not use_torch_compile: + return True + import torch._dynamo + from torch._dynamo.utils import counters + import sdnq.common as sdnq_common + layer = build_layer('uint4', use_hadamard=False) + dtype = layer.sdnq_dequantizer.result_dtype + torch.manual_seed(13) + mk = lambda r: (torch.randn(OUT_F, r, device=DEVICE, dtype=dtype) * 0.01, torch.randn(r, IN_F, device=DEVICE, dtype=dtype) * 0.01) + B8, A8 = mk(8) + B6, A6 = mk(6) + B24, A24 = mk(24) + + torch._dynamo.reset() + counters.clear() + lora_sdnq.append_factors(layer, [B8], [A8]) + assert layer.svd_up.shape[1] == 8, f'rank 8 must bucket to 8, got {layer.svd_up.shape[1]}' + dq_compiled(layer) + g_first, _ = graph_stats() + + lora_sdnq.remove_factors(layer) + lora_sdnq.append_factors(layer, [B6], [A6]) + assert layer.svd_up.shape[1] == 8, f'rank 6 must pad to bucket 8, got {layer.svd_up.shape[1]}' + assert float(layer.svd_up[:, 6:].abs().sum()) == 0.0, 'pad columns must be exact zeros' + dq_compiled(layer) + g_same, _ = graph_stats() + assert g_same == g_first, f'same bucket must reuse the graph: {g_first} -> {g_same}' + + lora_sdnq.remove_factors(layer) + lora_sdnq.append_factors(layer, [B24], [A24]) + assert layer.svd_up.shape[1] == 32, f'rank 24 must pad to bucket 32, got {layer.svd_up.shape[1]}' + dq_compiled(layer) + g_novel, _ = graph_stats() + assert g_novel == g_first + 1, f'novel bucket must compile exactly one new graph: {g_first} -> {g_novel}' + + lora_sdnq.remove_factors(layer) + lora_sdnq.append_factors(layer, [B8], [A8]) + dq_compiled(layer) + g_back, _ = graph_stats() + assert g_back == g_novel, f'returning to a seen bucket must be free: {g_novel} -> {g_back}' + + W_padded = dq(layer) + lora_sdnq.remove_factors(layer) + old_flag = sdnq_common.use_torch_compile + sdnq_common.use_torch_compile = False + try: + lora_sdnq.append_factors(layer, [B8], [A8]) + assert layer.svd_up.shape[1] == 8 + W_unpadded = dq(layer) + finally: + sdnq_common.use_torch_compile = old_flag + lora_sdnq.remove_factors(layer) + assert torch.allclose(W_padded, W_unpadded, rtol=0.0, atol=1e-6), f'padding must be inert beyond reduction-order ulp, max {float((W_padded - W_unpadded).abs().max()):.3e}' + return True + + CAT_ROBUST = category('robustness') @@ -1090,6 +1191,9 @@ def run_tests(): for fn in [test_factor_cache_roundtrip_bitexact, test_factor_cache_invalidates_on_multiplier, test_factor_cache_int8_quantization, test_factor_cache_disabled_at_zero]: run_test(CAT_FCACHE, fn) + log.warning('=== Compile ===') + for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse]: + run_test(CAT_COMPILE, fn) log.warning('=== Robustness ===') for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back]: run_test(CAT_ROBUST, fn) From e33965fc3b348cd7f0913eceacd43d0fac59095a Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 26 Jul 2026 01:15:23 +0100 Subject: [PATCH 031/270] fix(lora): bound calibration capture and cover unet denoisers Persist now fires either when every hooked layer reaches the token quota or at a fixed denoiser-forward deadline; layers under a small token floor are omitted and stay on plain truncation. The all-done barrier alone never fired on models whose modulation or pooled projections see a few tokens per forward, so hooks stayed registered forever and statistics recollected every session. eligible_modules walks the transformer or the unet, so unet checkpoints collect statistics at all. - lora_sdnq: drop the unused use_previous parameter; the factor cache store now always runs inside a begin_pass - tests: deadline persist, token-floor omission, unet root walk --- modules/lora/lora_calib.py | 66 +++++++++++++----- modules/lora/lora_sdnq.py | 28 ++++---- test/test-sdnq-lora-factors.py | 118 ++++++++++++++++++++++++++++++++- 3 files changed, 179 insertions(+), 33 deletions(-) diff --git a/modules/lora/lora_calib.py b/modules/lora/lora_calib.py index 032148944..622fa50e9 100644 --- a/modules/lora/lora_calib.py +++ b/modules/lora/lora_calib.py @@ -13,11 +13,15 @@ MLP down projections whose inputs carry the largest outlier channels. Statistics come from the model's own forwards: when a sub-8-bit SDNQ model loads and no calibration is cached for it, streaming sum-of-squares hooks attach to its quantized linears, accumulate during normal generations, -persist once enough tokens are seen, and go inert. Cached statistics load -at model load and sit on each layer as ``sdnq_calib_rms``; the hosting path -reads them through ``rms_for``. Capture is skipped when the model is -compiled (hooks would break the graph) and everything is gated by the -``lora_sdnq_host_calib`` option. +persist, and go inert. Persist fires when every layer reaches the token +quota, or at a bounded number of denoiser forwards for models where some +projections take pooled or modulation vectors (a few tokens per forward) +and could never reach an absolute quota; layers still under a small token +floor at the deadline are omitted and stay on plain truncation. Cached +statistics load at model load and sit on each layer as ``sdnq_calib_rms``; +the hosting path reads them through ``rms_for``. Capture is skipped when +the model is compiled (hooks would break the graph) and everything is +gated by the ``lora_sdnq_host_calib`` option. """ import os @@ -40,12 +44,15 @@ class CaptureState(TypedDict): model: Optional[str] recs: dict[str, CaptureRecord] handles: list[torch.utils.hooks.RemovableHandle] + forwards: int complete: bool TOKENS_DONE = 65536 +FORWARDS_DEADLINE = 48 # ~2 generations; token-rich layers normally finish their quota well inside it +TOKENS_FLOOR = 32 # below this mass the rms estimate is noise; the layer is omitted and stays on plain truncation calib_root = os.path.join(paths.models_path, 'calibration') -capture: CaptureState = {'model': None, 'recs': {}, 'handles': [], 'complete': False} +capture: CaptureState = {'model': None, 'recs': {}, 'handles': [], 'forwards': 0, 'complete': False} def enabled(): @@ -62,14 +69,20 @@ def checkpoint_name(sd_model): return getattr(info, 'name', None) +def denoiser_root(sd_model): + """The model's denoiser component, transformer first, unet otherwise.""" + root = getattr(sd_model, 'transformer', None) + return root if root is not None else getattr(sd_model, 'unet', None) + + def eligible_modules(sd_model): - """Sub-8-bit 2-D SDNQ linears of the model's transformer: the layers hosting applies to.""" - transformer = getattr(sd_model, 'transformer', None) - if transformer is None: + """Sub-8-bit 2-D SDNQ linears of the model's denoiser: the layers hosting applies to.""" + root = denoiser_root(sd_model) + if root is None: return [] from sdnq.common import dtype_dict out = [] - for name, m in transformer.named_modules(): + for name, m in root.named_modules(): deq = getattr(m, 'sdnq_dequantizer', None) if deq is None or len(deq.original_shape) != 2: continue @@ -85,9 +98,24 @@ def detach_capture(): capture['handles'].clear() capture['recs'].clear() capture['model'] = None + capture['forwards'] = 0 capture['complete'] = False +def deadline_hook(module, hook_args): # pylint: disable=unused-argument + """Count denoiser forwards and close capture at the deadline. + + Layers taking pooled or modulation vectors see a few tokens per forward + and can never reach the token quota; a global forward count bounds + capture for them and for modules the generation path never runs. + """ + if capture['complete']: + return + capture['forwards'] += 1 + if capture['forwards'] >= FORWARDS_DEADLINE: + persist() + + def hook_for(rec, in_features): def hook(module, hook_args): # pylint: disable=unused-argument if rec['done'] or capture['complete']: @@ -111,10 +139,12 @@ def hook_for(rec, in_features): def persist(): - """Write completed statistics and stamp them onto the layers. + """Write accumulated statistics and stamp them onto the layers. - Runs from the last completing hook, inside a forward; the write is a few - MB once per checkpoint ever. Handles stay registered but inert until the + Runs from the last hook to complete its quota or from the forward + deadline, inside a forward; the write is a few MB once per checkpoint + ever. Layers under the token floor are omitted rather than saved with + meaningless statistics. Handles stay registered but inert until the next safe point removes them (hook removal here would mutate the hook dict the forward is iterating). """ @@ -124,15 +154,20 @@ def persist(): from safetensors.torch import save_file tensors, min_n = {}, None for name, rec in capture['recs'].items(): - rms = (rec['ss'] / max(rec['n'], 1)).sqrt().float().cpu().contiguous().clone() + if rec['ss'] is None or rec['n'] < TOKENS_FLOOR: + continue + rms = (rec['ss'] / rec['n']).sqrt().float().cpu().contiguous().clone() tensors[name] = rms rec['m'].sdnq_calib_rms = rms min_n = rec['n'] if min_n is None else min(min_n, rec['n']) + if not tensors: + log.warning(f'Network calibration: model="{capture["model"]}" no layer reached {TOKENS_FLOOR} tokens; nothing saved') + return path = calib_file(capture['model']) try: os.makedirs(calib_root, exist_ok=True) save_file(tensors, path, metadata={'version': '1', 'model': capture['model'], 'tokens': str(min_n)}) - log.info(f'Network calibration: model="{capture["model"]}" layers={len(tensors)} tokens={min_n} saved="{path}"') + log.info(f'Network calibration: model="{capture["model"]}" layers={len(tensors)}/{len(capture["recs"])} tokens={min_n} saved="{path}"') except Exception as e: log.warning(f'Network calibration: save failed path="{path}" {e}') @@ -172,6 +207,7 @@ def on_model_loaded(sd_model): if 'Model' in (getattr(shared.opts, 'cuda_compile', None) or []): return # hooks inside a compiled module graph-break or misbehave; skip capture entirely capture['model'] = name + capture['handles'].append(denoiser_root(sd_model).register_forward_pre_hook(deadline_hook)) for mod_name, m in modules_list: rec = {'m': m, 'ss': None, 'n': 0, 'done': False} capture['recs'][mod_name] = rec diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 5635f8495..3f9b9a0a0 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -101,7 +101,7 @@ def get_module_factors(module, device, dtype, original_shape=None): return up_eff.to(dtype=dtype), down.to(device=device, dtype=dtype) -def factor_candidate(self, network_layer_name, wanted_names, use_previous=False): +def factor_candidate(self, network_layer_name, wanted_names): """True when this layer should take the exact svd-append path. Requires an SDNQ linear layer whose active networks all contribute plain @@ -116,9 +116,8 @@ def factor_candidate(self, network_layer_name, wanted_names, use_previous=False) return True if wanted_names == (): # nothing attached, nothing to remove return False - loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks seen = False - for net in loaded: + for net in l.loaded_networks: module = net.modules.get(network_layer_name, None) if module is None: continue @@ -150,7 +149,7 @@ def remove_factors(self): return True -def apply_factors(self, network_layer_name, wanted_names, use_previous=False): +def apply_factors(self, network_layer_name, wanted_names): """Attach the active networks' LoRA factors to this layer's svd side-channel. Replaces any previously attached factors (multiplier changes re-enter @@ -166,9 +165,9 @@ def apply_factors(self, network_layer_name, wanted_names, use_previous=False): deq = self.sdnq_dequantizer dtype = deq.result_dtype - loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks + ups, downs = [], [] - for net in loaded: + for net in l.loaded_networks: module = net.modules.get(network_layer_name, None) if module is None: continue @@ -215,7 +214,7 @@ def append_factors(self, ups, downs): self.svd_down = torch.nn.Parameter(new_down.to(device=device), requires_grad=False) -def host_candidate(self, network_layer_name, wanted_names, use_previous=False): +def host_candidate(self, network_layer_name, wanted_names): """True when a non-factorable set on this layer should be hosted as a truncated svd.""" if not enabled(): return False @@ -228,11 +227,11 @@ def host_candidate(self, network_layer_name, wanted_names, use_previous=False): from sdnq.common import dtype_dict if dtype_dict[self.sdnq_dequantizer.weights_dtype]['num_bits'] >= 8: return False # requantize retains most of the delta at 8 bits and above; truncation would lose more than it saves - loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks - return any(net.modules.get(network_layer_name, None) is not None for net in loaded) + + return any(net.modules.get(network_layer_name, None) is not None for net in l.loaded_networks) -def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=False): +def apply_hosted(self, network_layer_name, updown, wanted_names): """Host a set's delta on the svd channel: exact factors for factorable members, the top-k singular directions of the remainder for the rest. @@ -256,15 +255,12 @@ def apply_hosted(self, network_layer_name, updown, wanted_names, use_previous=Fa if updown is None or updown.ndim != 2 or tuple(updown.shape) != tuple(deq.original_shape): return None dtype = deq.result_dtype - cached = None - if not use_previous: - lora_factor_cache.begin_pass(wanted_names) - cached = lora_factor_cache.fetch(network_layer_name) + lora_factor_cache.begin_pass(wanted_names) + cached = lora_factor_cache.fetch(network_layer_name) D = None if cached is not None else updown.detach().to(devices.device, torch.float32) ups, downs = [], [] - loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks - for net in loaded: + for net in l.loaded_networks: module = net.modules.get(network_layer_name, None) if module is None: continue diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 4c2c17ce6..53872f021 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -858,7 +858,7 @@ def test_calib_capture_persist_roundtrip(): lora_calib.calib_root = tmp lora_calib.TOKENS_DONE = 2048 lora_calib.on_model_loaded(sd) - assert len(lora_calib.capture['handles']) == 2, 'both sub-8-bit linears must hook' + assert len(lora_calib.capture['handles']) == 3, 'both sub-8-bit linears plus the root forward counter must hook' torch.manual_seed(51) scale = torch.linspace(0.1, 4.0, IN_F, device=DEVICE) xs = [] @@ -905,6 +905,119 @@ def test_calib_capture_gates(): return True +class MockCalibDenoiser(torch.nn.Module): + """Denoiser whose forward feeds one token-rich linear and one token-starved one, like a DiT block beside its modulation projection.""" + def __init__(self, rich, starved, starved_tokens): + super().__init__() + self.rich = rich + self.starved = starved + self.starved_tokens = starved_tokens + + def forward(self, x): + self.rich(x) + self.starved(x[:self.starved_tokens]) + return x + + +def test_calib_deadline_persists_starved_layers(): + import tempfile + from safetensors import safe_open + from modules.lora import lora_calib + rich = build_layer('uint4', seed=45) + starved = build_layer('uint4', seed=46) + root = MockCalibDenoiser(rich, starved, starved_tokens=8) + sd = MockCalibSd('test/calib-deadline') + sd.transformer = root + old = (lora_calib.calib_root, lora_calib.TOKENS_DONE, lora_calib.FORWARDS_DEADLINE) + with tempfile.TemporaryDirectory() as tmp, host_calib(True): + try: + lora_calib.calib_root = tmp + lora_calib.TOKENS_DONE = 2048 + lora_calib.FORWARDS_DEADLINE = 6 + lora_calib.on_model_loaded(sd) + assert len(lora_calib.capture['handles']) == 3, 'two layer hooks plus the root forward counter must attach' + torch.manual_seed(52) + xs = [] + for i in range(6): + x = torch.randn(1024, IN_F, device=DEVICE).to(torch.bfloat16) + if i < 5: # the deadline fires at the start of the sixth forward, before its layer hooks run + xs.append(x[:8].float()) + root(x) + assert lora_calib.capture['complete'], 'the forward deadline must close capture' + assert lora_calib.capture['forwards'] == 6, f'root counter must track denoiser forwards, got {lora_calib.capture["forwards"]}' + path = lora_calib.calib_file('test/calib-deadline') + assert os.path.isfile(path), 'deadline persist must write the statistics file' + assert getattr(starved, 'sdnq_calib_rms', None) is not None, 'the starved layer must carry statistics' + expected = torch.cat(xs).square().mean(dim=0).sqrt().cpu() + assert torch.allclose(starved.sdnq_calib_rms, expected, rtol=1e-3, atol=1e-5), 'starved rms must match exactly the tokens it saw' + with safe_open(path, framework='pt', device='cpu') as f: + assert set(f.keys()) == {'rich', 'starved'}, f'both layers must persist, got {sorted(f.keys())}' + assert f.metadata()['tokens'] == '40', f'metadata must report the weakest saved layer, got {f.metadata()["tokens"]}' + finally: + lora_calib.calib_root, lora_calib.TOKENS_DONE, lora_calib.FORWARDS_DEADLINE = old + lora_calib.detach_capture() + return True + + +def test_calib_deadline_omits_subfloor_layers(): + import tempfile + from safetensors import safe_open + from modules.lora import lora_calib + rich = build_layer('uint4', seed=48) + starved = build_layer('uint4', seed=49) + root = MockCalibDenoiser(rich, starved, starved_tokens=2) # 2 tokens x 5 counted forwards = 10, under the floor of 32 + sd = MockCalibSd('test/calib-subfloor') + sd.transformer = root + old = (lora_calib.calib_root, lora_calib.TOKENS_DONE, lora_calib.FORWARDS_DEADLINE) + with tempfile.TemporaryDirectory() as tmp, host_calib(True): + try: + lora_calib.calib_root = tmp + lora_calib.TOKENS_DONE = 2048 + lora_calib.FORWARDS_DEADLINE = 6 + lora_calib.on_model_loaded(sd) + torch.manual_seed(53) + for _ in range(6): + root(torch.randn(1024, IN_F, device=DEVICE).to(torch.bfloat16)) + assert lora_calib.capture['complete'], 'the forward deadline must close capture' + path = lora_calib.calib_file('test/calib-subfloor') + with safe_open(path, framework='pt', device='cpu') as f: + assert set(f.keys()) == {'rich'}, f'a layer under the token floor must be omitted, got {sorted(f.keys())}' + assert getattr(starved, 'sdnq_calib_rms', None) is None, 'an omitted layer must not carry statistics' + del rich.sdnq_calib_rms + lora_calib.on_model_loaded(sd) # second load takes the cached path with the partial file + assert len(lora_calib.capture['handles']) == 0, 'a partial file still counts as cached; capture must not re-attach' + assert getattr(rich, 'sdnq_calib_rms', None) is not None, 'the saved layer must reload from the partial file' + assert getattr(starved, 'sdnq_calib_rms', None) is None, 'the omitted layer must stay on plain truncation after reload' + finally: + lora_calib.calib_root, lora_calib.TOKENS_DONE, lora_calib.FORWARDS_DEADLINE = old + lora_calib.detach_capture() + return True + + +def test_calib_unet_root_walk(): + import tempfile + from modules.lora import lora_calib + layer = build_layer('uint4', seed=47) + sd = MockCalibSd('test/calib-unet', lin=layer) + sd.unet = sd.transformer + sd.transformer = None + mods = lora_calib.eligible_modules(sd) + assert [n for n, _ in mods] == ['lin'], f'the unet root must be walked when no transformer exists, got {[n for n, _ in mods]}' + both = MockCalibSd('test/calib-both') + both.unet = sd.unet + assert lora_calib.eligible_modules(both) == [], 'a transformer root wins even when it holds no eligible linears' + old_root = lora_calib.calib_root + with tempfile.TemporaryDirectory() as tmp, host_calib(True): + try: + lora_calib.calib_root = tmp + lora_calib.on_model_loaded(sd) + assert len(lora_calib.capture['handles']) == 2, 'the layer hook plus the root counter must attach on a unet model' + finally: + lora_calib.calib_root = old_root + lora_calib.detach_capture() + return True + + CAT_FCACHE = category('factor-cache') @@ -1185,7 +1298,8 @@ def run_tests(): run_test(CAT_HOST, fn) log.warning('=== Calibration ===') for fn in [test_calibrated_hosting_beats_plain, test_calibrated_low_rank_delta_survives, test_calib_option_off_matches_plain, - test_calib_capture_persist_roundtrip, test_calib_capture_gates]: + test_calib_capture_persist_roundtrip, test_calib_capture_gates, test_calib_deadline_persists_starved_layers, + test_calib_deadline_omits_subfloor_layers, test_calib_unet_root_walk]: run_test(CAT_CALIB, fn) log.warning('=== Factor cache ===') for fn in [test_factor_cache_roundtrip_bitexact, test_factor_cache_invalidates_on_multiplier, From 179978a55533f5ded6e89bff8ad148f6ea468ff4 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 26 Jul 2026 03:25:43 +0100 Subject: [PATCH 032/270] feat(lora): route fat non-factorable deltas back to requantize Hosting truncates every non-factorable set on sub-8-bit layers, but a delta large against the grid step whose truncation capture is low is retained better by the grid than by the rank cap. apply_hosted now returns such layers to the requantize path when rms(delta)/mean(step) exceeds 0.30 and the sketch capture falls below 0.90, thresholds sized on 610 calibrated modules across krea2 and anima. Both terms must agree: a thin delta rounds away on the grid however low its capture, and a low-rank delta hosts exactly however fat it is. - scoped to pure non-factorable sets; factorable members, dense-combined deltas and svd-channel checkpoints keep hosting - factor cache entries memoize the decision through their stored capture, so replays route without re-running the sketch - routed layers log as info apart from the forced-fallback warning - the fidelity CLI applies the same rule so its reports track the loader - seven routing tests, constants module-level and test-overridable --- cli/lora-quant-fidelity.py | 38 ++++++---- modules/lora/lora_sdnq.py | 80 +++++++++++++++++---- test/test-sdnq-lora-factors.py | 128 ++++++++++++++++++++++++++++++++- 3 files changed, 217 insertions(+), 29 deletions(-) diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py index 1dc41bfe5..8aba5675c 100644 --- a/cli/lora-quant-fidelity.py +++ b/cli/lora-quant-fidelity.py @@ -252,7 +252,7 @@ class Bf16Repo: return f.get_tensor(key) -def analyze_module(W_dq, deq_params, mods, calib_rms=None): +def analyze_module(W_dq, deq_params, mods, calib_rms=None, step_live=None): """Return fidelity metrics for one quantized module and the adapters targeting it. Deltas come from each module's production calc_updown and sum the way the @@ -260,6 +260,9 @@ def analyze_module(W_dq, deq_params, mods, calib_rms=None): is measured as applied. A module is factor-path eligible only when every contribution is a plain additive lora. With ``calib_rms``, hosting mirrors the calibrated production path and its rho is scored in the weighted norm. + With ``step_live`` (the layer's own pre-add scale), the production routing + rule applies: a delta fat against the grid whose truncation capture is low + reports the requantize path, the way the loader would route it. """ D = None for mod in mods: @@ -316,17 +319,23 @@ def analyze_module(W_dq, deq_params, mods, calib_rms=None): with torch.random.fork_rng(devices=[D.device] if D.device.type == 'cuda' else []): torch.manual_seed(0) U, S, V = torch.svd_lowrank(Dw, q=min(q + 64, *D.shape), niter=8) - Dk = (U[:, :q] * S[:q]) @ V[:, :q].t() - if rms is not None: - Dk = Dk / rms - base16 = W_dq.to(torch.bfloat16).float() - realized = (W_dq.to(torch.bfloat16) + Dk.to(torch.bfloat16)).float() - base16 - if rms is not None: # weighted norm: the diagonal-covariance output-error proxy the calibrated truncation optimizes - Dr = D * rms - applied_rho = float((realized * rms).flatten() @ Dr.flatten() / Dr.square().sum()) - else: - applied_rho = float(realized.flatten() @ D.flatten() / nD.square()) - hosted = True + energy = float(S[:q].square().sum() / Dw.square().sum().clamp(min=1e-30)) + routed = False + if step_live is not None and not deq_params.get('use_svd', False): + sr = float(D.square().mean().sqrt() / step_live.float().mean()) + routed = sr > lora_sdnq.REQUANT_RATIO and energy < lora_sdnq.REQUANT_ENERGY + if not routed: # the loader routes fat, genuinely-truncated deltas back to requantize + Dk = (U[:, :q] * S[:q]) @ V[:, :q].t() + if rms is not None: + Dk = Dk / rms + base16 = W_dq.to(torch.bfloat16).float() + realized = (W_dq.to(torch.bfloat16) + Dk.to(torch.bfloat16)).float() - base16 + if rms is not None: # weighted norm: the diagonal-covariance output-error proxy the calibrated truncation optimizes + Dr = D * rms + applied_rho = float((realized * rms).flatten() @ Dr.flatten() / Dr.square().sum()) + else: + applied_rho = float(realized.flatten() @ D.flatten() / nD.square()) + hosted = True return dict(rank=getattr(mods[0], 'dim', None), rms_delta=float(D.pow(2).mean().sqrt()), rms_weight=float(W_dq.pow(2).mean().sqrt()), step_ratio=step_ratio, crossers=crossers, requant_rho=rho, requant_resid=resid, factor_eligible=factor_eligible, hosted=hosted, applied_rho=applied_rho, @@ -398,6 +407,7 @@ def main(): skip_quantized_matmul=deq.use_quantized_matmul, dtype=torch.float32, skip_compile=True).to(device) params = dict(weights_dtype=deq.weights_dtype, group_size=deq.group_size, hadamard_group_size=deq.hadamard_group_size, use_hadamard=deq.use_hadamard, use_svd=layer.svd_up is not None, svd_rank=deq.svd_rank, svd_steps=deq.svd_steps) + step_live = layer.scale.detach().to(device) sd_module = layer else: W = bf16_repo.get(f'{path}.weight') @@ -412,16 +422,18 @@ def main(): if args.dtype == 'bf16': W_dq = W.to(device, torch.bfloat16).float() params = dict(weights_dtype='bf16', group_size=0, hadamard_group_size=0, use_hadamard=False) + step_live = None else: deq0, data0 = sdnq_quantize_layer_weight(W.to(device, torch.float32), layer_class_name='Linear', weights_dtype=args.dtype, group_size=args.group, hadamard_group_size=args.hadamard_group, use_hadamard=args.hadamard_group > 0, use_svd=False, use_quantized_matmul=False, dequantize_fp32=False, torch_dtype=torch.bfloat16) W_dq = deq0(data0['weight'], data0['scale'], zero_point=data0['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) params = dict(weights_dtype=args.dtype, group_size=deq0.group_size, hadamard_group_size=deq0.hadamard_group_size, use_hadamard=deq0.use_hadamard) + step_live = data0['scale'].detach() sd_module = make_stub(W.shape) try: mods = [build_module(fam, path, w, net, sd_module) for fam, w in entries] - row = analyze_module(W_dq, params, mods, calib_rms=calib_stats.get(lname)) + row = analyze_module(W_dq, params, mods, calib_rms=calib_stats.get(lname), step_live=step_live) except Exception as e: # a family the tool cannot rebuild must not read as a clean module failed.append(f'{path}: {type(e).__name__}: {e}') del W_dq diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 3f9b9a0a0..5a341c137 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -33,6 +33,13 @@ magnitude. When activation statistics for the checkpoint exist (see error instead of weight error. At 8 bits and above requantize retains most of the delta, so hosting is skipped there and the requantize path remains. + +A small tail of deltas inverts the tradeoff: when the delta is large +against the grid step AND the truncation genuinely cuts it, requantize +retains more than hosting drops, and the layer routes back to the +requantize path (``REQUANT_RATIO``/``REQUANT_ENERGY``). Both terms must +agree: a thin delta rounds away on the grid however low its capture, and +a low-rank delta hosts exactly however fat it is. """ import torch @@ -45,6 +52,10 @@ from modules.logger import log fallback_layers: list[str] = [] hosted_layers: list[tuple[str, float, bool]] = [] +routed_layers: list[str] = [] + +REQUANT_RATIO = 0.30 # delta rms over mean grid step above which requantize can retain the delta +REQUANT_ENERGY = 0.90 # sketch capture below which truncation genuinely loses part of it def rank_bucket(r): """Fixed rank ladder for compiled-graph reuse: powers of two up to 256, multiples of 64 above (hosted rank plus exact members).""" @@ -243,8 +254,8 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): directions minimize output error rather than weight error. Computed factors are disk-cached per configuration (``lora_factor_cache``) and replayed bit-identically on later applies. Returns None when the delta - cannot ride the channel (wrong shape); the caller falls back to - requantize. + cannot ride the channel (wrong shape) or when the routing rule prefers + the grid for it; the caller falls back to requantize. """ from sdnq.quant_utils import rotate_hadamard @@ -255,19 +266,33 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): if updown is None or updown.ndim != 2 or tuple(updown.shape) != tuple(deq.original_shape): return None dtype = deq.result_dtype - lora_factor_cache.begin_pass(wanted_names) - cached = lora_factor_cache.fetch(network_layer_name) - D = None if cached is not None else updown.detach().to(devices.device, torch.float32) - ups, downs = [], [] + members = [] for net in l.loaded_networks: module = net.modules.get(network_layer_name, None) if module is None: continue factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) - if factors is None: - continue - up_eff, down = factors + if factors is not None: + members.append(factors) + + # requantize keeps a delta the grid can resolve and that truncation would genuinely + # cut: both terms must agree, since a thin delta rounds away on the grid however + # low its capture, and a low-rank delta hosts exactly however fat it is. Scoped to + # sets the side-channel would otherwise carry whole: factorable members ride + # exactly. + maybe_requant = len(members) == 0 and self.svd_up is None + if maybe_requant: + step = float(self.scale.detach().float().mean()) + rms = float(updown.detach().float().square().mean().sqrt()) + maybe_requant = step > 0 and rms / step > REQUANT_RATIO + + lora_factor_cache.begin_pass(wanted_names) + cached = lora_factor_cache.fetch(network_layer_name) + D = None if cached is not None else updown.detach().to(devices.device, torch.float32) + + ups, downs = [], [] + for up_eff, down in members: if D is not None: D = D.sub_(up_eff.to(torch.float32) @ down.to(torch.float32)) # factorable members ride exactly; host only the remainder if deq.use_hadamard: @@ -277,10 +302,33 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): if cached is not None: up_h, down_h, energy, calibrated = cached + if maybe_requant and energy < REQUANT_ENERGY: + routed_layers.append(network_layer_name) + return None append_factors(self, ups + [up_h.to(device=devices.device, dtype=dtype)], downs + [down_h.to(device=devices.device, dtype=dtype)]) hosted_layers.append((network_layer_name, energy, calibrated)) return True + up_h, down_h, energy, calibrated = truncate_delta(self, D, dtype) + up_h, down_h = lora_factor_cache.store(network_layer_name, up_h, down_h, energy, calibrated) + if maybe_requant and energy < REQUANT_ENERGY: + routed_layers.append(network_layer_name) # the stored entry memoizes the routing; replays skip the sketch + return None + append_factors(self, ups + [up_h], downs + [down_h]) + hosted_layers.append((network_layer_name, energy, calibrated)) + return True + + +def truncate_delta(self, D, dtype): + """Truncate one dense fp32 delta to hosted factors in the layer's channel layout; consumes ``D``. + + Calibration-weighted when statistics exist; the sketch is oversampled past + the kept rank so the truncation sits within noise of exact svd. Returns + ``(up_h, down_h, energy, calibrated)`` with the down factor rotated into the + layer's hadamard domain. + """ + from sdnq.quant_utils import rotate_hadamard + deq = self.sdnq_dequantizer cap = int(shared.opts.lora_sdnq_host_rank) q = min(cap, *D.shape) rms = lora_calib.rms_for(self) @@ -304,15 +352,12 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): if deq.use_hadamard: down_h = rotate_hadamard(down_h, group_size=deq.hadamard_group_size) down_h = down_h.to(dtype=dtype) - up_h, down_h = lora_factor_cache.store(network_layer_name, up_h, down_h, energy, rms is not None) - append_factors(self, ups + [up_h], downs + [down_h]) - hosted_layers.append((network_layer_name, energy, rms is not None)) - return True + return up_h, down_h, energy, rms is not None def note_fallback(self, network_layer_name): - """Record a quantized layer taking the lossy requantize path (summary-logged per pass).""" - if getattr(self, 'sdnq_dequantizer', None) is not None: + """Record a quantized layer taking the requantize path (summary-logged per pass); layers the routing rule sent there are counted apart.""" + if getattr(self, 'sdnq_dequantizer', None) is not None and network_layer_name not in routed_layers: fallback_layers.append(network_layer_name) @@ -328,6 +373,11 @@ def report_fallbacks(): if l.debug: log.debug(f'Network load: type=LoRA quant=sdnq hosted={[(n, round(e, 3)) for n, e, _c in hosted_layers[:8]]}{"..." if len(hosted_layers) > 8 else ""}') hosted_layers.clear() + if len(routed_layers) > 0: + log.info(f'Network load: type=LoRA quant=sdnq apply=requantize layers={len(routed_layers)} routed=fat-delta') + if l.debug: + log.debug(f'Network load: type=LoRA quant=sdnq routed={routed_layers[:8]}{"..." if len(routed_layers) > 8 else ""}') + routed_layers.clear() if len(fallback_layers) > 0: if enabled(): log.warning(f'Network load: type=LoRA quant=sdnq layers={len(fallback_layers)} non-factorable networks requantized in place (reduced fidelity on quantized weights)') diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 53872f021..da9ffa12b 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -753,6 +753,129 @@ def test_hosted_transitions_and_rng_isolation(): return True +@contextmanager +def requant_rule(ratio, energy): + old_r, old_e = lora_sdnq.REQUANT_RATIO, lora_sdnq.REQUANT_ENERGY + lora_sdnq.REQUANT_RATIO, lora_sdnq.REQUANT_ENERGY = ratio, energy + try: + yield + finally: + lora_sdnq.REQUANT_RATIO, lora_sdnq.REQUANT_ENERGY = old_r, old_e + + +def test_route_fat_dense_delta_requantizes(): + layer = build_layer('uint4') + torch.manual_seed(21) + D = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 # full-rank and well above the grid step: the grid retains it, truncation would cut it + net = make_dense_net('fatnet', layer, D) + with host_rank(256), mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net) + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'a fat full-rank delta must route to requantize' + assert isinstance(getattr(layer, 'network_weights_backup', None), torch.Tensor), 'the routed layer takes the requantize backup' + rho = rho_of(dq(layer) - Wdq0, D) + assert rho > 0.7, f'the grid must retain the routed delta: rho={rho:.3f}' + activate() + assert torch.equal(dq(layer), Wdq0), 'restore from backup must be bit-exact' + return True + + +def test_route_rule_terms_gate_both_ways(): + layer = build_layer('uint4') + torch.manual_seed(23) + D = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 # sr about 0.8, capture about 0.8 at cap 256: each term alone can hold it hosted + net = make_dense_net('gatenet', layer, D) + with host_rank(256), mock_model(lin=layer): + with requant_rule(ratio=10.0, energy=0.90): + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'sr below the ratio must host regardless of capture' + activate() + with requant_rule(ratio=0.30, energy=0.0): + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'capture above the energy floor must host regardless of sr' + activate() + with requant_rule(ratio=0.30, energy=0.90): + activate(net) + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'both terms crossed must requantize' + activate() + return True + + +def test_route_low_rank_fat_delta_stays_hosted(): + layer = build_layer('uint4') + _A, _B, D = make_delta(seed=22, sigma=3e-3) # rank-8: fat against the grid, exact under the cap + net = make_dense_net('fatlow', layer, D) + with host_rank(64), mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'a low-rank delta hosts exactly at any magnitude' + rho = rho_of(dq(layer) - Wdq0, D) + assert rho > 0.95, f'rho={rho:.4f}' + activate() + return True + + +def test_route_mixed_set_keeps_hosting(): + layer = build_layer('uint4') + A, B, _D1 = make_delta(seed=24) + torch.manual_seed(25) + D2 = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 + net1 = make_net('mixp', layer, A, B) + net2 = make_dense_net('mixf', layer, D2) + with host_rank(256), mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net1, net2) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'a set with factorable members keeps the side-channel' + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_route_svd_checkpoint_keeps_hosting(): + layer = build_layer('uint4', use_svd=True) + torch.manual_seed(26) + D = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 + net = make_dense_net('svdfat', layer, D) + with host_rank(256), mock_model(lin=layer): + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'svd checkpoints keep hosting; the rule is not grounded there' + activate() + return True + + +def test_route_dense_stack_keeps_hosting(): + layer = build_layer('uint4') + torch.manual_seed(27) + D1 = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 + D2 = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 + net1, net2 = make_dense_net('df1', layer, D1), make_dense_net('df2', layer, D2) + with host_rank(256), stack_mode('ties'), mock_model(lin=layer): + activate(net1, net2) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'dense-combined deltas host at any magnitude' + activate() + return True + + +def test_route_replay_from_cache(): + import tempfile + layer = build_layer('uint4') + with tempfile.TemporaryDirectory() as tmp: + with host_rank(256), host_cache(10, os.path.join(tmp, 'cache')), mock_model(lin=layer): + net, _D = cache_fixture(tmp, layer, name='fatcache', sigma=1e-2, seed=28) + activate(net) + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'fat delta must route on the fresh-sketch path' + activate() + real_svd = torch.svd_lowrank + torch.svd_lowrank = raise_no_svd + try: + activate(net) # the stored entry memoizes the routing: same decision, no sketch + finally: + torch.svd_lowrank = real_svd + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'cache replay must route the same way' + activate() + return True + + CAT_CALIB = category('calibration') @@ -1294,7 +1417,10 @@ def run_tests(): run_test(CAT_TRANS, fn) log.warning('=== Hosting ===') for fn in [test_hosted_low_rank_delta_is_kept, test_hosted_dense_delta_beats_requant, test_hosted_skips_int8, - test_hosted_disabled_by_option, test_hosted_transitions_and_rng_isolation]: + test_hosted_disabled_by_option, test_hosted_transitions_and_rng_isolation, + test_route_fat_dense_delta_requantizes, test_route_rule_terms_gate_both_ways, test_route_low_rank_fat_delta_stays_hosted, + test_route_mixed_set_keeps_hosting, test_route_svd_checkpoint_keeps_hosting, test_route_dense_stack_keeps_hosting, + test_route_replay_from_cache]: run_test(CAT_HOST, fn) log.warning('=== Calibration ===') for fn in [test_calibrated_hosting_beats_plain, test_calibrated_low_rank_delta_survives, test_calib_option_off_matches_plain, From 0c1b087e20a0ab63e523771dd6ba60a1c6e2a584 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 26 Jul 2026 03:51:01 +0100 Subject: [PATCH 033/270] perf(lora): serve hosted layers from the factor cache before delta assembly A cache hit still paid full calc_updown per layer, the dominant cost of a replayed apply. The walk now probes the pass's cache entry first through apply_cached, which evaluates the requantize routing rule from the delta rms stored in the entry and attaches the cached factors without assembling the delta; layers the rule declines fall through with the assembled delta reused for the requantize path instead of recomputing it. The entry format gains the rms and bumps to fmt 5, so older files recompute once and rewrite. Hit accounting stays single-count through a plain lookup plus an explicit hit note. - replayed krea2 LoKR apply drops calc from 9.1s to 0.2s and activate from 39.5s fresh to 4.8s replayed, hosted/routed split identical - three cache tests pin the calc skip on plain, mixed and dense-pair sets --- modules/lora/lora_factor_cache.py | 41 ++++++++--- modules/lora/lora_sdnq.py | 52 ++++++++++++-- modules/lora/networks.py | 32 +++++---- test/test-sdnq-lora-factors.py | 111 ++++++++++++++++++++++++++---- 4 files changed, 193 insertions(+), 43 deletions(-) diff --git a/modules/lora/lora_factor_cache.py b/modules/lora/lora_factor_cache.py index 6e7e46a0b..cda0dca39 100644 --- a/modules/lora/lora_factor_cache.py +++ b/modules/lora/lora_factor_cache.py @@ -34,6 +34,7 @@ from modules.logger import log cache_root = os.path.join(paths.models_path, 'lora-factor-cache') state = {'wn': None, 'sig': None, 'path': None, 'store': {}, 'dirty': False, 'hits': 0, 'misses': 0} +FMT = '5' # bump on entry-layout changes so older files recompute instead of replaying short def budget_gb(): @@ -53,7 +54,7 @@ def signature(wanted_names): parts = { 'model': model_name, 'rank': int(getattr(shared.opts, 'lora_sdnq_host_rank', 0) or 0), - 'calib': int(os.path.getmtime(calib_path)) if os.path.isfile(calib_path) else None, + 'calib': int(os.path.getmtime(calib_path)) if lora_calib.enabled() and os.path.isfile(calib_path) else None, # the toggle is part of the identity: factors computed under the other setting must not replay 'nets': [], } for name, te, unet, dyn in wanted_names: @@ -96,7 +97,7 @@ def begin_pass(wanted_names): from safetensors import safe_open with safe_open(path, framework='pt', device='cpu') as f: meta = f.metadata() or {} - if meta.get('sig') == sig and meta.get('fmt') == '3': + if meta.get('sig') == sig and meta.get('fmt') == FMT: for k in f.keys(): entries[k] = f.get_tensor(k) os.utime(path, None) # freshness for LRU eviction @@ -120,8 +121,12 @@ def dequantize_rowwise(q, scale): return q.to(torch.float32) * scale -def fetch(network_layer_name): - """Cached (up, down, energy, calibrated) for a layer, or None; factors return as fp32.""" +def lookup(network_layer_name): + """Cached (up, down, energy, calibrated, rms) for a layer, or None; factors return as fp32. + + Pure lookup with no hit/miss accounting: the fast-path probe uses it so a + layer is only counted once, by whichever caller consumes the answer. + """ if state['sig'] is None: return None st = state['store'] @@ -129,20 +134,35 @@ def fetch(network_layer_name): down_q, down_s = st.get(f'{network_layer_name}.down_q'), st.get(f'{network_layer_name}.down_s') energy = st.get(f'{network_layer_name}.energy') calib = st.get(f'{network_layer_name}.calib') - if up_q is None or up_s is None or down_q is None or down_s is None or energy is None or calib is None: - state['misses'] += 1 + rms = st.get(f'{network_layer_name}.rms') + if up_q is None or up_s is None or down_q is None or down_s is None or energy is None or calib is None or rms is None: + return None + return dequantize_rowwise(up_q, up_s), dequantize_rowwise(down_q, down_s), float(energy), bool(calib), float(rms) + + +def note_hit(): + state['hits'] += 1 + + +def fetch(network_layer_name): + """``lookup`` with accounting: a usable entry counts a hit, anything else a miss.""" + entry = lookup(network_layer_name) + if entry is None: + if state['sig'] is not None: + state['misses'] += 1 return None state['hits'] += 1 - return dequantize_rowwise(up_q, up_s), dequantize_rowwise(down_q, down_s), float(energy), bool(calib) + return entry -def store(network_layer_name, up, down, energy, calibrated): +def store(network_layer_name, up, down, energy, calibrated, rms): """Quantize-before-use: returns the pair the caller must apply. With caching inactive the inputs pass through untouched. Otherwise the factors are stored as rowwise int8 and the dequantized round-trip comes back, so the factors applied now and the factors a later hit replays are - the same tensors. + the same tensors. ``rms`` is the assembled delta's rms, kept so replays + can evaluate the requantize routing rule without assembling the delta. """ if state['sig'] is None: return up, down @@ -155,6 +175,7 @@ def store(network_layer_name, up, down, energy, calibrated): st[f'{network_layer_name}.down_s'] = down_s.to('cpu').contiguous() st[f'{network_layer_name}.energy'] = torch.tensor(float(energy)) st[f'{network_layer_name}.calib'] = torch.tensor(1 if calibrated else 0, dtype=torch.uint8) + st[f'{network_layer_name}.rms'] = torch.tensor(float(rms)) state['dirty'] = True return dequantize_rowwise(up_q, up_s).to(up.dtype), dequantize_rowwise(down_q, down_s).to(down.dtype) @@ -190,7 +211,7 @@ def flush(): from safetensors.torch import save_file os.makedirs(cache_root, exist_ok=True) tmp = state['path'] + '.tmp' - save_file(state['store'], tmp, metadata={'sig': state['sig'], 'fmt': '3'}) + save_file(state['store'], tmp, metadata={'sig': state['sig'], 'fmt': FMT}) os.replace(tmp, state['path']) evict() except Exception as e: diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 5a341c137..6aead3b12 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -242,6 +242,50 @@ def host_candidate(self, network_layer_name, wanted_names): return any(net.modules.get(network_layer_name, None) is not None for net in l.loaded_networks) +def apply_cached(self, network_layer_name, wanted_names): + """Attach a hosted set straight from the factor cache, before the delta exists. + + Probed by the walk ahead of delta assembly: on a usable entry the routing + rule is evaluated from the stored delta rms and the cached factors attach + exactly as a fetch inside ``apply_hosted`` would, so the pass skips + ``calc_updown`` for the layer entirely. Returns True when the layer was + served; None sends the caller down the assemble-and-host path (no entry, + or the rule wants the grid). + """ + from sdnq.quant_utils import rotate_hadamard + + lora_factor_cache.begin_pass(wanted_names) + entry = lora_factor_cache.lookup(network_layer_name) + if entry is None: + return None + up_h, down_h, energy, calibrated, rms = entry + deq = self.sdnq_dequantizer + dtype = deq.result_dtype + remove_factors(self) # before the rule: the svd-channel check must see the checkpoint's own state, and a declined layer must fall through pristine + members = [] + for net in l.loaded_networks: + module = net.modules.get(network_layer_name, None) + if module is None: + continue + factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) + if factors is not None: + members.append(factors) + if len(members) == 0 and self.svd_up is None: + step = float(self.scale.detach().float().mean()) + if step > 0 and rms / step > REQUANT_RATIO and energy < REQUANT_ENERGY: + return None # routed to the grid: the caller assembles the delta and requantizes + ups, downs = [], [] + for up_eff, down in members: + if deq.use_hadamard: + down = rotate_hadamard(down.to(dtype=torch.float32), group_size=deq.hadamard_group_size).to(dtype=dtype) + ups.append(up_eff) + downs.append(down) + lora_factor_cache.note_hit() + append_factors(self, ups + [up_h.to(device=devices.device, dtype=dtype)], downs + [down_h.to(device=devices.device, dtype=dtype)]) + hosted_layers.append((network_layer_name, energy, calibrated)) + return True + + def apply_hosted(self, network_layer_name, updown, wanted_names): """Host a set's delta on the svd channel: exact factors for factorable members, the top-k singular directions of the remainder for the rest. @@ -281,11 +325,11 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): # low its capture, and a low-rank delta hosts exactly however fat it is. Scoped to # sets the side-channel would otherwise carry whole: factorable members ride # exactly. + delta_rms = float(updown.detach().float().square().mean().sqrt()) maybe_requant = len(members) == 0 and self.svd_up is None if maybe_requant: step = float(self.scale.detach().float().mean()) - rms = float(updown.detach().float().square().mean().sqrt()) - maybe_requant = step > 0 and rms / step > REQUANT_RATIO + maybe_requant = step > 0 and delta_rms / step > REQUANT_RATIO lora_factor_cache.begin_pass(wanted_names) cached = lora_factor_cache.fetch(network_layer_name) @@ -301,7 +345,7 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): downs.append(down) if cached is not None: - up_h, down_h, energy, calibrated = cached + up_h, down_h, energy, calibrated, _cached_rms = cached if maybe_requant and energy < REQUANT_ENERGY: routed_layers.append(network_layer_name) return None @@ -310,7 +354,7 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): return True up_h, down_h, energy, calibrated = truncate_delta(self, D, dtype) - up_h, down_h = lora_factor_cache.store(network_layer_name, up_h, down_h, energy, calibrated) + up_h, down_h = lora_factor_cache.store(network_layer_name, up_h, down_h, energy, calibrated, delta_rms) if maybe_requant and energy < REQUANT_ENERGY: routed_layers.append(network_layer_name) # the stored entry memoizes the routing; replays skip the sketch return None diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 95c7675a5..9e3b2e7a0 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -106,6 +106,7 @@ def network_activate(include=None, exclude=None): continue if group_offload and component not in group_stripped and group_will_mutate(module, network_layer_name, l.loaded_networks): device = group_offload_strip(sd_model, component, group_stripped) + calced = False # tracks whether this iteration assembled the delta, so the fallthrough reuses it instead of recomputing if lora_sdnq.factor_candidate(module, network_layer_name, component_wanted): weights_backup = getattr(module, "network_weights_backup", None) if weights_backup is not None and not isinstance(weights_backup, bool): @@ -124,22 +125,24 @@ def network_activate(include=None, exclude=None): weights_backup = getattr(module, "network_weights_backup", None) if weights_backup is not None and not isinstance(weights_backup, bool): network_apply_weights(module, None, None, device=device) # the hosted delta is measured against the pristine base - batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, elimit=elimit) - if batch_ex_bias is None: # bias deltas need the plain path; weight-only sets ride the side-channel without a weight backup - hosted = lora_sdnq.apply_hosted(module, network_layer_name, batch_updown, component_wanted) + hosted = lora_sdnq.apply_cached(module, network_layer_name, component_wanted) # a stored entry serves the layer before the delta is assembled + if hosted is None: + batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, elimit=elimit) + calced = True + if batch_ex_bias is None: # bias deltas need the plain path; weight-only sets ride the side-channel without a weight backup + hosted = lora_sdnq.apply_hosted(module, network_layer_name, batch_updown, component_wanted) if hosted is not None: - if hosted and component_wanted: - applied_layers.append(network_layer_name) - applied_weight += 1 - module.network_current_names = component_wanted - module.network_current_stack = stack_sig batch_updown, batch_ex_bias = None, None del batch_updown, batch_ex_bias - if task is not None: - pbar.update(task, advance=1) - continue - batch_updown, batch_ex_bias = None, None - del batch_updown, batch_ex_bias + if hosted is not None: + if hosted and component_wanted: + applied_layers.append(network_layer_name) + applied_weight += 1 + module.network_current_names = component_wanted + module.network_current_stack = stack_sig + if task is not None: + pbar.update(task, advance=1) + continue stripped = lora_sdnq.remove_factors(module) # the mechanism gate can decline a layer still carrying attached factors; the weight path must start from the pristine channel if stripped and not component_wanted: # factor-mode layers have no tensor backup, dropping the factors is the whole restore module.network_current_names = () @@ -156,7 +159,8 @@ def network_activate(include=None, exclude=None): continue batch_updown, batch_ex_bias = None, None # restore-only pass, apply with no weights reverts to backup else: - batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, elimit=elimit) + if not calced: # the host branch may have assembled the delta already; a declined layer reuses it + batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, elimit=elimit) if batch_updown is not None: lora_sdnq.note_fallback(module, network_layer_name) # only layers whose quantized weight actually takes a delta if fuse: diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index da9ffa12b..d350b633c 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -843,19 +843,6 @@ def test_route_svd_checkpoint_keeps_hosting(): return True -def test_route_dense_stack_keeps_hosting(): - layer = build_layer('uint4') - torch.manual_seed(27) - D1 = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 - D2 = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 - net1, net2 = make_dense_net('df1', layer, D1), make_dense_net('df2', layer, D2) - with host_rank(256), stack_mode('ties'), mock_model(lin=layer): - activate(net1, net2) - assert hasattr(layer, 'sdnq_lora_svd_stash'), 'dense-combined deltas host at any magnitude' - activate() - return True - - def test_route_replay_from_cache(): import tempfile layer = build_layer('uint4') @@ -1254,6 +1241,99 @@ def test_factor_cache_disabled_at_zero(): return True +def test_factor_cache_invalidates_on_calib_toggle(): + import tempfile + from modules.lora import lora_calib + layer = build_layer('uint4') + with tempfile.TemporaryDirectory() as tmp: + with host_rank(64), host_cache(10, os.path.join(tmp, 'cache')), mock_model(lin=layer): + net, _D = cache_fixture(tmp, layer) + old_root = lora_calib.calib_root + lora_calib.calib_root = os.path.join(tmp, 'calib') + os.makedirs(lora_calib.calib_root, exist_ok=True) + with open(lora_calib.calib_file('test/cache-model'), 'wb') as f: + f.write(b'0' * 64) # the signature stats this file; its content is never read here + torch.manual_seed(77) + layer.sdnq_calib_rms = torch.rand(IN_F) * 4 + 0.1 + try: + with host_calib(True): + activate(net) + up_cal = layer.svd_up.detach().clone() + activate() + with host_calib(False): + activate(net) # same set with calibration off: the entry keyed under the other setting must miss + up_plain = layer.svd_up.detach().clone() + activate() + assert not torch.equal(up_cal, up_plain), 'toggling calibration must not replay factors computed under the other setting' + assert len(os.listdir(os.path.join(tmp, 'cache'))) == 2, 'the two settings must key separate cache entries' + finally: + del layer.sdnq_calib_rms + lora_calib.calib_root = old_root + return True + + +@contextmanager +def counting_calc(): + """Count NetworkModuleFull.calc_updown calls: zero on a pass proves the walk skipped delta assembly.""" + from modules.lora import network_full + calls = {'n': 0} + real = network_full.NetworkModuleFull.calc_updown + def wrapper(self, *args, **kwargs): + calls['n'] += 1 + return real(self, *args, **kwargs) + network_full.NetworkModuleFull.calc_updown = wrapper + try: + yield calls + finally: + network_full.NetworkModuleFull.calc_updown = real + + +def test_cache_fastpath_skips_calc(): + import tempfile + layer = build_layer('uint4') + with tempfile.TemporaryDirectory() as tmp: + with host_rank(64), host_cache(10, os.path.join(tmp, 'cache')), mock_model(lin=layer): + net, _D = cache_fixture(tmp, layer) + Wdq0 = dq(layer) + with counting_calc() as calls: + activate(net) + assert calls['n'] > 0, 'a fresh apply must assemble the delta' + first = dq(layer) + activate() + calls['n'] = 0 + activate(net) + assert calls['n'] == 0, f'a cache replay must not assemble the delta: calc_updown ran {calls["n"]} times' + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'the fast path must attach the cached factors' + assert torch.equal(dq(layer), first), 'fast-path replay must be bit-identical to the fresh apply' + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_cache_fastpath_serves_mixed_set(): + import tempfile + layer = build_layer('uint4') + A, B, _D1 = make_delta(seed=63) + with tempfile.TemporaryDirectory() as tmp: + with host_rank(64), host_cache(10, os.path.join(tmp, 'cache')), mock_model(lin=layer): + net_full, _D2 = cache_fixture(tmp, layer, name='mixfull', seed=64) + net_plain = make_net('mixlora', layer, A, B) + lora_file = os.path.join(tmp, 'mixlora.safetensors') + with open(lora_file, 'wb') as f: + f.write(b'0' * 64) + net_plain.network_on_disk.filename = lora_file + activate(net_plain, net_full) + first = dq(layer) + activate() + with counting_calc() as calls: + activate(net_plain, net_full) # the factorable member re-extracts from its own weights; the hosted remainder replays + assert calls['n'] == 0, 'a mixed-set replay must not assemble the delta' + assert hasattr(layer, 'sdnq_lora_svd_stash') + assert torch.equal(dq(layer), first), 'mixed-set replay must be bit-identical to the fresh apply' + activate() + return True + + CAT_COMPILE = category('compile') @@ -1419,7 +1499,7 @@ def run_tests(): for fn in [test_hosted_low_rank_delta_is_kept, test_hosted_dense_delta_beats_requant, test_hosted_skips_int8, test_hosted_disabled_by_option, test_hosted_transitions_and_rng_isolation, test_route_fat_dense_delta_requantizes, test_route_rule_terms_gate_both_ways, test_route_low_rank_fat_delta_stays_hosted, - test_route_mixed_set_keeps_hosting, test_route_svd_checkpoint_keeps_hosting, test_route_dense_stack_keeps_hosting, + test_route_mixed_set_keeps_hosting, test_route_svd_checkpoint_keeps_hosting, test_route_replay_from_cache]: run_test(CAT_HOST, fn) log.warning('=== Calibration ===') @@ -1429,7 +1509,8 @@ def run_tests(): run_test(CAT_CALIB, fn) log.warning('=== Factor cache ===') for fn in [test_factor_cache_roundtrip_bitexact, test_factor_cache_invalidates_on_multiplier, - test_factor_cache_int8_quantization, test_factor_cache_disabled_at_zero]: + test_factor_cache_int8_quantization, test_factor_cache_disabled_at_zero, test_factor_cache_invalidates_on_calib_toggle, + test_cache_fastpath_skips_calc, test_cache_fastpath_serves_mixed_set]: run_test(CAT_FCACHE, fn) log.warning('=== Compile ===') for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse]: From 2306867b63e38b2b66184cdcebf1606c36f02cb0 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 27 Jul 2026 21:49:49 +0100 Subject: [PATCH 034/270] perf(lora): store hosted factors at the delta's effective rank Hosted truncation kept the full rank cap even when the spectrum ends in numerical zeros, padding exactly low-rank deltas (low-rank LyCORIS, full-family diffs) up to the cap. Slice the kept factors where cumulative capture reaches 1 - 1e-6 of the sketch total, and trim trailing all-zero columns when attaching cache entries written before the slice, so they collapse the same way without a format bump. The hosted log line reports the realized rank spread when it sits below the cap. - flat spectra keep the cap; a rank-8 delta under cap 256 stores 8 ranks - select segments follow the effective rank - suite pins the collapse, the flat-spectrum guard and the padded-entry trim --- modules/lora/lora_factor_cache.py | 34 +++++++------- modules/lora/lora_sdnq.py | 37 +++++++++++++++- test/test-sdnq-lora-factors.py | 74 ++++++++++++++++++++++++++++++- 3 files changed, 124 insertions(+), 21 deletions(-) diff --git a/modules/lora/lora_factor_cache.py b/modules/lora/lora_factor_cache.py index cda0dca39..2b00bbcc7 100644 --- a/modules/lora/lora_factor_cache.py +++ b/modules/lora/lora_factor_cache.py @@ -156,27 +156,27 @@ def fetch(network_layer_name): def store(network_layer_name, up, down, energy, calibrated, rms): - """Quantize-before-use: returns the pair the caller must apply. + """Quantize-before-use: returns the dequantized round-trip the caller must apply. - With caching inactive the inputs pass through untouched. Otherwise the - factors are stored as rowwise int8 and the dequantized round-trip comes - back, so the factors applied now and the factors a later hit replays are - the same tensors. ``rms`` is the assembled delta's rms, kept so replays - can evaluate the requantize routing rule without assembling the delta. + The factors quantize to rowwise int8 whether or not a cache entry can be + written, so the factors applied now, the factors a later hit replays, and a + cache-off apply are the same tensors (the round-trip also zeroes null-tail + columns the attach-side trim relies on). ``rms`` is the assembled delta's + rms, kept so replays can evaluate the requantize routing rule without + assembling the delta. """ - if state['sig'] is None: - return up, down up_q, up_s = quantize_rowwise(up) down_q, down_s = quantize_rowwise(down) - st = state['store'] - st[f'{network_layer_name}.up_q'] = up_q.to('cpu').contiguous() - st[f'{network_layer_name}.up_s'] = up_s.to('cpu').contiguous() - st[f'{network_layer_name}.down_q'] = down_q.to('cpu').contiguous() - st[f'{network_layer_name}.down_s'] = down_s.to('cpu').contiguous() - st[f'{network_layer_name}.energy'] = torch.tensor(float(energy)) - st[f'{network_layer_name}.calib'] = torch.tensor(1 if calibrated else 0, dtype=torch.uint8) - st[f'{network_layer_name}.rms'] = torch.tensor(float(rms)) - state['dirty'] = True + if state['sig'] is not None: + st = state['store'] + st[f'{network_layer_name}.up_q'] = up_q.to('cpu').contiguous() + st[f'{network_layer_name}.up_s'] = up_s.to('cpu').contiguous() + st[f'{network_layer_name}.down_q'] = down_q.to('cpu').contiguous() + st[f'{network_layer_name}.down_s'] = down_s.to('cpu').contiguous() + st[f'{network_layer_name}.energy'] = torch.tensor(float(energy)) + st[f'{network_layer_name}.calib'] = torch.tensor(1 if calibrated else 0, dtype=torch.uint8) + st[f'{network_layer_name}.rms'] = torch.tensor(float(rms)) + state['dirty'] = True return dequantize_rowwise(up_q, up_s).to(up.dtype), dequantize_rowwise(down_q, down_s).to(down.dtype) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 6aead3b12..d95849527 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -25,7 +25,9 @@ Only additive low-rank modules ride the channel exactly (plain LoRA: no DoRA, no CP ``mid``, no LyCORIS dense-bias, no ``diff_b``). On sub-8-bit formats, sets with non-factorable contributions are hosted instead: the families' own ``calc_updown`` delta is truncated to its top singular -directions and appended the same way. Truncation keeps the dominant part +directions and appended the same way, stored at the delta's effective +rank when the spectrum ends in a numerically null tail (dense-combined +plain pairs, low-rank LyCORIS). Truncation keeps the dominant part of the effect and drops an orthogonal residual, where requantize keeps only the grid extrema and adds grid-shift noise of the delta's own magnitude. When activation statistics for the checkpoint exist (see @@ -52,10 +54,12 @@ from modules.logger import log fallback_layers: list[str] = [] hosted_layers: list[tuple[str, float, bool]] = [] +hosted_ranks: list[int] = [] routed_layers: list[str] = [] REQUANT_RATIO = 0.30 # delta rms over mean grid step above which requantize can retain the delta REQUANT_ENERGY = 0.90 # sketch capture below which truncation genuinely loses part of it +NULL_TAIL_EPS = 1e-6 # spectrum tail below this fraction of the capture is numerically null; dropping it keeps stored rank at the delta's effective rank def rank_bucket(r): """Fixed rank ladder for compiled-graph reuse: powers of two up to 256, multiples of 64 above (hosted rank plus exact members).""" @@ -84,6 +88,16 @@ def signature(): return '' if enabled() else '|quant=requantize' +def trim_null_tail(up_h, down_h): + """Cache entries stored before tail slicing carry null ranks as exact zero columns; trim to the effective rank on attach.""" + nz = (up_h != 0).any(dim=0) + if not bool(nz.all()): + k = max(1, int(nz.nonzero().max().item()) + 1) if bool(nz.any()) else 1 + if k < up_h.shape[1]: + return up_h[:, :k].contiguous(), down_h[:k].contiguous() + return up_h, down_h + + def get_module_factors(module, device, dtype, original_shape=None): """Return ``(up_eff, down)`` reproducing ``calc_updown`` exactly, or None. @@ -259,6 +273,7 @@ def apply_cached(self, network_layer_name, wanted_names): if entry is None: return None up_h, down_h, energy, calibrated, rms = entry + up_h, down_h = trim_null_tail(up_h, down_h) deq = self.sdnq_dequantizer dtype = deq.result_dtype remove_factors(self) # before the rule: the svd-channel check must see the checkpoint's own state, and a declined layer must fall through pristine @@ -283,6 +298,7 @@ def apply_cached(self, network_layer_name, wanted_names): lora_factor_cache.note_hit() append_factors(self, ups + [up_h.to(device=devices.device, dtype=dtype)], downs + [down_h.to(device=devices.device, dtype=dtype)]) hosted_layers.append((network_layer_name, energy, calibrated)) + hosted_ranks.append(int(up_h.shape[1])) return True @@ -349,8 +365,10 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): if maybe_requant and energy < REQUANT_ENERGY: routed_layers.append(network_layer_name) return None + up_h, down_h = trim_null_tail(up_h, down_h) append_factors(self, ups + [up_h.to(device=devices.device, dtype=dtype)], downs + [down_h.to(device=devices.device, dtype=dtype)]) hosted_layers.append((network_layer_name, energy, calibrated)) + hosted_ranks.append(int(up_h.shape[1])) return True up_h, down_h, energy, calibrated = truncate_delta(self, D, dtype) @@ -358,8 +376,10 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): if maybe_requant and energy < REQUANT_ENERGY: routed_layers.append(network_layer_name) # the stored entry memoizes the routing; replays skip the sketch return None + up_h, down_h = trim_null_tail(up_h, down_h) # the int8 roundtrip zeroes the numeric tail the eps slice keeps; fresh and replayed attaches must trim alike append_factors(self, ups + [up_h], downs + [down_h]) hosted_layers.append((network_layer_name, energy, calibrated)) + hosted_ranks.append(int(up_h.shape[1])) return True @@ -388,6 +408,14 @@ def truncate_delta(self, D, dtype): # oversampled sketch with extra power iterations lands within noise of exact svd; only the top q columns are kept U, S, V = torch.svd_lowrank(D, q=min(q + 64, *D.shape), niter=8) U, S, V = U[:, :q], S[:q], V[:, :q] + e = S.square() + total_e = e.sum() + if float(total_e) > 0: + # an exactly low-rank delta (dense-combined plain pairs, low-rank LyCORIS) fills the tail with + # numerical zeros; storing them would pad the channel to the cap for nothing + k = int((torch.cumsum(e, 0) < (1.0 - NULL_TAIL_EPS) * total_e).sum().item()) + 1 + if k < q: + U, S, V = U[:, :k], S[:k], V[:, :k] energy = float(S.square().sum() / D.square().sum().clamp(min=1e-30)) # captured fraction, in the weighted domain when calibrated up_h = (U * S).to(dtype=dtype) down_h = V.t() @@ -413,10 +441,15 @@ def report_fallbacks(): energies = sorted(e for _name, e, _c in hosted_layers) median = energies[len(energies) // 2] calibrated = sum(1 for _name, _e, c in hosted_layers if c) - log.info(f'Network load: type=LoRA quant=sdnq hosted={len(hosted_layers)} rank={int(shared.opts.lora_sdnq_host_rank)}{f" calib={calibrated}" if calibrated else ""} energy={median:.2f} min={energies[0]:.2f} non-factorable networks hosted on the svd side-channel') + ranks = '' + if len(hosted_ranks) > 0 and min(hosted_ranks) < int(shared.opts.lora_sdnq_host_rank): + rs = sorted(hosted_ranks) + ranks = f' k={rs[0]}-{rs[len(rs) // 2]}-{rs[-1]}' # realized rank spread; shown only when a spectrum collapsed below the cap + log.info(f'Network load: type=LoRA quant=sdnq hosted={len(hosted_layers)} rank={int(shared.opts.lora_sdnq_host_rank)}{ranks}{f" calib={calibrated}" if calibrated else ""} energy={median:.2f} min={energies[0]:.2f} non-factorable networks hosted on the svd side-channel') if l.debug: log.debug(f'Network load: type=LoRA quant=sdnq hosted={[(n, round(e, 3)) for n, e, _c in hosted_layers[:8]]}{"..." if len(hosted_layers) > 8 else ""}') hosted_layers.clear() + hosted_ranks.clear() if len(routed_layers) > 0: log.info(f'Network load: type=LoRA quant=sdnq apply=requantize layers={len(routed_layers)} routed=fat-delta') if l.debug: diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index d350b633c..3b745ad11 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -706,6 +706,34 @@ def test_hosted_dense_delta_beats_requant(): return True +def test_hosted_null_tail_collapses_to_effective_rank(): + layer = build_layer('uint4') + _A, _B, D = make_delta(sigma=3e-3) # exact rank-8 content in a non-factorable container + net = make_dense_net('nulltail', layer, D) + with host_rank(256), mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net) + assert layer.svd_up.shape[1] == 8, f'rank-8 delta under cap 256 must store 8 ranks, got {layer.svd_up.shape[1]}' + assert layer.svd_down.shape[0] == 8, f'down factor must slice with the up factor, got {layer.svd_down.shape[0]}' + rho = rho_of(dq(layer) - Wdq0, D) + assert rho > 0.95, f'collapsing the null tail must not cost fidelity: rho={rho:.4f}' + activate() + assert torch.equal(dq(layer), Wdq0), 'unload must restore bit-exact' + return True + + +def test_hosted_flat_spectrum_keeps_cap(): + layer = build_layer('uint4') + torch.manual_seed(13) + D = torch.randn(OUT_F, IN_F, device=DEVICE) * 3e-4 # full-rank gaussian: no null tail inside the cap + net = make_dense_net('flattail', layer, D) + with host_rank(64), mock_model(lin=layer): + activate(net) + assert layer.svd_up.shape[1] == 64, f'a flat spectrum must keep the full cap, got {layer.svd_up.shape[1]}' + activate() + return True + + def test_hosted_skips_int8(): layer = build_layer('int8') _A, _B, D = make_delta(sigma=3e-3) @@ -1215,6 +1243,47 @@ def test_factor_cache_invalidates_on_multiplier(): return True +def test_attach_trims_stored_null_tail(): + """Entries written before tail slicing pad the channel with null ranks: zero up + columns (and junk down rows behind them). Attach must trim to the effective rank + and replay the same resident tensors and weights as the unpadded entry.""" + import tempfile + layer = build_layer('uint4') + with tempfile.TemporaryDirectory() as tmp: + with host_rank(64), host_cache(10, os.path.join(tmp, 'cache')), mock_model(lin=layer): + net, _D = cache_fixture(tmp, layer, name='padnet') + activate(net) + up0 = layer.svd_up.detach().clone() + down0 = layer.svd_down.detach().clone() + Wl0 = dq(layer) + activate() + cache_dir = os.path.join(tmp, 'cache') + entry = os.path.join(cache_dir, os.listdir(cache_dir)[0]) + from safetensors import safe_open + from safetensors.torch import save_file + with safe_open(entry, framework='pt', device='cpu') as f: + meta = dict(f.metadata()) + tensors = {k: f.get_tensor(k) for k in f.keys()} + for k in [k for k in tensors if k.endswith('.up_q')]: + base = k[: -len('.up_q')] + torch.manual_seed(5) + tensors[f'{base}.up_q'] = torch.cat([tensors[k], torch.zeros(tensors[k].shape[0], 64, dtype=torch.int8)], dim=1) + tensors[f'{base}.down_q'] = torch.cat([tensors[f'{base}.down_q'], torch.randint(-127, 128, (64, IN_F), dtype=torch.int8)], dim=0) + tensors[f'{base}.down_s'] = torch.cat([tensors[f'{base}.down_s'], torch.ones(64, 1)], dim=0) + save_file(tensors, entry, metadata=meta) + real_svd = torch.svd_lowrank + torch.svd_lowrank = raise_no_svd + try: + activate(net) + finally: + torch.svd_lowrank = real_svd + assert layer.svd_up.shape[1] == 64, f'attach must trim the padded tail back to the effective rank, got {layer.svd_up.shape[1]}' + assert torch.equal(layer.svd_up, up0) and torch.equal(layer.svd_down, down0), 'trimmed factors must match the unpadded entry' + assert torch.equal(dq(layer), Wl0), 'trimmed attach must materialize the same weight' + activate() + return True + + def test_factor_cache_int8_quantization(): from modules.lora import lora_factor_cache as fc torch.manual_seed(71) @@ -1500,7 +1569,7 @@ def run_tests(): test_hosted_disabled_by_option, test_hosted_transitions_and_rng_isolation, test_route_fat_dense_delta_requantizes, test_route_rule_terms_gate_both_ways, test_route_low_rank_fat_delta_stays_hosted, test_route_mixed_set_keeps_hosting, test_route_svd_checkpoint_keeps_hosting, - test_route_replay_from_cache]: + test_route_replay_from_cache, test_hosted_null_tail_collapses_to_effective_rank, test_hosted_flat_spectrum_keeps_cap]: run_test(CAT_HOST, fn) log.warning('=== Calibration ===') for fn in [test_calibrated_hosting_beats_plain, test_calibrated_low_rank_delta_survives, test_calib_option_off_matches_plain, @@ -1510,7 +1579,8 @@ def run_tests(): log.warning('=== Factor cache ===') for fn in [test_factor_cache_roundtrip_bitexact, test_factor_cache_invalidates_on_multiplier, test_factor_cache_int8_quantization, test_factor_cache_disabled_at_zero, test_factor_cache_invalidates_on_calib_toggle, - test_cache_fastpath_skips_calc, test_cache_fastpath_serves_mixed_set]: + test_cache_fastpath_skips_calc, test_cache_fastpath_serves_mixed_set, + test_attach_trims_stored_null_tail]: run_test(CAT_FCACHE, fn) log.warning('=== Compile ===') for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse]: From e1767aa72d3f871ff34e4ce5e976cd98cb90bed8 Mon Sep 17 00:00:00 2001 From: Dity0 Date: Thu, 27 Aug 2026 02:47:03 +0300 Subject: [PATCH 035/270] remove sdnq.sdnext hijacks --- extensions-builtin/sdnq | 2 +- installer.py | 37 ++++++++++--------------------------- webui.py | 4 ---- 3 files changed, 11 insertions(+), 32 deletions(-) diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index ac7b5ecf4..c61935fd9 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit ac7b5ecf48f5891efe25dadedfe384f926ee0c5a +Subproject commit c61935fd9e66d5366f08c454be4660bc7a205b69 diff --git a/installer.py b/installer.py index 141f56e27..b16761a15 100644 --- a/installer.py +++ b/installer.py @@ -552,33 +552,16 @@ def check_python(supported_minors=None, experimental_minors=None, reason=None): # register sdnq package from github submodule -def register_sdnq(skip=False, devices=None, shared=None): - if not skip: - t_start = time.time() - fn = os.path.join('extensions-builtin', 'sdnq', 'src', 'sdnq', '__init__.py') - name = "sdnq" - spec = importlib.util.spec_from_file_location(name, fn) - module = importlib.util.module_from_spec(spec) - sys.modules[name] = module - spec.loader.exec_module(module) # this is where actual import happens - import sdnq # pylint: disable=unused-import # test import - ts('sdnq', t_start) - if devices is not None: - import sdnq - sdnq.sdnext.devices = devices - sdnq.quantizer.devices = devices - sdnq.dequantizer.devices = devices - sdnq.quant_utils.devices = devices - sdnq.kernel_wrappers.devices = devices - if shared is not None: - import sdnq - sdnq.sdnext.shared = shared - sdnq.quantizer.shared = shared - sdnq.dequantizer.shared = shared - sdnq.quant_utils.shared = shared - sdnq.kernel_wrappers.shared = shared - sdnq.common.shared = shared - sdnq.loader.shared = shared +def register_sdnq(): + t_start = time.time() + fn = os.path.join('extensions-builtin', 'sdnq', 'src', 'sdnq', '__init__.py') + name = "sdnq" + spec = importlib.util.spec_from_file_location(name, fn) + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) # this is where actual import happens + import sdnq # pylint: disable=unused-import # test import + ts('sdnq', t_start) # check diffusers version diff --git a/webui.py b/webui.py index 378cfc184..547142c00 100644 --- a/webui.py +++ b/webui.py @@ -77,10 +77,6 @@ fastapi_args = { def initialize(): log.debug('Initializing: modules') from concurrent.futures import ThreadPoolExecutor, as_completed - - from installer import register_sdnq - register_sdnq(skip=True, devices=modules.devices, shared=shared) # monkey-patch sdnq to use sdnext devices and shared modules - from modules.models_hf import hf_init hf_init() From 37ac1b64c90ef052894511cfd0eeff09a1c1938e Mon Sep 17 00:00:00 2001 From: Dity0 Date: Thu, 27 Aug 2026 03:15:18 +0300 Subject: [PATCH 036/270] point sdnq logger to sdnext logger --- extensions-builtin/sdnq | 2 +- installer.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index c61935fd9..fee789419 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit c61935fd9e66d5366f08c454be4660bc7a205b69 +Subproject commit fee7894192ef89805584a29d0cbf731d07b1b9aa diff --git a/installer.py b/installer.py index b16761a15..b02558659 100644 --- a/installer.py +++ b/installer.py @@ -554,6 +554,7 @@ def check_python(supported_minors=None, experimental_minors=None, reason=None): # register sdnq package from github submodule def register_sdnq(): t_start = time.time() + os.environ.setdefault('SDNQ_LOGGER_NAME', 'sd') fn = os.path.join('extensions-builtin', 'sdnq', 'src', 'sdnq', '__init__.py') name = "sdnq" spec = importlib.util.spec_from_file_location(name, fn) From 68d892e6b2f5d81c96855095a8d55014c5536eac Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 28 Aug 2026 13:31:54 +0200 Subject: [PATCH 037/270] modular pipelines intercepts and profiling Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 17 +++- extensions-builtin/sdnq | 2 +- modules/modular_load.py | 95 +----------------- modules/processing.py | 4 + modules/processing_diffusers.py | 2 +- modules/processing_info.py | 2 +- modules/sd_hijack_modular.py | 156 +++++++++++++++++++++++++++++ modules/timer.py | 1 + modules/video_models/video_load.py | 4 +- 9 files changed, 183 insertions(+), 100 deletions(-) create mode 100644 modules/sd_hijack_modular.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 8390e4e5c..9ddbec6f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,21 @@ # Change Log for SD.Next -## Update for 2026-08-27 +## Update for 2026-08-28 - **LoRA** - - new calibration engine that allows lora to be applied with far smaller error when dealing with highly quantized models - new apply engine that allows lora to be applied much faster - - *note*: calibration data is stored once calculated so it can be reused for future runs, location is `models/calibration` folder + - new calibration engine that allows lora to be applied with far smaller error when dealing with highly quantized models + - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for details and usage instructions + - *note*: calibration data is stored once calculated so it can be reused for future runs + location is `models/calibration` folder + - new factor cache that allows lora effects to be pre-calculated and persistently cached for future runs + location is `models/lora-factor-cache` folder +- **Attention** + - new `sparse-attention` method that can be combined with other attention methods + to reduce memory usage and improve performance on large models + *TODO*: see [Attention docs](https://vladmandic.github.io/sdnext-docs/Attention) for details and usage instructions - **Internal** + - modular pipelines intercept and profiling hooks - attention mechanisms decision tree and apply method refactor ## Update for 2026-08-26 @@ -15,7 +24,7 @@ Time for a new release, *this is a large one*! Main focus is improving video workflows which also brings full support for new [MiniMax H3](https://vladmandic.github.io/sdnext-docs/MiniMax) and [LTXVideo-2.5](https://vladmandic.github.io/sdnext-docs/LTX) -and improves general video processing with flexible video upscaling, updated interpolation, etc. +and improvements to general video processing with flexible video upscaling, updated interpolation, etc. *What else?* - [Detailer.next](https://vladmandic.github.io/sdnext-docs/Detailer) with new support for *vision-language models* and *per-class prompts* diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index fee789419..530f4d96c 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit fee7894192ef89805584a29d0cbf731d07b1b9aa +Subproject commit 530f4d96c0ccd755246d894e474202a1b16cdf5a diff --git a/modules/modular_load.py b/modules/modular_load.py index 490fbe8f4..06245934e 100644 --- a/modules/modular_load.py +++ b/modules/modular_load.py @@ -1,15 +1,7 @@ import time -import logging import torch -from modules import shared, errors, devices, sd_offload +from modules import shared, errors, devices, sd_hijack_modular from modules.logger import log -from modules.attention import context as attention_context - - -class InterruptLogFilter(logging.Filter): - """Drops the per-block error dumps the modular runner logs when an interrupt raises through it.""" - def filter(self, record): - return 'Interrupted...' not in record.msg def apply_progress_bar_config(block): @@ -32,87 +24,6 @@ def trace_modules(pipe): log.trace(f'Module: name={module_name} cls={module.__class__.__name__} device={next(module.parameters()).device} dtype={next(module.parameters()).dtype}') -def install_state_hook(pipe): - runner_log = logging.getLogger('diffusers.modular_pipelines.modular_pipeline') - if not any(isinstance(f, InterruptLogFilter) for f in runner_log.filters): - runner_log.addFilter(InterruptLogFilter()) - - def set_phase(phase: str, module: torch.nn.Module | None = None): - # every stage runs inside one pipeline call, so the forward hooks are the only place the current stage is visible - if getattr(pipe, 'sdnext_phase', None) != phase: - pipe.sdnext_phase = phase - jobid = getattr(pipe, 'sdnext_phaseid', None) # previous jobid if any - shared.state.end(jobid) # clear the previous job if exists - pipe.sdnext_phaseid = shared.state.begin(phase) # start a new job for the current phase - log.debug(f'Pipeline: phase={phase.replace(" ", "")} cls={pipe.__class__.__name__} module={module.__class__.__name__ if module is not None else None}') - return True - return False - - def _pre_transformer_hook(module, args): # pylint: disable=unused-argument - new_phase = set_phase('Generate', module) - attention_context.set_role('transformer') - if new_phase: - sd_offload.offload_ondemand(pipe, exclude=['transformer', 'transformer_ref'], reason='generate', force=hasattr(pipe, 'sdnext_force_offload')) - if shared.state.sampling_steps == 0 and getattr(pipe, 'num_timesteps', 0) > 0: - shared.state.sampling_steps = pipe.num_timesteps - if shared.state.paused: - log.debug('Sampling paused') - while shared.state.paused: - if shared.state.interrupted or shared.state.skipped: - raise AssertionError('Interrupted...') - time.sleep(0.1) - shared.state.step() - attention_context.tick() - if shared.state.interrupted or shared.state.skipped: - raise AssertionError('Interrupted...') - - def _pre_text_encode_hook(module, args): # pylint: disable=unused-argument - new_phase = set_phase('Text Encode', module) - attention_context.set_role('te') - if new_phase: - sd_offload.offload_ondemand(pipe, exclude=['text_encoder'], reason='text encode', force=hasattr(pipe, 'sdnext_force_offload')) - if shared.state.interrupted or shared.state.skipped: - raise AssertionError('Interrupted...') - - def _pre_vae_decode_hook(module, args): # pylint: disable=unused-argument - new_phase = set_phase('Decode', module) - attention_context.set_role('vae') - if new_phase: - sd_offload.offload_ondemand(pipe, exclude=['vae', 'audio_vae'], reason='vae decode', force=hasattr(pipe, 'sdnext_force_offload')) - if shared.state.interrupted or shared.state.skipped: # fires per tile, so tiled decodes abort promptly - raise AssertionError('Interrupted...') - - def _pre_vae_encode_hook(module, args): # pylint: disable=unused-argument - new_phase = set_phase('Encode', module) - attention_context.set_role('vae') - if new_phase: - sd_offload.offload_ondemand(pipe, exclude=['vae', 'audio_vae'], reason='vae encode', force=hasattr(pipe, 'sdnext_force_offload')) - if shared.state.interrupted or shared.state.skipped: # fires per tile, so tiled encodes abort promptly - raise AssertionError('Interrupted...') - - for name in ('transformer', 'transformer_ref'): - module = getattr(pipe, name, None) - if module is not None: - target = getattr(module, 'model', module) # conditioning calls the inner model directly - if isinstance(target, torch.nn.Module) and getattr(target, 'sdnext_state_hook', None) is None: - target.sdnext_state_hook = target.register_forward_pre_hook(_pre_transformer_hook) - - for name in ('text_encoder', 'text_encoder_2'): - module = getattr(pipe, name, None) - if module is not None: - target = getattr(module, 'model', module) # conditioning calls the inner model directly - if isinstance(target, torch.nn.Module) and getattr(target, 'sdnext_state_hook', None) is None: - target.sdnext_state_hook = target.register_forward_pre_hook(_pre_text_encode_hook) - - for name in ('vae', 'audio_vae'): - decoder = getattr(getattr(pipe, name, None), 'decoder', None) # decode entry points bypass forward, the inner decoder does not - if isinstance(decoder, torch.nn.Module) and getattr(decoder, 'sdnext_state_hook', None) is None: - decoder.sdnext_state_hook = decoder.register_forward_pre_hook(_pre_vae_decode_hook) - encoder = getattr(getattr(pipe, name, None), 'encoder', None) # decode entry points bypass forward, the inner encoder does not - if isinstance(encoder, torch.nn.Module) and getattr(encoder, 'sdnext_state_hook', None) is None: - encoder.sdnext_state_hook = encoder.register_forward_pre_hook(_pre_vae_encode_hook) - - def is_modular(obj) -> bool: if obj is None: return False @@ -220,7 +131,9 @@ def load_modular_pipe(repo_cls, repo: str, workflow: str | None = None, revision # diffusers logger, so the reason is in the log above this line rather than in the exception path log.error(f'Load modular: cls={pipe.__class__.__name__} workflow={workflow} missing={missing} components the workflow requires did not load') - install_state_hook(pipe) + sd_hijack_modular.install_state_hook(pipe) + sd_hijack_modular.register_callbacks(pipe) + apply_progress_bar_config(pipe._blocks) # pylint: disable=protected-access return pipe except Exception as e: diff --git a/modules/processing.py b/modules/processing.py index 39d832802..fbb2f68a1 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -440,6 +440,10 @@ def print_stats(): if dynamo_dct: log.debug(f'Processed: dynamo={dynamo_dct}') + if timer.blocks.get_total() > 0.1: + log.debug(f'Processed: blocks={timer.blocks.dct(min_time=0.1, no_total=True)}') + timer.blocks.reset() + def process_images_inner(p: StableDiffusionProcessing) -> Processed: t0 = time.time() diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index 9e71050e3..0f975ea72 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -86,12 +86,12 @@ def process_pre(p: processing.StableDiffusionProcessing): cfgzero.apply(p) linfusion.apply(shared.sd_model) cachedit.apply_cache_dit(shared.sd_model) - # apply-only sd_hijack_freeu.apply_freeu(p) transformer_cache.set_cache() para_attention.apply_first_block_cache() teacache.apply_teacache(p) + except Exception as e: log.error(f'Processing apply: {e}') errors.display(e, 'apply') diff --git a/modules/processing_info.py b/modules/processing_info.py index ad87e6177..dca52112e 100644 --- a/modules/processing_info.py +++ b/modules/processing_info.py @@ -183,7 +183,7 @@ def create_infotext(p: StableDiffusionProcessing, all_prompts=None, all_seeds=No args['ToMe'] = _tome if _tome != 0 else None elif _token_method == 'ToDo': args['ToDo'] = _todo if _todo != 0 else None - if hasattr(shared.sd_model, 'embedding_db') and len(shared.sd_model.embedding_db.embeddings_used) > 0: # register used embeddings + if hasattr(shared.sd_model, 'embedding_db') and (shared.sd_model.embedding_db is not None) and len(shared.sd_model.embedding_db.embeddings_used) > 0: # register used embeddings args['Embeddings'] = ', '.join(shared.sd_model.embedding_db.embeddings_used) # samplers diff --git a/modules/sd_hijack_modular.py b/modules/sd_hijack_modular.py new file mode 100644 index 000000000..3c151e2ab --- /dev/null +++ b/modules/sd_hijack_modular.py @@ -0,0 +1,156 @@ +import os +import time +import logging +import torch +import diffusers +from modules.logger import log +from modules import shared, sd_offload, timer +from modules.attention import context as attention_context + + +debug = os.environ.get('SD_MODULAR_DEBUG', None) is not None +intercepted = set() + + +def modular_intercept(self, components, state: diffusers.modular_pipelines.modular_pipeline.BlockState, *args, **kwargs): + t0 = time.time() + block = type(self).__name__ + keys = state if isinstance(state, list) else list(state.__dict__.keys()) + # run code before block call + result = self.__orig_call__(components, state, *args, **kwargs) + t1 = time.time() + timer.blocks.add(block, t1 - t0) + # run code after block call + # TODO modular: intercept latents and set current latents for preview + """ + if 'latents' in keys: + ... + t2 = time.time() + timer.blocks.add('callback', t2 - t1) + """ + if debug: + log.trace(f'Modular intercept: block={block} state={keys} time={t1 - t0:.4f}') + return result + + +def patch_blocks(blocks: diffusers.ModularPipelineBlocks): + """recursively walks the block tree and patches the CLS __call__ method""" + def _patch_recursive(current_block): + block_cls = type(current_block) + if (block_cls not in intercepted) and (block_cls != diffusers.ModularPipelineBlocks): + if callable(block_cls) and not getattr(block_cls, "_is_patched", False): + block_cls.__orig_call__ = block_cls.__call__ # store original call for reference + block_cls.__call__ = modular_intercept + block_cls._is_patched = True # pylint: disable=protected-access + intercepted.add(block_cls) + if debug: + log.trace(f'Modular hijack: {block_cls.__name__}') + for attr in ("sub_blocks", "blocks"): # recurse into child blocks if containers exist + sub = getattr(current_block, attr, None) + if isinstance(sub, dict): + for child in sub.values(): + if isinstance(child, diffusers.ModularPipelineBlocks): + _patch_recursive(child) + elif isinstance(sub, (list, tuple)): + for child in sub: + if isinstance(child, diffusers.ModularPipelineBlocks): + _patch_recursive(child) + + _patch_recursive(blocks) + + +def register_callbacks(pipe: diffusers.ModularPipeline): + intercepted.clear() + if not isinstance(pipe, diffusers.ModularPipeline): + return + try: + patch_blocks(pipe._blocks) # pylint: disable=protected-access + except Exception as e: + log.error(f'Modular intercept: {e}') + + +class InterruptLogFilter(logging.Filter): + """Drops the per-block error dumps the modular runner logs when an interrupt raises through it.""" + def filter(self, record): + return 'Interrupted...' not in record.msg + + +def install_state_hook(pipe): + runner_log = logging.getLogger('diffusers.modular_pipelines.modular_pipeline') + if not any(isinstance(f, InterruptLogFilter) for f in runner_log.filters): + runner_log.addFilter(InterruptLogFilter()) + + def set_phase(phase: str, module: torch.nn.Module | None = None): + # every stage runs inside one pipeline call, so the forward hooks are the only place the current stage is visible + if getattr(pipe, 'sdnext_phase', None) != phase: + pipe.sdnext_phase = phase + jobid = getattr(pipe, 'sdnext_phaseid', None) # previous jobid if any + shared.state.end(jobid) # clear the previous job if exists + pipe.sdnext_phaseid = shared.state.begin(phase) # start a new job for the current phase + log.debug(f'Pipeline: phase={phase.replace(" ", "")} cls={pipe.__class__.__name__} module={module.__class__.__name__ if module is not None else None}') + return True + return False + + def _pre_transformer_hook(module, args): # pylint: disable=unused-argument + new_phase = set_phase('Generate', module) + attention_context.set_role('transformer') + if new_phase: + sd_offload.offload_ondemand(pipe, exclude=['transformer', 'transformer_ref'], reason='generate', force=hasattr(pipe, 'sdnext_force_offload')) + if shared.state.sampling_steps == 0 and getattr(pipe, 'num_timesteps', 0) > 0: + shared.state.sampling_steps = pipe.num_timesteps + if shared.state.paused: + log.debug('Sampling paused') + while shared.state.paused: + if shared.state.interrupted or shared.state.skipped: + raise AssertionError('Interrupted...') + time.sleep(0.1) + shared.state.step() + attention_context.tick() + if shared.state.interrupted or shared.state.skipped: + raise AssertionError('Interrupted...') + + def _pre_text_encode_hook(module, args): # pylint: disable=unused-argument + new_phase = set_phase('Text Encode', module) + attention_context.set_role('te') + if new_phase: + sd_offload.offload_ondemand(pipe, exclude=['text_encoder'], reason='text encode', force=hasattr(pipe, 'sdnext_force_offload')) + if shared.state.interrupted or shared.state.skipped: + raise AssertionError('Interrupted...') + + def _pre_vae_decode_hook(module, args): # pylint: disable=unused-argument + new_phase = set_phase('Decode', module) + attention_context.set_role('vae') + if new_phase: + sd_offload.offload_ondemand(pipe, exclude=['vae', 'audio_vae'], reason='vae decode', force=hasattr(pipe, 'sdnext_force_offload')) + if shared.state.interrupted or shared.state.skipped: # fires per tile, so tiled decodes abort promptly + raise AssertionError('Interrupted...') + + def _pre_vae_encode_hook(module, args): # pylint: disable=unused-argument + new_phase = set_phase('Encode', module) + attention_context.set_role('vae') + if new_phase: + sd_offload.offload_ondemand(pipe, exclude=['vae', 'audio_vae'], reason='vae encode', force=hasattr(pipe, 'sdnext_force_offload')) + if shared.state.interrupted or shared.state.skipped: # fires per tile, so tiled encodes abort promptly + raise AssertionError('Interrupted...') + + for name in ('transformer', 'transformer_ref'): + module = getattr(pipe, name, None) + if module is not None: + target = getattr(module, 'model', module) # conditioning calls the inner model directly + if isinstance(target, torch.nn.Module) and getattr(target, 'sdnext_state_hook', None) is None: + target.sdnext_state_hook = target.register_forward_pre_hook(_pre_transformer_hook) + + for name in ('text_encoder', 'text_encoder_2'): + module = getattr(pipe, name, None) + if module is not None: + target = getattr(module, 'model', module) # conditioning calls the inner model directly + if isinstance(target, torch.nn.Module) and getattr(target, 'sdnext_state_hook', None) is None: + target.sdnext_state_hook = target.register_forward_pre_hook(_pre_text_encode_hook) + + for name in ('vae', 'audio_vae'): + decoder = getattr(getattr(pipe, name, None), 'decoder', None) # decode entry points bypass forward, the inner decoder does not + if isinstance(decoder, torch.nn.Module) and getattr(decoder, 'sdnext_state_hook', None) is None: + decoder.sdnext_state_hook = decoder.register_forward_pre_hook(_pre_vae_decode_hook) + encoder = getattr(getattr(pipe, name, None), 'encoder', None) # decode entry points bypass forward, the inner encoder does not + if isinstance(encoder, torch.nn.Module) and getattr(encoder, 'sdnext_state_hook', None) is None: + encoder.sdnext_state_hook = encoder.register_forward_pre_hook(_pre_vae_encode_hook) diff --git a/modules/timer.py b/modules/timer.py index 2cdecc87e..daacd1e7d 100644 --- a/modules/timer.py +++ b/modules/timer.py @@ -106,4 +106,5 @@ launch = Timer() init = Timer() load = Timer() dynamo = Timer() +blocks = Timer() autotune = Timer(profile=True) diff --git a/modules/video_models/video_load.py b/modules/video_models/video_load.py index 9fcae71d1..1e4343846 100644 --- a/modules/video_models/video_load.py +++ b/modules/video_models/video_load.py @@ -5,7 +5,7 @@ import time import torch import transformers import diffusers -from modules import shared, errors, sd_models, sd_checkpoint, model_quant, devices, sd_hijack_te, sd_hijack_vae, modular_load +from modules import shared, errors, sd_models, sd_checkpoint, model_quant, devices, modular_load, sd_hijack_te, sd_hijack_vae, sd_hijack_modular from modules.logger import log from modules.video_models import models_def, video_utils, video_overrides, video_cache from pipelines import generic @@ -196,7 +196,7 @@ def load_model(selected: models_def.Model): shared.sd_model = model_quant.do_post_load_quant(shared.sd_model, allow=False) sd_models.set_diffuser_offload(shared.sd_model) if modular_load.is_modular(shared.sd_model): - modular_load.install_state_hook(shared.sd_model) + sd_hijack_modular.install_state_hook(shared.sd_model) loaded_model = selected.name msg = f'Load video: cls={shared.sd_model.__class__.__name__} model="{selected.name}" time={t1-t0:.2f}' From aa4aa57fe833cc5a027acda28dae5cd459498fb9 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 23:22:56 +0100 Subject: [PATCH 038/270] feat(attention): fixed budget block selector and token layout The selector mean-pools query and key tiles, scores the tile pairs and keeps the highest scoring key tiles per query tile within a budget expressed as a fraction of the sparsifiable candidates. No scale and no softmax, since top-k is invariant under both. Scoring runs on query heads so grouped attention needs no key expansion, the diagonal is always kept so no query row is left empty, and a budget that covers every candidate reports dense instead of building a full mask. The layout says what a packed sequence holds. Only video and image tokens are sparsifiable; text, conditioning, audio and anything unrecognized pin their rows and columns dense, padding is dropped, and a tile straddling a boundary pins. Layouts come from the *_indices tensors a pipeline passes its transformer by name, from ordered segments where a transformer packs the sequence itself, or from a leading prefix as a fallback. The flex consumer builds a BlockMask with every selected tile in the full slots, so mask_mod is never invoked and no dense mask is materialized, and calls flex_attention compiled: called eagerly it reads mask_mod rather than the block lists, so a block only mask attends densely and silently. test/test-attention-sparse.py covers this with a row that fails if the selection stops changing the output, alongside tile equivalence against sdpa fed the same tiles, measured against the flex kernel floor rather than an absolute tolerance. --- modules/attention/sparse/__init__.py | 8 + modules/attention/sparse/flex.py | 37 +++ modules/attention/sparse/layout.py | 132 +++++++++ modules/attention/sparse/selector.py | 129 +++++++++ test/test-attention-sparse.py | 389 +++++++++++++++++++++++++++ 5 files changed, 695 insertions(+) create mode 100644 modules/attention/sparse/__init__.py create mode 100644 modules/attention/sparse/flex.py create mode 100644 modules/attention/sparse/layout.py create mode 100644 modules/attention/sparse/selector.py create mode 100644 test/test-attention-sparse.py diff --git a/modules/attention/sparse/__init__.py b/modules/attention/sparse/__init__.py new file mode 100644 index 000000000..5d8efc1f1 --- /dev/null +++ b/modules/attention/sparse/__init__.py @@ -0,0 +1,8 @@ +"""Block-sparse attention: the selector, the token layout it respects, and the consumers that apply it.""" +from modules.attention.sparse.selector import BlockSelection, SparseSpec, block_count, radial_blocks, schedule, select_blocks +from modules.attention.sparse.layout import Span, TokenLayout, block_pins, layout_from_index_kwargs, layout_from_prefix, layout_from_segments + +__all__ = [ + 'BlockSelection', 'SparseSpec', 'block_count', 'radial_blocks', 'schedule', 'select_blocks', + 'Span', 'TokenLayout', 'block_pins', 'layout_from_index_kwargs', 'layout_from_prefix', 'layout_from_segments', +] diff --git a/modules/attention/sparse/flex.py b/modules/attention/sparse/flex.py new file mode 100644 index 000000000..42ef1dad3 --- /dev/null +++ b/modules/attention/sparse/flex.py @@ -0,0 +1,37 @@ +"""Turn a BlockSelection into the BlockMask FlexAttention consumes, and call it so the mask is honored.""" +import torch +from torch.nn.attention.flex_attention import BlockMask, flex_attention, _dense_to_ordered +from modules.attention.sparse.selector import BlockSelection + + +compiled_flex = None + + +def to_block_mask(selection: BlockSelection, device=None) -> BlockMask: + """All selected tiles go in the full slots, so mask_mod is never invoked and no dense S squared mask is built.""" + keep = selection.keep + if device is not None and keep.device != device: + keep = keep.to(device) + if keep.dim() != 4: + raise ValueError(f'block selection must be 4d, got {tuple(keep.shape)}') + empty_num, empty_indices = _dense_to_ordered(torch.zeros_like(keep)) + full_num, full_indices = _dense_to_ordered(keep) + return BlockMask.from_kv_blocks( + empty_num, empty_indices, + full_kv_num_blocks=full_num, full_kv_indices=full_indices, + BLOCK_SIZE=(selection.block_q, selection.block_kv), + seq_lengths=(selection.seq_q, selection.seq_kv), # exact lengths, so a ragged tail is handled rather than rounded up + compute_q_blocks=False, # backward only metadata, and inference never reads it + ) + + +def flex_call(): + """flex_attention reads the block lists only when compiled; called eagerly it evaluates mask_mod instead and a block-only mask is silently dense.""" + global compiled_flex # pylint: disable=global-statement + if compiled_flex is None: + compiled_flex = torch.compile(flex_attention, dynamic=False) + return compiled_flex + + +def attend(query, key, value, selection: BlockSelection, scale=None, enable_gqa=False): + return flex_call()(query, key, value, block_mask=to_block_mask(selection, device=query.device), scale=scale, enable_gqa=enable_gqa) diff --git a/modules/attention/sparse/layout.py b/modules/attention/sparse/layout.py new file mode 100644 index 000000000..772e49b65 --- /dev/null +++ b/modules/attention/sparse/layout.py @@ -0,0 +1,132 @@ +"""What each token in a packed sequence is, so the selector knows what it may sparsify.""" +from dataclasses import dataclass +import torch + + +# only the bulk modalities are sparsifiable; everything else is pinned dense, and an unrecognized kind pins too +SPARSIFIABLE = frozenset({'video', 'image'}) +DROPPED = frozenset({'pad'}) + + +@dataclass(frozen=True) +class Span: + kind: str + start: int + end: int + + +@dataclass(frozen=True) +class TokenLayout: + """Ordered spans covering one packed sequence.""" + spans: tuple[Span, ...] + length: int + source: str = 'unknown' # how the layout was obtained, for the log + + def key(self) -> tuple: + return (self.length, self.source, tuple((s.kind, s.start, s.end) for s in self.spans)) + + def kinds(self) -> tuple[str, ...]: + return tuple(dict.fromkeys(s.kind for s in self.spans)) + + def sparsifiable_tokens(self) -> int: + return sum(s.end - s.start for s in self.spans if s.kind in SPARSIFIABLE) + + def token_flags(self, device) -> tuple[torch.Tensor, torch.Tensor]: + """Per token: may this be sparsified, and is it padding.""" + sparse = torch.zeros(self.length, dtype=torch.bool, device=device) + pad = torch.zeros(self.length, dtype=torch.bool, device=device) + for span in self.spans: + if span.kind in SPARSIFIABLE: + sparse[span.start:span.end] = True + elif span.kind in DROPPED: + pad[span.start:span.end] = True + return sparse, pad + + +def runs(indices: torch.Tensor) -> list[tuple[int, int]]: + """Contiguous [start, end) runs in a sorted 1d index tensor.""" + if indices.numel() == 0: + return [] + values = indices.detach().to('cpu', torch.int64).sort().values + breaks = (values[1:] - values[:-1] != 1).nonzero().flatten().tolist() + bounds = [0, *[b + 1 for b in breaks], values.numel()] + return [(int(values[bounds[i]].item()), int(values[bounds[i + 1] - 1].item()) + 1) for i in range(len(bounds) - 1)] + + +def layout_from_index_kwargs(kwargs: dict, length: int) -> TokenLayout | None: + """Read a layout off the *_indices tensors a pipeline passes its transformer by name.""" + spans: list[Span] = [] + for name, value in kwargs.items(): + if not name.endswith('_indices') or not torch.is_tensor(value) or value.dim() != 1 or value.is_floating_point(): + continue + kind = name[:-len('_indices')].lower() + found = runs(value) + for position, (start, end) in enumerate(found): + # a video run that is not the last one is keyframe conditioning, which stays dense + resolved = 'cond' if (kind == 'video' and position < len(found) - 1) else kind + spans.append(Span(kind=resolved, start=start, end=end)) + if not spans: + return None + spans.sort(key=lambda s: s.start) + return TokenLayout(spans=tuple(spans), length=length, source='indices') + + +def layout_from_segments(segments, length: int | None = None, source: str = 'segments') -> TokenLayout: + """Build a layout from ordered (kind, count) pairs, the form a transformer knows at its packing site.""" + spans: list[Span] = [] + cursor = 0 + for kind, count in segments: + if count <= 0: + continue + spans.append(Span(kind=kind, start=cursor, end=cursor + count)) + cursor += count + return TokenLayout(spans=tuple(spans), length=length if length is not None else cursor, source=source) + + +def layout_from_prefix(length: int, prefix: int) -> TokenLayout: + """Fallback when nothing published a layout: treat a leading run as conditioning and sparsify the rest.""" + return layout_from_segments([('text', prefix), ('image', length - prefix)], length=length, source='prefix') + + +def block_flags(flags: torch.Tensor, block: int) -> tuple[torch.Tensor, torch.Tensor]: + """Per block: do all tokens carry the flag, does any token carry it.""" + seq = flags.shape[0] + whole = (seq // block) * block + parts_all, parts_any = [], [] + if whole: + view = flags[:whole].view(whole // block, block) + parts_all.append(view.all(dim=-1)) + parts_any.append(view.any(dim=-1)) + if whole < seq: + parts_all.append(flags[whole:].all(dim=-1, keepdim=True)) + parts_any.append(flags[whole:].any(dim=-1, keepdim=True)) + def join(parts): + return parts[0] if len(parts) == 1 else torch.cat(parts, dim=0) + return join(parts_all), join(parts_any) + + +pin_cache: dict = {} + + +def block_pins(layout: TokenLayout, seq_q: int, seq_kv: int, block_q: int, block_kv: int, device) -> tuple[torch.Tensor, torch.Tensor]: + """Tiles that must stay dense and tiles that can be skipped outright, as (1, 1, NQ, NK) masks.""" + cache_key = (layout.key(), seq_q, seq_kv, block_q, block_kv, str(device)) + hit = pin_cache.get(cache_key) + if hit is not None: + return hit + sparse_tokens, pad_tokens = layout.token_flags(device) + q_sparse = sparse_tokens[:seq_q] if layout.length >= seq_q else torch.nn.functional.pad(sparse_tokens, (0, seq_q - layout.length)) + kv_sparse = sparse_tokens[:seq_kv] if layout.length >= seq_kv else torch.nn.functional.pad(sparse_tokens, (0, seq_kv - layout.length)) + kv_pad = pad_tokens[:seq_kv] if layout.length >= seq_kv else torch.nn.functional.pad(pad_tokens, (0, seq_kv - layout.length)) + q_all_sparse, _ = block_flags(q_sparse, block_q) + kv_all_sparse, _ = block_flags(kv_sparse, block_kv) + kv_all_pad, _ = block_flags(kv_pad, block_kv) + # a tile is pinned when its query tile or its key tile carries anything that is not sparsifiable, boundary tiles included + pins = (~q_all_sparse).unsqueeze(-1) | (~kv_all_sparse).unsqueeze(0) + drops = kv_all_pad.unsqueeze(0).expand_as(pins) + pins = (pins & ~drops).unsqueeze(0).unsqueeze(0).contiguous() + drops = drops.unsqueeze(0).unsqueeze(0).contiguous() + if len(pin_cache) > 32: + pin_cache.clear() + pin_cache[cache_key] = (pins, drops) + return pins, drops diff --git a/modules/attention/sparse/selector.py b/modules/attention/sparse/selector.py new file mode 100644 index 000000000..89539e8cb --- /dev/null +++ b/modules/attention/sparse/selector.py @@ -0,0 +1,129 @@ +"""Fixed-budget block selection: which KV tiles each query tile attends to.""" +from dataclasses import dataclass +import math +import torch + + +@dataclass(frozen=True) +class SparseSpec: + """How much to keep and at what granularity. Budget is a fraction of the sparsifiable candidates, pins are added on top.""" + budget: float = 0.30 + block_q: int = 128 + block_kv: int = 64 + head_shared: bool = False # score once for all heads, cheaper and coarser + force: bool = False # skip the dense short circuit, so tests can exercise the path at budget 1.0 + score_chunk_bytes: int = 256 << 20 + + +@dataclass(frozen=True) +class BlockSelection: + """int8 keep flags per (query tile, kv tile); the geometry every consumer reads.""" + keep: torch.Tensor # (B, H, NQ, NK), H is the query head count or 1 + block_q: int + block_kv: int + budget: float + seq_q: int + seq_kv: int + density: float + + @property + def shape(self) -> tuple[int, int, int, int]: + return tuple(self.keep.shape) + + +def block_count(length: int, block: int) -> int: + return (length + block - 1) // block + + +def pool_blocks(x: torch.Tensor, block: int) -> torch.Tensor: + """Mean over each block of tokens, fp32, without materializing a padded copy.""" + seq = x.shape[-2] + whole = (seq // block) * block + parts = [] + if whole: + head = x[..., :whole, :] + parts.append(head.unflatten(-2, (whole // block, block)).mean(dim=-2, dtype=torch.float32)) + if whole < seq: + parts.append(x[..., whole:, :].mean(dim=-2, dtype=torch.float32, keepdim=True)) + return parts[0] if len(parts) == 1 else torch.cat(parts, dim=-2) + + +def diagonal_blocks(nq: int, nk: int, block_q: int, block_kv: int, device) -> torch.Tensor: + """Tiles whose query and key token ranges overlap; keeping them removes the empty-row case.""" + q_index = torch.arange(nq, device=device).unsqueeze(-1) + k_index = torch.arange(nk, device=device).unsqueeze(0) + return (q_index * block_q < (k_index + 1) * block_kv) & (k_index * block_kv < (q_index + 1) * block_q) + + +def score_blocks(query: torch.Tensor, key: torch.Tensor, spec: SparseSpec) -> torch.Tensor: + """Mean-pooled query-key affinity per tile pair. No scale and no softmax: top-k is invariant under both.""" + pooled_q = pool_blocks(query, spec.block_q) # (B, Hq, NQ, D) + pooled_k = pool_blocks(key, spec.block_kv) # (B, Hkv, NK, D) + heads_q, heads_kv = pooled_q.shape[1], pooled_k.shape[1] + if spec.head_shared: + pooled_q = pooled_q.mean(dim=1, keepdim=True) + pooled_k = pooled_k.mean(dim=1, keepdim=True) + elif heads_kv != heads_q: # gqa: score on query heads, the geometry both consumers expect + pooled_k = pooled_k.repeat_interleave(heads_q // heads_kv, dim=1) + heads = pooled_q.shape[1] + per_head = pooled_q.shape[2] * pooled_k.shape[2] * 4 + chunk = max(1, min(heads, spec.score_chunk_bytes // max(per_head, 1))) + if chunk >= heads: + return pooled_q @ pooled_k.transpose(-1, -2) + return torch.cat([pooled_q[:, i:i + chunk] @ pooled_k[:, i:i + chunk].transpose(-1, -2) for i in range(0, heads, chunk)], dim=1) + + +def select_blocks(query: torch.Tensor, key: torch.Tensor, spec: SparseSpec, pins: torch.Tensor | None = None, drops: torch.Tensor | None = None) -> BlockSelection | None: + """Keep the highest scoring KV tiles per query tile within the budget, plus pins and the diagonal. None means attend densely.""" + seq_q, seq_kv = query.shape[-2], key.shape[-2] + nq, nk = block_count(seq_q, spec.block_q), block_count(seq_kv, spec.block_kv) + device = query.device + must = diagonal_blocks(nq, nk, spec.block_q, spec.block_kv, device).unsqueeze(0).unsqueeze(0) + if pins is not None: + must = must | pins + forbidden = drops if drops is not None else torch.zeros_like(must) + candidates = ~must & ~forbidden + per_row = candidates.sum(dim=-1, keepdim=True) # (.., NQ, 1) + keep_per_row = torch.ceil(per_row * spec.budget).to(torch.int64) + if not spec.force and bool((keep_per_row >= per_row).all()): + return None # the budget covers every candidate, so the mask would be dense + + scores = score_blocks(query, key, spec) + scores = scores.masked_fill(~candidates.expand_as(scores), float('-inf')) + limit = int(keep_per_row.max().item()) + keep = must.expand(scores.shape).clone() + if limit > 0: + order = scores.argsort(dim=-1, descending=True, stable=True) + rank = torch.empty_like(order) + rank.scatter_(-1, order, torch.arange(nk, device=device).expand_as(order)) + keep |= (rank < keep_per_row) & candidates + keep &= ~forbidden + keep_int8 = keep.to(torch.int8) + density = float(keep_int8.sum().item()) / max(keep_int8.numel(), 1) + return BlockSelection(keep=keep_int8, block_q=spec.block_q, block_kv=spec.block_kv, budget=spec.budget, seq_q=seq_q, seq_kv=seq_kv, density=density) + + +def radial_blocks(seq_q: int, seq_kv: int, density: float, spec: SparseSpec, device) -> BlockSelection: + """A band around the diagonal at the requested density: the static control the selector has to beat.""" + nq, nk = block_count(seq_q, spec.block_q), block_count(seq_kv, spec.block_kv) + q_center = (torch.arange(nq, device=device).unsqueeze(-1) + 0.5) * spec.block_q + k_center = (torch.arange(nk, device=device).unsqueeze(0) + 0.5) * spec.block_kv + distance = (q_center - k_center).abs() + low, high = 0.0, float(max(seq_q, seq_kv)) + for _ in range(40): # bisect the bandwidth, since the band width to density map has no closed form at the edges + mid = (low + high) / 2 + if float((distance <= mid).to(torch.float32).mean().item()) < density: + low = mid + else: + high = mid + keep = (distance <= high).unsqueeze(0).unsqueeze(0).to(torch.int8) + return BlockSelection(keep=keep, block_q=spec.block_q, block_kv=spec.block_kv, budget=density, seq_q=seq_q, seq_kv=seq_kv, density=float(keep.sum().item()) / max(keep.numel(), 1)) + + +def schedule(steps: int, budget: float, bump: float = 0.0, bump_steps: int = 0) -> tuple[float, ...]: + """Per-step budgets, precomputed. At most two distinct values, so a compiled consumer sees at most two specializations.""" + if bump <= 0 or bump_steps <= 0 or steps <= 0: + return tuple([budget] * max(steps, 0)) + raised = min(1.0, budget + bump) + edge = min(bump_steps, math.ceil(steps / 2)) + return tuple([raised if (i < edge or i >= steps - edge) else budget for i in range(steps)]) diff --git a/test/test-attention-sparse.py b/test/test-attention-sparse.py new file mode 100644 index 000000000..b4bd2f5e3 --- /dev/null +++ b/test/test-attention-sparse.py @@ -0,0 +1,389 @@ +#!/usr/bin/env python +""" +Offline unit tests for block-sparse attention in modules.attention.sparse. + +Covers: + +- block pooling, including the ragged tail, against a per-block reference +- the diagonal invariant: every query tile keeps the key tiles its tokens overlap +- budget semantics: density tracks the budget over the candidates, pins survive, drops never do +- the dense short circuit, and the force flag that suppresses it for tests +- determinism of the selection for identical inputs +- layout reading: the *_indices form a pipeline passes by name, with a non-final video run + relabelled as conditioning, and the segment form a transformer knows at its packing site +- pins and drops derived from a layout: pinned columns, dropped padding, pinned boundary tiles +- the flex consumer: a full-keep selection through flex_attention reproduces dense sdpa, and a + selection with dropped tiles reproduces sdpa given the same tiles masked out +- the density matched radial control and the step schedule + +The flex rows need a cuda device and compile the flex kernel; they skip on cpu. + +Usage: + python test/test-attention-sparse.py +""" + +import os +import sys + +import torch + +script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, script_dir) +os.chdir(script_dir) + +os.environ['SD_INSTALL_QUIET'] = '1' + +# Bootstrap cmd_args before any module that pulls in shared.py. +import modules.cmd_args # pylint: disable=wrong-import-position +import installer # pylint: disable=wrong-import-position +orig_argv = sys.argv +sys.argv = [sys.argv[0]] +try: + modules.cmd_args.parse_args() +finally: + sys.argv = orig_argv +installer.add_args(modules.cmd_args.parser) +modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) + +stock_sdpa = torch.nn.functional.scaled_dot_product_attention # captured before shared installs the configured hijacks + +from modules.errors import log # pylint: disable=wrong-import-position +from modules import shared # pylint: disable=wrong-import-position,unused-import +from modules.attention import sparse # pylint: disable=wrong-import-position +from modules.attention.sparse import flex as sparse_flex # pylint: disable=wrong-import-position + + +results: dict[str, dict] = {} +device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu') + + +def category(name: str): + if name not in results: + results[name] = {'passed': 0, 'failed': 0, 'skipped': 0, 'tests': []} + return name + + +def record(cat: str, passed, name: str, detail: str = ''): + status = 'SKIP' if passed is None else ('PASS' if passed else 'FAIL') + key = {'SKIP': 'skipped', 'PASS': 'passed', 'FAIL': 'failed'}[status] + results[cat][key] += 1 + results[cat]['tests'].append((status, name)) + msg = f' {status}: {name}' + if detail: + msg += f' ({detail})' + (log.info if status != 'FAIL' else log.error)(msg) + + +def run_test(cat: str, fn): + name = fn.__name__ + try: + outcome = fn() + record(cat, None if outcome is None else bool(outcome), name) + except AssertionError as e: + record(cat, False, name, str(e)) + except Exception as e: # pylint: disable=broad-except + record(cat, False, name, f'exception: {e}') + import traceback + traceback.print_exc() + + +generator = torch.Generator(device=device).manual_seed(1234) + + +def randn(*shape, dtype=torch.float32): + return torch.randn(*shape, generator=generator, device=device, dtype=dtype) + + +def qkv(heads=4, seq=1024, dim=64): + return randn(1, heads, seq, dim), randn(1, heads, seq, dim), randn(1, heads, seq, dim) + + +# ============================================================ +# Selector +# ============================================================ + +def test_pooling_matches_a_per_block_reference(): + x = randn(1, 2, 300, 8) + pooled = sparse.selector.pool_blocks(x, 128) + assert pooled.shape == (1, 2, 3, 8), pooled.shape + for index, (start, end) in enumerate([(0, 128), (128, 256), (256, 300)]): + expected = x[..., start:end, :].to(torch.float32).mean(dim=-2) + assert torch.allclose(pooled[..., index, :], expected, atol=1e-5), index + return True + + +def test_diagonal_covers_every_overlapping_tile(): + nq, nk, bq, bk = 4, 8, 128, 64 + diagonal = sparse.selector.diagonal_blocks(nq, nk, bq, bk, device) + for i in range(nq): + for j in range(nk): + overlaps = (i * bq < (j + 1) * bk) and (j * bk < (i + 1) * bq) + assert bool(diagonal[i, j]) == overlaps, (i, j) + assert int(diagonal.sum().item()) == nq * (bq // bk) # two kv tiles per query tile at 128 over 64 + return True + + +def test_budget_sets_density_over_the_candidates(): + q, k = randn(1, 4, 1024, 32), randn(1, 4, 1024, 32) + for budget in (0.15, 0.30, 0.50): + spec = sparse.SparseSpec(budget=budget) + selection = sparse.select_blocks(q, k, spec) + assert selection is not None, budget + keep = selection.keep + diagonal = sparse.selector.diagonal_blocks(keep.shape[-2], keep.shape[-1], spec.block_q, spec.block_kv, device) + candidates = int((~diagonal).sum().item()) + chosen = int((keep.bool() & ~diagonal).sum().item()) / keep.shape[1] + expected = candidates * budget + assert abs(chosen - expected) <= keep.shape[-2], f'budget={budget} chose {chosen} of {candidates}, expected about {expected}' + assert bool((keep.bool() | ~diagonal).all()), 'a diagonal tile was dropped' + return True + + +def test_pins_survive_and_drops_never_appear(): + q, k = randn(1, 2, 512, 32), randn(1, 2, 512, 32) + spec = sparse.SparseSpec(budget=0.10) + nq = sparse.block_count(512, spec.block_q) + nk = sparse.block_count(512, spec.block_kv) + pins = torch.zeros(1, 1, nq, nk, dtype=torch.bool, device=device) + drops = torch.zeros_like(pins) + pins[..., 0] = True # a pinned column, as a text prefix produces + drops[..., -1] = True # a padding column + selection = sparse.select_blocks(q, k, spec, pins=pins, drops=drops) + assert selection is not None + assert bool(selection.keep[..., 0].all()), 'pinned column not kept' + assert not bool(selection.keep[..., -1].any()), 'dropped column kept' + return True + + +def test_dense_short_circuit_and_force(): + q, k = randn(1, 2, 512, 32), randn(1, 2, 512, 32) + assert sparse.select_blocks(q, k, sparse.SparseSpec(budget=1.0)) is None, 'full budget must report dense' + forced = sparse.select_blocks(q, k, sparse.SparseSpec(budget=1.0, force=True)) + assert forced is not None and bool(forced.keep.all()), 'forced full budget must keep every tile' + return True + + +def test_selection_is_deterministic(): + q, k = randn(1, 4, 1024, 32), randn(1, 4, 1024, 32) + spec = sparse.SparseSpec(budget=0.25) + first = sparse.select_blocks(q, k, spec) + second = sparse.select_blocks(q, k, spec) + assert torch.equal(first.keep, second.keep) + return True + + +def test_head_shared_collapses_the_head_dimension(): + q, k = randn(1, 8, 1024, 32), randn(1, 8, 1024, 32) + selection = sparse.select_blocks(q, k, sparse.SparseSpec(budget=0.25, head_shared=True)) + assert selection.keep.shape[1] == 1, selection.keep.shape + return True + + +def test_gqa_scores_on_query_heads(): + q, k = randn(1, 8, 1024, 32), randn(1, 2, 1024, 32) + selection = sparse.select_blocks(q, k, sparse.SparseSpec(budget=0.25)) + assert selection.keep.shape[1] == 8, selection.keep.shape # both consumers need the mask head dim to be Hq or 1 + return True + + +# ============================================================ +# Layout +# ============================================================ + +def test_layout_from_index_kwargs_relabels_the_conditioning_video_run(): + kwargs = { # the shape MiniMax H3 passes its transformer: text, a keyframe video run, audio, then the generated video + 'text_indices': torch.arange(0, 8, device=device), + 'video_indices': torch.cat([torch.arange(8, 12, device=device), torch.arange(20, 40, device=device)]), + 'audio_indices': torch.arange(12, 20, device=device), + 'hidden_states': torch.zeros(1, device=device), # not an index tensor, must be ignored + } + layout = sparse.layout_from_index_kwargs(kwargs, length=40) + kinds = [(s.kind, s.start, s.end) for s in layout.spans] + assert kinds == [('text', 0, 8), ('cond', 8, 12), ('audio', 12, 20), ('video', 20, 40)], kinds + assert layout.sparsifiable_tokens() == 20 + return True + + +def test_layout_from_index_kwargs_returns_none_without_indices(): + assert sparse.layout_from_index_kwargs({'hidden_states': torch.zeros(4, device=device)}, length=4) is None + return True + + +def test_layout_from_segments_and_prefix(): + layout = sparse.layout_from_segments([('text', 128), ('image', 4096), ('pad', 128)]) + assert layout.length == 4352 and layout.sparsifiable_tokens() == 4096 + prefix = sparse.layout_from_prefix(1024, 64) + assert prefix.sparsifiable_tokens() == 960 and prefix.source == 'prefix' + return True + + +def test_block_pins_pin_conditioning_and_drop_padding(): + block_q, block_kv = 128, 64 + layout = sparse.layout_from_segments([('text', 128), ('video', 1024), ('pad', 128)]) + pins, drops = sparse.block_pins(layout, 1280, 1280, block_q, block_kv, device) + assert pins.shape == (1, 1, 10, 20) and drops.shape == pins.shape, (pins.shape, drops.shape) + assert bool(pins[0, 0, :, 0:2].all()), 'the text columns must be pinned' + assert bool(drops[0, 0, :, 18:20].all()), 'the padding columns must be dropped' + assert not bool(drops[0, 0, :, 0:18].any()), 'only padding may be dropped' + assert bool(pins[0, 0, 0, 0:18].all()), 'the query tile holding text must stay dense over every column that is not padding' + assert not bool(pins[0, 0, :, 18:20].any()), 'a dropped column is skipped, never pinned' + assert not bool(pins[0, 0, 1:9, 2:18].any()), 'video against video must remain sparsifiable' + return True + + +def test_block_pins_pin_a_boundary_tile(): + layout = sparse.layout_from_segments([('text', 100), ('video', 1180)]) # the boundary falls inside the first tile + pins, drops = sparse.block_pins(layout, 1280, 1280, 128, 64, device) + assert not bool(drops.any()), 'nothing is padding here' + assert bool(pins[0, 0, 0, :].all()), 'a query tile straddling a boundary must stay dense' + assert bool(pins[0, 0, :, 0:2].all()), 'a key tile straddling a boundary must stay dense' + return True + + +def test_block_pins_are_cached_per_geometry(): + layout = sparse.layout_from_segments([('text', 128), ('video', 1024)]) + first = sparse.block_pins(layout, 1152, 1152, 128, 64, device) + second = sparse.block_pins(layout, 1152, 1152, 128, 64, device) + assert first[0] is second[0] and first[1] is second[1], 'identical geometry should hit the cache' + return True + + +# ============================================================ +# Consumers and controls +# ============================================================ + +def test_radial_control_matches_the_requested_density(): + spec = sparse.SparseSpec() + for density in (0.15, 0.30): + control = sparse.radial_blocks(4096, 4096, density, spec, device) + assert abs(control.density - density) < 0.05, f'requested {density}, got {control.density}' + return True + + +def test_schedule_has_at_most_two_budgets(): + flat = sparse.schedule(20, 0.3) + assert set(flat) == {0.3} and len(flat) == 20 + bumped = sparse.schedule(20, 0.3, bump=0.3, bump_steps=2) + assert len(set(bumped)) == 2, set(bumped) + assert bumped[0] == bumped[1] == 0.6 and bumped[-1] == bumped[-2] == 0.6 and bumped[10] == 0.3 + return True + + +def flex_available(): + return device.type == 'cuda' + + +def kernel_floor(q, k, v): + """How far the flex kernel sits from sdpa on the same dense problem, which bounds what any sparse row can prove.""" + full = sparse.select_blocks(q, k, sparse.SparseSpec(budget=1.0, force=True)) + return (sparse_flex.attend(q, k, v, full) - stock_sdpa(q, k, v)).abs().max().item() + + +def test_flex_full_selection_reproduces_dense_sdpa(): + if not flex_available(): + return None + q, k, v = qkv() + floor = kernel_floor(q, k, v) + assert floor < 5e-3, f'a full selection should reproduce dense sdpa, differs by {floor}' + log.info(f' flex kernel floor vs sdpa: {floor:.6f}') + return True + + +def test_flex_sparse_selection_matches_the_same_tiles_under_sdpa(): + if not flex_available(): + return None + q, k, v = qkv() + spec = sparse.SparseSpec(budget=0.25) + selection = sparse.select_blocks(q, k, spec) + got = sparse_flex.attend(q, k, v, selection) + # expand the tile selection to tokens and hand sdpa the same thing + token_mask = selection.keep.bool().repeat_interleave(spec.block_q, dim=-2).repeat_interleave(spec.block_kv, dim=-1) + expected = stock_sdpa(q, k, v, attn_mask=token_mask[..., :q.shape[-2], :k.shape[-2]]) + delta = (got - expected).abs().max().item() + floor = kernel_floor(q, k, v) + assert delta <= max(4 * floor, 2e-3), f'sparse selection differs from the same tiles under sdpa by {delta}, floor {floor}' + return True + + +def test_flex_applies_the_selection_at_all(): + if not flex_available(): + return None + # flex reads the block lists only when compiled; eager evaluates mask_mod instead, so a + # block only mask silently attends densely. this row fails if the consumer stops compiling. + q, k, v = qkv() + selection = sparse.select_blocks(q, k, sparse.SparseSpec(budget=0.25)) + delta = (sparse_flex.attend(q, k, v, selection) - stock_sdpa(q, k, v)).abs().max().item() + floor = kernel_floor(q, k, v) + assert delta > 20 * max(floor, 1e-6), f'a 25 percent selection changed the output by only {delta}, floor {floor}: the mask is not being applied' + return True + + +def test_flex_handles_a_ragged_tail(): + if not flex_available(): + return None + seq = 1000 # neither block size divides this + q, k, v = qkv(heads=2, seq=seq) + selection = sparse.select_blocks(q, k, sparse.SparseSpec(budget=1.0, force=True)) + delta = (sparse_flex.attend(q, k, v, selection) - stock_sdpa(q, k, v)).abs().max().item() + assert delta < 5e-3, f'ragged tail differs by {delta}' + return True + + +def run_all(): + log.warning(f'=== selector (device={device}) ===') + cat = category('selector') + for fn in [ + test_pooling_matches_a_per_block_reference, + test_diagonal_covers_every_overlapping_tile, + test_budget_sets_density_over_the_candidates, + test_pins_survive_and_drops_never_appear, + test_dense_short_circuit_and_force, + test_selection_is_deterministic, + test_head_shared_collapses_the_head_dimension, + test_gqa_scores_on_query_heads, + ]: + run_test(cat, fn) + + log.warning('=== layout ===') + cat = category('layout') + for fn in [ + test_layout_from_index_kwargs_relabels_the_conditioning_video_run, + test_layout_from_index_kwargs_returns_none_without_indices, + test_layout_from_segments_and_prefix, + test_block_pins_pin_conditioning_and_drop_padding, + test_block_pins_pin_a_boundary_tile, + test_block_pins_are_cached_per_geometry, + ]: + run_test(cat, fn) + + log.warning('=== consumers ===') + cat = category('consumers') + for fn in [ + test_radial_control_matches_the_requested_density, + test_schedule_has_at_most_two_budgets, + test_flex_full_selection_reproduces_dense_sdpa, + test_flex_sparse_selection_matches_the_same_tiles_under_sdpa, + test_flex_applies_the_selection_at_all, + test_flex_handles_a_ragged_tail, + ]: + run_test(cat, fn) + + log.warning('=== Results ===') + total_passed = total_failed = total_skipped = 0 + for cat_name, info in results.items(): + ok = info['failed'] == 0 + log.info(f" {cat_name}: {info['passed']} passed, {info['failed']} failed, {info['skipped']} skipped [{'PASS' if ok else 'FAIL'}]") + total_passed += info['passed'] + total_failed += info['failed'] + total_skipped += info['skipped'] + log.warning(f'Total: {total_passed} passed, {total_failed} failed, {total_skipped} skipped') + return total_failed == 0 + + +if __name__ == '__main__': + import time + t0 = time.time() + ok = run_all() + torch.nn.functional.scaled_dot_product_attention = stock_sdpa + log.warning(f'Total time: {time.time() - t0:.2f}s') + sys.exit(0 if ok else 1) From d75abce6422bed229209161cb844d79fc7fd4844 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 23:32:18 +0100 Subject: [PATCH 039/270] feat(attention): sparse attention settings and router stage Sparse attention is a stage over the chain rather than a member of it: one switch, and the router hands the selection to whichever active backend advertises that it consumes a block mask, currently flex. A backend declares that through a capability set, so the quantized kernel joins later without touching the router. The stage gates on the component role, self attention, a minimum sequence length defaulting to the measured 8192 token crossover, and the absence of a token mask or causal flag, which flex cannot combine with a block only mask. Budgets follow a precomputed per step schedule with at most two distinct values. Enabling the feature with no capable backend in the chain warns and leaves attention dense rather than doing nothing quietly. The modular pre-forward hook now receives kwargs and publishes whatever token layout the pipeline passes by name, so a packed sequence gets its conditioning pinned without any model specific code. Without a layout the whole sequence is sparsified and that is logged once per length. --- modules/attention/backends/flex.py | 6 +- modules/attention/context.py | 8 +++ modules/attention/registry.py | 4 ++ modules/attention/router.py | 52 +++++++++++++--- modules/attention/sparse/layout.py | 4 +- modules/attention/sparse/stage.py | 98 ++++++++++++++++++++++++++++++ modules/sd_hijack_modular.py | 15 ++++- modules/ui_definitions.py | 8 +++ test/test-attention-sparse.py | 96 +++++++++++++++++++++++++++++ ui/locale/locale_en.json | 8 ++- 10 files changed, 286 insertions(+), 13 deletions(-) create mode 100644 modules/attention/sparse/stage.py diff --git a/modules/attention/backends/flex.py b/modules/attention/backends/flex.py index 4ca29be3e..e9b203786 100644 --- a/modules/attention/backends/flex.py +++ b/modules/attention/backends/flex.py @@ -9,7 +9,10 @@ def prepare(platform: Platform, original): # pylint: disable=unused-argument def causal_mask(b, h, q_idx, kv_idx): # pylint: disable=unused-argument return q_idx >= kv_idx - def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa): # pylint: disable=unused-argument + def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa, selection=None): # pylint: disable=unused-argument + if selection is not None: + from modules.attention.sparse import flex as sparse_flex + return sparse_flex.attend(query, key, value, selection, scale=scale, enable_gqa=enable_gqa) score_mod = None block_mask = None if attn_mask is not None: @@ -36,4 +39,5 @@ def prepare(platform: Platform, original): # pylint: disable=unused-argument backend = AttentionBackend( name='flex', label='Flex attention', priority=20, prepare=prepare, constraints=Constraints(min_ndim=4, same_device=True), # flex_attention takes 4d tensors on one device and compiles on cpu + caps=frozenset({'block_mask'}), ) diff --git a/modules/attention/context.py b/modules/attention/context.py index 24aa8300a..84ca259aa 100644 --- a/modules/attention/context.py +++ b/modules/attention/context.py @@ -13,6 +13,7 @@ class GenerationContext: forwards: int = 0 model_key: tuple[str, str | None] | None = None # pipeline class and denoiser class, telemetry only step_buffer: torch.Tensor | None = None # the step as a device scalar updated in place, so compiled readers keep their graph + layout: object | None = None # TokenLayout published by whoever knows the packing, None until something does current = GenerationContext() @@ -30,6 +31,7 @@ def begin(pipe, steps: int = 0) -> None: from modules import devices current.active = True current.role = 'transformer' + current.layout = None current.model_key = (pipe.__class__.__name__, denoiser_name(pipe)) if pipe is not None else None device = devices.device if devices.device is not None else torch.device('cpu') if current.step_buffer is None or current.step_buffer.device != device: @@ -56,10 +58,16 @@ def tick(step: int | None = None) -> None: current.forwards = current.step + 1 +def set_layout(layout) -> None: + """Publish what the packed sequence holds; callers that know the packing set this per forward.""" + current.layout = layout + + def end() -> None: current.active = False current.role = None current.model_key = None + current.layout = None new_pass(0) diff --git a/modules/attention/registry.py b/modules/attention/registry.py index 23ca24d1a..96879101d 100644 --- a/modules/attention/registry.py +++ b/modules/attention/registry.py @@ -64,6 +64,7 @@ class AttentionBackend: terminal: bool = False # serves every call the entries decline, in place of the original sdpa platforms: frozenset[str] | None = None # devices backends the implementation exists for, None for all options: tuple[str, ...] = () # settings the prepared call captures; a change to one rebuilds the chain + caps: frozenset[str] = frozenset() # what the call can consume beyond plain sdpa arguments, currently 'block_mask' def available_on(self, platform: Platform) -> bool: return self.platforms is None or platform.backend in self.platforms @@ -94,5 +95,8 @@ class Registry: def options(self) -> list[str]: return sorted({name for backend in self.backends.values() for name in backend.options}) + def with_cap(self, cap: str) -> list[AttentionBackend]: + return [backend for backend in self.ordered() if cap in backend.caps] + registry = Registry() diff --git a/modules/attention/router.py b/modules/attention/router.py index c9ae07a48..8b8e6a432 100644 --- a/modules/attention/router.py +++ b/modules/attention/router.py @@ -59,7 +59,7 @@ def build_plan(labels, platform: Platform, original: AttentionCall, reg: Registr return Plan(entries=tuple(entries), terminal=terminal, original=original, platform=platform, labels=tuple(labels)) -def make_router(plan: Plan, observer: Callable | None = None) -> AttentionCall: +def make_router(plan: Plan, observer: Callable | None = None, stage: Callable | None = None) -> AttentionCall: entries = plan.entries terminal = plan.terminal.call if plan.terminal is not None else None terminal_name = plan.terminal.backend.name if plan.terminal is not None else 'sdpa' @@ -69,10 +69,16 @@ def make_router(plan: Plan, observer: Callable | None = None) -> AttentionCall: def sdpa_router(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, scale=None, enable_gqa=False, **kwargs): for entry in entries: if entry.backend.constraints.accepts(query, key, value, attn_mask): + if stage is not None and 'block_mask' in entry.backend.caps: + selection = stage(query, key, value, attn_mask, is_causal) + if selection is not None: + if observer is not None: + observer(f'{entry.backend.name}+sparse', query, key, attn_mask) + return entry.call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa, selection=selection) if observer is not None: observer(entry.backend.name, query, key, attn_mask) return entry.call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa) - if observer is not None: + if observer is not None: # pylint: disable=duplicate-code observer(terminal_name, query, key, attn_mask) if terminal is not None: return terminal(query, key, value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, scale=scale, enable_gqa=enable_gqa, **kwargs) @@ -89,21 +95,43 @@ def install_router(labels, platform: Platform, original: AttentionCall, reg: Reg plan = build_plan(labels, platform, original, reg) debug.reset() observer = debug.observe if debug.enabled else None - torch.nn.functional.scaled_dot_product_attention = make_router(plan, observer) if (plan.entries or plan.terminal is not None) else original + stage = build_sparse_stage(plan) + torch.nn.functional.scaled_dot_product_attention = make_router(plan, observer, stage) if (plan.entries or plan.terminal is not None) else original current_plan = plan torch_info.set(attention='>'.join(plan.chain())) - log.debug(f'Torch attention: chain={">".join(plan.chain())} overrides={list(labels)} backend={platform.backend}') + log.debug(f'Torch attention: chain={">".join(plan.chain())} overrides={list(labels)} backend={platform.backend} sparse={stage is not None}') return plan +def build_sparse_stage(plan: Plan): + """Sparse attention is a stage over the chain rather than a chain member, so it needs a backend in the chain that consumes a block mask.""" + from modules.attention.sparse import stage as sparse_stage + try: + options = sparse_stage.read_options() + except Exception: + return None + if not options.enabled: + return None + capable = [entry.backend.name for entry in plan.entries if 'block_mask' in entry.backend.caps] + if not capable: + names = [backend.label for backend in default_registry.with_cap('block_mask')] + log.warning(f'Sparse attention: enabled but no active backend consumes a block mask, enable one of {names} in sdp overrides; attention stays dense') + return None + built = sparse_stage.make_stage(options) + if built is not None: + log.info(f'Sparse attention: backend={capable[0]} budget={options.budget:.0%} gate={options.gate} schedule={options.schedule_steps}x+{options.schedule_bump:.0%}') + return built + + def get_plan() -> Plan | None: return current_plan def reapply_options(reg: Registry | None = None) -> list[str]: - """Settings whose change rebuilds the chain: the override set, the torch kernel flags, and every option a backend captures.""" + """Settings whose change rebuilds the chain: the override set, the torch kernel flags, every option a backend captures, and the sparse stage.""" + from modules.attention.sparse import stage as sparse_stage reg = reg if reg is not None else default_registry - return ['sdp_options', 'sdp_overrides', *reg.options()] + return ['sdp_options', 'sdp_overrides', *reg.options(), *sparse_stage.OPTION_NAMES] def reapply() -> None: @@ -117,12 +145,22 @@ def reapply() -> None: def report() -> dict: - """The active chain and generation context, for the api and the debug log.""" + """The active chain, sparse stage and generation context, for the api and the debug log.""" + from modules.attention.sparse import stage as sparse_stage plan = current_plan state = context.current + options = sparse_stage.read_options() + layout = state.layout return { 'chain': plan.chain() if plan is not None else ['sdpa'], 'overrides': list(plan.labels) if plan is not None else [], + 'sparse': { + 'enabled': options.enabled, + 'budget': options.budget, + 'gate': options.gate, + 'capable': [entry.backend.name for entry in plan.entries if 'block_mask' in entry.backend.caps] if plan is not None else [], + 'layout': {'source': layout.source, 'kinds': list(layout.kinds()), 'length': layout.length} if layout is not None else None, + }, 'backend': plan.platform.backend if plan is not None else None, 'context': {'active': state.active, 'role': state.role, 'step': state.step, 'steps': state.steps, 'model': state.model_key}, } diff --git a/modules/attention/sparse/layout.py b/modules/attention/sparse/layout.py index 772e49b65..7362c96d6 100644 --- a/modules/attention/sparse/layout.py +++ b/modules/attention/sparse/layout.py @@ -53,7 +53,7 @@ def runs(indices: torch.Tensor) -> list[tuple[int, int]]: return [(int(values[bounds[i]].item()), int(values[bounds[i + 1] - 1].item()) + 1) for i in range(len(bounds) - 1)] -def layout_from_index_kwargs(kwargs: dict, length: int) -> TokenLayout | None: +def layout_from_index_kwargs(kwargs: dict, length: int | None = None) -> TokenLayout | None: """Read a layout off the *_indices tensors a pipeline passes its transformer by name.""" spans: list[Span] = [] for name, value in kwargs.items(): @@ -68,7 +68,7 @@ def layout_from_index_kwargs(kwargs: dict, length: int) -> TokenLayout | None: if not spans: return None spans.sort(key=lambda s: s.start) - return TokenLayout(spans=tuple(spans), length=length, source='indices') + return TokenLayout(spans=tuple(spans), length=length if length is not None else spans[-1].end, source='indices') def layout_from_segments(segments, length: int | None = None, source: str = 'segments') -> TokenLayout: diff --git a/modules/attention/sparse/stage.py b/modules/attention/sparse/stage.py new file mode 100644 index 000000000..6542e6968 --- /dev/null +++ b/modules/attention/sparse/stage.py @@ -0,0 +1,98 @@ +"""The router stage that turns settings plus a published layout into a per call block selection.""" +from dataclasses import dataclass +from modules.logger import log +from modules.attention import context +from modules.attention.sparse import layout as layout_mod +from modules.attention.sparse.selector import SparseSpec, block_count, schedule, select_blocks + + +# measured on a 3090: below roughly this length a 30 percent budget caps under 1.25x per block, +# so the selector cannot pay for itself; see docs/sparse-attention-tracker.md +AUTO_MIN_TOKENS = 8192 + +# settings the stage reads, so a change to any of them rebuilds the chain +OPTION_NAMES = ('sparse_attention_enabled', 'sparse_attention_budget', 'sparse_attention_min_tokens', 'sparse_attention_schedule_steps', 'sparse_attention_schedule_bump', 'sparse_attention_head_shared') + + +@dataclass(frozen=True) +class StageOptions: + enabled: bool = False + budget: float = 0.30 + min_tokens: int = 0 # 0 selects AUTO_MIN_TOKENS + schedule_steps: int = 0 + schedule_bump: float = 0.0 + head_shared: bool = False + + @property + def gate(self) -> int: + return self.min_tokens if self.min_tokens > 0 else AUTO_MIN_TOKENS + + +def read_options() -> StageOptions: + from modules import shared + opts = shared.opts + return StageOptions( + enabled=bool(getattr(opts, 'sparse_attention_enabled', False)), + budget=float(getattr(opts, 'sparse_attention_budget', 30)) / 100.0, + min_tokens=int(getattr(opts, 'sparse_attention_min_tokens', 0)), + schedule_steps=int(getattr(opts, 'sparse_attention_schedule_steps', 0)), + schedule_bump=float(getattr(opts, 'sparse_attention_schedule_bump', 0)) / 100.0, + head_shared=bool(getattr(opts, 'sparse_attention_head_shared', False)), + ) + + +def resolve_layout(seq: int, reported: set) -> layout_mod.TokenLayout: + """The published layout when there is one, otherwise sparsify the whole sequence and say so once.""" + published = context.current.layout + if isinstance(published, layout_mod.TokenLayout) and published.length == seq: + return published + if seq not in reported: + reported.add(seq) + detail = 'none published' if published is None else f'published length {getattr(published, "length", None)} does not match {seq}' + log.info(f'Sparse attention: no token layout ({detail}), sparsifying the whole sequence at tokens={seq}') + return layout_mod.layout_from_prefix(seq, 0) + + +def make_stage(options: StageOptions): + """Return the per call selector, or None when the feature is off.""" + if not options.enabled or options.budget >= 1.0: + return None + reported: set = set() + cache: dict = {} + + def budget_for_step() -> float: + state = context.current + if options.schedule_steps <= 0 or options.schedule_bump <= 0 or state.steps <= 0: + return options.budget + key = (state.steps, options.budget, options.schedule_bump, options.schedule_steps) + table = cache.get(key) + if table is None: + table = schedule(state.steps, options.budget, options.schedule_bump, options.schedule_steps) + cache.clear() + cache[key] = table + return table[min(state.step, len(table) - 1)] if table else options.budget + + def stage(query, key, value, attn_mask, is_causal): # pylint: disable=unused-argument + state = context.current + if state.role != 'transformer' or not state.active: + return None + if attn_mask is not None or is_causal: # flex would need a mask_mod to combine these; the quantized kernel composes them in R2 + return None + if query.device.type == 'cpu' or query.dim() != 4: + return None + seq_q, seq_kv = query.shape[-2], key.shape[-2] + if seq_q != seq_kv or seq_q < options.gate: # cross attention is short and already cheap + return None + budget = budget_for_step() + if budget >= 1.0: + return None + spec = SparseSpec(budget=budget, head_shared=options.head_shared) + token_layout = resolve_layout(seq_q, reported) + nq, nk = block_count(seq_q, spec.block_q), block_count(seq_kv, spec.block_kv) + pins, drops = layout_mod.block_pins(token_layout, seq_q, seq_kv, spec.block_q, spec.block_kv, query.device) + if pins.shape[-2:] != (nq, nk): + return None + return select_blocks(query, key, spec, pins=pins, drops=drops) + + stage.options = options # pylint: disable=attribute-defined-outside-init + return stage diff --git a/modules/sd_hijack_modular.py b/modules/sd_hijack_modular.py index 3c151e2ab..528e4a0f2 100644 --- a/modules/sd_hijack_modular.py +++ b/modules/sd_hijack_modular.py @@ -75,6 +75,15 @@ class InterruptLogFilter(logging.Filter): return 'Interrupted...' not in record.msg +def publish_layout(kwargs): + """Hand the attention router whatever the pipeline says about its packed sequence, keyed on the *_indices tensors rather than the model.""" + try: + from modules.attention.sparse import layout as sparse_layout + attention_context.set_layout(sparse_layout.layout_from_index_kwargs(kwargs or {})) + except Exception as e: + log.debug(f'Pipeline: token layout {e}') + + def install_state_hook(pipe): runner_log = logging.getLogger('diffusers.modular_pipelines.modular_pipeline') if not any(isinstance(f, InterruptLogFilter) for f in runner_log.filters): @@ -91,9 +100,10 @@ def install_state_hook(pipe): return True return False - def _pre_transformer_hook(module, args): # pylint: disable=unused-argument + def _pre_transformer_hook(module, args, kwargs): # pylint: disable=unused-argument new_phase = set_phase('Generate', module) attention_context.set_role('transformer') + publish_layout(kwargs) if new_phase: sd_offload.offload_ondemand(pipe, exclude=['transformer', 'transformer_ref'], reason='generate', force=hasattr(pipe, 'sdnext_force_offload')) if shared.state.sampling_steps == 0 and getattr(pipe, 'num_timesteps', 0) > 0: @@ -138,7 +148,8 @@ def install_state_hook(pipe): if module is not None: target = getattr(module, 'model', module) # conditioning calls the inner model directly if isinstance(target, torch.nn.Module) and getattr(target, 'sdnext_state_hook', None) is None: - target.sdnext_state_hook = target.register_forward_pre_hook(_pre_transformer_hook) + # with_kwargs, because the blocks call the transformer entirely by keyword and the token layout rides in those kwargs + target.sdnext_state_hook = target.register_forward_pre_hook(_pre_transformer_hook, with_kwargs=True) for name in ('text_encoder', 'text_encoder_2'): module = getattr(pipe, name, None) diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index a873ea68d..1b0e05d14 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -262,6 +262,14 @@ def create_settings(cmd_opts): "sdnq_attention_pv_matmul_type": OptionInfo("disabled", "SDNQ Attention PV MatMul type", gr.Radio, {"choices": sdnq_matmul_modes}), "sdnq_attention_hadamard_group_size": OptionInfo(256, "SDNQ Attention Hadamard Group Size", gr.Slider, {"minimum": 4, "maximum": 1024, "step": 1}), + "sparse_attention_sep": OptionInfo("

Sparse Attention

", "", gr.HTML), + "sparse_attention_enabled": OptionInfo(False, "Sparse Attention", gr.Checkbox), + "sparse_attention_budget": OptionInfo(30, "Sparse Attention KV budget", gr.Slider, {"minimum": 5, "maximum": 100, "step": 5}), + "sparse_attention_min_tokens": OptionInfo(0, "Sparse Attention minimum sequence", gr.Slider, {"minimum": 0, "maximum": 65536, "step": 1024}), + "sparse_attention_schedule_steps": OptionInfo(0, "Sparse Attention dense steps", gr.Slider, {"minimum": 0, "maximum": 10, "step": 1}), + "sparse_attention_schedule_bump": OptionInfo(30, "Sparse Attention dense step bonus", gr.Slider, {"minimum": 0, "maximum": 70, "step": 5}), + "sparse_attention_head_shared": OptionInfo(False, "Sparse Attention share selection across heads", gr.Checkbox), + "hf_attention_sep": OptionInfo("

Attention Dispatcher

", "", gr.HTML), "hf_attention": OptionInfo('', "Attention dispatcher kernel", gr.Textbox), })) diff --git a/test/test-attention-sparse.py b/test/test-attention-sparse.py index b4bd2f5e3..fa2f52cd3 100644 --- a/test/test-attention-sparse.py +++ b/test/test-attention-sparse.py @@ -15,6 +15,8 @@ Covers: - the flex consumer: a full-keep selection through flex_attention reproduces dense sdpa, and a selection with dropped tiles reproduces sdpa given the same tiles masked out - the density matched radial control and the step schedule +- the router stage: the gates it applies (component role, mask, causal, cross attention, minimum + sequence), the per step budget schedule, and layout resolution with and without a publisher The flex rows need a cuda device and compile the flex kernel; they skip on cpu. @@ -329,6 +331,90 @@ def test_flex_handles_a_ragged_tail(): return True +# ============================================================ +# Router stage +# ============================================================ + +def stage_options(**kwargs): + from modules.attention.sparse import stage as stage_mod + base = dict(enabled=True, budget=0.30, min_tokens=1024) + base.update(kwargs) + return stage_mod.StageOptions(**base) + + +def with_context(fn): + from modules.attention import context as ctx + ctx.begin(None, steps=10) + try: + return fn() + finally: + ctx.end() + + +def test_stage_is_none_when_disabled_or_at_full_budget(): + from modules.attention.sparse import stage as stage_mod + assert stage_mod.make_stage(stage_options(enabled=False)) is None + assert stage_mod.make_stage(stage_options(budget=1.0)) is None + assert stage_mod.make_stage(stage_options()) is not None + return True + + +def test_stage_gates(): + from modules.attention.sparse import stage as stage_mod + stage = stage_mod.make_stage(stage_options()) + q, k, v = qkv(heads=2, seq=2048) + short_q, short_k, short_v = qkv(heads=2, seq=512) + cross_k, cross_v = randn(1, 2, 77, 64), randn(1, 2, 77, 64) + + def checks(): + from modules.attention import context as ctx + assert stage(q, k, v, None, False) is not None, 'an eligible call must be selected' + assert stage(q, k, v, torch.zeros(1, 1, 2048, 2048, dtype=torch.bool, device=device), False) is None, 'a masked call is not eligible yet' + assert stage(q, k, v, None, True) is None, 'a causal call is not eligible yet' + assert stage(q, cross_k, cross_v, None, False) is None, 'cross attention is not eligible' + assert stage(short_q, short_k, short_v, None, False) is None, 'below the gate attention stays dense' + ctx.set_role('vae') + assert stage(q, k, v, None, False) is None, 'only the denoiser is sparsified' + ctx.set_role('transformer') + return True + return with_context(checks) + + +def test_stage_follows_the_step_schedule(): + from modules.attention.sparse import stage as stage_mod + from modules.attention import context as ctx + stage = stage_mod.make_stage(stage_options(budget=0.30, schedule_steps=2, schedule_bump=0.40)) + q, k, v = qkv(heads=2, seq=2048) + + def checks(): + densities = [] + for step in range(10): + ctx.set_step(step) + selection = stage(q, k, v, None, False) + densities.append(selection.budget) + assert densities[0] == densities[1] > densities[5], densities + assert densities[-1] == densities[-2] > densities[5], densities + assert len(set(densities)) == 2, set(densities) + return True + return with_context(checks) + + +def test_stage_uses_a_published_layout_and_falls_back_without_one(): + from modules.attention.sparse import stage as stage_mod + from modules.attention import context as ctx + stage = stage_mod.make_stage(stage_options(budget=0.20)) + q, k, v = qkv(heads=2, seq=2048) + + def checks(): + loose = stage(q, k, v, None, False) + ctx.set_layout(sparse.layout_from_segments([('text', 256), ('video', 1792)])) + pinned = stage(q, k, v, None, False) + assert pinned.density > loose.density, f'pinning conditioning must keep more tiles: {pinned.density} vs {loose.density}' + assert bool(pinned.keep[..., 0:4].all()), 'the pinned text columns must survive' + return True + return with_context(checks) + + def run_all(): log.warning(f'=== selector (device={device}) ===') cat = category('selector') @@ -368,6 +454,16 @@ def run_all(): ]: run_test(cat, fn) + log.warning('=== stage ===') + cat = category('stage') + for fn in [ + test_stage_is_none_when_disabled_or_at_full_budget, + test_stage_gates, + test_stage_follows_the_step_schedule, + test_stage_uses_a_published_layout_and_falls_back_without_one, + ]: + run_test(cat, fn) + log.warning('=== Results ===') total_passed = total_failed = total_skipped = 0 for cat_name, info in results.items(): diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 135283560..bc2fbd5b3 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -1470,7 +1470,13 @@ {"id":"","label":"SDNQ Attention MatMul type","localized":"","hint":"Precision the query-key matmul is computed in, the first of the two matmuls in attention.

enabled selects int8, and int8 and uint8 reach the same kernel.
float16 and float8_e4m3fn take the floating point path. fp8 needs a GPU with fp8 tensor cores and fails on hardware without them rather than falling back.
disabled leaves queries and keys in the model's own precision, which also idles SDNQ Attention use Smooth K and SDNQ Attention use Hadamard.

Default enabled.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention PV MatMul type","localized":"","hint":"Precision the probability-value matmul is computed in, the second of the two matmuls in attention. Choices match SDNQ Attention MatMul type.

Quantizing this one as well takes out the floating point work the first setting leaves behind, and it is the more delicate of the two: its inputs are already normalized probabilities, and the small ones among them carry the fine detail.
disabled keeps this matmul in the model's own precision.

Default disabled.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention Hadamard Group Size","localized":"","hint":"Width of the Hadamard rotation in channels. Wider groups mix more channels together and spread outliers further.

Clamped to the head dimension of the running model, rounded down to a power of two that divides it. On a model with 64 or 128 channels per head the upper part of this range resolves to that head dimension rather than to the number shown. Rotation is skipped below 4.
Applies while SDNQ Attention use Hadamard is enabled.

Default 256.","ui":"settings_cuda"}, - {"id":"","label":"SDNQ Attention Quantize FP32","localized":"","hint":"Upcasts queries, keys and values to fp32 for the quantization step, meaning the mean subtraction, scale and rounding that produce the low precision operands. The matmuls themselves are unaffected, and the kernel applies the scales in fp32 either way.
Turned off, that arithmetic runs in the model's own precision. bf16 carries eight mantissa bits, so a scale derived in it is coarser than one derived in fp32, and SDNQ Attention use Smooth K loses the most from it, since a mean across the whole sequence is exactly the kind of sum that wants the extra bits.

Whether the upcast costs anything depends on how the GPU runs fp32 vector work against fp16 and bf16. NVIDIA and AMD run them at the same rate here, so there is nothing to save; Intel runs fp32 slower and takes a noticeable hit.

Enabled by default.","ui":"settings_cuda"} + {"id":"","label":"SDNQ Attention Quantize FP32","localized":"","hint":"Upcasts queries, keys and values to fp32 for the quantization step, meaning the mean subtraction, scale and rounding that produce the low precision operands. The matmuls themselves are unaffected, and the kernel applies the scales in fp32 either way.
Turned off, that arithmetic runs in the model's own precision. bf16 carries eight mantissa bits, so a scale derived in it is coarser than one derived in fp32, and SDNQ Attention use Smooth K loses the most from it, since a mean across the whole sequence is exactly the kind of sum that wants the extra bits.

Whether the upcast costs anything depends on how the GPU runs fp32 vector work against fp16 and bf16. NVIDIA and AMD run them at the same rate here, so there is nothing to save; Intel runs fp32 slower and takes a noticeable hit.

Enabled by default.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention","localized":"","hint":"Attention is computed on a subset of key tiles instead of all of them, which lowers cost on long sequences. Requires an attention backend that accepts a block mask, currently Flex attention in SDP overrides. Below the minimum sequence the setting stays inactive and attention is dense.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention KV budget","localized":"","hint":"Percentage of the eligible key tiles each query tile keeps. Lower budgets are faster and coarser. Text, conditioning and audio tokens are always kept, as are the tiles on the diagonal, so the budget applies only to the bulk image or video tokens.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention minimum sequence","localized":"","hint":"Shortest sequence that is sparsified. Below it attention stays dense, because the selection costs more than it saves. 0 uses the built in threshold.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention dense steps","localized":"","hint":"Number of steps at the start and end of sampling that receive a larger budget, where composition and detail are set. 0 applies one budget to every step.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention dense step bonus","localized":"","hint":"Percentage points added to the budget on the dense steps.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention share selection across heads","localized":"","hint":"One selection is computed for all attention heads rather than one per head. Cheaper to select and coarser in what it keeps.","ui":"settings_cuda"} ], "t": [ {"id":"txt2img_nav","label":"T2I","localized":"","hint":"Create image from text
Legacy interface that mimics original text-to-image interface and behavior"}, From 1b66adcff2cc6bd37fd618a444608f2ff94a1fed Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 23:47:12 +0100 Subject: [PATCH 040/270] fix(attention): report when sparse attention cannot act A sequence below the minimum length left the feature enabled and idle with nothing in the log. The stage now records why it declined and says so once per length, so an enabled setting that cannot act is visible rather than quiet. --- modules/attention/sparse/stage.py | 28 ++++++++++++++++++++-------- test/test-attention-sparse.py | 1 + 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/modules/attention/sparse/stage.py b/modules/attention/sparse/stage.py index 6542e6968..43d58256d 100644 --- a/modules/attention/sparse/stage.py +++ b/modules/attention/sparse/stage.py @@ -58,6 +58,7 @@ def make_stage(options: StageOptions): if not options.enabled or options.budget >= 1.0: return None reported: set = set() + inactive: set = set() cache: dict = {} def budget_for_step() -> float: @@ -72,27 +73,38 @@ def make_stage(options: StageOptions): cache[key] = table return table[min(state.step, len(table) - 1)] if table else options.budget + def decline(reason: str): + stage.last_skip = reason + return None + def stage(query, key, value, attn_mask, is_causal): # pylint: disable=unused-argument state = context.current if state.role != 'transformer' or not state.active: - return None + return decline('not the denoiser') if attn_mask is not None or is_causal: # flex would need a mask_mod to combine these; the quantized kernel composes them in R2 - return None + return decline('masked or causal') if query.device.type == 'cpu' or query.dim() != 4: - return None + return decline('unsupported tensor') seq_q, seq_kv = query.shape[-2], key.shape[-2] - if seq_q != seq_kv or seq_q < options.gate: # cross attention is short and already cheap - return None + if seq_q != seq_kv: # cross attention is short and already cheap + return decline('cross attention') + if seq_q < options.gate: + if seq_q not in inactive: # an enabled setting that cannot act says so rather than doing nothing quietly + inactive.add(seq_q) + log.info(f'Sparse attention: inactive at tokens={seq_q}, below the minimum sequence of {options.gate}; attention stays dense') + return decline('below the minimum sequence') budget = budget_for_step() if budget >= 1.0: - return None + return decline('budget covers everything') spec = SparseSpec(budget=budget, head_shared=options.head_shared) token_layout = resolve_layout(seq_q, reported) nq, nk = block_count(seq_q, spec.block_q), block_count(seq_kv, spec.block_kv) pins, drops = layout_mod.block_pins(token_layout, seq_q, seq_kv, spec.block_q, spec.block_kv, query.device) if pins.shape[-2:] != (nq, nk): - return None + return decline('layout geometry mismatch') + stage.last_skip = None return select_blocks(query, key, spec, pins=pins, drops=drops) - stage.options = options # pylint: disable=attribute-defined-outside-init + stage.options = options + stage.last_skip = None return stage diff --git a/test/test-attention-sparse.py b/test/test-attention-sparse.py index fa2f52cd3..ca2ea5243 100644 --- a/test/test-attention-sparse.py +++ b/test/test-attention-sparse.py @@ -373,6 +373,7 @@ def test_stage_gates(): assert stage(q, k, v, None, True) is None, 'a causal call is not eligible yet' assert stage(q, cross_k, cross_v, None, False) is None, 'cross attention is not eligible' assert stage(short_q, short_k, short_v, None, False) is None, 'below the gate attention stays dense' + assert stage.last_skip == 'below the minimum sequence', stage.last_skip ctx.set_role('vae') assert stage(q, k, v, None, False) is None, 'only the denoiser is sparsified' ctx.set_role('transformer') From 478661caec2fb98151088747a2dc892d4edea4ae Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 21 Aug 2026 22:08:10 +0100 Subject: [PATCH 041/270] feat(cli): sparse-attention groundwork for the attention benchmark Extend cli/sdnq-attention-benchmark.py ahead of block-sparse attention work: - BenchBlock takes head_dim and a swiglu mlp variant, so geometries whose attention is wider than the residual stream (MiniMax H3: 56x128 over a 5376 stream) are expressible; existing geometries are unchanged - attention masks move from a hardcoded preset ladder into mask_fn preset keys with an element guard, since h3-scale dense masks would allocate gigabytes; per-preset iters/warmup/ref_head_chunk overrides and a head-sliced fp32 reference bound the cost of very large shapes - new presets: h3 (38222 tokens) and h3-long (109574) from the released canvas and vae geometry, gate-2k..64k crossover probes at h3 geometry, an h3 block geometry, and sparse/gate run aliases for --shapes - --block-geometries selects block-section geometries; h3 runs only when selected - each block config is re-timed with an identity attention_fn and the compute split is reported per config, cross-checked against the standalone attention table when the same run benched a matching shape; speedup ceilings per kv budget are stated only where the instruments agree --- cli/sdnq-attention-benchmark.py | 265 ++++++++++++++++++++++++++------ 1 file changed, 220 insertions(+), 45 deletions(-) diff --git a/cli/sdnq-attention-benchmark.py b/cli/sdnq-attention-benchmark.py index 4d2af0ee0..7f3ae6205 100755 --- a/cli/sdnq-attention-benchmark.py +++ b/cli/sdnq-attention-benchmark.py @@ -96,25 +96,75 @@ def save_transcript(path): file_console.print(renderable) console.print(f"results saved to {path}") +def key_padding_mask(cfg, device, keep=0.75): + # boolean key-padding mask over the kv axis, first keep fraction of keys valid + kv_tokens = cfg.get("kv_tokens", cfg["tokens"]) + attn_mask = torch.zeros(cfg["batch"], 1, 1, kv_tokens, device=device, dtype=torch.bool) + attn_mask[..., :int(kv_tokens * keep)] = True + return attn_mask + + +def krea2_segment_mask(cfg, device): + # the transformer's segment_mask: text is padded to a fixed 512 tokens ahead of the + # image tokens and the padded tail is masked for queries and keys both, so padding + # query rows are fully masked and yield nan under sdpa (the model nan_to_num's them) + valid = torch.ones(cfg["batch"], cfg["tokens"], device=device, dtype=torch.bool) + valid[:, 128:512] = False + return valid.unsqueeze(1).unsqueeze(2) * valid.unsqueeze(1).unsqueeze(3) + + +def build_preset_mask(cfg, device): + # dense masks come from the preset's mask_fn; the element guard keeps h3-scale presets + # from materializing multi-gigabyte masks, those shapes belong to block-granular masks + mask_fn = cfg.get("mask_fn") + if mask_fn is None: + return None + attn_mask = mask_fn(cfg, device) + if attn_mask is not None and attn_mask.numel() > 2**31: + raise ValueError(f"preset dense mask holds {attn_mask.numel():,} elements; this shape needs a block-granular mask, not a token mask") + return attn_mask + + shape_presets = { # geometry from the model transformer and text-encoder configs; - # optional keys: kv_tokens (cross-attention), kv_heads (gqa), causal + # optional keys: kv_tokens (cross-attention), kv_heads (gqa), causal, + # mask_fn (token-granular attn_mask builder), mask_nan_guard (fully-masked query + # rows nan under stock sdpa), iters/warmup (per-preset run overrides for very large + # shapes), ref_head_chunk (head-sliced fp32 reference to bound peak memory), + # sparse (token layout driving the sparse selector rows) "sd15": dict(batch=2, heads=8, tokens=4096, head_dim=40, desc="SD 1.5 unet self-attention at 512px, batched cfg, head dim padded 40 to 64"), "sdxl": dict(batch=2, heads=10, tokens=4096, head_dim=64, desc="SDXL unet self-attention at 1024px, batched cfg"), "sdxl-cross": dict(batch=2, heads=10, tokens=4096, kv_tokens=77, head_dim=64, desc="SDXL unet cross-attention at 1024px, 77 text tokens"), "qwen3-te": dict(batch=2, heads=16, kv_heads=8, tokens=512, head_dim=128, causal=True, desc="Qwen3 text encoder (Anima), causal gqa 16:8 heads, 512 token prompt"), "anima": dict(batch=1, heads=16, tokens=4096, head_dim=128, desc="Anima 1.0 self-attention at 1024px, one cfg pass"), "flux2": dict(batch=1, heads=32, tokens=4608, head_dim=128, desc="FLUX.2 Klein 9B joint attention at 1024px, 4096 image plus 512 text tokens"), - "krea2": dict(batch=1, heads=48, tokens=4608, head_dim=128, desc="Krea 2 12B joint attention at 1024px, 4096 image plus 512 text tokens (128 real), kv expanded from gqa 48:12, segment mask"), + "krea2": dict(batch=1, heads=48, tokens=4608, head_dim=128, mask_fn=krea2_segment_mask, mask_nan_guard=True, desc="Krea 2 12B joint attention at 1024px, 4096 image plus 512 text tokens (128 real), kv expanded from gqa 48:12, segment mask"), "wan22": dict(batch=1, heads=40, tokens=32760, head_dim=128, desc="Wan 2.2 A14B self-attention, 832x480 81 frames, one cfg pass"), "wan22-cfg": dict(batch=2, heads=40, tokens=32760, head_dim=128, desc="Wan 2.2 A14B self-attention, 832x480 81 frames, batched cfg"), "ltx2": dict(batch=1, heads=32, tokens=13376, head_dim=128, desc="LTX 2.3 self-attention, 1216x704 121 frames, one cfg pass"), - "masked": dict(batch=1, heads=32, tokens=4608, head_dim=128, desc="FLUX.2 Klein shape with boolean key-padding mask, 25% of keys masked"), + "h3": dict(batch=1, heads=56, tokens=38222, head_dim=128, iters=8, warmup=3, ref_head_chunk=14, + sparse=dict(layout=[("text", 0, 512), ("audio", 512, 926), ("video", 926, 38222)]), + desc="MiniMax H3 packed self-attention, 1344x768 124 frames (5.2s): 512 text + 414 audio + 37296 video rows, guidance-free"), + "h3-long": dict(batch=1, heads=56, tokens=109574, head_dim=128, iters=6, warmup=2, ref_head_chunk=8, + sparse=dict(layout=[("text", 0, 512), ("audio", 512, 1718), ("video", 1718, 109574)]), + desc="MiniMax H3 packed self-attention, 1344x768 362 frames (15.1s): 512 text + 1206 audio + 107856 video rows"), + "masked": dict(batch=1, heads=32, tokens=4608, head_dim=128, mask_fn=key_padding_mask, desc="FLUX.2 Klein shape with boolean key-padding mask, 25% of keys masked"), } -full_run = ["sd15", "sdxl", "sdxl-cross", "qwen3-te", "anima", "flux2", "krea2", "wan22", "ltx2"] +# sparse crossover probes at fixed h3 geometry; the smallest token count where a sparse row +# beats dense past the verdict threshold is the measured minimum-sequence gate +for gate_tokens in (2048, 4096, 8192, 16384, 32768, 65536): + shape_presets[f"gate-{gate_tokens // 1024}k"] = dict( + batch=1, heads=56, tokens=gate_tokens, head_dim=128, + sparse=dict(layout=[("text", 0, 512), ("video", 512, gate_tokens)]), + desc=f"sparse crossover probe at h3 geometry, {gate_tokens} tokens", + **(dict(iters=8, warmup=3) if gate_tokens >= 32768 else {}), + ) +full_run = ["sd15", "sdxl", "sdxl-cross", "qwen3-te", "anima", "flux2", "krea2", "wan22", "ltx2", "h3"] +sparse_run = ["krea2", "h3", "h3-long"] +gate_run = [f"gate-{tokens // 1024}k" for tokens in (2048, 4096, 8192, 16384, 32768, 65536)] # settings advice comes from a self-attention shape with the full config set; cross-attention # and text-encoder shapes measure the hijack's cost there but would mislead as global advice -recommendation_presets = ["flux2", "krea2", "anima", "sdxl", "wan22", "ltx2", "sd15"] +recommendation_presets = ["flux2", "krea2", "anima", "sdxl", "wan22", "ltx2", "h3", "sd15"] default_shapes = "sdxl,flux2" all_sections = ["attention", "dequant", "block"] @@ -122,11 +172,16 @@ all_sections = ["attention", "dequant", "block"] # measures a complete configuration of weights dtype x matmul path x attention end to end # generic dit-block geometries from the model transformer configs: flux.1 (3072 wide, # 24 heads, 4x gelu ff, 4096 image plus 512 text tokens) and krea 2 (6144 wide, 48 heads -# after gqa expansion, swiglu at 16384, same joint sequence) +# after gqa expansion, swiglu at 16384, same joint sequence); optional keys: head_dim +# (attention width when heads*head_dim != hidden) and mlp ("gelu" default or "swiglu") block_geometries = { "flux1": dict(hidden=3072, heads=24, mlp_dim=12288, tokens=4608), "krea2": dict(hidden=6144, heads=48, mlp_dim=16384, tokens=4608), + # minimax h3: attention wider than the residual stream (56*128 > 5376), swiglu mlp; the + # full 124-frame token count makes the block section long, so it runs only when selected + "h3": dict(hidden=5376, heads=56, head_dim=128, mlp_dim=14336, mlp="swiglu", tokens=38222, iters=6, warmup=2), } +default_block_geometries = "flux1,krea2" block_geometry = block_geometries["flux1"] # active geometry; bench_block_section iterates block_attention_specs = { "sdpa": None, # stock torch sdpa @@ -139,6 +194,19 @@ block_attention_specs = { "sage": "sage", # external baselines, resolved to the sage wrappers in build_bench_block "sage fp16 accum": "sagefp16", } +# attention-table config id measuring the same kernel as each block attention spec, for the +# cross-instrument compute split; specs without a standalone row map to None +block_spec_attention_ids = { + "sdpa": "base", + "atten int8": "int8", + "atten int8 smooth": "smooth", + "atten int8 hadamard": "hadamard", + "atten full": "full", + "atten pv accum": "pvaccum", + "atten fp16 accum": "fp16full-accum", + "sage": "sage", + "sage fp16 accum": "sagefp16", +} # id, weights config (None = bf16), use quantized matmul, attention spec; fp8/fp4 rows use the # dequant path: quantized matmul auto-selects fp8 for float dtypes, unsupported before sm_89 block_configs = [ @@ -282,7 +350,8 @@ def parse_cli(): parser.add_argument("--mm-backends", type=str, default="none", help=f"comma-separated quantized-matmul backends to compare in one run: {', '.join(all_mm_backends)}; 'none' benches only the backend this device selects (default: %(default)s)") parser.add_argument("--mm-rounds", type=int, default=2, help="alternating rounds per matmul backend, fastest kept, so clock drift cancels instead of favouring one backend (default: %(default)s)") parser.add_argument("--block-configs", type=str, default="all", help=f"comma-separated combined block configs: {', '.join(config_id for config_id, _w, _mm, _a in block_configs)}; 'all' runs every one (default: %(default)s)") - parser.add_argument("--shapes", type=str, default=default_shapes, help=f"comma-separated attention shape presets: {', '.join(shape_presets)}; 'all' runs {', '.join(full_run)} (default: %(default)s)") + parser.add_argument("--block-geometries", type=str, default=default_block_geometries, help=f"comma-separated block geometries: {', '.join(block_geometries)}; 'all' runs every one (default: %(default)s)") + parser.add_argument("--shapes", type=str, default=default_shapes, help=f"comma-separated attention shape presets: {', '.join(shape_presets)}; 'all' runs {', '.join(full_run)}, 'sparse' and 'gate' run the sparse and crossover lists (default: %(default)s)") parser.add_argument("--iters", type=int, default=12, help="minimum timed iterations per config, scaled up for fast kernels (default: %(default)s)") parser.add_argument("--warmup", type=int, default=4, help="minimum warmup iterations per config, scaled up for fast kernels (default: %(default)s)") parser.add_argument("--skip-checks", action="store_true", help="skip kernel correctness checks") @@ -545,13 +614,23 @@ def make_qkv(batch, heads, tokens, head_dim, structured=True, kv_heads=None, kv_ return q, k, v -def fp32_reference(q, k, v, **kwargs): +def fp32_reference(q, k, v, head_chunk=0, **kwargs): # sdnext enables tf32 globally; a math-backend dispatch fallback would degrade the reference to tf32 precision tf32_matmul = torch.backends.cuda.matmul.allow_tf32 tf32_cudnn = torch.backends.cudnn.allow_tf32 torch.backends.cuda.matmul.allow_tf32 = False torch.backends.cudnn.allow_tf32 = False try: + if head_chunk and not kwargs.get("enable_gqa") and q.shape[1] > head_chunk: + # head-sliced reference: bounds the fp32 peak on very long sequences; gqa shapes + # keep the one-shot path since slicing q heads would have to regroup kv heads + attn_mask = kwargs.pop("attn_mask", None) + outs = [] + for start in range(0, q.shape[1], head_chunk): + heads = slice(start, start + head_chunk) + mask_slice = attn_mask[:, heads] if attn_mask is not None and attn_mask.shape[1] > 1 else attn_mask + outs.append(torch.nn.functional.scaled_dot_product_attention(q[:, heads].to(torch.float32), k[:, heads].to(torch.float32), v[:, heads].to(torch.float32), attn_mask=mask_slice, **kwargs)) + return torch.cat(outs, dim=1) return torch.nn.functional.scaled_dot_product_attention(q.to(torch.float32), k.to(torch.float32), v.to(torch.float32), **kwargs) finally: torch.backends.cuda.matmul.allow_tf32 = tf32_matmul @@ -1009,35 +1088,56 @@ def make_source_weight(out_features, in_features, seed=1234): class BenchBlock(torch.nn.Module): - # dit-style block: fused qkv self-attention plus a gelu mlp, both with residuals; the - # attention_fn attribute is set per benchmark config (stock sdpa or sdnq attention) - def __init__(self, hidden, heads, mlp_dim, device=None, dtype=None): + # dit-style block: fused qkv self-attention plus a gelu or swiglu mlp, both with residuals; + # head_dim decouples attention width from hidden for models whose attention is wider than + # the residual stream; the attention_fn attribute is set per benchmark config + def __init__(self, hidden, heads, mlp_dim, head_dim=None, mlp="gelu", device=None, dtype=None): super().__init__() self.heads = heads + self.head_dim = head_dim if head_dim is not None else hidden // heads + self.mlp = mlp + inner = heads * self.head_dim self.norm1 = torch.nn.LayerNorm(hidden, elementwise_affine=False, device=device, dtype=dtype) self.norm2 = torch.nn.LayerNorm(hidden, elementwise_affine=False, device=device, dtype=dtype) - self.qkv = torch.nn.Linear(hidden, hidden * 3, bias=False, device=device, dtype=dtype) - self.proj = torch.nn.Linear(hidden, hidden, bias=False, device=device, dtype=dtype) + self.qkv = torch.nn.Linear(hidden, inner * 3, bias=False, device=device, dtype=dtype) + self.proj = torch.nn.Linear(inner, hidden, bias=False, device=device, dtype=dtype) self.up = torch.nn.Linear(hidden, mlp_dim, bias=False, device=device, dtype=dtype) + if mlp == "swiglu": + self.gate = torch.nn.Linear(hidden, mlp_dim, bias=False, device=device, dtype=dtype) self.down = torch.nn.Linear(mlp_dim, hidden, bias=False, device=device, dtype=dtype) self.attention_fn = None def forward(self, x): - batch, tokens, channels = x.shape + batch, tokens, _channels = x.shape h = self.norm1(x) - qkv = self.qkv(h).view(batch, tokens, 3, self.heads, channels // self.heads).permute(2, 0, 3, 1, 4) - attn = self.attention_fn(qkv[0], qkv[1], qkv[2]).transpose(1, 2).reshape(batch, tokens, channels) + qkv = self.qkv(h).view(batch, tokens, 3, self.heads, self.head_dim).permute(2, 0, 3, 1, 4) + attn = self.attention_fn(qkv[0], qkv[1], qkv[2]).transpose(1, 2).reshape(batch, tokens, self.heads * self.head_dim) x = x + self.proj(attn) h = self.norm2(x) + if self.mlp == "swiglu": + return x + self.down(torch.nn.functional.silu(self.gate(h)) * self.up(h)) return x + self.down(torch.nn.functional.gelu(self.up(h))) +def build_block_module(dtype=None): + # construct a block for the active geometry; every construction site goes through here so + # geometry keys are read in exactly one place + return BenchBlock( + block_geometry["hidden"], block_geometry["heads"], block_geometry["mlp_dim"], + head_dim=block_geometry.get("head_dim"), mlp=block_geometry.get("mlp", "gelu"), + device=torch_device, dtype=dtype if dtype is not None else bench_dtype, + ) + + def make_block_master(): - # one master weight set shared by every block config, so all rows quantize identical weights - hidden, heads, mlp_dim = block_geometry["hidden"], block_geometry["heads"], block_geometry["mlp_dim"] - block = BenchBlock(hidden, heads, mlp_dim, device=torch_device, dtype=bench_dtype) + # one master weight set shared by every block config, so all rows quantize identical weights; + # seed order keeps gelu geometries bitwise stable, swiglu appends its gate after up + block = build_block_module() + linears = [block.qkv, block.proj, block.up, block.down] + if hasattr(block, "gate"): + linears.append(block.gate) with torch.no_grad(): - for seed, linear in enumerate((block.qkv, block.proj, block.up, block.down), start=1): + for seed, linear in enumerate(linears, start=1): linear.weight.copy_(make_source_weight(linear.out_features, linear.in_features, seed=seed)) return {key: value.clone() for key, value in block.state_dict().items()} @@ -1045,8 +1145,7 @@ def make_block_master(): def build_bench_block(master_sd, weights_cfg, use_mm, attention_spec): from sdnq import SDNQConfig from sdnq.quantizer import apply_sdnq_to_module - hidden, heads, mlp_dim = block_geometry["hidden"], block_geometry["heads"], block_geometry["mlp_dim"] - block = BenchBlock(hidden, heads, mlp_dim, device=torch_device, dtype=bench_dtype) + block = build_block_module() block.load_state_dict(master_sd) block.eval() for param in block.parameters(): @@ -1343,22 +1442,14 @@ def bench_shape(preset, iters, warmup, position=None, config_timeout=300, fp8_re causal = preset_cfg.get("causal", False) gqa = kv_heads != heads description = preset_cfg["desc"] + iters = preset_cfg.get("iters", iters) + warmup = preset_cfg.get("warmup", warmup) + ref_head_chunk = preset_cfg.get("ref_head_chunk", 0) excluded_configs = preset_excluded_configs.get(preset, set()) if preset == "sd15": emit("[yellow]sd15: hadamard configs skipped, compiling hadamard with a non pow2 head dim currently hangs torch inductor[/yellow]") - attn_mask = None - mask_nan_guard = False - if preset == "masked": - attn_mask = torch.zeros(batch, 1, 1, tokens, device=torch_device, dtype=torch.bool) - attn_mask[..., :int(tokens * 0.75)] = True - elif preset == "krea2": - # the transformer's segment_mask: text is padded to a fixed 512 tokens ahead of the - # image tokens and the padded tail is masked for queries and keys both, so padding - # query rows are fully masked and yield nan under sdpa (the model nan_to_num's them) - valid = torch.ones(batch, tokens, device=torch_device, dtype=torch.bool) - valid[:, 128:512] = False - attn_mask = valid.unsqueeze(1).unsqueeze(2) * valid.unsqueeze(1).unsqueeze(3) - mask_nan_guard = True + attn_mask = build_preset_mask(preset_cfg, torch_device) + mask_nan_guard = preset_cfg.get("mask_nan_guard", False) sage = sage_attention() sage_fp16 = sage_attention_fp16_accum() amd_flash = amd_triton_flash() @@ -1413,7 +1504,7 @@ def bench_shape(preset, iters, warmup, position=None, config_timeout=300, fp8_re progress.update(task, description=f"{prefix}{preset}: preparing inputs and fp32 reference") q, k, v = make_qkv(batch, heads, tokens, head_dim, kv_heads=kv_heads, kv_tokens=kv_tokens) scale = head_dim ** -0.5 - ref = fp32_reference(q, k, v, attn_mask=attn_mask, is_causal=causal, enable_gqa=gqa) + ref = fp32_reference(q, k, v, attn_mask=attn_mask, is_causal=causal, enable_gqa=gqa, head_chunk=ref_head_chunk) if mask_nan_guard: ref = torch.nan_to_num(ref) anchor_fn = None @@ -2514,17 +2605,24 @@ def block_label(weights_cfg, use_mm, attention_spec): return f"{weights_part} + {attention_spec}" -def bench_block_section(iters, warmup, config_timeout=300, selected=None): +def bench_block_section(iters, warmup, config_timeout=300, selected=None, geometries=None): global block_geometry # pylint: disable=global-statement all_results = {} for family, geometry in block_geometries.items(): + if geometries is not None and family not in geometries: + continue block_geometry = geometry - results = bench_block_geometry(iters, warmup, config_timeout=config_timeout, selected=selected) + geometry_iters = geometry.get("iters", iters) + geometry_warmup = geometry.get("warmup", warmup) + results = bench_block_geometry(geometry_iters, geometry_warmup, config_timeout=config_timeout, selected=selected) all_results[family] = results - report.setdefault("blocks", {})[family] = dict(geometry=dict(geometry), results=results) - # the first family also lands at the flat block key, which replays and the buyback + split = block_split_table(family, geometry, results) + report.setdefault("blocks", {})[family] = dict(geometry=dict(geometry), results=results, split=split) + if not all_results: + return {} + # the first family run also lands at the flat block key, which replays and the buyback # veto fall back to when no family matches the reference shape - primary = next(iter(block_geometries)) + primary = next(iter(all_results)) report["block"] = report["blocks"][primary] return all_results.get(primary, {}) @@ -2556,7 +2654,7 @@ def bench_block_geometry(iters, warmup, config_timeout=300, selected=None): table.add_column("out err", justify="right") table.add_column("max tok err", justify="right") table.add_column("err x4 blocks", justify="right") - panel = Panel(table, title=f"combined block: hidden={hidden} heads={heads} mlp={mlp_dim} tokens={tokens} {dtype_label()}", subtitle="[dim]dit block, fused qkv + gelu mlp with residuals; err vs an fp32 reference block, max tok = worst single token, x4 = four stacked blocks[/dim]", box=ROUNDED_BOX, expand=False) + panel = Panel(table, title=f"combined block: hidden={hidden} heads={heads} mlp={mlp_dim} tokens={tokens} {dtype_label()}", subtitle="[dim]dit block, fused qkv attention + mlp with residuals; err vs an fp32 reference block, max tok = worst single token, x4 = four stacked blocks[/dim]", box=ROUNDED_BOX, expand=False) def run_depth(block, x0, depth): h = x0 @@ -2572,7 +2670,7 @@ def bench_block_geometry(iters, warmup, config_timeout=300, selected=None): master = make_block_master() generator = torch.Generator(device=torch_device).manual_seed(7) x = torch.randn(1, tokens, hidden, device=torch_device, dtype=bench_dtype, generator=generator) - ref_block = BenchBlock(hidden, heads, mlp_dim, device=torch_device, dtype=torch.float32) + ref_block = build_block_module(dtype=torch.float32) ref_block.load_state_dict(master) ref_block.eval() def ref_attention(q, k, v): @@ -2619,6 +2717,15 @@ def bench_block_geometry(iters, warmup, config_timeout=300, selected=None): phase("measuring depth-4 error") with torch.no_grad(): entry["err4"] = rel_err(run_depth(block, x, 4), ref_out4) + phase("timing identity-attention variant") + real_attention_fn = block.attention_fn + def identity_attention_fn(q, k, v): # pylint: disable=unused-argument # same shapes and permutes, zero attention flops + return v + block.attention_fn = identity_attention_fn + try: + entry["identity_ms"], entry["identity_ms_sigma"] = bench_stats(fn, warmup, iters, on_phase=phase) + finally: + block.attention_fn = real_attention_fn del block, out if base_ms is None: base_ms = entry["ms"] @@ -2653,6 +2760,66 @@ def bench_block_geometry(iters, warmup, config_timeout=300, selected=None): return results +def block_split_table(family, geometry, results): + # compute split per config from two independent instruments: A subtracts the identity- + # attention variant timed inside the block, B reads the standalone attention table at the + # same geometry from this run; a speedup ceiling is only stated where the two agree + head_dim = geometry.get("head_dim") or geometry["hidden"] // geometry["heads"] + expected_geometry = f"batch=1 heads={geometry['heads']} tokens={geometry['tokens']} head_dim={head_dim}" + attention_preset = None + for preset_name, data in (report.get("attention") or {}).items(): + if data.get("geometry") == expected_geometry and not shape_presets.get(preset_name, {}).get("mask_fn"): + attention_preset = preset_name + break + attention_results = (report.get("attention") or {}).get(attention_preset, {}).get("results", {}) if attention_preset else {} + spec_by_config = {config_id: spec for config_id, _w, _mm, spec in block_configs} + budgets = (0.5, 0.3, 0.15) + + table = Table(box=box.SIMPLE_HEAVY) + table.add_column("config") + table.add_column("block ms", justify="right") + table.add_column("rest ms", justify="right") + table.add_column("attn A", justify="right") + table.add_column("attn B", justify="right") + table.add_column("agree", justify="right") + for budget in budgets: + table.add_column(f"ceil@{int(budget * 100)}%", justify="right") + + split = {} + for config_id, entry in results.items(): + ms, identity_ms = entry.get("ms"), entry.get("identity_ms") + if not ms or not identity_ms: + continue + attn_a = ms - identity_ms + if attn_a <= 0: + continue + attention_id = block_spec_attention_ids.get(spec_by_config.get(config_id)) + attention_entry = attention_results.get(attention_id) or {} + attn_b = attention_entry.get("ms") + agree = None + if attn_b: + # subtraction amplifies the relative sigma of instrument A by ms/attn_a + sigma_a = (row_sigma(entry) or 0.0) * (ms / attn_a) + sigma_b = row_sigma(attention_entry, "ms") or 0.0 + threshold = max(verdict_z * math.sqrt(sigma_a * sigma_a + sigma_b * sigma_b), run_drift_sigma()) + agree = abs(math.log(attn_a / attn_b)) <= threshold + ceilings = {budget: ms / (budget * attn_a + identity_ms) for budget in budgets} if agree else None + split[config_id] = dict(ms=ms, rest_ms=identity_ms, attn_a_ms=attn_a, attn_b_ms=attn_b, agree=agree, ceilings=ceilings) + agree_cell = "-" if agree is None else ("yes" if agree else "[yellow]no[/yellow]") + ceiling_cells = [f"{ceilings[budget]:.2f}x" if ceilings else "-" for budget in budgets] + table.add_row(entry["label"], f"{ms:8.3f} ms", f"{identity_ms:8.3f} ms", f"{attn_a:8.3f} ms", f"{attn_b:8.3f} ms" if attn_b else "-", agree_cell, *ceiling_cells) + + if split: + subtitle = "[dim]rest = identity-attention variant; A = block minus rest, B = standalone attention table" + subtitle += f" ({attention_preset})" if attention_preset else " (no matching attention preset this run)" + subtitle += "; ceilings are per-block upper bounds at the given kv budget, generation adds te/vae/projections[/dim]" + emit(Panel(table, title=f"compute split: {family}", subtitle=subtitle, box=ROUNDED_BOX, expand=False)) + disagreements = [config_id for config_id, row in split.items() if row["agree"] is False] + if disagreements: + emit(f"[yellow]split instruments disagree on {', '.join(disagreements)}; ceilings withheld there, treat the split with suspicion[/yellow]") + return split + + def measured(results, config_id): entry = results.get(config_id) or {} ms = entry.get("ms") @@ -3503,6 +3670,12 @@ def main(): sys.exit(1) known_blocks = [config_id for config_id, _w, _mm, _a in block_configs] selected_blocks = None if args.block_configs.strip().lower() == "all" else [s.strip() for s in args.block_configs.split(",") if s.strip()] + selected_geometries = None if args.block_geometries.strip().lower() == "all" else [s.strip() for s in args.block_geometries.split(",") if s.strip()] + if selected_geometries is not None: + unknown_geometries = [s for s in selected_geometries if s not in block_geometries] + if unknown_geometries: + console.print(f"[red]unknown block geometry(ies): {', '.join(unknown_geometries)}; available: {', '.join(block_geometries)}[/red]") + sys.exit(1) if selected_blocks is not None: unknown_blocks = [s for s in selected_blocks if s not in known_blocks] if unknown_blocks: @@ -3550,7 +3723,9 @@ def main(): bench_dtype = devices.dtype else: bench_dtype = {"bf16": torch.bfloat16, "fp16": torch.float16}[args.dtype] - selected = list(full_run) if args.shapes.strip().lower() == "all" else [s.strip() for s in args.shapes.split(",") if s.strip()] + shapes_arg = args.shapes.strip().lower() + shape_run_aliases = {"all": full_run, "sparse": sparse_run, "gate": gate_run} + selected = list(shape_run_aliases[shapes_arg]) if shapes_arg in shape_run_aliases else [s.strip() for s in args.shapes.split(",") if s.strip()] unknown = [s for s in selected if s not in shape_presets] if unknown: console.print(f"[red]unknown shape preset(s): {', '.join(unknown)}; available: {', '.join(shape_presets)}[/red]") @@ -3615,7 +3790,7 @@ def main(): if free_vram_gb() < 3.0: emit(f"[yellow]skipping block benchmarks: needs about 3 gb free vram, {free_vram_gb():.1f} gb available[/yellow]") else: - bench_block_section(args.iters, args.warmup, config_timeout=args.config_timeout, selected=selected_blocks) + bench_block_section(args.iters, args.warmup, config_timeout=args.config_timeout, selected=selected_blocks, geometries=selected_geometries) if "attention" in sections: # bench the prep mode the advice points to: compiled, static workaround, or eager From 039227119cac52a0aa3ce84e96217c5b9d985ee6 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 09:12:31 +0100 Subject: [PATCH 042/270] fix(cli): render the benchmark compute split after both sections The block section runs before the attention section, so the split table read an empty attention report and instrument B never engaged. The splits now render from the stored block results once both sections are in. - the agreement gate admits the measured 0.1-2.5% systematic offset between the two instruments (strided projection views vs contiguous standalone tensors); a noise-only threshold rejected every row - presets and block geometries can declare their own config timeout; autotune cost grows with the square of the sequence and the 300 s default cut every sdnq row at 109k tokens --- cli/sdnq-attention-benchmark.py | 44 ++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/cli/sdnq-attention-benchmark.py b/cli/sdnq-attention-benchmark.py index 7f3ae6205..ceac77ac6 100755 --- a/cli/sdnq-attention-benchmark.py +++ b/cli/sdnq-attention-benchmark.py @@ -145,7 +145,7 @@ shape_presets = { "h3": dict(batch=1, heads=56, tokens=38222, head_dim=128, iters=8, warmup=3, ref_head_chunk=14, sparse=dict(layout=[("text", 0, 512), ("audio", 512, 926), ("video", 926, 38222)]), desc="MiniMax H3 packed self-attention, 1344x768 124 frames (5.2s): 512 text + 414 audio + 37296 video rows, guidance-free"), - "h3-long": dict(batch=1, heads=56, tokens=109574, head_dim=128, iters=6, warmup=2, ref_head_chunk=8, + "h3-long": dict(batch=1, heads=56, tokens=109574, head_dim=128, iters=6, warmup=2, ref_head_chunk=8, config_timeout=1200, sparse=dict(layout=[("text", 0, 512), ("audio", 512, 1718), ("video", 1718, 109574)]), desc="MiniMax H3 packed self-attention, 1344x768 362 frames (15.1s): 512 text + 1206 audio + 107856 video rows"), "masked": dict(batch=1, heads=32, tokens=4608, head_dim=128, mask_fn=key_padding_mask, desc="FLUX.2 Klein shape with boolean key-padding mask, 25% of keys masked"), @@ -179,7 +179,7 @@ block_geometries = { "krea2": dict(hidden=6144, heads=48, mlp_dim=16384, tokens=4608), # minimax h3: attention wider than the residual stream (56*128 > 5376), swiglu mlp; the # full 124-frame token count makes the block section long, so it runs only when selected - "h3": dict(hidden=5376, heads=56, head_dim=128, mlp_dim=14336, mlp="swiglu", tokens=38222, iters=6, warmup=2), + "h3": dict(hidden=5376, heads=56, head_dim=128, mlp_dim=14336, mlp="swiglu", tokens=38222, iters=6, warmup=2, config_timeout=900), } default_block_geometries = "flux1,krea2" block_geometry = block_geometries["flux1"] # active geometry; bench_block_section iterates @@ -357,11 +357,13 @@ def parse_cli(): parser.add_argument("--skip-checks", action="store_true", help="skip kernel correctness checks") parser.add_argument("--skip-bench", action="store_true", help="skip benchmarks, run checks and the fp8 and compile probes only") parser.add_argument("--dtype", type=str, default="auto", choices=["auto", "bf16", "fp16"], help="tensor dtype for benchmarks; auto uses the dtype the webui selected for this gpu (default: %(default)s)") - parser.add_argument("--config-timeout", type=int, default=300, help="best effort: abort a config whose compile plus first call exceeds this many seconds, 0 disables; cannot interrupt native-level hangs (default: %(default)s)") + parser.add_argument("--config-timeout", type=int, default=None, help="best effort: abort a config whose compile plus first call exceeds this many seconds, 0 disables; cannot interrupt native-level hangs (default: 300, or the limit a preset or block geometry declares for itself)") parser.add_argument("--save", type=str, default="auto", help="plain-text copy of all tables and notes; 'auto' (default) names it -t-.txt in the output directory, 'none' disables, anything else is used as the path") parser.add_argument("--json", type=str, default="auto", help="structured results (environment, probes, per-shape and dequant timings, recommendations); 'auto' (default) names it -t-.json in the output directory, 'none' disables, anything else is used as the path") parser.add_argument("--outdir", type=str, default=None, help="directory for auto-named outputs (default: $SDNQ_BENCH_DIR, or benchmarks/ under the sdnext root)") args = parser.parse_args() + args.timeout_flag = args.config_timeout # None lets a preset or block geometry declare its own limit + args.config_timeout = resolve_timeout(args.timeout_flag) sys.argv = sys.argv[:1] # sdnext parses argv again on import and rejects unknown arguments return args @@ -720,6 +722,13 @@ def live_progress(): return progress, task +def resolve_timeout(flag, declared=None): + # the cli flag wins when given; otherwise a preset or block geometry may declare its own limit + if flag is not None: + return flag + return 300 if declared is None else declared + + @contextmanager def time_limit(seconds, label): # torch.compile can spin indefinitely in sympy/inductor on pathological graphs @@ -800,6 +809,9 @@ def run_drift_sigma(): drift_override = None verdict_z = 1.28 # one-sided 90%: an on/off verdict is only stated when its margin test clears this +# split instruments A and B differ systematically (strided views out of the fused projection vs +# contiguous standalone tensors): 0.1-2.5% over 19 same-kernel rows at h3, far below the 17-25% hadamard gap +split_instrument_offset = 0.05 def sidak_z_for(count): @@ -1434,8 +1446,9 @@ def make_prep_fn(q, k, v, attn_mask, kwargs, is_causal=False, enable_gqa=False): return prep -def bench_shape(preset, iters, warmup, position=None, config_timeout=300, fp8_result=None): +def bench_shape(preset, iters, warmup, position=None, config_timeout=None, fp8_result=None): preset_cfg = shape_presets[preset] + config_timeout = resolve_timeout(config_timeout, preset_cfg.get("config_timeout")) batch, heads, tokens, head_dim = preset_cfg["batch"], preset_cfg["heads"], preset_cfg["tokens"], preset_cfg["head_dim"] kv_tokens = preset_cfg.get("kv_tokens", tokens) kv_heads = preset_cfg.get("kv_heads", heads) @@ -2605,7 +2618,7 @@ def block_label(weights_cfg, use_mm, attention_spec): return f"{weights_part} + {attention_spec}" -def bench_block_section(iters, warmup, config_timeout=300, selected=None, geometries=None): +def bench_block_section(iters, warmup, config_timeout=None, selected=None, geometries=None): global block_geometry # pylint: disable=global-statement all_results = {} for family, geometry in block_geometries.items(): @@ -2614,10 +2627,10 @@ def bench_block_section(iters, warmup, config_timeout=300, selected=None, geomet block_geometry = geometry geometry_iters = geometry.get("iters", iters) geometry_warmup = geometry.get("warmup", warmup) - results = bench_block_geometry(geometry_iters, geometry_warmup, config_timeout=config_timeout, selected=selected) + geometry_timeout = resolve_timeout(config_timeout, geometry.get("config_timeout")) + results = bench_block_geometry(geometry_iters, geometry_warmup, config_timeout=geometry_timeout, selected=selected) all_results[family] = results - split = block_split_table(family, geometry, results) - report.setdefault("blocks", {})[family] = dict(geometry=dict(geometry), results=results, split=split) + report.setdefault("blocks", {})[family] = dict(geometry=dict(geometry), results=results, split=None) if not all_results: return {} # the first family run also lands at the flat block key, which replays and the buyback @@ -2760,6 +2773,12 @@ def bench_block_geometry(iters, warmup, config_timeout=300, selected=None): return results +def emit_block_splits(): + # instrument B reads the attention tables, so the split renders once both sections are in + for family, data in (report.get("blocks") or {}).items(): + data["split"] = block_split_table(family, data["geometry"], data["results"]) + + def block_split_table(family, geometry, results): # compute split per config from two independent instruments: A subtracts the identity- # attention variant timed inside the block, B reads the standalone attention table at the @@ -2801,7 +2820,7 @@ def block_split_table(family, geometry, results): # subtraction amplifies the relative sigma of instrument A by ms/attn_a sigma_a = (row_sigma(entry) or 0.0) * (ms / attn_a) sigma_b = row_sigma(attention_entry, "ms") or 0.0 - threshold = max(verdict_z * math.sqrt(sigma_a * sigma_a + sigma_b * sigma_b), run_drift_sigma()) + threshold = max(verdict_z * math.sqrt(sigma_a * sigma_a + sigma_b * sigma_b), run_drift_sigma(), split_instrument_offset) agree = abs(math.log(attn_a / attn_b)) <= threshold ceilings = {budget: ms / (budget * attn_a + identity_ms) for budget in budgets} if agree else None split[config_id] = dict(ms=ms, rest_ms=identity_ms, attn_a_ms=attn_a, attn_b_ms=attn_b, agree=agree, ceilings=ceilings) @@ -3790,7 +3809,9 @@ def main(): if free_vram_gb() < 3.0: emit(f"[yellow]skipping block benchmarks: needs about 3 gb free vram, {free_vram_gb():.1f} gb available[/yellow]") else: - bench_block_section(args.iters, args.warmup, config_timeout=args.config_timeout, selected=selected_blocks, geometries=selected_geometries) + bench_block_section(args.iters, args.warmup, config_timeout=args.timeout_flag, selected=selected_blocks, geometries=selected_geometries) + if "attention" not in sections: + emit_block_splits() if "attention" in sections: # bench the prep mode the advice points to: compiled, static workaround, or eager @@ -3812,7 +3833,8 @@ def main(): if free_vram_gb() < needed: emit(f"[yellow]skipping {preset}: needs about {needed:.0f} gb free vram, {free_vram_gb():.1f} gb available[/yellow]") continue - all_results[preset] = bench_shape(preset, args.iters, args.warmup, position=(index, len(selected)), config_timeout=args.config_timeout, fp8_result=fp8_result) + all_results[preset] = bench_shape(preset, args.iters, args.warmup, position=(index, len(selected)), config_timeout=args.timeout_flag, fp8_result=fp8_result) + emit_block_splits() build_recommendations(all_results, fp8_result, prep_status, block_results=(report.get("block") or {}).get("results"), block_variants=report.get("blocks")) if drift_samples: From fc0fd41ecd44c47fe2857c18078061b5922adefa Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 22 Aug 2026 23:54:30 +0100 Subject: [PATCH 043/270] perf(attention): drop the per call readbacks from block selection Selecting blocks synchronized with the accelerator three times per attention call: once to size the top-k, once to decide whether the budget covered every candidate, and once to compute the density for reporting. At the sdxl shape those stalls cost 1.6 ms against a 1.2 ms attention, so the selector lost to dense at every budget. The parts that depend only on geometry and layout are now built once and cached per layout, ranking replaces top-k so no host side k is needed, and density became a method that reads back only when something asks. The block mask also stops sorting a mask of zeros to fill partial slots it leaves empty. Selection overhead at sdxl drops from 1.84 ms to 0.23 ms, and a 30 percent budget moves from 0.36x of dense to 1.19x. --- modules/attention/sparse/flex.py | 4 ++- modules/attention/sparse/selector.py | 54 ++++++++++++++++++---------- modules/attention/sparse/stage.py | 2 +- test/test-attention-sparse.py | 4 +-- 4 files changed, 42 insertions(+), 22 deletions(-) diff --git a/modules/attention/sparse/flex.py b/modules/attention/sparse/flex.py index 42ef1dad3..a9c1f979c 100644 --- a/modules/attention/sparse/flex.py +++ b/modules/attention/sparse/flex.py @@ -14,7 +14,9 @@ def to_block_mask(selection: BlockSelection, device=None) -> BlockMask: keep = keep.to(device) if keep.dim() != 4: raise ValueError(f'block selection must be 4d, got {tuple(keep.shape)}') - empty_num, empty_indices = _dense_to_ordered(torch.zeros_like(keep)) + # the partial slots stay empty by construction, so build them directly rather than sorting a mask of zeros + empty_num = torch.zeros(keep.shape[:-1], dtype=torch.int32, device=keep.device) + empty_indices = torch.zeros(keep.shape, dtype=torch.int32, device=keep.device) full_num, full_indices = _dense_to_ordered(keep) return BlockMask.from_kv_blocks( empty_num, empty_indices, diff --git a/modules/attention/sparse/selector.py b/modules/attention/sparse/selector.py index 89539e8cb..dc3cb19fc 100644 --- a/modules/attention/sparse/selector.py +++ b/modules/attention/sparse/selector.py @@ -24,12 +24,15 @@ class BlockSelection: budget: float seq_q: int seq_kv: int - density: float @property def shape(self) -> tuple[int, int, int, int]: return tuple(self.keep.shape) + def density(self) -> float: + """Fraction of tiles kept. Reads back from the accelerator, so this is for reporting and tests, never the hot path.""" + return float(self.keep.sum().item()) / max(self.keep.numel(), 1) + def block_count(length: int, block: int) -> int: return (length + block - 1) // block @@ -73,11 +76,15 @@ def score_blocks(query: torch.Tensor, key: torch.Tensor, spec: SparseSpec) -> to return torch.cat([pooled_q[:, i:i + chunk] @ pooled_k[:, i:i + chunk].transpose(-1, -2) for i in range(0, heads, chunk)], dim=1) -def select_blocks(query: torch.Tensor, key: torch.Tensor, spec: SparseSpec, pins: torch.Tensor | None = None, drops: torch.Tensor | None = None) -> BlockSelection | None: - """Keep the highest scoring KV tiles per query tile within the budget, plus pins and the diagonal. None means attend densely.""" - seq_q, seq_kv = query.shape[-2], key.shape[-2] - nq, nk = block_count(seq_q, spec.block_q), block_count(seq_kv, spec.block_kv) - device = query.device +plan_cache: dict = {} + + +def selection_plan(spec: SparseSpec, nq: int, nk: int, pins, drops, device, cache_key=None): + """The parts that depend only on geometry and layout, not on the tensors: what must be kept, what may be chosen, and how many.""" + key = (cache_key, nq, nk, spec.block_q, spec.block_kv, spec.budget, str(device)) + hit = plan_cache.get(key) if cache_key is not None else None + if hit is not None: + return hit must = diagonal_blocks(nq, nk, spec.block_q, spec.block_kv, device).unsqueeze(0).unsqueeze(0) if pins is not None: must = must | pins @@ -85,22 +92,33 @@ def select_blocks(query: torch.Tensor, key: torch.Tensor, spec: SparseSpec, pins candidates = ~must & ~forbidden per_row = candidates.sum(dim=-1, keepdim=True) # (.., NQ, 1) keep_per_row = torch.ceil(per_row * spec.budget).to(torch.int64) - if not spec.force and bool((keep_per_row >= per_row).all()): + covers_everything = bool((keep_per_row >= per_row).all()) # one readback, amortized over the generation by the cache + built = (must, forbidden, candidates, keep_per_row, covers_everything) + if cache_key is not None: + if len(plan_cache) > 32: + plan_cache.clear() + plan_cache[key] = built + return built + + +def select_blocks(query: torch.Tensor, key: torch.Tensor, spec: SparseSpec, pins: torch.Tensor | None = None, drops: torch.Tensor | None = None, cache_key=None) -> BlockSelection | None: + """Keep the highest scoring KV tiles per query tile within the budget, plus pins and the diagonal. None means attend densely.""" + seq_q, seq_kv = query.shape[-2], key.shape[-2] + nq, nk = block_count(seq_q, spec.block_q), block_count(seq_kv, spec.block_kv) + device = query.device + must, forbidden, candidates, keep_per_row, covers_everything = selection_plan(spec, nq, nk, pins, drops, device, cache_key) + if covers_everything and not spec.force: return None # the budget covers every candidate, so the mask would be dense scores = score_blocks(query, key, spec) scores = scores.masked_fill(~candidates.expand_as(scores), float('-inf')) - limit = int(keep_per_row.max().item()) - keep = must.expand(scores.shape).clone() - if limit > 0: - order = scores.argsort(dim=-1, descending=True, stable=True) - rank = torch.empty_like(order) - rank.scatter_(-1, order, torch.arange(nk, device=device).expand_as(order)) - keep |= (rank < keep_per_row) & candidates + # rank rather than topk, so the per row budget varies without a host side k + order = scores.argsort(dim=-1, descending=True, stable=True) + rank = torch.empty_like(order) + rank.scatter_(-1, order, torch.arange(nk, device=device).expand_as(order)) + keep = must | ((rank < keep_per_row) & candidates) keep &= ~forbidden - keep_int8 = keep.to(torch.int8) - density = float(keep_int8.sum().item()) / max(keep_int8.numel(), 1) - return BlockSelection(keep=keep_int8, block_q=spec.block_q, block_kv=spec.block_kv, budget=spec.budget, seq_q=seq_q, seq_kv=seq_kv, density=density) + return BlockSelection(keep=keep.to(torch.int8), block_q=spec.block_q, block_kv=spec.block_kv, budget=spec.budget, seq_q=seq_q, seq_kv=seq_kv) def radial_blocks(seq_q: int, seq_kv: int, density: float, spec: SparseSpec, device) -> BlockSelection: @@ -117,7 +135,7 @@ def radial_blocks(seq_q: int, seq_kv: int, density: float, spec: SparseSpec, dev else: high = mid keep = (distance <= high).unsqueeze(0).unsqueeze(0).to(torch.int8) - return BlockSelection(keep=keep, block_q=spec.block_q, block_kv=spec.block_kv, budget=density, seq_q=seq_q, seq_kv=seq_kv, density=float(keep.sum().item()) / max(keep.numel(), 1)) + return BlockSelection(keep=keep, block_q=spec.block_q, block_kv=spec.block_kv, budget=density, seq_q=seq_q, seq_kv=seq_kv) def schedule(steps: int, budget: float, bump: float = 0.0, bump_steps: int = 0) -> tuple[float, ...]: diff --git a/modules/attention/sparse/stage.py b/modules/attention/sparse/stage.py index 43d58256d..17922722f 100644 --- a/modules/attention/sparse/stage.py +++ b/modules/attention/sparse/stage.py @@ -103,7 +103,7 @@ def make_stage(options: StageOptions): if pins.shape[-2:] != (nq, nk): return decline('layout geometry mismatch') stage.last_skip = None - return select_blocks(query, key, spec, pins=pins, drops=drops) + return select_blocks(query, key, spec, pins=pins, drops=drops, cache_key=token_layout.key()) stage.options = options stage.last_skip = None diff --git a/test/test-attention-sparse.py b/test/test-attention-sparse.py index ca2ea5243..d78625da8 100644 --- a/test/test-attention-sparse.py +++ b/test/test-attention-sparse.py @@ -258,7 +258,7 @@ def test_radial_control_matches_the_requested_density(): spec = sparse.SparseSpec() for density in (0.15, 0.30): control = sparse.radial_blocks(4096, 4096, density, spec, device) - assert abs(control.density - density) < 0.05, f'requested {density}, got {control.density}' + assert abs(control.density() - density) < 0.05, f'requested {density}, got {control.density()}' return True @@ -410,7 +410,7 @@ def test_stage_uses_a_published_layout_and_falls_back_without_one(): loose = stage(q, k, v, None, False) ctx.set_layout(sparse.layout_from_segments([('text', 256), ('video', 1792)])) pinned = stage(q, k, v, None, False) - assert pinned.density > loose.density, f'pinning conditioning must keep more tiles: {pinned.density} vs {loose.density}' + assert pinned.density() > loose.density(), f'pinning conditioning must keep more tiles: {pinned.density()} vs {loose.density()}' assert bool(pinned.keep[..., 0:4].all()), 'the pinned text columns must survive' return True return with_context(checks) From 3fc586144538956ffd8a83a0e7740e2603960cd5 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 23 Aug 2026 00:10:17 +0100 Subject: [PATCH 044/270] feat(cli): flex sparse rows in the attention benchmark Dense flex, the selector at four budgets, and a density matched static radial band, at any shape without a mask or a causal rule. The selector runs inside the timed region, because a producer measured beside the attention it accelerates looks free and is not, and the budget 100 percent row keeps every tile so it isolates that cost. All of them are reported and none can win an sdnq settings recommendation. --- cli/sdnq-attention-benchmark.py | 45 ++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/cli/sdnq-attention-benchmark.py b/cli/sdnq-attention-benchmark.py index ceac77ac6..3f67b0a52 100755 --- a/cli/sdnq-attention-benchmark.py +++ b/cli/sdnq-attention-benchmark.py @@ -241,6 +241,12 @@ bench_configs = [ ("sage", "sageattention", None), # label resolved to the dispatched kernel by sage_kernel_label ("sagefp16", "sage int8 qk + fp16 pv, fp16 accum", None), # sm86 only ("amdflash", "triton flash (amd)", None), + ("flex", "flex attention, dense", None), # compiled: flex reads its block lists only under compile + ("flex-sparse100", "flex + selector, budget 100%", None), # the selector runs but keeps everything, so this row is its overhead alone + ("flex-sparse50", "flex + selector, budget 50%", None), + ("flex-sparse30", "flex + selector, budget 30%", None), + ("flex-sparse15", "flex + selector, budget 15%", None), + ("flex-radial30", "flex + static radial band, 30%", None), # density matched control with no per-call producer ("noquant", "sdnq, quantized matmul off", dict(do_quantize=False)), ("int8", "sdnq int8 qk", dict(matmul_dtype="auto", pv_matmul_dtype="auto")), ("smooth", "sdnq int8 qk + smooth k", dict(matmul_dtype="auto", pv_matmul_dtype="auto", smooth_k=True)), @@ -261,7 +267,9 @@ bench_configs = [ # external baselines are compared against but never starred or recommended as sdnq configs; # the unsafe accum mode is measured and displayed under the same rule, since its overflow # tail lives outside what mean error can see -external_config_ids = ("base", "sage", "sagefp16", "amdflash") +# baselines and non-sdnq rows: reported, never recommended as an sdnq setting, and the sparse +# rows are lossy by design so a recommendation must not pick one for being fast +external_config_ids = ("base", "sage", "sagefp16", "amdflash", "flex", "flex-sparse100", "flex-sparse50", "flex-sparse30", "flex-sparse15", "flex-radial30") unsafe_config_ids = ("pvaccum",) # every preset runs the full config list (availability gates still apply per config); only # hard technical exclusions live here, never runtime trims. sd15: compiling hadamard with @@ -521,6 +529,37 @@ def triton_mm_fp16_accum(): triton_mm.USE_FP16_ACCUM, triton_scaled_mm.USE_FP16_ACCUM = saved +flex_budgets = {"flex-sparse100": 1.0, "flex-sparse50": 0.50, "flex-sparse30": 0.30, "flex-sparse15": 0.15} + + +def flex_available(): + try: + import modules.attention.sparse.flex # pylint: disable=unused-import + return torch.cuda.is_available() + except Exception: + return False + + +def make_flex_fn(config_id, q, k, v, scale, gqa): + """Time the selector inside the attention it accelerates; a producer measured on its own looks free and is not.""" + from modules.attention.sparse import flex as sparse_flex, selector as sparse_selector + call = sparse_flex.flex_call() + if config_id == "flex": + return lambda: call(q, k, v, scale=scale, enable_gqa=gqa) + if config_id == "flex-radial30": + # a static pattern is built once by construction, which is exactly the advantage it has to defend + static = sparse_flex.to_block_mask(sparse_selector.radial_blocks(q.shape[-2], k.shape[-2], 0.30, sparse_selector.SparseSpec(), q.device)) + return lambda: call(q, k, v, block_mask=static, scale=scale, enable_gqa=gqa) + spec = sparse_selector.SparseSpec(budget=flex_budgets[config_id], force=True) + + cache_key = ("bench", config_id, tuple(q.shape), tuple(k.shape)) # the webui caches the geometry per layout, so measure that path + + def run(): + selection = sparse_selector.select_blocks(q, k, spec, cache_key=cache_key) + return call(q, k, v, block_mask=sparse_flex.to_block_mask(selection), scale=scale, enable_gqa=gqa) + return run + + def sage_attention(): # mirror the backend selection from modules/attention.py: sm86 needs the cuda backend try: @@ -1476,6 +1515,8 @@ def bench_shape(preset, iters, warmup, position=None, config_timeout=None, fp8_r continue if config_id == "amdflash" and (amd_flash is None or attn_mask is not None or head_dim > 128 or gqa): continue + if config_id.startswith("flex") and (not flex_available() or attn_mask is not None or causal or kv_tokens != tokens): + continue # a block only mask cannot carry a token mask or a causal rule, and cross attention is not sparsified if config_id == "fp8qk" and not (fp8_result and fp8_result["qk"][0]): continue if config_id == "fp8pv" and not (fp8_result and fp8_result["pv"][0]): @@ -1536,6 +1577,8 @@ def bench_shape(preset, iters, warmup, position=None, config_timeout=None, fp8_r elif config_id == "amdflash": def fn(sm=scale): return amd_flash(q, k, v, sm, is_causal=causal) + elif config_id.startswith("flex"): + fn = make_flex_fn(config_id, q, k, v, scale, gqa) else: def fn(kw=kwargs, mask=attn_mask): return sdnq_triton_atten(q, k, v, attn_mask=mask, is_causal=causal, enable_gqa=gqa, **kw) From 01b97dea88e108fccc325d7103a860dcf6934b49 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 23 Aug 2026 00:45:14 +0100 Subject: [PATCH 045/270] fix(attention): compile the flex backend flex_attention called eagerly materializes the whole score matrix. At a video sequence length that is tens of gigabytes, and it surfaces as a CUDA driver error rather than a clean allocation failure: MiniMax H3 at 9505 tokens over 56 heads asks for about 20 GB for the scores alone and the generation dies. The backend now calls the compiled entry point for every path, which is also the only form that reads block lists. --- modules/attention/backends/flex.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/attention/backends/flex.py b/modules/attention/backends/flex.py index e9b203786..c5e6a9d25 100644 --- a/modules/attention/backends/flex.py +++ b/modules/attention/backends/flex.py @@ -4,15 +4,18 @@ from modules.attention.registry import AttentionBackend, Constraints, Platform def prepare(platform: Platform, original): # pylint: disable=unused-argument - from torch.nn.attention.flex_attention import flex_attention, create_block_mask + from torch.nn.attention.flex_attention import create_block_mask + from modules.attention.sparse import flex as sparse_flex def causal_mask(b, h, q_idx, kv_idx): # pylint: disable=unused-argument return q_idx >= kv_idx def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa, selection=None): # pylint: disable=unused-argument if selection is not None: - from modules.attention.sparse import flex as sparse_flex return sparse_flex.attend(query, key, value, selection, scale=scale, enable_gqa=enable_gqa) + # compiled, always: eager flex_attention materializes the whole score matrix, which is + # tens of gigabytes at video sequence lengths and fails in the driver rather than cleanly + flex_attention = sparse_flex.flex_call() score_mod = None block_mask = None if attn_mask is not None: From c7b18bc926e296d2c54087f86aacab66667e6230 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 23 Aug 2026 01:22:25 +0100 Subject: [PATCH 046/270] feat(attention): static pattern control and fallback SD_SPARSE_PATTERN=radial swaps the content aware selection for a band around the diagonal at the density the selector would have produced. It is the control the selector has to beat, and the fallback the kill criteria name if it does not. The band honors the same layout pins. Without them it never keeps the text columns, which sit far from the diagonal for late video rows, so prompt conditioning is lost and it renders a different scene entirely: a control that loses for the wrong reason proves nothing. --- modules/attention/sparse/stage.py | 33 ++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/modules/attention/sparse/stage.py b/modules/attention/sparse/stage.py index 17922722f..98eb85cea 100644 --- a/modules/attention/sparse/stage.py +++ b/modules/attention/sparse/stage.py @@ -1,9 +1,15 @@ """The router stage that turns settings plus a published layout into a per call block selection.""" +import os from dataclasses import dataclass +import torch from modules.logger import log from modules.attention import context from modules.attention.sparse import layout as layout_mod -from modules.attention.sparse.selector import SparseSpec, block_count, schedule, select_blocks +from modules.attention.sparse.selector import BlockSelection, SparseSpec, block_count, radial_blocks, schedule, select_blocks + +# SD_SPARSE_PATTERN=radial replaces the content aware selection with a static band around the +# diagonal at the same density: the control the selector has to beat, and the fallback if it does not +pattern = os.environ.get('SD_SPARSE_PATTERN', 'adaptive').strip().lower() # measured on a 3090: below roughly this length a 30 percent budget caps under 1.25x per block, @@ -60,6 +66,29 @@ def make_stage(options: StageOptions): reported: set = set() inactive: set = set() cache: dict = {} + static: dict = {} + + def static_selection(query, key, spec, pins, drops, cache_key): + """A density matched band, built once per geometry, honoring the same layout pins so the control differs from the selector only in how it chooses video tiles.""" + static_key = (cache_key, spec.budget, query.shape[-2], key.shape[-2]) + built = static.get(static_key) + if built is None: + reference = select_blocks(query, key, spec, pins=pins, drops=drops, cache_key=cache_key) + if reference is None: + return None + target = reference.density() + pinned = float(pins.to(torch.float32).mean().item()) if pins is not None else 0.0 + band = radial_blocks(query.shape[-2], key.shape[-2], max(target - pinned, 0.0), spec, query.device) + keep = band.keep.bool() + if pins is not None: + keep = keep | pins + if drops is not None: + keep = keep & ~drops + built = BlockSelection(keep=keep.to(torch.int8), block_q=spec.block_q, block_kv=spec.block_kv, budget=spec.budget, seq_q=query.shape[-2], seq_kv=key.shape[-2]) + static.clear() + static[static_key] = built + log.info(f'Sparse attention: static radial pattern density={built.density():.3f} against selector {target:.3f} at budget={spec.budget:.0%}') + return built def budget_for_step() -> float: state = context.current @@ -103,6 +132,8 @@ def make_stage(options: StageOptions): if pins.shape[-2:] != (nq, nk): return decline('layout geometry mismatch') stage.last_skip = None + if pattern == 'radial': + return static_selection(query, key, spec, pins, drops, token_layout.key()) return select_blocks(query, key, spec, pins=pins, drops=drops, cache_key=token_layout.key()) stage.options = options From b2de8f53c42fb3e29298d5f4dd200c34c542f43e Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 23 Aug 2026 04:11:43 +0100 Subject: [PATCH 047/270] feat(attention): sdnq backend consumes the block selection The sdnq Triton kernel gains a block mask input (on the submodule's feat/block-mask branch; the pointer here is unchanged), so the backend advertises the block_mask cap and passes the router's selection as block_mask plus its block sizes. Prepare probes the installed kernel's signature and narrows the cap when the input is missing, warning when sparse attention is on, so an older submodule stays dense instead of failing. PlanEntry carries the narrowed caps, and the router, the sparse stage and the report read those rather than the declaration. - benchmark: int8-sparse100/50/30/15 and int8-radial30 rows feed the same producer as the flex rows into the quantized kernel, skipped on builds without block_mask; a --configs filter selects attention rows the way --block-configs selects block rows; sparse rows of either backend are held out of the settings advice - test/test-attention-sdnq-sparse.py: the kernel contract against the token-expanded mask, the nesting filter, the public entry on the quantized paths, the backward against the same selection and against fp32 autograd, and the flex consumer on one selection, pinned to one tile per run with a --tiles sweep - locale: the sparse attention hint names both capable backends --- cli/sdnq-attention-benchmark.py | 62 ++- modules/attention/backends/sdnq.py | 20 +- modules/attention/router.py | 9 +- test/test-attention-router.py | 35 ++ test/test-attention-sdnq-sparse.py | 696 +++++++++++++++++++++++++++++ ui/locale/locale_en.json | 2 +- 6 files changed, 811 insertions(+), 13 deletions(-) create mode 100644 test/test-attention-sdnq-sparse.py diff --git a/cli/sdnq-attention-benchmark.py b/cli/sdnq-attention-benchmark.py index 3f67b0a52..c0959bba1 100755 --- a/cli/sdnq-attention-benchmark.py +++ b/cli/sdnq-attention-benchmark.py @@ -249,6 +249,11 @@ bench_configs = [ ("flex-radial30", "flex + static radial band, 30%", None), # density matched control with no per-call producer ("noquant", "sdnq, quantized matmul off", dict(do_quantize=False)), ("int8", "sdnq int8 qk", dict(matmul_dtype="auto", pv_matmul_dtype="auto")), + ("int8-sparse100", "sdnq int8 qk + selector, budget 100%", dict(matmul_dtype="auto", pv_matmul_dtype="auto")), # the selector runs but keeps everything, so this row is its overhead on the quantized kernel + ("int8-sparse50", "sdnq int8 qk + selector, budget 50%", dict(matmul_dtype="auto", pv_matmul_dtype="auto")), + ("int8-sparse30", "sdnq int8 qk + selector, budget 30%", dict(matmul_dtype="auto", pv_matmul_dtype="auto")), + ("int8-sparse15", "sdnq int8 qk + selector, budget 15%", dict(matmul_dtype="auto", pv_matmul_dtype="auto")), + ("int8-radial30", "sdnq int8 qk + static radial band, 30%", dict(matmul_dtype="auto", pv_matmul_dtype="auto")), # density matched control with no per-call producer ("smooth", "sdnq int8 qk + smooth k", dict(matmul_dtype="auto", pv_matmul_dtype="auto", smooth_k=True)), ("hadamard", "sdnq int8 qk + hadamard", dict(matmul_dtype="auto", pv_matmul_dtype="auto", use_hadamard=True)), ("smooth_hadamard", "sdnq int8 qk + smooth + hadamard", dict(matmul_dtype="auto", pv_matmul_dtype="auto", smooth_k=True, use_hadamard=True)), @@ -269,7 +274,8 @@ bench_configs = [ # tail lives outside what mean error can see # baselines and non-sdnq rows: reported, never recommended as an sdnq setting, and the sparse # rows are lossy by design so a recommendation must not pick one for being fast -external_config_ids = ("base", "sage", "sagefp16", "amdflash", "flex", "flex-sparse100", "flex-sparse50", "flex-sparse30", "flex-sparse15", "flex-radial30") +external_config_ids = ("base", "sage", "sagefp16", "amdflash", "flex") +sparse_config_ids = ("flex-sparse100", "flex-sparse50", "flex-sparse30", "flex-sparse15", "flex-radial30", "int8-sparse100", "int8-sparse50", "int8-sparse30", "int8-sparse15", "int8-radial30") unsafe_config_ids = ("pvaccum",) # every preset runs the full config list (availability gates still apply per config); only # hard technical exclusions live here, never runtime trims. sd15: compiling hadamard with @@ -357,6 +363,7 @@ def parse_cli(): parser.add_argument("--dequant-sweeps", type=str, default="all", help=f"comma-separated setting sweeps in the dequant section: {', '.join(all_dequant_sweeps)}; 'all' or 'none' (default: %(default)s)") parser.add_argument("--mm-backends", type=str, default="none", help=f"comma-separated quantized-matmul backends to compare in one run: {', '.join(all_mm_backends)}; 'none' benches only the backend this device selects (default: %(default)s)") parser.add_argument("--mm-rounds", type=int, default=2, help="alternating rounds per matmul backend, fastest kept, so clock drift cancels instead of favouring one backend (default: %(default)s)") + parser.add_argument("--configs", type=str, default="all", help=f"comma-separated attention configs: {', '.join(config_id for config_id, _label, _kwargs in bench_configs)}; 'all' runs every one (default: %(default)s)") parser.add_argument("--block-configs", type=str, default="all", help=f"comma-separated combined block configs: {', '.join(config_id for config_id, _w, _mm, _a in block_configs)}; 'all' runs every one (default: %(default)s)") parser.add_argument("--block-geometries", type=str, default=default_block_geometries, help=f"comma-separated block geometries: {', '.join(block_geometries)}; 'all' runs every one (default: %(default)s)") parser.add_argument("--shapes", type=str, default=default_shapes, help=f"comma-separated attention shape presets: {', '.join(shape_presets)}; 'all' runs {', '.join(full_run)}, 'sparse' and 'gate' run the sparse and crossover lists (default: %(default)s)") @@ -504,6 +511,16 @@ def atten_supports_fp16_accum(): return False +def atten_supports_block_mask(): + # the sdnq sparse rows feed the kernel's block_mask kwarg; skip them on builds without it + if sdnq_triton_atten is None: + return False + try: + return "block_mask" in inspect.signature(inspect.unwrap(sdnq_triton_atten)).parameters + except (TypeError, ValueError): + return False + + def triton_mm_supports_fp16_accum(): try: from sdnq.kernels import triton_mm, triton_scaled_mm @@ -530,6 +547,25 @@ def triton_mm_fp16_accum(): flex_budgets = {"flex-sparse100": 1.0, "flex-sparse50": 0.50, "flex-sparse30": 0.30, "flex-sparse15": 0.15} +sdnq_sparse_budgets = {"int8-sparse100": 1.0, "int8-sparse50": 0.50, "int8-sparse30": 0.30, "int8-sparse15": 0.15} + + +def is_sdnq_sparse(config_id): + return config_id in sdnq_sparse_budgets or config_id == "int8-radial30" + + +def make_sdnq_sparse_fn(config_id, q, k, v, attn_mask, kwargs, causal, gqa): + """The producer the flex rows time, feeding the quantized kernel's block mask input instead.""" + from modules.attention.sparse import selector as sparse_selector + + def attend(selection): + return sdnq_triton_atten(q, k, v, attn_mask=attn_mask, is_causal=causal, enable_gqa=gqa, block_mask=selection.keep, block_mask_m=selection.block_q, block_mask_n=selection.block_kv, **kwargs) + if config_id == "int8-radial30": + static = sparse_selector.radial_blocks(q.shape[-2], k.shape[-2], 0.30, sparse_selector.SparseSpec(), q.device) + return lambda: attend(static) + spec = sparse_selector.SparseSpec(budget=sdnq_sparse_budgets[config_id], force=True) + cache_key = ("bench", config_id, tuple(q.shape), tuple(k.shape)) + return lambda: attend(sparse_selector.select_blocks(q, k, spec, cache_key=cache_key)) def flex_available(): @@ -983,6 +1019,8 @@ def print_environment(fp8_result, prep_status, prep_detail, weight_dequant_resul lines.append(f"compiled weight dequant, float8_e5m2 storage: {e5m2_verdict}") if not atten_supports_fp16_accum(): lines.append("fp16 accumulation kwarg: [yellow]absent in this sdnq build, accum rows skipped[/yellow]") + if not atten_supports_block_mask(): + lines.append("block mask kwarg: [yellow]absent in this sdnq build, sdnq sparse rows skipped[/yellow]") overrides = [f"{key}={value}" for key, value in os.environ.items() if key.startswith("SDNQ_TRITON_ATTEN") or key.startswith("SDNQ_TRITON_MM") or key.startswith("SDNQ_ALLOW_FP8") or key.startswith("SDNQ_COMPILE")] if overrides: lines.append(f"env overrides: {' '.join(overrides)}") @@ -1000,6 +1038,7 @@ def print_environment(fp8_result, prep_status, prep_detail, weight_dequant_resul **runtime_versions, fp8_attention_matmul=fp8_result["qk"][0] if fp8_result is not None else None, atten_fp16_accum=atten_supports_fp16_accum(), + atten_block_mask=atten_supports_block_mask(), triton_mm_fp16_accum=os.environ.get("SDNQ_TRITON_MM_USE_FP16_ACCUM", None), compiled_input_prep=prep_status, fp8_compile_gate=fp8_compile_gate_flag(), @@ -1485,7 +1524,7 @@ def make_prep_fn(q, k, v, attn_mask, kwargs, is_causal=False, enable_gqa=False): return prep -def bench_shape(preset, iters, warmup, position=None, config_timeout=None, fp8_result=None): +def bench_shape(preset, iters, warmup, position=None, config_timeout=None, fp8_result=None, selected=None): preset_cfg = shape_presets[preset] config_timeout = resolve_timeout(config_timeout, preset_cfg.get("config_timeout")) batch, heads, tokens, head_dim = preset_cfg["batch"], preset_cfg["heads"], preset_cfg["tokens"], preset_cfg["head_dim"] @@ -1507,7 +1546,7 @@ def bench_shape(preset, iters, warmup, position=None, config_timeout=None, fp8_r amd_flash = amd_triton_flash() selected_configs = [] for config_id, label, kwargs in bench_configs: - if config_id in excluded_configs: + if config_id in excluded_configs or (selected is not None and config_id not in selected): continue if config_id == "sage" and (sage is None or attn_mask is not None or head_dim not in {64, 96, 128} or kv_tokens != tokens or gqa or causal): continue @@ -1517,6 +1556,8 @@ def bench_shape(preset, iters, warmup, position=None, config_timeout=None, fp8_r continue if config_id.startswith("flex") and (not flex_available() or attn_mask is not None or causal or kv_tokens != tokens): continue # a block only mask cannot carry a token mask or a causal rule, and cross attention is not sparsified + if is_sdnq_sparse(config_id) and (not atten_supports_block_mask() or causal or kv_tokens != tokens): + continue # the kernel composes a token mask with the block mask, so only the causal and cross attention rules apply if config_id == "fp8qk" and not (fp8_result and fp8_result["qk"][0]): continue if config_id == "fp8pv" and not (fp8_result and fp8_result["pv"][0]): @@ -1579,6 +1620,8 @@ def bench_shape(preset, iters, warmup, position=None, config_timeout=None, fp8_r return amd_flash(q, k, v, sm, is_causal=causal) elif config_id.startswith("flex"): fn = make_flex_fn(config_id, q, k, v, scale, gqa) + elif is_sdnq_sparse(config_id): + fn = make_sdnq_sparse_fn(config_id, q, k, v, attn_mask, kwargs, causal, gqa) else: def fn(kw=kwargs, mask=attn_mask): return sdnq_triton_atten(q, k, v, attn_mask=mask, is_causal=causal, enable_gqa=gqa, **kw) @@ -2890,7 +2933,7 @@ def measured(results, config_id): def best_config(results): # lowest error among rows within 5% of the fastest sdnq time - candidates = [(config_id, entry["ms"], entry["err"]) for config_id, entry in results.items() if entry.get("ms") is not None and config_id not in external_config_ids and config_id not in unsafe_config_ids] + candidates = [(config_id, entry["ms"], entry["err"]) for config_id, entry in results.items() if entry.get("ms") is not None and config_id not in external_config_ids and config_id not in sparse_config_ids and config_id not in unsafe_config_ids] if not candidates: return None fastest = min(ms for _config_id, ms, _err in candidates) @@ -2924,7 +2967,7 @@ def select_attention_config(results): pool, capped = [], [] for config_id, label, kwargs in bench_configs: settings = config_settings(kwargs) - if settings is None: + if settings is None or config_id in sparse_config_ids: # a sparse row shares a settings tuple with its dense row but is a stage over it, not a setting continue if settings["accum"] and settings["pv"] == "disabled": continue # the unsafe accumulation combo is never a candidate; the accum row cites it directly @@ -3743,6 +3786,13 @@ def main(): if unknown_blocks: console.print(f"[red]unknown block config(s): {', '.join(unknown_blocks)}; available: {', '.join(known_blocks)}[/red]") sys.exit(1) + known_attention = [config_id for config_id, _label, _kwargs in bench_configs] + selected_attention = None if args.configs.strip().lower() == "all" else [s.strip() for s in args.configs.split(",") if s.strip()] + if selected_attention is not None: + unknown_attention = [s for s in selected_attention if s not in known_attention] + if unknown_attention: + console.print(f"[red]unknown attention config(s): {', '.join(unknown_attention)}; available: {', '.join(known_attention)}[/red]") + sys.exit(1) known_variants = [variant_id for variant_id, _cfg in dequant_variant_configs] variants_arg = args.dequant_variants.strip().lower() if variants_arg == "all": @@ -3876,7 +3926,7 @@ def main(): if free_vram_gb() < needed: emit(f"[yellow]skipping {preset}: needs about {needed:.0f} gb free vram, {free_vram_gb():.1f} gb available[/yellow]") continue - all_results[preset] = bench_shape(preset, args.iters, args.warmup, position=(index, len(selected)), config_timeout=args.timeout_flag, fp8_result=fp8_result) + all_results[preset] = bench_shape(preset, args.iters, args.warmup, position=(index, len(selected)), config_timeout=args.timeout_flag, fp8_result=fp8_result, selected=selected_attention) emit_block_splits() build_recommendations(all_results, fp8_result, prep_status, block_results=(report.get("block") or {}).get("results"), block_variants=report.get("blocks")) diff --git a/modules/attention/backends/sdnq.py b/modules/attention/backends/sdnq.py index 8ae3b86df..5a56835e1 100644 --- a/modules/attention/backends/sdnq.py +++ b/modules/attention/backends/sdnq.py @@ -1,7 +1,16 @@ +import inspect from modules.logger import log from modules.attention.registry import AttentionBackend, Constraints, Platform +def supports_block_mask(entry) -> bool: + """Whether the installed sdnq takes a block mask; the chain must not promise what the kernel cannot do.""" + try: + return 'block_mask' in inspect.signature(inspect.unwrap(entry)).parameters + except (TypeError, ValueError): + return False + + def prepare(platform: Platform, original): # pylint: disable=unused-argument from modules import shared from sdnq.kernels.triton_atten import sdnq_triton_atten @@ -14,11 +23,17 @@ def prepare(platform: Platform, original): # pylint: disable=unused-argument 'quantize_fp32': shared.opts.sdnq_attention_quantize_fp32, 'use_fp16_accum': shared.opts.sdnq_attention_use_fp16_accum, } + block_mask = supports_block_mask(sdnq_triton_atten) - def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa): # pylint: disable=unused-argument + def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa, selection=None): # pylint: disable=unused-argument + if selection is not None: + return sdnq_triton_atten(query=query, key=key, value=value, attn_mask=attn_mask, is_causal=is_causal, scale=scale, enable_gqa=enable_gqa, block_mask=selection.keep, block_mask_m=selection.block_q, block_mask_n=selection.block_kv, **options) return sdnq_triton_atten(query=query, key=key, value=value, attn_mask=attn_mask, is_causal=is_causal, scale=scale, enable_gqa=enable_gqa, **options) - log.debug(f'Torch attention: type="SDNQ attention" matmul={options["matmul_dtype"]}:{options["pv_matmul_dtype"]} smooth={options["smooth_k"]} hadamard={options["use_hadamard"]} quantize_fp32={options["quantize_fp32"]} fp16_accum={options["use_fp16_accum"]}') + call.caps = backend.caps if block_mask else frozenset() + if not block_mask and getattr(shared.opts, 'sparse_attention_enabled', False): + log.warning('SDNQ attention: the installed sdnq has no block mask input, sparse attention cannot use it; update the sdnq submodule') + log.debug(f'Torch attention: type="SDNQ attention" matmul={options["matmul_dtype"]}:{options["pv_matmul_dtype"]} smooth={options["smooth_k"]} hadamard={options["use_hadamard"]} quantize_fp32={options["quantize_fp32"]} fp16_accum={options["use_fp16_accum"]} block_mask={block_mask}') return call @@ -26,4 +41,5 @@ backend = AttentionBackend( name='sdnq', label='SDNQ attention', priority=60, prepare=prepare, constraints=Constraints(min_tokens=32, min_long_side=512, min_heads=2), # sequences of 512 or fewer are text encoders, single-head calls the vae options=('sdnq_attention_matmul_type', 'sdnq_attention_pv_matmul_type', 'sdnq_attention_smooth_k', 'sdnq_attention_use_hadamard', 'sdnq_attention_hadamard_group_size', 'sdnq_attention_quantize_fp32', 'sdnq_attention_use_fp16_accum'), + caps=frozenset({'block_mask'}), ) diff --git a/modules/attention/router.py b/modules/attention/router.py index 8b8e6a432..c1400de0a 100644 --- a/modules/attention/router.py +++ b/modules/attention/router.py @@ -13,6 +13,7 @@ from modules.attention.registry import AttentionBackend, AttentionCall, Platform class PlanEntry: backend: AttentionBackend call: AttentionCall + caps: frozenset[str] = frozenset() # the backend's declared caps, narrowed to what prepare verified in the installed implementation @dataclass(frozen=True) @@ -50,7 +51,7 @@ def build_plan(labels, platform: Platform, original: AttentionCall, reg: Registr continue if call is None: continue - entry = PlanEntry(backend=backend, call=call) + entry = PlanEntry(backend=backend, call=call, caps=backend.caps & frozenset(getattr(call, 'caps', backend.caps))) if backend.terminal: terminal = entry else: @@ -69,7 +70,7 @@ def make_router(plan: Plan, observer: Callable | None = None, stage: Callable | def sdpa_router(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, scale=None, enable_gqa=False, **kwargs): for entry in entries: if entry.backend.constraints.accepts(query, key, value, attn_mask): - if stage is not None and 'block_mask' in entry.backend.caps: + if stage is not None and 'block_mask' in entry.caps: selection = stage(query, key, value, attn_mask, is_causal) if selection is not None: if observer is not None: @@ -112,7 +113,7 @@ def build_sparse_stage(plan: Plan): return None if not options.enabled: return None - capable = [entry.backend.name for entry in plan.entries if 'block_mask' in entry.backend.caps] + capable = [entry.backend.name for entry in plan.entries if 'block_mask' in entry.caps] if not capable: names = [backend.label for backend in default_registry.with_cap('block_mask')] log.warning(f'Sparse attention: enabled but no active backend consumes a block mask, enable one of {names} in sdp overrides; attention stays dense') @@ -158,7 +159,7 @@ def report() -> dict: 'enabled': options.enabled, 'budget': options.budget, 'gate': options.gate, - 'capable': [entry.backend.name for entry in plan.entries if 'block_mask' in entry.backend.caps] if plan is not None else [], + 'capable': [entry.backend.name for entry in plan.entries if 'block_mask' in entry.caps] if plan is not None else [], 'layout': {'source': layout.source, 'kinds': list(layout.kinds()), 'length': layout.length} if layout is not None else None, }, 'backend': plan.platform.backend if plan is not None else None, diff --git a/test/test-attention-router.py b/test/test-attention-router.py index d100e6168..fc0ff71fd 100644 --- a/test/test-attention-router.py +++ b/test/test-attention-router.py @@ -284,6 +284,40 @@ def test_prepare_failure_skips_backend(): return True +def test_prepared_call_narrows_caps(): + # a backend declares what it can consume; prepare may narrow that to what the installed + # implementation verified, never widen it, and the router hands a selection only to survivors + reg = attention.Registry() + + def add(name, declared, verified=None): + def prepare(platform, original): # pylint: disable=unused-argument + def call(*args, **kwargs): # pylint: disable=unused-argument + return name + if verified is not None: + call.caps = verified + return call + reg.register(attention.AttentionBackend(name=name, label=f'{name} attention', priority=10, prepare=prepare, caps=declared)) + + add('declared', frozenset({'block_mask'})) + add('narrowed', frozenset({'block_mask'}), frozenset()) + add('widened', frozenset(), frozenset({'block_mask'})) + platform = attention.Platform(backend='cuda') + plan = attention.build_plan(['declared attention', 'narrowed attention', 'widened attention'], platform, sdpa_stub, reg) + caps = {entry.backend.name: entry.caps for entry in plan.entries} + assert caps == {'declared': frozenset({'block_mask'}), 'narrowed': frozenset(), 'widened': frozenset()}, caps + q = shaped((1, 8, 1024, 64)) + calls = [] + + def stage(*args): # pylint: disable=unused-argument + calls.append('stage') + return 'selection' + router = attention_router.make_router(attention.build_plan(['narrowed attention'], platform, sdpa_stub, reg), stage=stage) + assert router(q, q, q) == 'narrowed' and not calls, calls + router = attention_router.make_router(attention.build_plan(['declared attention'], platform, sdpa_stub, reg), stage=stage) + assert router(q, q, q) == 'declared' and calls == ['stage'], calls + return True + + def test_install_router_keeps_original_for_empty_plan(): saved = torch.nn.functional.scaled_dot_product_attention saved_plan = attention_router.current_plan @@ -515,6 +549,7 @@ def run_all(): test_choices_match_backends, test_router_dispatch_prefers_priority_then_terminal_then_original, test_prepare_failure_skips_backend, + test_prepared_call_narrows_caps, test_install_router_keeps_original_for_empty_plan, test_dynamic_backend_pins_pre_dynamic_sdpa, ]: diff --git a/test/test-attention-sdnq-sparse.py b/test/test-attention-sdnq-sparse.py new file mode 100644 index 000000000..c6995aabf --- /dev/null +++ b/test/test-attention-sdnq-sparse.py @@ -0,0 +1,696 @@ +#!/usr/bin/env python +""" +Offline tests for the block mask input of the sdnq Triton attention kernel. + +Covers: + +- the kernel contract through the raw triton op, which takes the per query block count and + ascending index list of kept kv blocks that get_block_mask_input builds from the int8 mask: a + block mask is within one ulp of the same kernel fed the token-expanded dense mask, over a ragged + tail with sub tiles past the end of the sequence, GQA, batch and head broadcasts, the contiguous padded list contract + and an empty block row; bitwise against no mask with every block kept, and bitwise against the + token mask when both arms carry one. The token-mask path has its own -inf-safe softmax + update, which the compiler rounds differently by up to one ulp depending on tile and dtype; the + block path shares the dense arithmetic, which the all-ones row proves +- the launcher's validation of the block mask +- the nesting filter: prune_configs keeps only tiles that sit inside one mask block and raises, + naming the env vars, when none do +- the public entry: sdnq_triton_atten(block_mask=...) on the quantized paths, under the same one + ulp and all-ones rules, bool and 3d masks normalized, and the backward entry refusing a block + mask; these rows skip until the entry accepts block_mask +- the flex consumer and the kernel fed one BlockSelection both sit within tolerance of fp32 sdpa + on the same tiles + +Bitwise rows need the autotuner pinned to one config: the two arms have different autotune keys, +and a different tile changes the accumulation order. A single run pins 64x32 unless the +SDNQ_TRITON_ATTEN_*_LIST env says otherwise, and the last row asserts the pin left the autotuner +exactly one config. --tiles runs the file once per tile pair in a subprocess, which is also what +proves every candidate tile nests the 128x64 block: a tile that did not would fail the kernel's +static_assert at compile time. + +Usage: + python test/test-attention-sdnq-sparse.py + python test/test-attention-sdnq-sparse.py --tiles +""" + +import os +import sys +import inspect + +TILES = [(32, 16), (32, 32), (32, 64), (64, 16), (64, 32), (64, 64), (128, 16), (128, 32), (128, 64)] +PIN = { + 'SDNQ_TRITON_ATTEN_BLOCK_SIZE_M_LIST': '64', + 'SDNQ_TRITON_ATTEN_BLOCK_SIZE_N_LIST': '32', + 'SDNQ_TRITON_ATTEN_NUM_WARPS_LIST': '4', + 'SDNQ_TRITON_ATTEN_NUM_STAGES_LIST': '1', +} + + +def run_tiles() -> bool: + import subprocess + ok = True + for block_m, block_n in TILES: + env = dict(os.environ, **PIN) + env['SDNQ_TRITON_ATTEN_BLOCK_SIZE_M_LIST'] = str(block_m) + env['SDNQ_TRITON_ATTEN_BLOCK_SIZE_N_LIST'] = str(block_n) + print(f'=== tile {block_m}x{block_n} ===', flush=True) + code = subprocess.call([sys.executable, os.path.abspath(__file__)], env=env) + print(f'=== tile {block_m}x{block_n}: {"PASS" if code == 0 else "FAIL"} ===', flush=True) + ok = ok and code == 0 + return ok + + +if __name__ == '__main__' and '--tiles' in sys.argv: + sys.exit(0 if run_tiles() else 1) + +for pin_name, pin_value in PIN.items(): + os.environ.setdefault(pin_name, pin_value) + + +def env_list(name: str) -> list[int]: + return [int(x) for x in os.environ[name].replace(' ', '').split(',')] + + +pinned = {name: env_list(name) for name in PIN} +if any(len(values) != 1 for values in pinned.values()): + print('this test needs the attention autotuner pinned to one config: set each SDNQ_TRITON_ATTEN_*_LIST to a single value', flush=True) + sys.exit(2) +block_size_m = pinned['SDNQ_TRITON_ATTEN_BLOCK_SIZE_M_LIST'][0] +block_size_n = pinned['SDNQ_TRITON_ATTEN_BLOCK_SIZE_N_LIST'][0] + +import torch # pylint: disable=wrong-import-position + +script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, script_dir) +os.chdir(script_dir) + +os.environ['SD_INSTALL_QUIET'] = '1' + +# Bootstrap cmd_args before any module that pulls in shared.py. +import modules.cmd_args # pylint: disable=wrong-import-position +import installer # pylint: disable=wrong-import-position +orig_argv = sys.argv +sys.argv = [sys.argv[0]] +try: + modules.cmd_args.parse_args() +finally: + sys.argv = orig_argv +installer.add_args(modules.cmd_args.parser) +modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) + +stock_sdpa = torch.nn.functional.scaled_dot_product_attention # captured before shared installs the configured hijacks + +from modules.errors import log # pylint: disable=wrong-import-position +from modules import shared # pylint: disable=wrong-import-position,unused-import +from modules.attention import sparse # pylint: disable=wrong-import-position +from modules.attention.sparse import flex as sparse_flex # pylint: disable=wrong-import-position +from sdnq.kernels import triton_atten as atten_module # pylint: disable=wrong-import-position +from sdnq.kernels import triton_atten_backward as backward_module # pylint: disable=wrong-import-position + + +results: dict[str, dict] = {} +device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu') +kernel_available = device.type == 'cuda' +int8_ok = block_size_n >= 32 # the int8 paths prune tiles narrower than 32, so a narrower pin cannot exercise them +BLOCK_M, BLOCK_N = 128, 64 + + +def category(name: str): + if name not in results: + results[name] = {'passed': 0, 'failed': 0, 'skipped': 0, 'tests': []} + return name + + +def record(cat: str, passed, name: str, detail: str = ''): + status = 'SKIP' if passed is None else ('PASS' if passed else 'FAIL') + key = {'SKIP': 'skipped', 'PASS': 'passed', 'FAIL': 'failed'}[status] + results[cat][key] += 1 + results[cat]['tests'].append((status, name)) + msg = f' {status}: {name}' + if detail: + msg += f' ({detail})' + (log.info if status != 'FAIL' else log.error)(msg) + + +def run_test(cat: str, fn): + name = fn.__name__ + try: + outcome = fn() + record(cat, None if outcome is None else bool(outcome), name) + except AssertionError as e: + record(cat, False, name, str(e)) + except Exception as e: # pylint: disable=broad-except + record(cat, False, name, f'exception: {e}') + import traceback + traceback.print_exc() + + +generator = torch.Generator(device=device).manual_seed(4321) + + +def randn(*shape, dtype=torch.bfloat16): + return torch.randn(*shape, generator=generator, device=device, dtype=torch.float32).to(dtype).contiguous() + + +def qkv(batch=2, heads=4, kv_heads=None, seq=1000, dim=64, dtype=torch.bfloat16): + kv_heads = kv_heads or heads + return randn(batch, heads, seq, dim, dtype=dtype), randn(batch, kv_heads, seq, dim, dtype=dtype), randn(batch, kv_heads, seq, dim, dtype=dtype) + + +def blocks(seq_q: int, seq_kv: int): + return sparse.selector.block_count(seq_q, BLOCK_M), sparse.selector.block_count(seq_kv, BLOCK_N) + + +def random_keep(batch: int, heads: int, seq_q: int, seq_kv: int, density: float = 0.4): + """A random block mask with the diagonal kept, so no row is empty unless a test empties it.""" + nq, nk = blocks(seq_q, seq_kv) + keep = torch.rand(batch, heads, nq, nk, generator=generator, device=device) < density + keep |= sparse.selector.diagonal_blocks(nq, nk, BLOCK_M, BLOCK_N, device) + return keep.to(torch.int8) + + +def expand(keep: torch.Tensor, seq_q: int, seq_kv: int): + """The token-granular int8 mask a block mask stands for.""" + return keep.repeat_interleave(BLOCK_M, dim=-2).repeat_interleave(BLOCK_N, dim=-1)[..., :seq_q, :seq_kv].contiguous() + + +def ordered(keep: torch.Tensor, batch: int, heads: int): + """The count and ascending index list per query block that the kernel walks, built the way the entry builds them: size-1 batch and head dims kept, padded to the descriptor chunks.""" + return atten_module.get_block_mask_input(keep, batch, heads) + + +def raw(q, k, v, attn_mask=None, block_mask=None, block_count=None, block_index=None): + """The triton op without the input prep: nothing is quantized, so the mask path is the only difference between arms.""" + if block_mask is not None: + block_count, block_index = ordered(block_mask, q.shape[0], q.shape[1]) + sparse = block_count is not None + return atten_module.sdnq_triton_atten_fwd( + q, k, v, None, None, None, + attn_mask=attn_mask, is_causal=False, sm_scale=q.shape[-1] ** -0.5, use_fp16_accum=False, out_dtype=q.dtype, + block_count=block_count, block_index=block_index, block_mask_m=BLOCK_M if sparse else 0, block_mask_n=BLOCK_N if sparse else 0, + ) + + +def entry_accepts_block_mask() -> bool: + return 'block_mask' in inspect.signature(inspect.unwrap(atten_module.sdnq_triton_atten)).parameters + + +def entry(q, k, v, **kwargs): + return atten_module.sdnq_triton_atten(q, k, v, **kwargs) + + +def configs_for(sizes_m, sizes_n): + import triton + return [triton.Config({'BLOCK_SIZE_M': m, 'BLOCK_SIZE_N': n}, num_warps=4, num_stages=1) for m in sizes_m for n in sizes_n] + + +def nests(conf) -> bool: + return BLOCK_M % conf.kwargs['BLOCK_SIZE_M'] == 0 and BLOCK_N % conf.kwargs['BLOCK_SIZE_N'] == 0 + + +def assert_one_ulp(got: torch.Tensor, want: torch.Tensor, label: str = ''): + """Within one unit in the last place at each element, plus an absolute floor for the drift between the two rounding sequences (a straddled rounding of one p before the pv dot, amplified on rows with few keys), two orders below what a mis-skipped tile moves.""" + if torch.equal(got, want): + return + eps = torch.finfo(got.dtype).eps + atol = want.float().abs().max().item() * 2**-10 + if not torch.allclose(got.float(), want.float(), rtol=eps, atol=atol): + gap = (got.float() - want.float()).abs() + raise AssertionError(f'{label} max diff {gap.max().item():.3e} over {int((got != want).sum().item())} elements, bound one ulp plus {atol:.1e}') + + +# ============================================================ +# Kernel contract +# ============================================================ + +def test_block_mask_matches_the_expanded_token_mask(): + if not kernel_available: + return None + for seq in (1000, 970): # 970 leaves the last block with sub tiles past the end of the sequence under the narrower tiles + q, k, v = qkv(seq=seq) + keep = random_keep(2, 4, seq, seq) + got = raw(q, k, v, block_mask=keep) + assert_one_ulp(got, raw(q, k, v, attn_mask=expand(keep, seq, seq)), f'seq {seq}') + assert torch.isfinite(got).all() + assert not torch.equal(got, raw(q, k, v)), 'a 40 percent block mask left the output identical to dense: the mask is not applied' + return True + + +def test_gqa_block_mask_indexes_query_heads(): + if not kernel_available: + return None + q, k, v = qkv(heads=8, kv_heads=2) + for heads in (8, 1): + keep = random_keep(2, heads, 1000, 1000) + assert_one_ulp(raw(q, k, v, block_mask=keep), raw(q, k, v, attn_mask=expand(keep, 1000, 1000)), f'mask heads {heads}') + return True + + +def test_block_mask_broadcasts_over_batch_and_heads(): + if not kernel_available: + return None + q, k, v = qkv(batch=3, heads=4) + for batch, heads in ((1, 1), (1, 4), (3, 1)): + keep = random_keep(batch, heads, 1000, 1000) + assert_one_ulp(raw(q, k, v, block_mask=keep), raw(q, k, v, attn_mask=expand(keep, 1000, 1000)), f'mask shape {tuple(keep.shape)}') + return True + + +def test_block_lists_must_be_contiguous_and_padded(): + """The kernel reads the lists through descriptors from shapes alone, so the launcher takes only what the entry builds.""" + if not kernel_available: + return None + q, k, v = qkv(seq=1100) # 9 query blocks and 18 kv blocks, so both lists get padded (to 12 and 32) + keep = random_keep(2, 4, 1100, 1100) + count, index = ordered(keep, 2, 4) + nq, nk = blocks(1100, 1100) + assert count.is_contiguous() and index.is_contiguous() + assert count.shape[-1] % atten_module.block_count_chunk == 0 and index.shape[-1] % atten_module.block_index_chunk == 0 + assert count.shape[-1] > nq and index.shape[-2] == nq and index.shape[-1] > nk, 'this geometry should pad both lists' + assert torch.equal(count[..., :nq], keep.sum(-1, dtype=torch.int32)), 'padding changed the counts' + reference = raw(q, k, v, block_count=count, block_index=index) + count_view = count.transpose(-1, -2).contiguous().transpose(-1, -2) + index_view = index.transpose(-1, -2).contiguous().transpose(-1, -2) + unpadded_count = count[..., :nq].contiguous() + unpadded_index = index[..., :nk].contiguous() + rejected = ( + ('a strided count', {'block_count': count_view, 'block_index': index}), + ('a strided index', {'block_count': count, 'block_index': index_view}), + ('an unpadded count', {'block_count': unpadded_count, 'block_index': index}), + ('an unpadded index', {'block_count': count, 'block_index': unpadded_index}), + ) + for label, lists in rejected: + try: + raw(q, k, v, **lists) + except ValueError: + continue + raise AssertionError(f'{label} was accepted') + assert torch.equal(raw(q, k, v, block_mask=keep), reference) + shared_keep = keep[:1, :1] + shared_count, shared_index = ordered(shared_keep, 2, 4) + assert tuple(shared_count.shape[:2]) == (1, 1) and tuple(shared_index.shape[:2]) == (1, 1), 'size-1 batch and head dims stay as given, the kernel broadcasts by shape' + assert torch.equal(raw(q, k, v, block_count=shared_count, block_index=shared_index), raw(q, k, v, block_mask=shared_keep.expand(2, 4, -1, -1).contiguous())) + return True + + +def test_empty_block_row_gives_zeros_without_nan(): + if not kernel_available: + return None + q, k, v = qkv() + keep = random_keep(2, 4, 1000, 1000) + keep[..., 2, :] = 0 + got = raw(q, k, v, block_mask=keep) + assert_one_ulp(got, raw(q, k, v, attn_mask=expand(keep, 1000, 1000))) + assert torch.isfinite(got).all() + assert got[..., 256:384, :].abs().max().item() == 0.0, 'an empty block row should give zeros' + assert got[..., :256, :].abs().max().item() > 0.0 + return True + + +def test_block_mask_composes_with_a_token_mask(): + if not kernel_available: + return None + q, k, v = qkv() + keep = random_keep(2, 4, 1000, 1000) + padding = torch.ones(2, 1, 1000, 1000, dtype=torch.int8, device=device) + padding[..., -37:] = 0 # the last keys are padding, as a packed sequence with a tail would have + got = raw(q, k, v, attn_mask=padding, block_mask=keep) + want = raw(q, k, v, attn_mask=(padding.bool() & expand(keep, 1000, 1000).bool()).to(torch.int8)) + assert torch.equal(got, want), 'both arms carry a token mask, so this one is bitwise' # pylint: disable=line-too-long + assert not torch.equal(got, raw(q, k, v, block_mask=keep)), 'the token mask was ignored beside the block mask' + return True + + +def same_arithmetic(got: torch.Tensor, want: torch.Tensor, label: str): + """Every block kept against no mask: the same tiles in the same order, so any gap is compiler scheduling of a loop with a runtime trip count; report whether it was bitwise and bound it either way.""" + bitwise = torch.equal(got, want) + if not bitwise: + gap = (got.float() - want.float()).abs() + log.info(f' {label}: all-ones differs from dense by {gap.max().item():.3e} over {int((got != want).sum().item())} elements (compiler scheduling, not tiles)') + assert_one_ulp(got, want, label) + return bitwise + + +def test_all_ones_block_mask_matches_no_mask(): + if not kernel_available: + return None + q, k, v = qkv() + nq, nk = blocks(1000, 1000) + ones = torch.ones(1, 1, nq, nk, dtype=torch.int8, device=device) + same_arithmetic(raw(q, k, v, block_mask=ones), raw(q, k, v), 'raw bf16') + return True + + +def test_sub_tile_past_the_sequence_is_masked(): + """992 divides every kernel tile but not the 64-wide mask block, so the last block's trailing sub tile sits entirely past the keys. + + Without a tail rule that knows the block geometry it loads zeros, scores them as zero and inflates the softmax denominator. + """ + if not kernel_available: + return None + seq = 992 + assert seq % block_size_n == 0 or seq % BLOCK_N != 0, 'this row needs a sequence the tile divides and the mask block does not' + q, k, v = qkv(seq=seq) + nq, nk = blocks(seq, seq) + assert nk * BLOCK_N > seq, 'the last mask block should run past the sequence' + ones = torch.ones(1, 1, nq, nk, dtype=torch.int8, device=device) + assert_one_ulp(raw(q, k, v, block_mask=ones), raw(q, k, v), f'seq {seq}, every block kept') + keep = random_keep(2, 4, seq, seq) + assert_one_ulp(raw(q, k, v, block_mask=keep), raw(q, k, v, attn_mask=expand(keep, seq, seq)), f'seq {seq}, 40 percent kept') + return True + + +def test_launcher_validates_the_block_lists(): + if not kernel_available: + return None + q, k, v = qkv() + ones = torch.ones(1, 1, *blocks(1000, 1000), dtype=torch.int8, device=device) + count, index = ordered(ones, 2, 4) + wide_count, wide_index = ordered(ones.expand(5, 4, -1, -1).contiguous(), 5, 4) + bad = ( + ('a count without an index', {'block_count': count}), + ('an index without a count', {'block_index': index}), + ('an int8 index', {'block_count': count, 'block_index': index.to(torch.int8)}), + ('a 3d index', {'block_count': count, 'block_index': index[0]}), + ('a short index', {'block_count': count, 'block_index': index[..., :-1].contiguous()}), + ('a wrong batch', {'block_count': wide_count, 'block_index': wide_index}), + ) + for label, lists in bad: + try: + raw(q, k, v, **lists) + except ValueError: + continue + raise AssertionError(f'{label} was accepted') + try: + atten_module.sdnq_triton_atten_fwd(q, k, v, None, None, None, sm_scale=0.125, out_dtype=q.dtype, block_count=count, block_index=index, block_mask_m=0, block_mask_n=0) + except ValueError: + return True + raise AssertionError('block lists without block sizes were accepted') + + +# ============================================================ +# Autotune nesting +# ============================================================ + +def test_nesting_filter_keeps_only_nesting_tiles(): + configs = configs_for((32, 64, 128, 256), (16, 32, 64, 128)) + args = {'do_block_mask': 1, 'BLOCK_MASK_M': BLOCK_M, 'BLOCK_MASK_N': BLOCK_N} + kept = atten_module.nest_block_mask_configs(configs, args) + assert {(c.kwargs['BLOCK_SIZE_M'], c.kwargs['BLOCK_SIZE_N']) for c in kept} == {(m, n) for m in (32, 64, 128) for n in (16, 32, 64)} + assert atten_module.nest_block_mask_configs(configs, {'do_block_mask': 0}) is configs + assert atten_module.nest_block_mask_configs(configs, {}) is configs + try: + atten_module.nest_block_mask_configs(configs_for((256,), (128,)), args) + except ValueError as e: + assert 'SDNQ_TRITON_ATTEN_BLOCK_SIZE_M_LIST' in str(e), e + return True + raise AssertionError('a tile list with nothing nesting did not raise') + + +def test_prune_configs_applies_the_filter(): + if not kernel_available: + return None + q, k, v = qkv() + args = { + 'q_ptr': q, 'k_ptr': k, 'v_ptr': v, 'out_ptr': q, + 'QN': 1000, 'KN': 1000, 'QHD': 64, 'KHD': 64, 'VHD': 64, + 'is_causal': 0, 'do_block_mask': 1, 'BLOCK_MASK_M': BLOCK_M, 'BLOCK_MASK_N': BLOCK_N, + } + with_mask = atten_module.prune_configs(configs_for((32, 64, 128, 256), (16, 32, 64, 128)), args) + without = atten_module.prune_configs(configs_for((32, 64, 128, 256), (16, 32, 64, 128)), dict(args, do_block_mask=0)) + assert with_mask, 'nothing survived' + assert [c.kwargs for c in with_mask] == [c.kwargs for c in without if nests(c)], ([c.kwargs for c in with_mask], [c.kwargs for c in without]) + return True + + +# ============================================================ +# Public entry +# ============================================================ + +def entry_rows_ready() -> bool: + return kernel_available and entry_accepts_block_mask() + + +def entry_rows(q, k, v, keep, **kwargs) -> bool: + """The block arm within one ulp of the token mask, applied at all, and bitwise the dense path with every block kept.""" + seq_q, seq_kv = q.shape[-2], k.shape[-2] + got = entry(q, k, v, block_mask=keep, block_mask_m=BLOCK_M, block_mask_n=BLOCK_N, **kwargs) + assert_one_ulp(got, entry(q, k, v, attn_mask=expand(keep, seq_q, seq_kv).bool(), **kwargs)) + dense = entry(q, k, v, **kwargs) + assert not torch.equal(got, dense), 'the block mask is not applied' + nq, nk = blocks(seq_q, seq_kv) + ones = torch.ones(1, 1, nq, nk, dtype=torch.int8, device=device) + same_arithmetic(entry(q, k, v, block_mask=ones, block_mask_m=BLOCK_M, block_mask_n=BLOCK_N, **kwargs), dense, f'entry {kwargs.get("matmul_dtype", "int8")}') + return True + + +def test_entry_int8_block_mask(): + if not entry_rows_ready() or not int8_ok: + return None + q, k, v = qkv() + return entry_rows(q, k, v, random_keep(2, 4, 1000, 1000), matmul_dtype='int8') + + +def test_entry_int8_pv_block_mask(): + if not entry_rows_ready() or not int8_ok: + return None + q, k, v = qkv() + return entry_rows(q, k, v, random_keep(2, 4, 1000, 1000), matmul_dtype='int8', pv_matmul_dtype='int8') + + +def test_entry_fp16_accum_block_mask(): + if not entry_rows_ready(): + return None + q, k, v = qkv(dtype=torch.float16) + return entry_rows(q, k, v, random_keep(2, 4, 1000, 1000), matmul_dtype='float16', pv_matmul_dtype='float16', use_fp16_accum=True) + + +def test_entry_normalizes_bool_and_3d_block_masks(): + if not entry_rows_ready(): + return None + q, k, v = qkv(batch=1) + keep = random_keep(1, 4, 1000, 1000) + want = entry(q, k, v, block_mask=keep, block_mask_m=BLOCK_M, block_mask_n=BLOCK_N, do_quantize=False) + assert torch.equal(entry(q, k, v, block_mask=keep.bool(), block_mask_m=BLOCK_M, block_mask_n=BLOCK_N, do_quantize=False), want), 'bool' + assert torch.equal(entry(q, k, v, block_mask=keep[0], block_mask_m=BLOCK_M, block_mask_n=BLOCK_N, do_quantize=False), want), '3d' + return True + + +# ============================================================ +# Backward +# ============================================================ + +def backward_available() -> bool: + return kernel_available and 'block_mask' in inspect.signature(backward_module.sdnq_triton_atten_with_backward).parameters + + +def upstream_grad(shape, seed=17): + """The same upstream gradient for every arm: two arms fed different ones are not comparable at all.""" + return torch.randn(shape, generator=torch.Generator(device=device).manual_seed(seed), device=device, dtype=torch.float32) + + +def grads(q, k, v, upstream=None, **kwargs): + """dq, dk and dv for one attention call through the kernel's autograd function.""" + q, k, v = q.detach().clone().requires_grad_(True), k.detach().clone().requires_grad_(True), v.detach().clone().requires_grad_(True) + out = backward_module.sdnq_triton_atten_with_backward(q, k, v, **kwargs) + if upstream is None: + upstream = upstream_grad(out.shape) + out.backward(upstream.to(out.dtype)) + return q.grad, k.grad, v.grad + + +def test_backward_matches_the_expanded_token_mask(): + """The load-bearing row: the same selection through the block lists and through a token mask has to give the same gradients.""" + if not backward_available(): + return None + seq = 1000 + q, k, v = qkv(seq=seq) + keep = random_keep(2, 4, seq, seq) + block = grads(q, k, v, block_mask=keep, block_mask_m=BLOCK_M, block_mask_n=BLOCK_N, do_quantize=False) + token = grads(q, k, v, attn_mask=expand(keep, seq, seq).bool(), do_quantize=False) + dense = grads(q, k, v, do_quantize=False) + for name, got, want, other in zip(('dq', 'dk', 'dv'), block, token, dense): + assert got is not None and torch.isfinite(got).all(), f'{name} is not finite' + assert_one_ulp(got, want, name) + assert not torch.equal(got, other), f'{name} matches the dense gradient, so the mask never reached the backward' + return True + + +def test_backward_gqa_and_int8(): + """GQA sends every query head's selection into one kv head's gradient, and the quantized path is the one that ships.""" + if not backward_available(): + return None + seq = 1000 + q, k, v = qkv(heads=4, kv_heads=2, seq=seq) + keep = random_keep(2, 4, seq, seq) + for label, kwargs in (('bf16', {'do_quantize': False}), ('int8', {'matmul_dtype': 'int8'})): + if label == 'int8' and not int8_ok: + continue + block = grads(q, k, v, block_mask=keep, block_mask_m=BLOCK_M, block_mask_n=BLOCK_N, **kwargs) + token = grads(q, k, v, attn_mask=expand(keep, seq, seq).bool(), **kwargs) + for name, got, want in zip(('dq', 'dk', 'dv'), block, token): + assert_one_ulp(got, want, f'{label} {name}') + return True + + +def test_backward_zeroes_dropped_blocks(): + """A query block that keeps nothing gets no gradient, and a kv block no query block kept gets none either.""" + if not backward_available(): + return None + seq = 1000 + q, k, v = qkv(seq=seq) + keep = random_keep(2, 4, seq, seq) + keep[..., 2, :] = 0 # query block 2 attends to nothing + keep[..., :, 5] = 0 # kv block 5 is attended by nothing + dq, dk, dv = grads(q, k, v, block_mask=keep, block_mask_m=BLOCK_M, block_mask_n=BLOCK_N, do_quantize=False) + assert torch.isfinite(dq).all() and torch.isfinite(dk).all() and torch.isfinite(dv).all() + assert dq[..., 2 * BLOCK_M:3 * BLOCK_M, :].abs().max().item() == 0.0, 'an empty query block still got a gradient' + assert dq[..., :BLOCK_M, :].abs().max().item() > 0.0 + assert dk[..., 5 * BLOCK_N:6 * BLOCK_N, :].abs().max().item() == 0.0, 'a dropped kv block still got a key gradient' + assert dv[..., 5 * BLOCK_N:6 * BLOCK_N, :].abs().max().item() == 0.0, 'a dropped kv block still got a value gradient' + assert dk[..., :BLOCK_N, :].abs().max().item() > 0.0 + return True + + +def test_backward_matches_fp32_autograd(): + """Against truth rather than against the other masked path: torch's own gradients through fp32 sdpa on the same selection. + + Run in fp32, where the kernel sits within 0.1 percent of autograd; in bf16 the dense backward is already 1.8 percent + out, so a bf16 arm could only carry a bound too loose to catch a mis-walked block. Head dim 32 keeps fp32 inside the + shared memory the widest pinned tile has, which fp32 at head dim 64 exceeds on the dense backward too. + """ + if not backward_available(): + return None + seq, dim = 1000, 32 + q, k, v = (t.float().contiguous() for t in qkv(batch=1, heads=4, seq=seq, dim=dim)) + keep = random_keep(1, 4, seq, seq) + upstream = upstream_grad((1, 4, seq, dim)) + reference = [t.detach().clone().requires_grad_(True) for t in (q, k, v)] + stock_sdpa(*reference, attn_mask=expand(keep, seq, seq).bool()).backward(upstream) + got = grads(q, k, v, upstream=upstream, block_mask=keep, block_mask_m=BLOCK_M, block_mask_n=BLOCK_N, do_quantize=False) + for name, mine, want in zip(('dq', 'dk', 'dv'), got, reference): + scale = want.grad.abs().max().item() + gap = (mine.float() - want.grad).abs().max().item() + log.info(f' {name}: {100 * gap / scale:.3f} percent of the gradient scale against fp32 autograd') + assert gap < 5e-3 * scale, f'{name} is {gap:.3e} off fp32 autograd, more than 0.5 percent of {scale:.3e}' + return True + + +def test_backward_ragged_sub_tile(): + """The transposed lists have the same ragged tail as the forward's: 992 divides the tile and not the mask block.""" + if not backward_available(): + return None + seq = 992 + q, k, v = qkv(seq=seq) + keep = random_keep(2, 4, seq, seq) + block = grads(q, k, v, block_mask=keep, block_mask_m=BLOCK_M, block_mask_n=BLOCK_N, do_quantize=False) + token = grads(q, k, v, attn_mask=expand(keep, seq, seq).bool(), do_quantize=False) + for name, got, want in zip(('dq', 'dk', 'dv'), block, token): + assert torch.isfinite(got).all(), f'{name} is not finite' + assert_one_ulp(got, want, f'seq {seq} {name}') + return True + + +# ============================================================ +# Consumers +# ============================================================ + +def test_kernel_and_flex_agree_on_one_selection(): + if not entry_rows_ready(): + return None + seq = 2048 + q, k, v = qkv(batch=1, heads=4, seq=seq) + selection = sparse.select_blocks(q, k, sparse.SparseSpec(budget=0.25)) + assert selection is not None + reference = stock_sdpa(q.float(), k.float(), v.float(), attn_mask=expand(selection.keep, seq, seq).bool()) + flex_gap = (sparse_flex.attend(q, k, v, selection).float() - reference).abs().max().item() + kernel_gap = (entry(q, k, v, block_mask=selection.keep, block_mask_m=selection.block_q, block_mask_n=selection.block_kv, do_quantize=False).float() - reference).abs().max().item() + log.info(f' gaps against fp32 sdpa on the same tiles: flex {flex_gap:.5f} kernel {kernel_gap:.5f}') + assert flex_gap < 1e-2 and kernel_gap < 1e-2, (flex_gap, kernel_gap) + return True + + +def test_the_pin_left_the_autotuner_one_config(): + # with one config the autotuner benchmarks nothing and prunes nothing, so both arms of every + # bitwise row compiled the same tile; the in-kernel static_assert is the nesting guard there + configs = [conf.kwargs for conf in atten_module.autotune_configs] + assert configs == [{'BLOCK_SIZE_M': block_size_m, 'BLOCK_SIZE_N': block_size_n}], f'the pin did not take: {configs}' + tuner_configs = [conf.kwargs for conf in getattr(atten_module.sdnq_attn_kernel, 'configs', [])] + assert tuner_configs == configs, f'the autotuner holds {tuner_configs}' + return True + + +def run_all(): + log.warning(f'Running sdnq block mask tests on {device}, tile pinned to {block_size_m}x{block_size_n}') + + log.warning('=== kernel contract ===') + cat = category('contract') + for fn in [ + test_block_mask_matches_the_expanded_token_mask, + test_gqa_block_mask_indexes_query_heads, + test_block_mask_broadcasts_over_batch_and_heads, + test_block_lists_must_be_contiguous_and_padded, + test_empty_block_row_gives_zeros_without_nan, + test_block_mask_composes_with_a_token_mask, + test_all_ones_block_mask_matches_no_mask, + test_sub_tile_past_the_sequence_is_masked, + test_launcher_validates_the_block_lists, + ]: + run_test(cat, fn) + + log.warning('=== autotune nesting ===') + cat = category('autotune') + for fn in [ + test_nesting_filter_keeps_only_nesting_tiles, + test_prune_configs_applies_the_filter, + ]: + run_test(cat, fn) + + log.warning('=== public entry ===') + cat = category('entry') + for fn in [ + test_entry_int8_block_mask, + test_entry_int8_pv_block_mask, + test_entry_fp16_accum_block_mask, + test_entry_normalizes_bool_and_3d_block_masks, + ]: + run_test(cat, fn) + + log.warning('=== backward ===') + cat = category('backward') + for fn in [ + test_backward_matches_the_expanded_token_mask, + test_backward_gqa_and_int8, + test_backward_zeroes_dropped_blocks, + test_backward_matches_fp32_autograd, + test_backward_ragged_sub_tile, + ]: + run_test(cat, fn) + + log.warning('=== consumers ===') + cat = category('consumers') + for fn in [ + test_kernel_and_flex_agree_on_one_selection, + test_the_pin_left_the_autotuner_one_config, + ]: + run_test(cat, fn) + + log.warning('=== Results ===') + total_passed = total_failed = total_skipped = 0 + for cat_name, info in results.items(): + ok = info['failed'] == 0 + log.info(f" {cat_name}: {info['passed']} passed, {info['failed']} failed, {info['skipped']} skipped [{'PASS' if ok else 'FAIL'}]") + total_passed += info['passed'] + total_failed += info['failed'] + total_skipped += info['skipped'] + log.warning(f'Total: {total_passed} passed, {total_failed} failed, {total_skipped} skipped') + return total_failed == 0 + + +if __name__ == '__main__': + import time + t0 = time.time() + ok = run_all() + torch.nn.functional.scaled_dot_product_attention = stock_sdpa + log.warning(f'Total time: {time.time() - t0:.2f}s') + sys.exit(0 if ok else 1) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index bc2fbd5b3..eed3b9616 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -1471,7 +1471,7 @@ {"id":"","label":"SDNQ Attention PV MatMul type","localized":"","hint":"Precision the probability-value matmul is computed in, the second of the two matmuls in attention. Choices match SDNQ Attention MatMul type.

Quantizing this one as well takes out the floating point work the first setting leaves behind, and it is the more delicate of the two: its inputs are already normalized probabilities, and the small ones among them carry the fine detail.
disabled keeps this matmul in the model's own precision.

Default disabled.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention Hadamard Group Size","localized":"","hint":"Width of the Hadamard rotation in channels. Wider groups mix more channels together and spread outliers further.

Clamped to the head dimension of the running model, rounded down to a power of two that divides it. On a model with 64 or 128 channels per head the upper part of this range resolves to that head dimension rather than to the number shown. Rotation is skipped below 4.
Applies while SDNQ Attention use Hadamard is enabled.

Default 256.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention Quantize FP32","localized":"","hint":"Upcasts queries, keys and values to fp32 for the quantization step, meaning the mean subtraction, scale and rounding that produce the low precision operands. The matmuls themselves are unaffected, and the kernel applies the scales in fp32 either way.
Turned off, that arithmetic runs in the model's own precision. bf16 carries eight mantissa bits, so a scale derived in it is coarser than one derived in fp32, and SDNQ Attention use Smooth K loses the most from it, since a mean across the whole sequence is exactly the kind of sum that wants the extra bits.

Whether the upcast costs anything depends on how the GPU runs fp32 vector work against fp16 and bf16. NVIDIA and AMD run them at the same rate here, so there is nothing to save; Intel runs fp32 slower and takes a noticeable hit.

Enabled by default.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention","localized":"","hint":"Attention is computed on a subset of key tiles instead of all of them, which lowers cost on long sequences. Requires an attention backend that accepts a block mask, currently Flex attention in SDP overrides. Below the minimum sequence the setting stays inactive and attention is dense.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention","localized":"","hint":"Attention is computed on a subset of key tiles instead of all of them, which lowers cost on long sequences. Requires an attention backend that accepts a block mask, SDNQ attention or Flex attention in SDP overrides. Below the minimum sequence the setting stays inactive and attention is dense.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention KV budget","localized":"","hint":"Percentage of the eligible key tiles each query tile keeps. Lower budgets are faster and coarser. Text, conditioning and audio tokens are always kept, as are the tiles on the diagonal, so the budget applies only to the bulk image or video tokens.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention minimum sequence","localized":"","hint":"Shortest sequence that is sparsified. Below it attention stays dense, because the selection costs more than it saves. 0 uses the built in threshold.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention dense steps","localized":"","hint":"Number of steps at the start and end of sampling that receive a larger budget, where composition and detail are set. 0 applies one budget to every step.","ui":"settings_cuda"}, From a2a54de452dfad299a59b4ab03a2234bbfa30d98 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 23 Aug 2026 05:41:51 +0100 Subject: [PATCH 048/270] feat(attention): trace contiguity and count calls per route A strided query or key changes what a backend's input prep costs, so the route trace records it and keeps strided and contiguous calls as separate routes. The trace also counts calls per route and logs the counts when a generation ends, so a per-step cost can be divided by the number of calls that paid it. --- modules/attention/context.py | 2 ++ modules/attention/debug.py | 27 ++++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/modules/attention/context.py b/modules/attention/context.py index 84ca259aa..857f8bf9c 100644 --- a/modules/attention/context.py +++ b/modules/attention/context.py @@ -64,11 +64,13 @@ def set_layout(layout) -> None: def end() -> None: + from modules.attention import debug current.active = False current.role = None current.model_key = None current.layout = None new_pass(0) + debug.end_generation() def set_role(name: str | None) -> None: diff --git a/modules/attention/debug.py b/modules/attention/debug.py index 0b69ed76b..3f200c263 100644 --- a/modules/attention/debug.py +++ b/modules/attention/debug.py @@ -6,16 +6,37 @@ from modules.attention import context enabled = os.environ.get('SD_ATTN_DEBUG', None) is not None seen: set[tuple] = set() +counts: dict[tuple, int] = {} def observe(name: str, query: torch.Tensor, key: torch.Tensor, attn_mask: torch.Tensor | None) -> None: - """Log each distinct route once: backend, component role, step, shapes, dtype and mask presence.""" - signature = (name, context.current.role, tuple(query.shape), tuple(key.shape), str(query.dtype), attn_mask is not None) + """Log each distinct route once: backend, component role, step, shapes, dtype, mask presence and whether the inputs are contiguous; count every call.""" + contiguous = query.is_contiguous() and key.is_contiguous() + signature = (name, context.current.role, tuple(query.shape), tuple(key.shape), str(query.dtype), attn_mask is not None, contiguous) + counts[signature] = counts.get(signature, 0) + 1 if signature in seen: return seen.add(signature) - log.debug(f'Attention route: backend={name} role={context.current.role} step={context.current.step} q={list(query.shape)} k={list(key.shape)} dtype={query.dtype} mask={attn_mask is not None}') + log.debug(f'Attention route: backend={name} role={context.current.role} step={context.current.step} q={list(query.shape)} k={list(key.shape)} dtype={query.dtype} mask={attn_mask is not None} contiguous={contiguous}') + + +def summary() -> list[str]: + """One line per route with its call count since the last generation, busiest first.""" + lines = [] + for signature, count in sorted(counts.items(), key=lambda item: -item[1]): + name, role, q_shape, k_shape, dtype, masked, contiguous = signature + lines.append(f'backend={name} role={role} q={list(q_shape)} k={list(k_shape)} dtype={dtype} mask={masked} contiguous={contiguous} calls={count}') + return lines + + +def end_generation() -> None: + """Log the route counts of the generation that just ended and start the next count.""" + if enabled and counts: + for line in summary(): + log.debug(f'Attention routes: {line}') + counts.clear() def reset() -> None: seen.clear() + counts.clear() From b2a6d721589ffce80bb9722e9ac9294b0c82e390 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 23 Aug 2026 22:16:46 +0100 Subject: [PATCH 049/270] feat(attention): compose the block selection with a token mask The sparse stage declined every call carrying an attention mask, so a model that passes a padding mask stayed dense at every length. It now serves those calls when the serving backend declares `masked_block`: sdnq takes attn_mask and block_mask together, flex would need a mask_mod and does not. A backend that cannot compose says so once instead of skipping quietly. --- modules/attention/backends/sdnq.py | 2 +- modules/attention/registry.py | 2 +- modules/attention/router.py | 2 +- modules/attention/sparse/stage.py | 12 +++++++++--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/modules/attention/backends/sdnq.py b/modules/attention/backends/sdnq.py index 5a56835e1..3769da964 100644 --- a/modules/attention/backends/sdnq.py +++ b/modules/attention/backends/sdnq.py @@ -41,5 +41,5 @@ backend = AttentionBackend( name='sdnq', label='SDNQ attention', priority=60, prepare=prepare, constraints=Constraints(min_tokens=32, min_long_side=512, min_heads=2), # sequences of 512 or fewer are text encoders, single-head calls the vae options=('sdnq_attention_matmul_type', 'sdnq_attention_pv_matmul_type', 'sdnq_attention_smooth_k', 'sdnq_attention_use_hadamard', 'sdnq_attention_hadamard_group_size', 'sdnq_attention_quantize_fp32', 'sdnq_attention_use_fp16_accum'), - caps=frozenset({'block_mask'}), + caps=frozenset({'block_mask', 'masked_block'}), # the kernel takes attn_mask and block_mask together ) diff --git a/modules/attention/registry.py b/modules/attention/registry.py index 96879101d..69f9cc231 100644 --- a/modules/attention/registry.py +++ b/modules/attention/registry.py @@ -64,7 +64,7 @@ class AttentionBackend: terminal: bool = False # serves every call the entries decline, in place of the original sdpa platforms: frozenset[str] | None = None # devices backends the implementation exists for, None for all options: tuple[str, ...] = () # settings the prepared call captures; a change to one rebuilds the chain - caps: frozenset[str] = frozenset() # what the call can consume beyond plain sdpa arguments, currently 'block_mask' + caps: frozenset[str] = frozenset() # what the call can consume beyond plain sdpa arguments: 'block_mask', and 'masked_block' when it composes one with a token mask def available_on(self, platform: Platform) -> bool: return self.platforms is None or platform.backend in self.platforms diff --git a/modules/attention/router.py b/modules/attention/router.py index c1400de0a..6a58aa011 100644 --- a/modules/attention/router.py +++ b/modules/attention/router.py @@ -71,7 +71,7 @@ def make_router(plan: Plan, observer: Callable | None = None, stage: Callable | for entry in entries: if entry.backend.constraints.accepts(query, key, value, attn_mask): if stage is not None and 'block_mask' in entry.caps: - selection = stage(query, key, value, attn_mask, is_causal) + selection = stage(query, key, value, attn_mask, is_causal, entry.caps) if selection is not None: if observer is not None: observer(f'{entry.backend.name}+sparse', query, key, attn_mask) diff --git a/modules/attention/sparse/stage.py b/modules/attention/sparse/stage.py index 98eb85cea..d182e65d5 100644 --- a/modules/attention/sparse/stage.py +++ b/modules/attention/sparse/stage.py @@ -65,6 +65,7 @@ def make_stage(options: StageOptions): return None reported: set = set() inactive: set = set() + notified: set = set() cache: dict = {} static: dict = {} @@ -106,12 +107,17 @@ def make_stage(options: StageOptions): stage.last_skip = reason return None - def stage(query, key, value, attn_mask, is_causal): # pylint: disable=unused-argument + def stage(query, key, value, attn_mask, is_causal, caps=frozenset()): # pylint: disable=unused-argument state = context.current if state.role != 'transformer' or not state.active: return decline('not the denoiser') - if attn_mask is not None or is_causal: # flex would need a mask_mod to combine these; the quantized kernel composes them in R2 - return decline('masked or causal') + if is_causal: # the selection keeps the diagonal but encodes no causality + return decline('causal') + if attn_mask is not None and 'masked_block' not in caps: # flex would need a mask_mod to combine the two + if 'masked' not in notified: # an enabled setting that cannot act says so rather than doing nothing quietly + notified.add('masked') + log.info('Sparse attention: this model passes an attention mask and the serving backend cannot combine it with a block selection; attention stays dense') + return decline('masked') if query.device.type == 'cpu' or query.dim() != 4: return decline('unsupported tensor') seq_q, seq_kv = query.shape[-2], key.shape[-2] From a2e6535b93eef596582e4630b96112e53f85f31c Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 23 Aug 2026 22:16:58 +0100 Subject: [PATCH 050/270] feat(krea2): publish the packed token layout The transformer is the only site that knows every segment length, since the pad to a multiple of 256 happens there and the text stream is padded to a fixed 512 whatever the prompt. It now publishes the live runs of the mask, so the selector pins the conditioning dense and drops the padding instead of sparsifying the whole sequence. At 2048x2048 with a short prompt that is 6 of 264 key blocks per query row moved from pinned to dropped. --- modules/attention/sparse/__init__.py | 4 +-- modules/attention/sparse/layout.py | 16 ++++++++++ pipelines/krea2/transformer_krea2.py | 10 +++++++ test/test-attention-sparse.py | 44 ++++++++++++++++++++++++++-- 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/modules/attention/sparse/__init__.py b/modules/attention/sparse/__init__.py index 5d8efc1f1..f8d0cdf9b 100644 --- a/modules/attention/sparse/__init__.py +++ b/modules/attention/sparse/__init__.py @@ -1,8 +1,8 @@ """Block-sparse attention: the selector, the token layout it respects, and the consumers that apply it.""" from modules.attention.sparse.selector import BlockSelection, SparseSpec, block_count, radial_blocks, schedule, select_blocks -from modules.attention.sparse.layout import Span, TokenLayout, block_pins, layout_from_index_kwargs, layout_from_prefix, layout_from_segments +from modules.attention.sparse.layout import Span, TokenLayout, block_pins, layout_from_index_kwargs, layout_from_prefix, layout_from_segments, publish_segments, segments_from_live __all__ = [ 'BlockSelection', 'SparseSpec', 'block_count', 'radial_blocks', 'schedule', 'select_blocks', - 'Span', 'TokenLayout', 'block_pins', 'layout_from_index_kwargs', 'layout_from_prefix', 'layout_from_segments', + 'Span', 'TokenLayout', 'block_pins', 'layout_from_index_kwargs', 'layout_from_prefix', 'layout_from_segments', 'publish_segments', 'segments_from_live', ] diff --git a/modules/attention/sparse/layout.py b/modules/attention/sparse/layout.py index 7362c96d6..c6c3de813 100644 --- a/modules/attention/sparse/layout.py +++ b/modules/attention/sparse/layout.py @@ -83,6 +83,22 @@ def layout_from_segments(segments, length: int | None = None, source: str = 'seg return TokenLayout(spans=tuple(spans), length=length if length is not None else cursor, source=source) +def segments_from_live(live: torch.Tensor, kind: str, pad_kind: str = 'pad') -> list[tuple[str, int]]: + """Run length encode a boolean live mask into ordered (kind, count) pairs, the dead runs labelled as padding.""" + values = live.detach().to('cpu').bool() + if values.numel() == 0: + return [] + changes = (values[1:] != values[:-1]).nonzero().flatten().tolist() + bounds = [0, *[c + 1 for c in changes], values.numel()] + return [(kind if bool(values[bounds[i]]) else pad_kind, bounds[i + 1] - bounds[i]) for i in range(len(bounds) - 1)] + + +def publish_segments(segments, length: int | None = None, source: str = 'segments') -> None: + """Publish a layout from the site that packs the sequence, which is the only place the segment lengths are all known.""" + from modules.attention import context + context.set_layout(layout_from_segments(segments, length=length, source=source)) + + def layout_from_prefix(length: int, prefix: int) -> TokenLayout: """Fallback when nothing published a layout: treat a leading run as conditioning and sparsify the rest.""" return layout_from_segments([('text', prefix), ('image', length - prefix)], length=length, source='prefix') diff --git a/pipelines/krea2/transformer_krea2.py b/pipelines/krea2/transformer_krea2.py index 643d926ba..c09e4be84 100644 --- a/pipelines/krea2/transformer_krea2.py +++ b/pipelines/krea2/transformer_krea2.py @@ -342,6 +342,16 @@ class Krea2Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOri else: mask = None + from modules.attention.sparse import layout as sparse_layout # delayed, this module is also importable without the webui + if attention_mask is not None: + # the text stream is padded to a fixed length and the joint sequence to a multiple of 256, so the live + # runs are what the layout must report; a wholly padded key block is dropped rather than pinned + live = attention_mask.any(dim=0) + segments = sparse_layout.segments_from_live(live[:txtlen], "text") + sparse_layout.segments_from_live(live[txtlen:], "image") + else: + segments = [("text", txtlen), ("image", imglen)] + sparse_layout.publish_segments(segments, source="krea2") + freqs = self.posemb(position_ids) for block in self.blocks: diff --git a/test/test-attention-sparse.py b/test/test-attention-sparse.py index d78625da8..ddcf98316 100644 --- a/test/test-attention-sparse.py +++ b/test/test-attention-sparse.py @@ -242,6 +242,22 @@ def test_block_pins_pin_a_boundary_tile(): return True +def test_segments_from_live_splits_interior_padding(): + from modules.attention.sparse import layout as layout_mod + live = torch.zeros(512, dtype=torch.bool, device=device) + live[:40] = True + live[-8:] = True + segments = layout_mod.segments_from_live(live, 'text') + assert segments == [('text', 40), ('pad', 464), ('text', 8)], segments + token_layout = layout_mod.layout_from_segments(segments + [('image', 1024)]) + assert token_layout.length == 1536, token_layout.length + _, drops = layout_mod.block_pins(token_layout, 1536, 1536, 128, 64, device) + # only a key block that is padding all the way through is dropped, so the two straddling blocks survive + assert drops[..., 1:7].all(), 'whole padded key blocks are dropped' + assert not drops[..., 0].any() and not drops[..., 7].any(), 'a straddling block keeps its live tokens' + return True + + def test_block_pins_are_cached_per_geometry(): layout = sparse.layout_from_segments([('text', 128), ('video', 1024)]) first = sparse.block_pins(layout, 1152, 1152, 128, 64, device) @@ -369,8 +385,10 @@ def test_stage_gates(): def checks(): from modules.attention import context as ctx assert stage(q, k, v, None, False) is not None, 'an eligible call must be selected' - assert stage(q, k, v, torch.zeros(1, 1, 2048, 2048, dtype=torch.bool, device=device), False) is None, 'a masked call is not eligible yet' - assert stage(q, k, v, None, True) is None, 'a causal call is not eligible yet' + mask = torch.zeros(1, 1, 2048, 2048, dtype=torch.bool, device=device) + assert stage(q, k, v, mask, False) is None, 'a masked call needs a backend that composes the two' + assert stage(q, k, v, mask, False, frozenset({'masked_block'})) is not None, 'a composing backend takes the masked call' + assert stage(q, k, v, None, True) is None, 'a causal call is not eligible' assert stage(q, cross_k, cross_v, None, False) is None, 'cross attention is not eligible' assert stage(short_q, short_k, short_v, None, False) is None, 'below the gate attention stays dense' assert stage.last_skip == 'below the minimum sequence', stage.last_skip @@ -381,6 +399,26 @@ def test_stage_gates(): return with_context(checks) +def test_published_segments_reach_the_stage(): + from modules.attention.sparse import layout as layout_mod + from modules.attention.sparse import stage as stage_mod + from modules.attention import context as ctx + stage = stage_mod.make_stage(stage_options(budget=0.30)) + q, k, v = qkv(heads=2, seq=2048) + + def checks(): + layout_mod.publish_segments((('text', 256), ('image', 1536), ('pad', 256)), source='test') + published = ctx.current.layout + assert published.length == 2048 and published.source == 'test', published + assert published.kinds() == ('text', 'image', 'pad'), published.kinds() + selection = stage(q, k, v, None, False) + keep, block_kv = selection.keep, selection.block_kv + assert keep[..., :256 // block_kv].all(), 'conditioning key tiles stay dense' + assert not keep[..., 1792 // block_kv:].any(), 'padding key tiles are dropped' + return True + return with_context(checks) + + def test_stage_follows_the_step_schedule(): from modules.attention.sparse import stage as stage_mod from modules.attention import context as ctx @@ -440,6 +478,7 @@ def run_all(): test_block_pins_pin_conditioning_and_drop_padding, test_block_pins_pin_a_boundary_tile, test_block_pins_are_cached_per_geometry, + test_segments_from_live_splits_interior_padding, ]: run_test(cat, fn) @@ -461,6 +500,7 @@ def run_all(): test_stage_is_none_when_disabled_or_at_full_budget, test_stage_gates, test_stage_follows_the_step_schedule, + test_published_segments_reach_the_stage, test_stage_uses_a_published_layout_and_falls_back_without_one, ]: run_test(cat, fn) From fa8bf0b5cd4909c8d6fb0a7bf57226a43d692d62 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 23 Aug 2026 22:58:25 +0100 Subject: [PATCH 051/270] feat(attention): publish the token layout for classic pipelines Only the modular path had a per-forward kwargs hook, so a classic pipeline had no layout and the selector sparsified its whole sequence, prompt conditioning included. A denoiser pre-hook installed per generation now reads whichever convention the model uses: the *_indices tensors, or the txt_ids and img_ids a joint transformer is given. Packing order is not derivable from the call and differs between architectures, so only classes verified to pack text first publish; anything else falls back as before rather than pinning the wrong half of the sequence dense. --- modules/attention/context.py | 19 +++++++++++ modules/attention/sparse/__init__.py | 4 +-- modules/attention/sparse/layout.py | 24 +++++++++++++ test/test-attention-sparse.py | 51 ++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+), 2 deletions(-) diff --git a/modules/attention/context.py b/modules/attention/context.py index 857f8bf9c..71442e678 100644 --- a/modules/attention/context.py +++ b/modules/attention/context.py @@ -27,12 +27,31 @@ def denoiser_name(pipe) -> str | None: return None +def install_layout_hook(pipe) -> None: + """Let a classic pipeline's denoiser publish its own packing: the modular path has its own hook, this is the rest.""" + from modules import shared + if pipe is None or not getattr(shared.opts, 'sparse_attention_enabled', False): + return + module = getattr(pipe, 'transformer', None) + if module is None: + module = getattr(pipe, 'unet', None) + if module is None or getattr(module, 'sdnext_layout_hook', None) is not None or getattr(module, 'sdnext_state_hook', None) is not None: + return + from modules.attention.sparse import layout as sparse_layout + + def publish(denoiser, args, kwargs): # pylint: disable=unused-argument + set_layout(sparse_layout.layout_from_kwargs(kwargs, denoiser.__class__.__name__)) + + module.sdnext_layout_hook = module.register_forward_pre_hook(publish, with_kwargs=True) + + def begin(pipe, steps: int = 0) -> None: from modules import devices current.active = True current.role = 'transformer' current.layout = None current.model_key = (pipe.__class__.__name__, denoiser_name(pipe)) if pipe is not None else None + install_layout_hook(pipe) device = devices.device if devices.device is not None else torch.device('cpu') if current.step_buffer is None or current.step_buffer.device != device: current.step_buffer = torch.zeros((), dtype=torch.int64, device=device) diff --git a/modules/attention/sparse/__init__.py b/modules/attention/sparse/__init__.py index f8d0cdf9b..741692aa4 100644 --- a/modules/attention/sparse/__init__.py +++ b/modules/attention/sparse/__init__.py @@ -1,8 +1,8 @@ """Block-sparse attention: the selector, the token layout it respects, and the consumers that apply it.""" from modules.attention.sparse.selector import BlockSelection, SparseSpec, block_count, radial_blocks, schedule, select_blocks -from modules.attention.sparse.layout import Span, TokenLayout, block_pins, layout_from_index_kwargs, layout_from_prefix, layout_from_segments, publish_segments, segments_from_live +from modules.attention.sparse.layout import Span, TokenLayout, block_pins, layout_from_index_kwargs, layout_from_kwargs, layout_from_prefix, layout_from_segments, publish_segments, segments_from_live __all__ = [ 'BlockSelection', 'SparseSpec', 'block_count', 'radial_blocks', 'schedule', 'select_blocks', - 'Span', 'TokenLayout', 'block_pins', 'layout_from_index_kwargs', 'layout_from_prefix', 'layout_from_segments', 'publish_segments', 'segments_from_live', + 'Span', 'TokenLayout', 'block_pins', 'layout_from_index_kwargs', 'layout_from_kwargs', 'layout_from_prefix', 'layout_from_segments', 'publish_segments', 'segments_from_live', ] diff --git a/modules/attention/sparse/layout.py b/modules/attention/sparse/layout.py index c6c3de813..1f8eeac2e 100644 --- a/modules/attention/sparse/layout.py +++ b/modules/attention/sparse/layout.py @@ -71,6 +71,30 @@ def layout_from_index_kwargs(kwargs: dict, length: int | None = None) -> TokenLa return TokenLayout(spans=tuple(spans), length=length if length is not None else spans[-1].end, source='indices') +# how an architecture orders its joint sequence, which the call itself does not reveal. Verified against the +# diffusers transformers that take txt_ids and img_ids; HiDream packs image first and is deliberately absent, so +# it falls back rather than being pinned backwards. An unlisted class publishes nothing. +JOINT_TEXT_FIRST = frozenset({ + 'FluxTransformer2DModel', 'Flux2Transformer2DModel', 'ChromaTransformer2DModel', 'BriaTransformer2DModel', + 'BriaFiboTransformer2DModel', 'LongCatImageTransformer2DModel', 'OvisImageTransformer2DModel', +}) + + +def layout_from_stream_ids(kwargs: dict, cls_name: str | None) -> TokenLayout | None: + """Read the stream lengths off the rotary id tensors a joint transformer is given by name.""" + if cls_name not in JOINT_TEXT_FIRST: + return None + text, image = kwargs.get('txt_ids'), kwargs.get('img_ids') + if not torch.is_tensor(text) or not torch.is_tensor(image) or text.dim() < 2 or image.dim() < 2: + return None + return layout_from_segments((('text', text.shape[-2]), ('image', image.shape[-2])), source='stream-ids') + + +def layout_from_kwargs(kwargs: dict, cls_name: str | None = None) -> TokenLayout | None: + """Whatever the denoiser says about its own packing, by whichever convention it uses.""" + return layout_from_index_kwargs(kwargs or {}) or layout_from_stream_ids(kwargs or {}, cls_name) + + def layout_from_segments(segments, length: int | None = None, source: str = 'segments') -> TokenLayout: """Build a layout from ordered (kind, count) pairs, the form a transformer knows at its packing site.""" spans: list[Span] = [] diff --git a/test/test-attention-sparse.py b/test/test-attention-sparse.py index ddcf98316..59e571e18 100644 --- a/test/test-attention-sparse.py +++ b/test/test-attention-sparse.py @@ -258,6 +258,55 @@ def test_segments_from_live_splits_interior_padding(): return True +def test_layout_from_stream_ids_reads_the_joint_convention(): + from modules.attention.sparse import layout as layout_mod + flat = (torch.zeros(512, 3, device=device), torch.zeros(4096, 3, device=device)) # flux1 passes 2d ids + batched = (torch.zeros(1, 512, 4, device=device), torch.zeros(1, 4096, 4, device=device)) # flux2 passes 3d + for text, image in (flat, batched): + token_layout = layout_mod.layout_from_stream_ids({'txt_ids': text, 'img_ids': image}, 'FluxTransformer2DModel') + assert token_layout is not None and token_layout.length == 4608, token_layout + assert [(s.kind, s.start, s.end) for s in token_layout.spans] == [('text', 0, 512), ('image', 512, 4608)], token_layout.spans + # an architecture whose packing order is not verified publishes nothing rather than pinning the wrong half dense + assert layout_mod.layout_from_stream_ids({'txt_ids': flat[0], 'img_ids': flat[1]}, 'HiDreamImageTransformer2DModel') is None + assert layout_mod.layout_from_stream_ids({'txt_ids': flat[0], 'img_ids': flat[1]}, None) is None + assert layout_mod.layout_from_stream_ids({}, 'FluxTransformer2DModel') is None + indices = {'video_indices': torch.arange(0, 64, device=device), 'txt_ids': flat[0], 'img_ids': flat[1]} + assert layout_mod.layout_from_kwargs(indices, 'FluxTransformer2DModel').source == 'indices', 'the index form wins when both are present' + return True + + +def test_layout_hook_publishes_from_the_denoiser_kwargs(): + from modules.attention import context as ctx + + class FluxTransformer2DModel(torch.nn.Module): # the reader keys on the class name, so the fake carries a real one + def forward(self, hidden_states=None, txt_ids=None, img_ids=None): # pylint: disable=unused-argument + return hidden_states + + class Pipe: + def __init__(self, transformer): + self.transformer = transformer + + denoiser = FluxTransformer2DModel() + pipe = Pipe(denoiser) + previous = getattr(shared.opts, 'sparse_attention_enabled', False) + try: + shared.opts.data['sparse_attention_enabled'] = False + ctx.install_layout_hook(pipe) + assert getattr(denoiser, 'sdnext_layout_hook', None) is None, 'nothing is hooked while the feature is off' + shared.opts.data['sparse_attention_enabled'] = True + ctx.install_layout_hook(pipe) + ctx.install_layout_hook(pipe) + assert getattr(denoiser, 'sdnext_layout_hook', None) is not None, 'the denoiser is hooked once' + ctx.set_layout(None) + denoiser(hidden_states=torch.zeros(1, 4096, 4, device=device), txt_ids=torch.zeros(512, 3, device=device), img_ids=torch.zeros(4096, 3, device=device)) + published = ctx.current.layout + assert published is not None and published.length == 4608 and published.source == 'stream-ids', published + finally: + shared.opts.data['sparse_attention_enabled'] = previous + ctx.set_layout(None) + return True + + def test_block_pins_are_cached_per_geometry(): layout = sparse.layout_from_segments([('text', 128), ('video', 1024)]) first = sparse.block_pins(layout, 1152, 1152, 128, 64, device) @@ -479,6 +528,8 @@ def run_all(): test_block_pins_pin_a_boundary_tile, test_block_pins_are_cached_per_geometry, test_segments_from_live_splits_interior_padding, + test_layout_from_stream_ids_reads_the_joint_convention, + test_layout_hook_publishes_from_the_denoiser_kwargs, ]: run_test(cat, fn) From 96c28024d681565281753f7960f611e126214060 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 24 Aug 2026 01:04:20 +0100 Subject: [PATCH 052/270] fix(test): give the router test a hookable stand-in denoiser The classic tick test used a bare object as the pipeline's transformer, which context.begin hands to register_forward_pre_hook whenever sparse attention is enabled in the config. --- test/test-attention-router.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/test-attention-router.py b/test/test-attention-router.py index fc0ff71fd..0bf20e3c0 100644 --- a/test/test-attention-router.py +++ b/test/test-attention-router.py @@ -352,12 +352,15 @@ def test_dynamic_backend_pins_pre_dynamic_sdpa(): def test_context_classic_ticks_follow_the_callback(): ctx = attention.context + class Denoiser(torch.nn.Module): # begin installs the layout pre-hook, so the stand-in has to accept one + pass + class Pipe: - transformer = object() + transformer = Denoiser() ctx.begin(Pipe(), steps=4) assert ctx.current.active and ctx.current.role == 'transformer' and ctx.current.step == 0 and ctx.current.steps == 4 - assert ctx.current.model_key == ('Pipe', 'object'), ctx.current.model_key + assert ctx.current.model_key == ('Pipe', 'Denoiser'), ctx.current.model_key buffer = ctx.current.step_buffer for completed in range(4): ctx.tick(completed + 1) # the diffusers callback reports the step just completed From 9e9e2f45ed021937a467e6e05f813744b4a41ffb Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 24 Aug 2026 01:04:29 +0100 Subject: [PATCH 053/270] feat(xyz): add attention and sparse attention axes Fourteen axes drive the attention subsystem from the grid: the diffusers method, the sdp override chain, the dispatcher kernel, five sdnq attention knobs and six sparse settings. An axis writes shared.opts.data and rebuilds the chain itself, since the onchange for these settings runs through the queue lock a grid cell already holds. SharedSettingsStackHelper saves and restores every attention setting around the grid, keys an axis introduced included, and an axis for a setting a backend owns warns when that backend is not in the active chain. --- modules/attention/__init__.py | 4 +- modules/attention/dispatcher.py | 10 ++ scripts/xyz/xyz_grid_classes.py | 25 +++- scripts/xyz/xyz_grid_shared.py | 69 +++++++++ test/test-xyz-attention.py | 252 ++++++++++++++++++++++++++++++++ 5 files changed, 357 insertions(+), 3 deletions(-) create mode 100644 test/test-xyz-attention.py diff --git a/modules/attention/__init__.py b/modules/attention/__init__.py index 78994780c..8ae75345b 100644 --- a/modules/attention/__init__.py +++ b/modules/attention/__init__.py @@ -1,12 +1,12 @@ """Attention backends: one scaled_dot_product_attention router over the registered backends, the per-generation context, and the diffusers-side processor and dispatcher setup.""" from modules.attention.registry import AttentionBackend, AttentionCall, Constraints, Platform, Registry, registry from modules.attention.router import Plan, PlanEntry, build_plan, get_plan, install_router, reapply, reapply_options, report -from modules.attention.dispatcher import set_diffusers_attention, set_attention_dispatcher, hijack_kernels, get_kernel_hijack, get_hf_api_hijack +from modules.attention.dispatcher import set_diffusers_attention, set_attention_dispatcher, list_dispatcher_backends, hijack_kernels, get_kernel_hijack, get_hf_api_hijack from modules.attention import backends, context, debug __all__ = [ 'AttentionBackend', 'AttentionCall', 'Constraints', 'Platform', 'Registry', 'registry', 'Plan', 'PlanEntry', 'build_plan', 'get_plan', 'install_router', 'reapply', 'reapply_options', 'report', - 'set_diffusers_attention', 'set_attention_dispatcher', 'hijack_kernels', 'get_kernel_hijack', 'get_hf_api_hijack', + 'set_diffusers_attention', 'set_attention_dispatcher', 'list_dispatcher_backends', 'hijack_kernels', 'get_kernel_hijack', 'get_hf_api_hijack', 'backends', 'context', 'debug', ] diff --git a/modules/attention/dispatcher.py b/modules/attention/dispatcher.py index 19d58e99b..ea7466373 100644 --- a/modules/attention/dispatcher.py +++ b/modules/attention/dispatcher.py @@ -94,3 +94,13 @@ def set_attention_dispatcher(pipe): log.warning(f'Attention dispatcher: active={prev[0].value} list={backends} target={attn} not found') else: log.debug(f'Attention dispatcher: active={prev[0].value} list={backends}') + + +def list_dispatcher_backends() -> list: + """The kernels diffusers can dispatch attention to, for anything that offers hf_attention as a choice.""" + try: + from diffusers.models import attention_dispatch as a + return sorted(b.value for b in a._AttentionBackendRegistry.list_backends()) # pylint: disable=protected-access + except Exception as e: + log.error(f'Attention dispatcher: {e}') + return [] diff --git a/scripts/xyz/xyz_grid_classes.py b/scripts/xyz/xyz_grid_classes.py index 2da29d7b3..5ce14b422 100644 --- a/scripts/xyz/xyz_grid_classes.py +++ b/scripts/xyz/xyz_grid_classes.py @@ -3,6 +3,12 @@ from scripts.xyz.xyz_grid_shared import ( # pylint: disable=no-name-in-module, u apply_task_arg, apply_task_args, apply_setting, + apply_attention, + apply_attention_overrides, + apply_attention_dispatcher, + list_sdp_overrides, + save_attention, + restore_attention, apply_prompt_primary, apply_prompt_refine, apply_prompt_detailer, @@ -40,7 +46,7 @@ from scripts.xyz.xyz_grid_shared import ( # pylint: disable=no-name-in-module, u format_nothing, str_permutations, ) -from modules import shared, shared_items, sd_samplers, ipadapter, sd_models, sd_vae, sd_unet +from modules import shared, shared_items, sd_samplers, ipadapter, sd_models, sd_vae, sd_unet, attention from modules.control.units import controlnet, t2iadapter from modules.control import processor @@ -107,6 +113,7 @@ class SharedSettingsStackHelper(): disable_apply_metadata = None disable_apply_params = None sdnq_quant_mode = None + attention_settings = None def __enter__(self): # Save overridden settings so they can be restored later @@ -140,6 +147,7 @@ class SharedSettingsStackHelper(): self.disable_apply_metadata = shared.opts.disable_apply_metadata self.disable_apply_params = shared.opts.disable_apply_params self.sdnq_quant_mode = shared.opts.sdnq_quantize_weights_mode + self.attention_settings = save_attention() shared.opts.data["disable_apply_metadata"] = [] shared.opts.data["disable_apply_params"] = '' @@ -188,6 +196,7 @@ class SharedSettingsStackHelper(): if self.sdnq_quant_mode != shared.opts.sdnq_quantize_weights_mode: shared.opts.data["sdnq_quantize_weights_mode"] = self.sdnq_quant_mode sd_models.reload_model_weights(op='model') + restore_attention(self.attention_settings) axis_options = [ @@ -250,6 +259,20 @@ axis_options = [ AxisOption("[Postprocess] Detailer strength", str, apply_field("detailer_strength")), AxisOption("[Quant] SDNQ quant mode", str, apply_sdnq_quant, cost=0.9, fmt=format_value_add_label, choices=lambda: ['none'] + sorted(shared_items.sdnq_quant_modes)), AxisOption("[Quant] SDNQ quant mode TE", str, apply_sdnq_quant_te, cost=0.9, fmt=format_value_add_label, choices=lambda: ['none'] + sorted(shared_items.sdnq_quant_modes)), + AxisOption("[Attention] Method", str, apply_setting('cross_attention_optimization'), cost=0.2, choices=shared_items.list_crossattention), + AxisOption("[Attention] SDP override", str, apply_attention_overrides, cost=0.2, choices=list_sdp_overrides), + AxisOption("[Attention] Dispatcher", str, apply_attention_dispatcher, cost=0.2, choices=lambda: ['None'] + attention.list_dispatcher_backends()), + AxisOption("[Attention] SDNQ matmul", str, apply_attention('sdnq_attention_matmul_type'), cost=0.2, choices=lambda: list(shared_items.sdnq_matmul_modes)), + AxisOption("[Attention] SDNQ PV matmul", str, apply_attention('sdnq_attention_pv_matmul_type'), cost=0.2, choices=lambda: list(shared_items.sdnq_matmul_modes)), + AxisOption("[Attention] SDNQ smooth K", str, apply_attention('sdnq_attention_smooth_k'), cost=0.2, choices=lambda: ['False', 'True']), + AxisOption("[Attention] SDNQ hadamard", str, apply_attention('sdnq_attention_use_hadamard'), cost=0.2, choices=lambda: ['False', 'True']), + AxisOption("[Attention] SDNQ fp16 accumulation", str, apply_attention('sdnq_attention_use_fp16_accum'), cost=0.2, choices=lambda: ['False', 'True']), + AxisOption("[Sparse] Enabled", str, apply_attention('sparse_attention_enabled'), cost=0.2, choices=lambda: ['False', 'True']), + AxisOption("[Sparse] KV budget", int, apply_attention('sparse_attention_budget'), cost=0.2), + AxisOption("[Sparse] Minimum sequence", int, apply_attention('sparse_attention_min_tokens'), cost=0.2), + AxisOption("[Sparse] Dense steps", int, apply_attention('sparse_attention_schedule_steps'), cost=0.2), + AxisOption("[Sparse] Dense step bonus", int, apply_attention('sparse_attention_schedule_bump'), cost=0.2), + AxisOption("[Sparse] Shared heads", str, apply_attention('sparse_attention_head_shared'), cost=0.2, choices=lambda: ['False', 'True']), AxisOption("[HDR] Mode", int, apply_field("hdr_mode")), AxisOption("[HDR] Brightness", float, apply_field("hdr_brightness")), AxisOption("[HDR] Color", float, apply_field("hdr_color")), diff --git a/scripts/xyz/xyz_grid_shared.py b/scripts/xyz/xyz_grid_shared.py index b90d37848..f84696f41 100644 --- a/scripts/xyz/xyz_grid_shared.py +++ b/scripts/xyz/xyz_grid_shared.py @@ -81,6 +81,75 @@ def apply_setting(field): return fun +def attention_options() -> list: + """Attention settings an axis can change; the stack helper restores exactly this set.""" + from modules import attention + return ['cross_attention_optimization', 'hf_attention', *attention.reapply_options()] + + +def list_sdp_overrides() -> list: + item = shared.opts.data_labels.get('sdp_overrides', None) + args = item.component_args if item is not None else None + args = args() if callable(args) else args + return ['None'] + list((args or {}).get('choices', None) or []) + + +def apply_attention(field): + def fun(p, x, xs): + from modules import attention + apply_setting(field)(p, x, xs) + attention.reapply() # backends read their settings when the chain is built, so a write on its own changes nothing + owner = next((backend for backend in attention.registry.backends.values() if field in backend.options), None) + plan = attention.get_plan() + if owner is not None and plan is not None and owner.name not in plan.chain(): + log.warning(f'XYZ grid apply attention: {field} is read by "{owner.label}" which is not in the active chain={plan.chain()}') + return fun + + +def apply_attention_overrides(p, x, xs): + from modules import attention + labels = [label.strip() for label in str(x).split('+') if len(label.strip()) > 0 and label.strip().lower() != 'none'] + unknown = [label for label in labels if attention.registry.by_label(label) is None] + if len(unknown) > 0: + log.warning(f'XYZ grid apply attention: unknown overrides={unknown} available={attention.registry.labels()}') + shared.opts.data['sdp_overrides'] = labels + attention.reapply() + log.debug(f'XYZ grid apply attention: overrides={labels}') + + +def apply_attention_dispatcher(p, x, xs): + from modules import attention + value = '' if str(x).strip().lower() in ['none', 'default'] else str(x).strip() + shared.opts.data['hf_attention'] = value + if shared.sd_loaded: + attention.set_attention_dispatcher(shared.sd_model) + log.debug(f'XYZ grid apply attention: dispatcher="{value}"') + + +def save_attention() -> dict: + return {field: shared.opts.data[field] for field in attention_options() if field in shared.opts.data} + + +def restore_attention(saved: dict): + """Put back whatever an attention axis changed, keys it introduced included, then rebuild what reads them.""" + from modules import attention + changed = [] + for field in attention_options(): + if (field in saved) == (field in shared.opts.data) and saved.get(field, None) == shared.opts.data.get(field, None): + continue + changed.append(field) + if field in saved: + shared.opts.data[field] = saved[field] + else: + shared.opts.data.pop(field, None) + if len(changed) == 0: + return + attention.reapply() + if 'hf_attention' in changed and shared.sd_loaded: + attention.set_attention_dispatcher(shared.sd_model) + log.debug(f'XYZ grid restore attention: {changed}') + + def apply_seed(p, x, xs): p.seed = x p.all_seeds = None diff --git a/test/test-xyz-attention.py b/test/test-xyz-attention.py new file mode 100644 index 000000000..3a16754f2 --- /dev/null +++ b/test/test-xyz-attention.py @@ -0,0 +1,252 @@ +#!/usr/bin/env python +""" +Offline unit tests for the attention and sparse axes of the xyz grid. + +Covers: + +- every [Attention] and [Sparse] axis resolves its choices and targets a registered option +- applying an axis and then leaving the grid restores shared.opts.data exactly, keys the axis + introduced included, so a grid never leaks its last cell into the session +- the axes backed by boolean options take the string the dropdown hands them +- the sdp override axis turns a label, a plus joined pair or None into the option's list +- an override axis apply reaches the router: the rebuilt chain contains the backend it named +- the restore set covers every setting the sparse stage reads + +No running server required. Nothing is moved to the accelerator, and no axis value that would +install a package is used. + +Usage: + python test/test-xyz-attention.py +""" + +import os +import sys + +import torch + +script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, script_dir) +os.chdir(script_dir) + +os.environ['SD_INSTALL_QUIET'] = '1' + +# Bootstrap cmd_args before any module that pulls in shared.py. +import modules.cmd_args # pylint: disable=wrong-import-position +import installer # pylint: disable=wrong-import-position +orig_argv = sys.argv +sys.argv = [sys.argv[0]] +try: + modules.cmd_args.parse_args() +finally: + sys.argv = orig_argv +installer.add_args(modules.cmd_args.parser) +modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) + +stock_sdpa = torch.nn.functional.scaled_dot_product_attention # importing shared installs the configured hijacks in-process + +from modules.errors import log # pylint: disable=wrong-import-position +from modules import attention, shared # pylint: disable=wrong-import-position +from modules.attention.sparse import stage as sparse_stage # pylint: disable=wrong-import-position +from scripts.xyz import xyz_grid_shared as xyz # pylint: disable=wrong-import-position +from scripts.xyz.xyz_grid_classes import axis_options # pylint: disable=wrong-import-position + + +results: dict[str, dict] = {} + + +def category(name: str): + if name not in results: + results[name] = {'passed': 0, 'failed': 0, 'tests': []} + return name + + +def record(cat: str, passed: bool, name: str, detail: str = ''): + status = 'PASS' if passed else 'FAIL' + results[cat]['passed' if passed else 'failed'] += 1 + results[cat]['tests'].append((status, name)) + msg = f' {status}: {name}' + if detail: + msg += f' ({detail})' + if passed: + log.info(msg) + else: + log.error(msg) + + +def run_test(cat: str, fn): + try: + ok = fn() + record(cat, ok is not False, fn.__name__) + except AssertionError as e: + record(cat, False, fn.__name__, str(e)) + except Exception as e: # pylint: disable=broad-except + record(cat, False, fn.__name__, f'exception: {e}') + import traceback + traceback.print_exc() + + +def attention_axes(): + return [axis for axis in axis_options if axis.label.startswith('[Attention]') or axis.label.startswith('[Sparse]')] + + +def sample_value(axis): + """A value the axis accepts that is not the current one, avoiding backends whose prepare installs a package.""" + if axis.choices is None: + return int(shared.opts.get(option_of(axis) or 'sparse_attention_budget') or 0) + 5 + choices = [choice for choice in axis.choices() if choice not in ['Sage attention', 'Flash attention', 'Triton Flash attention']] + current = str(shared.opts.get(option_of(axis)) if option_of(axis) else '') + return next((choice for choice in choices if str(choice) != current), choices[0]) + + +def option_of(axis): + """The option an axis writes, read back from the closure the axis factory built.""" + closure = getattr(axis.apply, '__closure__', None) or () + for cell in closure: + if isinstance(cell.cell_contents, str) and cell.cell_contents in shared.opts.data_labels: + return cell.cell_contents + return {'[Attention] SDP override': 'sdp_overrides', '[Attention] Dispatcher': 'hf_attention'}.get(axis.label, None) + + +def bool_axes(): + return [axis for axis in attention_axes() if isinstance(shared.opts.get(option_of(axis) or ''), bool)] + + +# ============================================================ +# Tests +# ============================================================ + +def test_axes_are_registered(): + axes = attention_axes() + assert len(axes) >= 10, f'only {len(axes)} attention axes' + for axis in axes: + option = option_of(axis) + assert option is not None, f'{axis.label} names no option' + assert option in shared.opts.data_labels, f'{axis.label} targets unknown option {option}' + return True + + +def test_axis_choices_resolve(): + for axis in attention_axes(): + if axis.choices is None: + assert axis.type is int, f'{axis.label} has no choices and is not numeric' + continue + choices = axis.choices() + assert isinstance(choices, list) and len(choices) > 0, f'{axis.label} resolved {choices}' + return True + + +def test_axes_write_and_restore_exactly(): + for axis in attention_axes(): + before = dict(shared.opts.data) + saved = xyz.save_attention() + axis.apply(None, sample_value(axis), []) + assert dict(shared.opts.data) != before, f'{axis.label} wrote nothing' + xyz.restore_attention(saved) + after = dict(shared.opts.data) + leaked = {key for key in set(before) | set(after) if before.get(key, '') != after.get(key, '')} + assert not leaked, f'{axis.label} leaked {sorted(leaked)}' + return True + + +def test_bool_axes_coerce_the_string_the_dropdown_sends(): + axes = bool_axes() + assert len(axes) >= 3, f'only {len(axes)} boolean axes' + for axis in axes: + option = option_of(axis) + saved = xyz.save_attention() + axis.apply(None, 'True', []) + assert shared.opts.data[option] is True, f'{axis.label} took "True" as {shared.opts.data[option]!r}' + axis.apply(None, 'False', []) + assert shared.opts.data[option] is False, f'{axis.label} took "False" as {shared.opts.data[option]!r}' + xyz.restore_attention(saved) + return True + + +def test_override_axis_parses_labels(): + saved = xyz.save_attention() + try: + xyz.apply_attention_overrides(None, 'None', []) + assert shared.opts.data['sdp_overrides'] == [], shared.opts.data['sdp_overrides'] + xyz.apply_attention_overrides(None, 'Flex attention', []) + assert shared.opts.data['sdp_overrides'] == ['Flex attention'], shared.opts.data['sdp_overrides'] + xyz.apply_attention_overrides(None, 'Flex attention+SDNQ attention', []) + assert shared.opts.data['sdp_overrides'] == ['Flex attention', 'SDNQ attention'], shared.opts.data['sdp_overrides'] + finally: + xyz.restore_attention(saved) + return True + + +def test_override_axis_rebuilds_the_chain(): + saved = xyz.save_attention() + try: + xyz.apply_attention_overrides(None, 'Flex attention', []) + assert 'flex' in attention.get_plan().chain(), attention.get_plan().chain() + xyz.apply_attention_overrides(None, 'None', []) + assert 'flex' not in attention.get_plan().chain(), attention.get_plan().chain() + finally: + xyz.restore_attention(saved) + return True + + +def test_dispatcher_axis_clears_on_none(): + saved = xyz.save_attention() + try: + xyz.apply_attention_dispatcher(None, 'native', []) + assert shared.opts.data['hf_attention'] == 'native', shared.opts.data['hf_attention'] + xyz.apply_attention_dispatcher(None, 'None', []) + assert shared.opts.data['hf_attention'] == '', repr(shared.opts.data['hf_attention']) + finally: + xyz.restore_attention(saved) + return True + + +def test_restore_set_covers_every_attention_setting(): + covered = set(xyz.attention_options()) + missing = set(sparse_stage.OPTION_NAMES) - covered + assert not missing, f'sparse settings outside the restore set: {sorted(missing)}' + for backend in attention.registry.backends.values(): + outside = set(backend.options) - covered + assert not outside, f'{backend.label} settings outside the restore set: {sorted(outside)}' + return True + + +def run_all(): + log.warning('=== xyz attention axes ===') + cat = category('axes') + for fn in [ + test_axes_are_registered, + test_axis_choices_resolve, + ]: + run_test(cat, fn) + + log.warning('=== apply and restore ===') + cat = category('apply') + for fn in [ + test_axes_write_and_restore_exactly, + test_bool_axes_coerce_the_string_the_dropdown_sends, + test_override_axis_parses_labels, + test_override_axis_rebuilds_the_chain, + test_dispatcher_axis_clears_on_none, + test_restore_set_covers_every_attention_setting, + ]: + run_test(cat, fn) + + log.warning('=== Results ===') + total_passed = 0 + total_failed = 0 + for cat_name, info in results.items(): + status = 'PASS' if info['failed'] == 0 else 'FAIL' + log.info(f" {cat_name}: {info['passed']} passed, {info['failed']} failed [{status}]") + total_passed += info['passed'] + total_failed += info['failed'] + log.warning(f'Total: {total_passed} passed, {total_failed} failed') + return total_failed == 0 + + +if __name__ == '__main__': + import time + t0 = time.time() + ok = run_all() + torch.nn.functional.scaled_dot_product_attention = stock_sdpa + log.warning(f'Total time: {time.time() - t0:.2f}s') + sys.exit(0 if ok else 1) From c27b3792fecafc4a703f3deb1590e529ef4c7999 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 24 Aug 2026 01:14:12 +0100 Subject: [PATCH 054/270] fix(attention): hook every denoiser slot for layout publication install_layout_hook took transformer or unet and stopped, so a pipeline with a second denoiser left that one unhooked and its forwards ran against whatever the first had published. The slot list follows the denoiser names in sd_offload_state; the aux components on that list pack no attention sequence, and a publication from one would clear the layout. --- modules/attention/context.py | 17 +++++++++++------ test/test-attention-sparse.py | 7 +++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/modules/attention/context.py b/modules/attention/context.py index 71442e678..6134dbc9d 100644 --- a/modules/attention/context.py +++ b/modules/attention/context.py @@ -27,22 +27,27 @@ def denoiser_name(pipe) -> str | None: return None +# every slot a pipeline can enter once per denoising step, from sd_offload_state.group_offload_main. The aux +# components on that list (decoder, controlnet, prior) are left alone: they pack no attention sequence, and a +# publication from one would clear the layout the denoiser just set +DENOISER_SLOTS = ('transformer', 'unet', 'transformer_2', 'transformer_ref', 'unconditional_transformer') + + def install_layout_hook(pipe) -> None: """Let a classic pipeline's denoiser publish its own packing: the modular path has its own hook, this is the rest.""" from modules import shared if pipe is None or not getattr(shared.opts, 'sparse_attention_enabled', False): return - module = getattr(pipe, 'transformer', None) - if module is None: - module = getattr(pipe, 'unet', None) - if module is None or getattr(module, 'sdnext_layout_hook', None) is not None or getattr(module, 'sdnext_state_hook', None) is not None: - return from modules.attention.sparse import layout as sparse_layout def publish(denoiser, args, kwargs): # pylint: disable=unused-argument set_layout(sparse_layout.layout_from_kwargs(kwargs, denoiser.__class__.__name__)) - module.sdnext_layout_hook = module.register_forward_pre_hook(publish, with_kwargs=True) + for name in DENOISER_SLOTS: + module = getattr(pipe, name, None) + if module is None or getattr(module, 'sdnext_layout_hook', None) is not None or getattr(module, 'sdnext_state_hook', None) is not None: + continue + module.sdnext_layout_hook = module.register_forward_pre_hook(publish, with_kwargs=True) def begin(pipe, steps: int = 0) -> None: diff --git a/test/test-attention-sparse.py b/test/test-attention-sparse.py index 59e571e18..f3fcf7b45 100644 --- a/test/test-attention-sparse.py +++ b/test/test-attention-sparse.py @@ -283,11 +283,13 @@ def test_layout_hook_publishes_from_the_denoiser_kwargs(): return hidden_states class Pipe: - def __init__(self, transformer): + def __init__(self, transformer, second): self.transformer = transformer + self.unconditional_transformer = second # ideogram runs a second denoiser, wan a14b a transformer_2 denoiser = FluxTransformer2DModel() - pipe = Pipe(denoiser) + second = FluxTransformer2DModel() + pipe = Pipe(denoiser, second) previous = getattr(shared.opts, 'sparse_attention_enabled', False) try: shared.opts.data['sparse_attention_enabled'] = False @@ -297,6 +299,7 @@ def test_layout_hook_publishes_from_the_denoiser_kwargs(): ctx.install_layout_hook(pipe) ctx.install_layout_hook(pipe) assert getattr(denoiser, 'sdnext_layout_hook', None) is not None, 'the denoiser is hooked once' + assert getattr(second, 'sdnext_layout_hook', None) is not None, 'every denoiser slot is hooked, not just the first' ctx.set_layout(None) denoiser(hidden_states=torch.zeros(1, 4096, 4, device=device), txt_ids=torch.zeros(512, 3, device=device), img_ids=torch.zeros(4096, 3, device=device)) published = ctx.current.layout From 7bc11ff47026ba33d8d6d125a3f9bf85fb267192 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 24 Aug 2026 02:01:19 +0100 Subject: [PATCH 055/270] docs(settings): name the sparse attention sequence floor The hint deferred to an unnamed built in threshold where every comparable hint in the file gives the value. It is a single static constant. --- ui/locale/locale_en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index eed3b9616..0d83abfc0 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -1473,7 +1473,7 @@ {"id":"","label":"SDNQ Attention Quantize FP32","localized":"","hint":"Upcasts queries, keys and values to fp32 for the quantization step, meaning the mean subtraction, scale and rounding that produce the low precision operands. The matmuls themselves are unaffected, and the kernel applies the scales in fp32 either way.
Turned off, that arithmetic runs in the model's own precision. bf16 carries eight mantissa bits, so a scale derived in it is coarser than one derived in fp32, and SDNQ Attention use Smooth K loses the most from it, since a mean across the whole sequence is exactly the kind of sum that wants the extra bits.

Whether the upcast costs anything depends on how the GPU runs fp32 vector work against fp16 and bf16. NVIDIA and AMD run them at the same rate here, so there is nothing to save; Intel runs fp32 slower and takes a noticeable hit.

Enabled by default.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention","localized":"","hint":"Attention is computed on a subset of key tiles instead of all of them, which lowers cost on long sequences. Requires an attention backend that accepts a block mask, SDNQ attention or Flex attention in SDP overrides. Below the minimum sequence the setting stays inactive and attention is dense.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention KV budget","localized":"","hint":"Percentage of the eligible key tiles each query tile keeps. Lower budgets are faster and coarser. Text, conditioning and audio tokens are always kept, as are the tiles on the diagonal, so the budget applies only to the bulk image or video tokens.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention minimum sequence","localized":"","hint":"Shortest sequence that is sparsified. Below it attention stays dense, because the selection costs more than it saves. 0 uses the built in threshold.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention minimum sequence","localized":"","hint":"Shortest sequence that is sparsified. Below it attention stays dense, because the selection costs more than it saves. 0 uses 8192.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention dense steps","localized":"","hint":"Number of steps at the start and end of sampling that receive a larger budget, where composition and detail are set. 0 applies one budget to every step.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention dense step bonus","localized":"","hint":"Percentage points added to the budget on the dense steps.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention share selection across heads","localized":"","hint":"One selection is computed for all attention heads rather than one per head. Cheaper to select and coarser in what it keeps.","ui":"settings_cuda"} From 97b5112cf809ae1e36d1f47059b8599d59f83025 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 24 Aug 2026 02:10:00 +0100 Subject: [PATCH 056/270] refactor(settings): make the sparse sequence floor a plain value The option defaulted to 0 and a property turned that into 8192, which hid the real default behind a sentinel and left no way to sparsify every sequence. The default is now 8192 in the settings registry, 0 means no floor, and the slider tops out at 32768 rather than a length nothing reaches. A negative value is left unclaimed for a derived floor. --- modules/attention/router.py | 4 ++-- modules/attention/sparse/stage.py | 17 +++++++---------- modules/ui_definitions.py | 2 +- test/test-attention-sparse.py | 14 ++++++++++++++ ui/locale/locale_en.json | 2 +- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/modules/attention/router.py b/modules/attention/router.py index 6a58aa011..a99009959 100644 --- a/modules/attention/router.py +++ b/modules/attention/router.py @@ -120,7 +120,7 @@ def build_sparse_stage(plan: Plan): return None built = sparse_stage.make_stage(options) if built is not None: - log.info(f'Sparse attention: backend={capable[0]} budget={options.budget:.0%} gate={options.gate} schedule={options.schedule_steps}x+{options.schedule_bump:.0%}') + log.info(f'Sparse attention: backend={capable[0]} budget={options.budget:.0%} gate={options.min_tokens} schedule={options.schedule_steps}x+{options.schedule_bump:.0%}') return built @@ -158,7 +158,7 @@ def report() -> dict: 'sparse': { 'enabled': options.enabled, 'budget': options.budget, - 'gate': options.gate, + 'gate': options.min_tokens, 'capable': [entry.backend.name for entry in plan.entries if 'block_mask' in entry.caps] if plan is not None else [], 'layout': {'source': layout.source, 'kinds': list(layout.kinds()), 'length': layout.length} if layout is not None else None, }, diff --git a/modules/attention/sparse/stage.py b/modules/attention/sparse/stage.py index d182e65d5..6565a15c5 100644 --- a/modules/attention/sparse/stage.py +++ b/modules/attention/sparse/stage.py @@ -13,8 +13,9 @@ pattern = os.environ.get('SD_SPARSE_PATTERN', 'adaptive').strip().lower() # measured on a 3090: below roughly this length a 30 percent budget caps under 1.25x per block, -# so the selector cannot pay for itself; see docs/sparse-attention-tracker.md -AUTO_MIN_TOKENS = 8192 +# so the selector cannot pay for itself; see docs/sparse-attention-tracker.md. The settings registry +# carries the same number as the option default, this is the fallback when the option is absent +DEFAULT_MIN_TOKENS = 8192 # settings the stage reads, so a change to any of them rebuilds the chain OPTION_NAMES = ('sparse_attention_enabled', 'sparse_attention_budget', 'sparse_attention_min_tokens', 'sparse_attention_schedule_steps', 'sparse_attention_schedule_bump', 'sparse_attention_head_shared') @@ -24,15 +25,11 @@ OPTION_NAMES = ('sparse_attention_enabled', 'sparse_attention_budget', 'sparse_a class StageOptions: enabled: bool = False budget: float = 0.30 - min_tokens: int = 0 # 0 selects AUTO_MIN_TOKENS + min_tokens: int = DEFAULT_MIN_TOKENS # 0 sparsifies every sequence that reaches the stage schedule_steps: int = 0 schedule_bump: float = 0.0 head_shared: bool = False - @property - def gate(self) -> int: - return self.min_tokens if self.min_tokens > 0 else AUTO_MIN_TOKENS - def read_options() -> StageOptions: from modules import shared @@ -40,7 +37,7 @@ def read_options() -> StageOptions: return StageOptions( enabled=bool(getattr(opts, 'sparse_attention_enabled', False)), budget=float(getattr(opts, 'sparse_attention_budget', 30)) / 100.0, - min_tokens=int(getattr(opts, 'sparse_attention_min_tokens', 0)), + min_tokens=int(getattr(opts, 'sparse_attention_min_tokens', DEFAULT_MIN_TOKENS)), schedule_steps=int(getattr(opts, 'sparse_attention_schedule_steps', 0)), schedule_bump=float(getattr(opts, 'sparse_attention_schedule_bump', 0)) / 100.0, head_shared=bool(getattr(opts, 'sparse_attention_head_shared', False)), @@ -123,10 +120,10 @@ def make_stage(options: StageOptions): seq_q, seq_kv = query.shape[-2], key.shape[-2] if seq_q != seq_kv: # cross attention is short and already cheap return decline('cross attention') - if seq_q < options.gate: + if seq_q < options.min_tokens: if seq_q not in inactive: # an enabled setting that cannot act says so rather than doing nothing quietly inactive.add(seq_q) - log.info(f'Sparse attention: inactive at tokens={seq_q}, below the minimum sequence of {options.gate}; attention stays dense') + log.info(f'Sparse attention: inactive at tokens={seq_q}, below the minimum sequence of {options.min_tokens}; attention stays dense') return decline('below the minimum sequence') budget = budget_for_step() if budget >= 1.0: diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 1b0e05d14..51446c339 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -265,7 +265,7 @@ def create_settings(cmd_opts): "sparse_attention_sep": OptionInfo("

Sparse Attention

", "", gr.HTML), "sparse_attention_enabled": OptionInfo(False, "Sparse Attention", gr.Checkbox), "sparse_attention_budget": OptionInfo(30, "Sparse Attention KV budget", gr.Slider, {"minimum": 5, "maximum": 100, "step": 5}), - "sparse_attention_min_tokens": OptionInfo(0, "Sparse Attention minimum sequence", gr.Slider, {"minimum": 0, "maximum": 65536, "step": 1024}), + "sparse_attention_min_tokens": OptionInfo(8192, "Sparse Attention minimum sequence", gr.Slider, {"minimum": 0, "maximum": 32768, "step": 1024}), "sparse_attention_schedule_steps": OptionInfo(0, "Sparse Attention dense steps", gr.Slider, {"minimum": 0, "maximum": 10, "step": 1}), "sparse_attention_schedule_bump": OptionInfo(30, "Sparse Attention dense step bonus", gr.Slider, {"minimum": 0, "maximum": 70, "step": 5}), "sparse_attention_head_shared": OptionInfo(False, "Sparse Attention share selection across heads", gr.Checkbox), diff --git a/test/test-attention-sparse.py b/test/test-attention-sparse.py index f3fcf7b45..0de508761 100644 --- a/test/test-attention-sparse.py +++ b/test/test-attention-sparse.py @@ -451,6 +451,19 @@ def test_stage_gates(): return with_context(checks) +def test_minimum_sequence_of_zero_sparsifies_everything(): + from modules.attention.sparse import stage as stage_mod + floored = stage_mod.make_stage(stage_options()) + unfloored = stage_mod.make_stage(stage_options(min_tokens=0)) + short_q, short_k, short_v = qkv(heads=2, seq=512) + + def checks(): + assert floored(short_q, short_k, short_v, None, False) is None, 'the default floor keeps a short sequence dense' + assert unfloored(short_q, short_k, short_v, None, False) is not None, 'a floor of zero sparsifies every eligible call' + return True + return with_context(checks) + + def test_published_segments_reach_the_stage(): from modules.attention.sparse import layout as layout_mod from modules.attention.sparse import stage as stage_mod @@ -553,6 +566,7 @@ def run_all(): for fn in [ test_stage_is_none_when_disabled_or_at_full_budget, test_stage_gates, + test_minimum_sequence_of_zero_sparsifies_everything, test_stage_follows_the_step_schedule, test_published_segments_reach_the_stage, test_stage_uses_a_published_layout_and_falls_back_without_one, diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 0d83abfc0..c6d09d7a3 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -1473,7 +1473,7 @@ {"id":"","label":"SDNQ Attention Quantize FP32","localized":"","hint":"Upcasts queries, keys and values to fp32 for the quantization step, meaning the mean subtraction, scale and rounding that produce the low precision operands. The matmuls themselves are unaffected, and the kernel applies the scales in fp32 either way.
Turned off, that arithmetic runs in the model's own precision. bf16 carries eight mantissa bits, so a scale derived in it is coarser than one derived in fp32, and SDNQ Attention use Smooth K loses the most from it, since a mean across the whole sequence is exactly the kind of sum that wants the extra bits.

Whether the upcast costs anything depends on how the GPU runs fp32 vector work against fp16 and bf16. NVIDIA and AMD run them at the same rate here, so there is nothing to save; Intel runs fp32 slower and takes a noticeable hit.

Enabled by default.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention","localized":"","hint":"Attention is computed on a subset of key tiles instead of all of them, which lowers cost on long sequences. Requires an attention backend that accepts a block mask, SDNQ attention or Flex attention in SDP overrides. Below the minimum sequence the setting stays inactive and attention is dense.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention KV budget","localized":"","hint":"Percentage of the eligible key tiles each query tile keeps. Lower budgets are faster and coarser. Text, conditioning and audio tokens are always kept, as are the tiles on the diagonal, so the budget applies only to the bulk image or video tokens.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention minimum sequence","localized":"","hint":"Shortest sequence that is sparsified. Below it attention stays dense, because the selection costs more than it saves. 0 uses 8192.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention minimum sequence","localized":"","hint":"Shortest sequence that is sparsified. Below it attention stays dense, because the selection costs more than it saves.

0 sparsifies every sequence that reaches the stage.
Default 8192.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention dense steps","localized":"","hint":"Number of steps at the start and end of sampling that receive a larger budget, where composition and detail are set. 0 applies one budget to every step.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention dense step bonus","localized":"","hint":"Percentage points added to the budget on the dense steps.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention share selection across heads","localized":"","hint":"One selection is computed for all attention heads rather than one per head. Cheaper to select and coarser in what it keeps.","ui":"settings_cuda"} From f0531e1c885f61e9c92bcfb6e006893297d3fb84 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 24 Aug 2026 02:14:32 +0100 Subject: [PATCH 057/270] docs(settings): expand the sparse attention hints Each hint now carries its default, the tradeoff in both directions, and the setting it depends on. The two schedule settings do nothing unless both are above zero, which nothing said before. The sequence floor is given in resolution as well as tokens, since the setting is read in pixels. --- ui/locale/locale_en.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index c6d09d7a3..636cadcf4 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -1471,12 +1471,12 @@ {"id":"","label":"SDNQ Attention PV MatMul type","localized":"","hint":"Precision the probability-value matmul is computed in, the second of the two matmuls in attention. Choices match SDNQ Attention MatMul type.

Quantizing this one as well takes out the floating point work the first setting leaves behind, and it is the more delicate of the two: its inputs are already normalized probabilities, and the small ones among them carry the fine detail.
disabled keeps this matmul in the model's own precision.

Default disabled.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention Hadamard Group Size","localized":"","hint":"Width of the Hadamard rotation in channels. Wider groups mix more channels together and spread outliers further.

Clamped to the head dimension of the running model, rounded down to a power of two that divides it. On a model with 64 or 128 channels per head the upper part of this range resolves to that head dimension rather than to the number shown. Rotation is skipped below 4.
Applies while SDNQ Attention use Hadamard is enabled.

Default 256.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention Quantize FP32","localized":"","hint":"Upcasts queries, keys and values to fp32 for the quantization step, meaning the mean subtraction, scale and rounding that produce the low precision operands. The matmuls themselves are unaffected, and the kernel applies the scales in fp32 either way.
Turned off, that arithmetic runs in the model's own precision. bf16 carries eight mantissa bits, so a scale derived in it is coarser than one derived in fp32, and SDNQ Attention use Smooth K loses the most from it, since a mean across the whole sequence is exactly the kind of sum that wants the extra bits.

Whether the upcast costs anything depends on how the GPU runs fp32 vector work against fp16 and bf16. NVIDIA and AMD run them at the same rate here, so there is nothing to save; Intel runs fp32 slower and takes a noticeable hit.

Enabled by default.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention","localized":"","hint":"Attention is computed on a subset of key tiles instead of all of them, which lowers cost on long sequences. Requires an attention backend that accepts a block mask, SDNQ attention or Flex attention in SDP overrides. Below the minimum sequence the setting stays inactive and attention is dense.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention KV budget","localized":"","hint":"Percentage of the eligible key tiles each query tile keeps. Lower budgets are faster and coarser. Text, conditioning and audio tokens are always kept, as are the tiles on the diagonal, so the budget applies only to the bulk image or video tokens.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention minimum sequence","localized":"","hint":"Shortest sequence that is sparsified. Below it attention stays dense, because the selection costs more than it saves.

0 sparsifies every sequence that reaches the stage.
Default 8192.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention dense steps","localized":"","hint":"Number of steps at the start and end of sampling that receive a larger budget, where composition and detail are set. 0 applies one budget to every step.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention dense step bonus","localized":"","hint":"Percentage points added to the budget on the dense steps.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention share selection across heads","localized":"","hint":"One selection is computed for all attention heads rather than one per head. Cheaper to select and coarser in what it keeps.","ui":"settings_cuda"} + {"id":"","label":"Sparse Attention","localized":"","hint":"Computes attention over a subset of the key tiles instead of all of them. Attention cost grows with the square of the sequence length, so on long sequences it dominates generation time, and skipping the tiles that contribute least buys much of it back.
The saving grows with sequence length: negligible on a short sequence, useful at high resolution, largest on video.

Requires an attention backend that accepts a block mask, SDNQ attention or Flex attention in SDP overrides; with neither enabled a warning is logged and attention stays dense. It also stays dense below Sparse Attention minimum sequence.
Not every architecture tolerates a reduced key set. If output breaks up rather than merely softens, leave this off for that model.

Disabled by default.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention KV budget","localized":"","hint":"Percentage of the eligible key tiles each query tile keeps. Lower budgets are faster and coarser, and the cost shows first in fine detail and in consistency across the image.
Text, conditioning and audio tokens are always kept, as are the tiles on the diagonal, so the budget applies only to the bulk image or video tokens.

100 keeps every tile, which is ordinary dense attention and a convenient comparison run.
Default 30.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention minimum sequence","localized":"","hint":"Shortest sequence that is sparsified. Below it attention stays dense, because choosing the tiles costs more than skipping them saves.
Sequence length is not resolution: a diffusion transformer sees roughly (width/16) x (height/16) tokens for an image, so 1024x1024 is about 4k tokens and 2048x2048 about 16k, and video multiplies that by the frame count.

0 sparsifies every sequence that reaches the stage.
Default 8192, around 1450x1450 for an image.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention dense steps","localized":"","hint":"Number of steps at the start and end of sampling that receive a larger budget, where composition and fine detail are set. Counted at each end, and capped at half the run.

Only takes effect when Sparse Attention dense step bonus is above 0.
0 applies one budget to every step.
Default 0.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention dense step bonus","localized":"","hint":"Percentage points added to the budget on the dense steps, capped at 100.

Only takes effect when Sparse Attention dense steps is above 0.
Default 30, so a budget of 30 rises to 60 on those steps.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention share selection across heads","localized":"","hint":"Computes one selection for all attention heads rather than one per head, by averaging the heads before scoring. Cheaper to select and coarser in what it keeps, since heads that attend to different regions are served by a single compromise.
Worth trying when selection is itself a visible share of the cost, which happens on models with many heads.

Disabled by default.","ui":"settings_cuda"} ], "t": [ {"id":"txt2img_nav","label":"T2I","localized":"","hint":"Create image from text
Legacy interface that mimics original text-to-image interface and behavior"}, From 8138424bbe8404f5c711e45e7d429c2d7628555b Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 24 Aug 2026 23:05:53 +0100 Subject: [PATCH 058/270] docs(settings): cross-reference sparse attention from the sdp hints The SDP overrides and SDNQ Attention hints describe the block mask capability without naming what consumes it, so the two backends that can drive sparse attention now say so where the reader is choosing between them. --- ui/locale/locale_en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 636cadcf4..2efc62c72 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -1462,8 +1462,8 @@ {"id":"","label":"Sections","localized":"","hint":"","ui":"video"}, {"id":"","label":"Samplers","localized":"","hint":"Samplers/schedulers advanced settings","ui":"tab_txt2img"}, {"id":"","label":"SDP kernels","localized":"","hint":"Which of torch's built-in attention kernels torch is allowed to choose from. These are permissions rather than a selection: torch picks one per call from whatever is left enabled, preferring Flash, dropping to Memory for calls flash cannot serve such as those carrying an arbitrary attention mask, and to Math when neither fits. Clearing a box removes a candidate; it never pins the remaining one to every call.

Flash is torch's own build of the FlashAttention kernel. It is not the same thing as the Flash attention entry in SDP overrides, which calls the separately installed flash-attn package and bypasses torch entirely.
Memory is the memory-efficient kernel, which accepts arbitrary masks that flash does not.
Math is the unfused reference path, the widest in what it accepts and the least optimized. Leaving it enabled keeps a fallback for calls the other two decline.

Applies while Attention method is Scaled-Dot-Product, and continues to govern the calls that an enabled override declines.

All three by default. ZLUDA starts with Math alone.","ui":"settings_cuda"}, - {"id":"","label":"SDP overrides","localized":"","hint":"Replaces torch attention with another implementation. Each entry declares the shapes, dtypes and mask conditions it can serve; a call that fails them moves to the next entry and finally back to torch, so several can be enabled together and the chain resolves per call.

Flash attention installs and calls the flash-attn package directly, for calls with no attention mask, half precision inputs and a head dimension of 128 or less.
Sage attention computes attention with quantized matmuls, for head dimensions of 64, 96 or 128 and no attention mask.
SDNQ attention is SD.Next's own quantized Triton kernel, configured in the section below. It takes attention masks, which the other quantized backends do not.
Flex attention uses torch's compiled flex_attention.
Dynamic attention slices attention to fit available memory and serves every call the others decline, standing in for the torch fallback.
Triton Flash attention is a Triton implementation for ROCm and ZLUDA, listed only on those backends.

The quantized and compiled backends trade some numerical accuracy for throughput. How much of each arrives depends on the model, the sequence length and the GPU, so comparing them on the actual workload settles it faster than picking by reputation.

None by default on CUDA. ZLUDA, CPU and MPS start with Dynamic attention, as do ROCm GPUs older than RDNA3.","ui":"settings_cuda"}, - {"id":"","label":"SDNQ Attention","localized":"","hint":"Settings for the SDNQ attention entry in SDP overrides. They do nothing until that override is enabled.

The kernel quantizes the two matmuls inside attention, computing them on lower precision operands and rescaling the result. It is written in Triton, so it needs a working Triton for the active device.
Short sequences and single-head calls are left to the rest of the chain, so text encoders and the VAE keep ordinary attention.","ui":"settings_cuda"}, + {"id":"","label":"SDP overrides","localized":"","hint":"Replaces torch attention with another implementation. Each entry declares the shapes, dtypes and mask conditions it can serve; a call that fails them moves to the next entry and finally back to torch, so several can be enabled together and the chain resolves per call.

Flash attention installs and calls the flash-attn package directly, for calls with no attention mask, half precision inputs and a head dimension of 128 or less.
Sage attention computes attention with quantized matmuls, for head dimensions of 64, 96 or 128 and no attention mask.
SDNQ attention is SD.Next's own quantized Triton kernel, configured in the section below. It takes attention masks, which the other quantized backends do not, and it is one of the two backends Sparse Attention can drive.
Flex attention uses torch's compiled flex_attention, the other backend Sparse Attention can drive.
Dynamic attention slices attention to fit available memory and serves every call the others decline, standing in for the torch fallback.
Triton Flash attention is a Triton implementation for ROCm and ZLUDA, listed only on those backends.

The quantized and compiled backends trade some numerical accuracy for throughput. How much of each arrives depends on the model, the sequence length and the GPU, so comparing them on the actual workload settles it faster than picking by reputation.

None by default on CUDA. ZLUDA, CPU and MPS start with Dynamic attention, as do ROCm GPUs older than RDNA3.","ui":"settings_cuda"}, + {"id":"","label":"SDNQ Attention","localized":"","hint":"Settings for the SDNQ attention entry in SDP overrides. They do nothing until that override is enabled.

The kernel quantizes the two matmuls inside attention, computing them on lower precision operands and rescaling the result. It is written in Triton, so it needs a working Triton for the active device.
It takes an attention mask and a block mask together, which is what lets Sparse Attention use it.
Short sequences and single-head calls are left to the rest of the chain, so text encoders and the VAE keep ordinary attention.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention use Smooth K","localized":"","hint":"Subtracts the mean of the keys before quantizing them. Keys carry a large offset that is shared across the sequence, which spends most of the quantized range representing a value identical for every key and leaves little of it for the differences that decide the attention.
Softmax ignores a constant shift applied to every score in a row, so removing that offset changes the quantization error and not the attention.

Costs one mean and one subtraction per call.
Enabled by default.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention use Hadamard","localized":"","hint":"Rotates queries and keys by a Hadamard transform before quantizing them. The rotation spreads a few oversized channels across all of them, which is the error shape quantization handles worst. The transform is orthogonal, so the scores it produces are the ones the unrotated tensors would produce, minus the quantization error it removes.
With SDNQ Attention PV MatMul type also set, the values are rotated as well and the output is rotated back.

Costs a rotation pass on every attention call, so it is worth enabling where a model shows quantization artifacts without it.
Idle while SDNQ Attention MatMul type is disabled, since nothing is quantized then.

Disabled by default.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention use FP16 Accumulation","localized":"","hint":"Accumulates the floating point matmuls in fp16 rather than fp32. Some tensor cores run fp16 accumulation at a higher rate than fp32, and on those the kernel is cheaper for it.
Operands are pre-scaled to keep products inside the fp16 range, which covers ordinary activations with less headroom than fp32 leaves.

Reaches the parts of the kernel that run in floating point. An int8 matmul accumulates in int32 and is unaffected, so at the default SDNQ Attention MatMul type this applies to the probability-value matmul alone.

Disabled by default.","ui":"settings_cuda"}, From f75f7155464d8adb31ff35c50125512cc7ee5729 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 26 Aug 2026 19:44:35 +0100 Subject: [PATCH 059/270] test(attention): follow the sdnq block mask helpers upstream get_block_mask_input takes only the mask now, so the helper pads to 4d itself, and the standalone nesting filter is inlined into prune_configs. The raise for a tile list that cannot nest moves into the prune_configs row, pinned with from_small so the fallback to the small configs cannot refill the list before the filter runs. --- test/test-attention-sdnq-sparse.py | 42 ++++++++++++------------------ 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/test/test-attention-sdnq-sparse.py b/test/test-attention-sdnq-sparse.py index c6995aabf..35d30fbd3 100644 --- a/test/test-attention-sdnq-sparse.py +++ b/test/test-attention-sdnq-sparse.py @@ -174,15 +174,17 @@ def expand(keep: torch.Tensor, seq_q: int, seq_kv: int): return keep.repeat_interleave(BLOCK_M, dim=-2).repeat_interleave(BLOCK_N, dim=-1)[..., :seq_q, :seq_kv].contiguous() -def ordered(keep: torch.Tensor, batch: int, heads: int): - """The count and ascending index list per query block that the kernel walks, built the way the entry builds them: size-1 batch and head dims kept, padded to the descriptor chunks.""" - return atten_module.get_block_mask_input(keep, batch, heads) +def ordered(keep: torch.Tensor): + """The count and ascending index list per query block that the kernel walks, built the way the entry builds them: left-padded to 4d, size-1 batch and head dims kept, padded to the descriptor chunks.""" + while keep.ndim < 4: + keep = keep.unsqueeze(0) + return atten_module.get_block_mask_input(keep) def raw(q, k, v, attn_mask=None, block_mask=None, block_count=None, block_index=None): """The triton op without the input prep: nothing is quantized, so the mask path is the only difference between arms.""" if block_mask is not None: - block_count, block_index = ordered(block_mask, q.shape[0], q.shape[1]) + block_count, block_index = ordered(block_mask) sparse = block_count is not None return atten_module.sdnq_triton_atten_fwd( q, k, v, None, None, None, @@ -262,7 +264,7 @@ def test_block_lists_must_be_contiguous_and_padded(): return None q, k, v = qkv(seq=1100) # 9 query blocks and 18 kv blocks, so both lists get padded (to 12 and 32) keep = random_keep(2, 4, 1100, 1100) - count, index = ordered(keep, 2, 4) + count, index = ordered(keep) nq, nk = blocks(1100, 1100) assert count.is_contiguous() and index.is_contiguous() assert count.shape[-1] % atten_module.block_count_chunk == 0 and index.shape[-1] % atten_module.block_index_chunk == 0 @@ -287,7 +289,7 @@ def test_block_lists_must_be_contiguous_and_padded(): raise AssertionError(f'{label} was accepted') assert torch.equal(raw(q, k, v, block_mask=keep), reference) shared_keep = keep[:1, :1] - shared_count, shared_index = ordered(shared_keep, 2, 4) + shared_count, shared_index = ordered(shared_keep) assert tuple(shared_count.shape[:2]) == (1, 1) and tuple(shared_index.shape[:2]) == (1, 1), 'size-1 batch and head dims stay as given, the kernel broadcasts by shape' assert torch.equal(raw(q, k, v, block_count=shared_count, block_index=shared_index), raw(q, k, v, block_mask=shared_keep.expand(2, 4, -1, -1).contiguous())) return True @@ -365,8 +367,8 @@ def test_launcher_validates_the_block_lists(): return None q, k, v = qkv() ones = torch.ones(1, 1, *blocks(1000, 1000), dtype=torch.int8, device=device) - count, index = ordered(ones, 2, 4) - wide_count, wide_index = ordered(ones.expand(5, 4, -1, -1).contiguous(), 5, 4) + count, index = ordered(ones) + wide_count, wide_index = ordered(ones.expand(5, 4, -1, -1).contiguous()) bad = ( ('a count without an index', {'block_count': count}), ('an index without a count', {'block_index': index}), @@ -392,22 +394,8 @@ def test_launcher_validates_the_block_lists(): # Autotune nesting # ============================================================ -def test_nesting_filter_keeps_only_nesting_tiles(): - configs = configs_for((32, 64, 128, 256), (16, 32, 64, 128)) - args = {'do_block_mask': 1, 'BLOCK_MASK_M': BLOCK_M, 'BLOCK_MASK_N': BLOCK_N} - kept = atten_module.nest_block_mask_configs(configs, args) - assert {(c.kwargs['BLOCK_SIZE_M'], c.kwargs['BLOCK_SIZE_N']) for c in kept} == {(m, n) for m in (32, 64, 128) for n in (16, 32, 64)} - assert atten_module.nest_block_mask_configs(configs, {'do_block_mask': 0}) is configs - assert atten_module.nest_block_mask_configs(configs, {}) is configs - try: - atten_module.nest_block_mask_configs(configs_for((256,), (128,)), args) - except ValueError as e: - assert 'SDNQ_TRITON_ATTEN_BLOCK_SIZE_M_LIST' in str(e), e - return True - raise AssertionError('a tile list with nothing nesting did not raise') - - def test_prune_configs_applies_the_filter(): + """The nesting filter keeps exactly the tiles a mask block divides by, leaves a dense launch alone, and raises rather than letting a tile list that cannot nest run.""" if not kernel_available: return None q, k, v = qkv() @@ -420,7 +408,12 @@ def test_prune_configs_applies_the_filter(): without = atten_module.prune_configs(configs_for((32, 64, 128, 256), (16, 32, 64, 128)), dict(args, do_block_mask=0)) assert with_mask, 'nothing survived' assert [c.kwargs for c in with_mask] == [c.kwargs for c in without if nests(c)], ([c.kwargs for c in with_mask], [c.kwargs for c in without]) - return True + try: # from_small is the terminal arm, so the fallback to the small configs cannot refill the list before the filter reaches it + atten_module.prune_configs(configs_for((256,), (128,)), args, from_small=True) + except ValueError as e: + assert 'SDNQ_TRITON_ATTEN_BLOCK_SIZE_M_LIST' in str(e), e + return True + raise AssertionError('a tile list with nothing nesting did not raise') # ============================================================ @@ -641,7 +634,6 @@ def run_all(): log.warning('=== autotune nesting ===') cat = category('autotune') for fn in [ - test_nesting_filter_keeps_only_nesting_tiles, test_prune_configs_applies_the_filter, ]: run_test(cat, fn) From 0b56e36a2aae789a69a794359831d4564358893a Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 26 Aug 2026 19:57:32 +0100 Subject: [PATCH 060/270] feat(attention): exclude known bad models from sparse attention sparse_attention_exclude is a comma separated denylist matched case insensitively against the architecture, the pipeline class and the denoiser class, so one entry works whichever name is to hand. It resolves once per model rather than per call and declines with a log line. Seeded with CosmosTransformer3DModel, the transformer Anima runs, which returns banded noise at every budget tested against a sound dense baseline; listing the class rather than the architecture covers the other models built on it, none of which have been checked. --- modules/attention/context.py | 2 +- modules/attention/sparse/stage.py | 31 ++++++++++++++++++++++- modules/ui_definitions.py | 1 + test/test-attention-sparse.py | 41 +++++++++++++++++++++++++++++++ ui/locale/locale_en.json | 5 ++-- 5 files changed, 76 insertions(+), 4 deletions(-) diff --git a/modules/attention/context.py b/modules/attention/context.py index 6134dbc9d..2badc90e2 100644 --- a/modules/attention/context.py +++ b/modules/attention/context.py @@ -11,7 +11,7 @@ class GenerationContext: step: int = 0 # index of the denoiser forward about to run steps: int = 0 # forwards in the current pass forwards: int = 0 - model_key: tuple[str, str | None] | None = None # pipeline class and denoiser class, telemetry only + model_key: tuple[str, str | None] | None = None # pipeline class and denoiser class, for telemetry and the sparse exclusion list step_buffer: torch.Tensor | None = None # the step as a device scalar updated in place, so compiled readers keep their graph layout: object | None = None # TokenLayout published by whoever knows the packing, None until something does diff --git a/modules/attention/sparse/stage.py b/modules/attention/sparse/stage.py index 6565a15c5..8336e70eb 100644 --- a/modules/attention/sparse/stage.py +++ b/modules/attention/sparse/stage.py @@ -18,7 +18,7 @@ pattern = os.environ.get('SD_SPARSE_PATTERN', 'adaptive').strip().lower() DEFAULT_MIN_TOKENS = 8192 # settings the stage reads, so a change to any of them rebuilds the chain -OPTION_NAMES = ('sparse_attention_enabled', 'sparse_attention_budget', 'sparse_attention_min_tokens', 'sparse_attention_schedule_steps', 'sparse_attention_schedule_bump', 'sparse_attention_head_shared') +OPTION_NAMES = ('sparse_attention_enabled', 'sparse_attention_budget', 'sparse_attention_min_tokens', 'sparse_attention_schedule_steps', 'sparse_attention_schedule_bump', 'sparse_attention_head_shared', 'sparse_attention_exclude') @dataclass(frozen=True) @@ -29,6 +29,7 @@ class StageOptions: schedule_steps: int = 0 schedule_bump: float = 0.0 head_shared: bool = False + exclude: tuple = () # architectures, pipeline classes or denoiser classes that stay dense def read_options() -> StageOptions: @@ -41,9 +42,21 @@ def read_options() -> StageOptions: schedule_steps=int(getattr(opts, 'sparse_attention_schedule_steps', 0)), schedule_bump=float(getattr(opts, 'sparse_attention_schedule_bump', 0)) / 100.0, head_shared=bool(getattr(opts, 'sparse_attention_head_shared', False)), + exclude=parse_exclusions(getattr(opts, 'sparse_attention_exclude', '')), ) +def parse_exclusions(raw) -> tuple: + """The exclusion list as lowercase entries, each naming an architecture, a pipeline class or a denoiser class.""" + return tuple(entry.strip().lower() for entry in str(raw or '').split(',') if len(entry.strip()) > 0) + + +def match_exclusion(model_key, arch, exclude: tuple) -> str: + """The entry the loaded model matches, empty when none of them do.""" + names = {str(name).lower() for name in (*(model_key or ()), arch) if name} + return next((entry for entry in exclude if entry in names), '') + + def resolve_layout(seq: int, reported: set) -> layout_mod.TokenLayout: """The published layout when there is one, otherwise sparsify the whole sequence and say so once.""" published = context.current.layout @@ -65,6 +78,7 @@ def make_stage(options: StageOptions): notified: set = set() cache: dict = {} static: dict = {} + excluded: dict = {} def static_selection(query, key, spec, pins, drops, cache_key): """A density matched band, built once per geometry, honoring the same layout pins so the control differs from the selector only in how it chooses video tiles.""" @@ -100,6 +114,19 @@ def make_stage(options: StageOptions): cache[key] = table return table[min(state.step, len(table) - 1)] if table else options.budget + def on_exclusion_list(state) -> bool: + """Whether the loaded model is excluded, resolved once per model since the answer cannot change within one.""" + if not options.exclude: + return False + hit = excluded.get(state.model_key) + if hit is None: + from modules import shared + hit = match_exclusion(state.model_key, getattr(shared, 'sd_model_type', None), options.exclude) + excluded[state.model_key] = hit + if hit: # an enabled setting that cannot act says so rather than doing nothing quietly + log.info(f'Sparse attention: "{hit}" is on the exclusion list; attention stays dense') + return len(hit) > 0 + def decline(reason: str): stage.last_skip = reason return None @@ -108,6 +135,8 @@ def make_stage(options: StageOptions): state = context.current if state.role != 'transformer' or not state.active: return decline('not the denoiser') + if on_exclusion_list(state): + return decline('excluded') if is_causal: # the selection keeps the diagonal but encodes no causality return decline('causal') if attn_mask is not None and 'masked_block' not in caps: # flex would need a mask_mod to combine the two diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 51446c339..b68f449d0 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -269,6 +269,7 @@ def create_settings(cmd_opts): "sparse_attention_schedule_steps": OptionInfo(0, "Sparse Attention dense steps", gr.Slider, {"minimum": 0, "maximum": 10, "step": 1}), "sparse_attention_schedule_bump": OptionInfo(30, "Sparse Attention dense step bonus", gr.Slider, {"minimum": 0, "maximum": 70, "step": 5}), "sparse_attention_head_shared": OptionInfo(False, "Sparse Attention share selection across heads", gr.Checkbox), + "sparse_attention_exclude": OptionInfo("CosmosTransformer3DModel", "Sparse Attention excluded models", gr.Textbox), "hf_attention_sep": OptionInfo("

Attention Dispatcher

", "", gr.HTML), "hf_attention": OptionInfo('', "Attention dispatcher kernel", gr.Textbox), diff --git a/test/test-attention-sparse.py b/test/test-attention-sparse.py index 0de508761..5a51e1e63 100644 --- a/test/test-attention-sparse.py +++ b/test/test-attention-sparse.py @@ -464,6 +464,44 @@ def test_minimum_sequence_of_zero_sparsifies_everything(): return with_context(checks) +def test_exclusion_list_parsing(): + from modules.attention.sparse import stage as stage_mod + assert stage_mod.parse_exclusions(' Anima , CosmosTransformer3DModel ,, ') == ('anima', 'cosmostransformer3dmodel') + assert stage_mod.parse_exclusions('') == () + assert stage_mod.parse_exclusions(None) == () + return True + + +def test_an_exclusion_entry_matches_any_of_the_three_names(): + """One entry, matched against whichever of the architecture, pipeline class or denoiser class the user knew.""" + from modules.attention.sparse import stage as stage_mod + key = ('AnimaTextToImagePipeline', 'CosmosTransformer3DModel') + for entry in ('cosmostransformer3dmodel', 'animatexttoimagepipeline', 'anima'): + assert stage_mod.match_exclusion(key, 'anima', (entry,)) == entry, entry + assert stage_mod.match_exclusion(key, 'anima', ('krea2',)) == '', 'an unlisted model matches nothing' + assert stage_mod.match_exclusion(None, 'anima', ('anima',)) == 'anima', 'the architecture stands in when no model key is published' + assert stage_mod.match_exclusion(('Pipe', None), None, ('pipe',)) == 'pipe', 'an absent denoiser class is skipped, not matched' + return True + + +def test_an_excluded_model_stays_dense(): + from modules.attention import context as ctx + from modules.attention.sparse import stage as stage_mod + listed = stage_mod.make_stage(stage_options(exclude=('cosmostransformer3dmodel',))) + unlisted = stage_mod.make_stage(stage_options(exclude=('somethingelse',))) + q, k, v = qkv(heads=2, seq=2048) + + def checks(): + ctx.current.model_key = ('AnimaTextToImagePipeline', 'CosmosTransformer3DModel') + assert listed(q, k, v, None, False) is None, 'a listed denoiser class stays dense' + assert listed.last_skip == 'excluded', listed.last_skip + assert unlisted(q, k, v, None, False) is not None, 'a list that matches nothing changes nothing' + ctx.current.model_key = ('Krea2Pipeline', 'Krea2Transformer2DModel') + assert listed(q, k, v, None, False) is not None, 'the exclusion applies to the listed model, not to every model' + return True + return with_context(checks) + + def test_published_segments_reach_the_stage(): from modules.attention.sparse import layout as layout_mod from modules.attention.sparse import stage as stage_mod @@ -566,6 +604,9 @@ def run_all(): for fn in [ test_stage_is_none_when_disabled_or_at_full_budget, test_stage_gates, + test_exclusion_list_parsing, + test_an_exclusion_entry_matches_any_of_the_three_names, + test_an_excluded_model_stays_dense, test_minimum_sequence_of_zero_sparsifies_everything, test_stage_follows_the_step_schedule, test_published_segments_reach_the_stage, diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 2efc62c72..c319a8504 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -1471,12 +1471,13 @@ {"id":"","label":"SDNQ Attention PV MatMul type","localized":"","hint":"Precision the probability-value matmul is computed in, the second of the two matmuls in attention. Choices match SDNQ Attention MatMul type.

Quantizing this one as well takes out the floating point work the first setting leaves behind, and it is the more delicate of the two: its inputs are already normalized probabilities, and the small ones among them carry the fine detail.
disabled keeps this matmul in the model's own precision.

Default disabled.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention Hadamard Group Size","localized":"","hint":"Width of the Hadamard rotation in channels. Wider groups mix more channels together and spread outliers further.

Clamped to the head dimension of the running model, rounded down to a power of two that divides it. On a model with 64 or 128 channels per head the upper part of this range resolves to that head dimension rather than to the number shown. Rotation is skipped below 4.
Applies while SDNQ Attention use Hadamard is enabled.

Default 256.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention Quantize FP32","localized":"","hint":"Upcasts queries, keys and values to fp32 for the quantization step, meaning the mean subtraction, scale and rounding that produce the low precision operands. The matmuls themselves are unaffected, and the kernel applies the scales in fp32 either way.
Turned off, that arithmetic runs in the model's own precision. bf16 carries eight mantissa bits, so a scale derived in it is coarser than one derived in fp32, and SDNQ Attention use Smooth K loses the most from it, since a mean across the whole sequence is exactly the kind of sum that wants the extra bits.

Whether the upcast costs anything depends on how the GPU runs fp32 vector work against fp16 and bf16. NVIDIA and AMD run them at the same rate here, so there is nothing to save; Intel runs fp32 slower and takes a noticeable hit.

Enabled by default.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention","localized":"","hint":"Computes attention over a subset of the key tiles instead of all of them. Attention cost grows with the square of the sequence length, so on long sequences it dominates generation time, and skipping the tiles that contribute least buys much of it back.
The saving grows with sequence length: negligible on a short sequence, useful at high resolution, largest on video.

Requires an attention backend that accepts a block mask, SDNQ attention or Flex attention in SDP overrides; with neither enabled a warning is logged and attention stays dense. It also stays dense below Sparse Attention minimum sequence.
Not every architecture tolerates a reduced key set. If output breaks up rather than merely softens, leave this off for that model.

Disabled by default.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention","localized":"","hint":"Computes attention over a subset of the key tiles instead of all of them. Attention cost grows with the square of the sequence length, so on long sequences it dominates generation time, and skipping the tiles that contribute least buys much of it back.
The saving grows with sequence length: negligible on a short sequence, useful at high resolution, largest on video.

Requires an attention backend that accepts a block mask, SDNQ attention or Flex attention in SDP overrides; with neither enabled a warning is logged and attention stays dense. It also stays dense below Sparse Attention minimum sequence.
Not every architecture tolerates a reduced key set. The ones known to break are listed in Sparse Attention excluded models and stay dense; a model that breaks up rather than merely softening belongs on that list.

Disabled by default.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention KV budget","localized":"","hint":"Percentage of the eligible key tiles each query tile keeps. Lower budgets are faster and coarser, and the cost shows first in fine detail and in consistency across the image.
Text, conditioning and audio tokens are always kept, as are the tiles on the diagonal, so the budget applies only to the bulk image or video tokens.

100 keeps every tile, which is ordinary dense attention and a convenient comparison run.
Default 30.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention minimum sequence","localized":"","hint":"Shortest sequence that is sparsified. Below it attention stays dense, because choosing the tiles costs more than skipping them saves.
Sequence length is not resolution: a diffusion transformer sees roughly (width/16) x (height/16) tokens for an image, so 1024x1024 is about 4k tokens and 2048x2048 about 16k, and video multiplies that by the frame count.

0 sparsifies every sequence that reaches the stage.
Default 8192, around 1450x1450 for an image.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention dense steps","localized":"","hint":"Number of steps at the start and end of sampling that receive a larger budget, where composition and fine detail are set. Counted at each end, and capped at half the run.

Only takes effect when Sparse Attention dense step bonus is above 0.
0 applies one budget to every step.
Default 0.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention dense step bonus","localized":"","hint":"Percentage points added to the budget on the dense steps, capped at 100.

Only takes effect when Sparse Attention dense steps is above 0.
Default 30, so a budget of 30 rises to 60 on those steps.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention share selection across heads","localized":"","hint":"Computes one selection for all attention heads rather than one per head, by averaging the heads before scoring. Cheaper to select and coarser in what it keeps, since heads that attend to different regions are served by a single compromise.
Worth trying when selection is itself a visible share of the cost, which happens on models with many heads.

Disabled by default.","ui":"settings_cuda"} + {"id":"","label":"Sparse Attention share selection across heads","localized":"","hint":"Computes one selection for all attention heads rather than one per head, by averaging the heads before scoring. Cheaper to select and coarser in what it keeps, since heads that attend to different regions are served by a single compromise.
Worth trying when selection is itself a visible share of the cost, which happens on models with many heads.

Disabled by default.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention excluded models","localized":"","hint":"Models that stay dense no matter how the rest of this section is set. Comma separated, matched case insensitively against the architecture, the pipeline class and the denoiser class, so whichever of those names is to hand works as an entry.
The class names appear in the model load log; the architecture is the short name used elsewhere in the settings, such as f1 or anima.

Listed by default is CosmosTransformer3DModel, the transformer Anima runs, which returns banded noise at every budget tested against a sound dense baseline. The class is listed rather than the architecture because the other models built on it have not been checked.
A model whose output breaks up rather than merely softening belongs here.

Default CosmosTransformer3DModel.","ui":"settings_cuda"} ], "t": [ {"id":"txt2img_nav","label":"T2I","localized":"","hint":"Create image from text
Legacy interface that mimics original text-to-image interface and behavior"}, From 0fa987e3509a96eb17ff9f5d145f952b3cdede32 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 26 Aug 2026 21:24:07 +0100 Subject: [PATCH 061/270] docs(settings): record the head sharing finding in the sparse hints Per-head selection is what breaks head-consistency sensitive models, measured on Anima across fourteen arms: the only clean sparse selections are the ones every head shares. The head sharing hint names itself as the first resort for banded output, and the exclusion hint carries why Cosmos stays listed. --- ui/locale/locale_en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index c319a8504..04c7ae34c 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -1476,8 +1476,8 @@ {"id":"","label":"Sparse Attention minimum sequence","localized":"","hint":"Shortest sequence that is sparsified. Below it attention stays dense, because choosing the tiles costs more than skipping them saves.
Sequence length is not resolution: a diffusion transformer sees roughly (width/16) x (height/16) tokens for an image, so 1024x1024 is about 4k tokens and 2048x2048 about 16k, and video multiplies that by the frame count.

0 sparsifies every sequence that reaches the stage.
Default 8192, around 1450x1450 for an image.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention dense steps","localized":"","hint":"Number of steps at the start and end of sampling that receive a larger budget, where composition and fine detail are set. Counted at each end, and capped at half the run.

Only takes effect when Sparse Attention dense step bonus is above 0.
0 applies one budget to every step.
Default 0.","ui":"settings_cuda"}, {"id":"","label":"Sparse Attention dense step bonus","localized":"","hint":"Percentage points added to the budget on the dense steps, capped at 100.

Only takes effect when Sparse Attention dense steps is above 0.
Default 30, so a budget of 30 rises to 60 on those steps.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention share selection across heads","localized":"","hint":"Computes one selection for all attention heads rather than one per head, by averaging the heads before scoring. Cheaper to select and coarser in what it keeps, since heads that attend to different regions are served by a single compromise.
Worth trying when selection is itself a visible share of the cost, which happens on models with many heads.

Disabled by default.","ui":"settings_cuda"}, - {"id":"","label":"Sparse Attention excluded models","localized":"","hint":"Models that stay dense no matter how the rest of this section is set. Comma separated, matched case insensitively against the architecture, the pipeline class and the denoiser class, so whichever of those names is to hand works as an entry.
The class names appear in the model load log; the architecture is the short name used elsewhere in the settings, such as f1 or anima.

Listed by default is CosmosTransformer3DModel, the transformer Anima runs, which returns banded noise at every budget tested against a sound dense baseline. The class is listed rather than the architecture because the other models built on it have not been checked.
A model whose output breaks up rather than merely softening belongs here.

Default CosmosTransformer3DModel.","ui":"settings_cuda"} + {"id":"","label":"Sparse Attention share selection across heads","localized":"","hint":"Computes one selection for all attention heads rather than one per head, by averaging the heads before scoring. Cheaper to select and coarser in what it keeps, since heads that attend to different regions are served by a single compromise.
Worth trying when selection is itself a visible share of the cost, which happens on models with many heads.
Also the first thing to try when a model breaks up into bands under sparse attention: some architectures need every head to see one consistent context, and per-head selection is what breaks them.

Disabled by default.","ui":"settings_cuda"}, + {"id":"","label":"Sparse Attention excluded models","localized":"","hint":"Models that stay dense no matter how the rest of this section is set. Comma separated, matched case insensitively against the architecture, the pipeline class and the denoiser class, so whichever of those names is to hand works as an entry.
The class names appear in the model load log; the architecture is the short name used elsewhere in the settings, such as f1 or anima.

Listed by default is CosmosTransformer3DModel, the transformer Anima runs, which collapses into banded noise when each head selects its own tiles and stays degraded even with Sparse Attention share selection across heads enabled. The class is listed rather than the architecture because the other models built on it have not been checked.
A model whose output breaks up rather than merely softening belongs here.

Default CosmosTransformer3DModel.","ui":"settings_cuda"} ], "t": [ {"id":"txt2img_nav","label":"T2I","localized":"","hint":"Create image from text
Legacy interface that mimics original text-to-image interface and behavior"}, From 23961853936e8d73528410601f0d3884f73c9716 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 02:44:42 +0100 Subject: [PATCH 062/270] feat(lora): dense stack modes for multi-network sets Add lora_stack_mode with ties, dare_ties, dare_linear and magnitude_prune combination of per-network deltas when several loaded networks target one layer; sum stays the default and the exact factor path. Combined deltas ride the existing tail: hosted svd on sub-8-bit SDNQ, requantize at int8 and above, direct add elsewhere. Text-encoder layers and single-network sets keep plain summation. DARE masks draw from per-layer sha256 seeds so re-applies and cache entries stay deterministic; the stack settings join the activation and factor-cache signatures so settings changes re-apply without a reload. --- modules/lora/extra_networks_lora.py | 4 +- modules/lora/lora_apply.py | 17 +- modules/lora/lora_factor_cache.py | 2 + modules/lora/lora_sdnq.py | 37 ++-- modules/lora/lora_stack.py | 250 ++++++++++++++++++++++++++++ modules/lora/networks.py | 5 +- modules/ui_definitions.py | 6 + test/test-sdnq-lora-factors.py | 168 ++++++++++++++++++- ui/locale/locale_en.json | 4 + 9 files changed, 471 insertions(+), 22 deletions(-) create mode 100644 modules/lora/lora_stack.py diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index d0a6ffe85..f5cf5647d 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -178,8 +178,8 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): return [f'{name}:{te}:{unet}' for name, te, unet in zip(names, te_multipliers, unet_multipliers, strict=False)] def changed(self, requested: list[str], include: list[str] | None = None, exclude: list[str] | None = None) -> tuple[bool, str]: - from modules.lora import lora_sdnq - requested = requested + [f'stack={lora_sdnq.signature()}'] # settings-only mechanism changes must re-trigger activation + from modules.lora import lora_sdnq, lora_stack + requested = requested + [f'stack={lora_stack.signature()}{lora_sdnq.signature()}'] # settings-only stack or mechanism changes must re-trigger activation if shared.opts.lora_force_reload: debug_log(f'Network check: type=LoRA requested={requested} status="forced"') return True, "forced" diff --git a/modules/lora/lora_apply.py b/modules/lora/lora_apply.py index 3cb8688c0..8367d61ce 100644 --- a/modules/lora/lora_apply.py +++ b/modules/lora/lora_apply.py @@ -5,6 +5,7 @@ import time from typing import TYPE_CHECKING import torch from modules.lora import lora_common as l +from modules.lora import lora_stack from modules import shared, devices, errors from modules.logger import log @@ -75,6 +76,9 @@ def network_calc_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.Grou pass batch_updown = None batch_ex_bias = None + stack_deltas = None + if lora_stack.mode() in lora_stack.DENSE_MODES and network_layer_name is not None and not network_layer_name.startswith('lora_te'): + stack_deltas = [] # collect per-net deltas; combined after the loop (bias deltas stay summed) loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks for net in loaded: module = net.modules.get(network_layer_name, None) @@ -107,7 +111,9 @@ def network_calc_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.Grou del weight if updown is not None: - if batch_updown is not None: + if stack_deltas is not None: + stack_deltas.append((net.name, updown.to(devices.device))) + elif batch_updown is not None: batch_updown += updown.to(batch_updown.device) else: batch_updown = updown.to(devices.device) @@ -136,6 +142,15 @@ def network_calc_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.Grou if elimit is not None: elimit() continue + if stack_deltas is not None and stack_deltas: + if len(stack_deltas) >= 2: + t0 = time.time() + batch_updown = lora_stack.combine(stack_deltas, network_layer_name) + l.timer.calc += time.time() - t0 + else: + batch_updown = stack_deltas[0][1] + if shared.opts.diffusers_offload_mode == "sequential": + batch_updown = batch_updown.to(devices.cpu) return batch_updown, batch_ex_bias diff --git a/modules/lora/lora_factor_cache.py b/modules/lora/lora_factor_cache.py index 2b00bbcc7..d6c95d681 100644 --- a/modules/lora/lora_factor_cache.py +++ b/modules/lora/lora_factor_cache.py @@ -51,10 +51,12 @@ def signature(wanted_names): if model_name is None: return None calib_path = lora_calib.calib_file(model_name) + from modules.lora import lora_stack parts = { 'model': model_name, 'rank': int(getattr(shared.opts, 'lora_sdnq_host_rank', 0) or 0), 'calib': int(os.path.getmtime(calib_path)) if lora_calib.enabled() and os.path.isfile(calib_path) else None, # the toggle is part of the identity: factors computed under the other setting must not replay + 'stack': lora_stack.signature(), 'nets': [], } for name, te, unet, dyn in wanted_names: diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index d95849527..7973121b5 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -47,7 +47,7 @@ a low-rank delta hosts exactly however fat it is. import torch from modules import devices, shared -from modules.lora import lora_calib, lora_factor_cache +from modules.lora import lora_calib, lora_factor_cache, lora_stack from modules.lora import lora_common as l from modules.logger import log @@ -137,6 +137,9 @@ def factor_candidate(self, network_layer_name, wanted_names): return False # declined layers with factors still attached are stripped by the activate fallthrough if getattr(self, 'sdnq_dequantizer', None) is None or self.__class__.__name__ != 'SDNQLinear': return False + if wanted_names != () and lora_stack.mode() in lora_stack.DENSE_MODES and not network_layer_name.startswith('lora_te'): + if sum(1 for net in l.loaded_networks if net.modules.get(network_layer_name, None) is not None) >= 2: + return False # dense stack modes combine dense deltas; the factor concat would sum if hasattr(self, 'sdnq_lora_svd_stash'): return True if wanted_names == (): # nothing attached, nothing to remove @@ -277,14 +280,16 @@ def apply_cached(self, network_layer_name, wanted_names): deq = self.sdnq_dequantizer dtype = deq.result_dtype remove_factors(self) # before the rule: the svd-channel check must see the checkpoint's own state, and a declined layer must fall through pristine + stack_dense = lora_stack.mode() in lora_stack.DENSE_MODES and not network_layer_name.startswith('lora_te') members = [] - for net in l.loaded_networks: - module = net.modules.get(network_layer_name, None) - if module is None: - continue - factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) - if factors is not None: - members.append(factors) + if not stack_dense: + for net in l.loaded_networks: + module = net.modules.get(network_layer_name, None) + if module is None: + continue + factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) + if factors is not None: + members.append(factors) if len(members) == 0 and self.svd_up is None: step = float(self.scale.detach().float().mean()) if step > 0 and rms / step > REQUANT_RATIO and energy < REQUANT_ENERGY: @@ -328,13 +333,15 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): dtype = deq.result_dtype members = [] - for net in l.loaded_networks: - module = net.modules.get(network_layer_name, None) - if module is None: - continue - factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) - if factors is not None: - members.append(factors) + stack_dense = lora_stack.mode() in lora_stack.DENSE_MODES and not network_layer_name.startswith('lora_te') + if not stack_dense: # dense stack modes host the combined delta wholesale; the members' content is already inside it + for net in l.loaded_networks: + module = net.modules.get(network_layer_name, None) + if module is None: + continue + factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) + if factors is not None: + members.append(factors) # requantize keeps a delta the grid can resolve and that truncation would genuinely # cut: both terms must agree, since a thin delta rounds away on the grid however diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py new file mode 100644 index 000000000..224505cab --- /dev/null +++ b/modules/lora/lora_stack.py @@ -0,0 +1,250 @@ +"""Stack modes for combining multiple LoRA networks beyond plain summation. + +Dense modes (ties, dare_ties, dare_linear, magnitude_prune) combine the +networks' dense deltas elementwise; the result rides the normal apply tail +(side-channel hosting on sub-8-bit SDNQ, requantize at int8 and above, +direct add on unquantized layers). Select modes (klora, estlora) keep both +networks' contributions separate and choose a per-layer winner, shifting +from the first loaded network (subject) toward the second (style) across +the sampling steps. Selection scores depend only on the weights, so the +shift reduces to at most one flip per layer per generation, executed from +the step callback against a schedule finalized at apply time. + +TIES arXiv:2306.01708, DARE arXiv:2311.03099, K-LoRA arXiv:2502.18461, +EST-LoRA arXiv:2508.02165 (its measured style-discrepancy estimate is +exposed as an option instead of being derived from probe generations). +""" + +import weakref +import hashlib + +import torch + +from modules import shared +from modules.logger import log + + +DENSE_MODES = ('ties', 'dare_ties', 'dare_linear', 'magnitude_prune') +SELECT_MODES = ('klora', 'estlora') +KLORA_BETA = 0.5 # the paper's fixed ramp offset; only the slope is user-tunable +ROW_CHUNK = 512 # fp32 interiors run in first-dim slices; also fixes the DARE draw sequence +SAMPLE_CAP = 1 << 22 # strided subsample bound for magnitude quantiles (full-size quantile exceeds torch limits) + +state: dict = {'entries': {}, 'flips': {}, 'gamma': 1.0, 'total_steps': 0, 'finalized': False} +warned: set = set() + + +def mode(): + return getattr(shared.opts, 'lora_stack_mode', 'sum') or 'sum' + + +def density(): + return float(getattr(shared.opts, 'lora_stack_density', 0.5)) + + +def ramp_alpha(): + return float(getattr(shared.opts, 'lora_stack_alpha', 1.5)) + + +def manual_discrepancy(): + return float(getattr(shared.opts, 'lora_stack_discrepancy', 0.5)) + + +def signature(): + m = mode() + if m in DENSE_MODES: + return f'{m}:{density():.2f}' + if m in SELECT_MODES: + return f'{m}:{ramp_alpha():.2f}:{manual_discrepancy():.2f}' + return 'sum' + + +def warn_once(key, message): + if key not in warned: + warned.add(key) + log.warning(message) + + +def select_blocked(): + return 'Model' in (getattr(shared.opts, 'cuda_compile', None) or []) + + +def active_dense(n_contrib): + return mode() in DENSE_MODES and n_contrib >= 2 + + +def active_select(n_loaded): + m = mode() + if m not in SELECT_MODES: + return False + if n_loaded != 2: + warn_once('select-count', f'Network stack: mode={m} networks={n_loaded} requires exactly 2, using sum') + return False + if select_blocked(): + warn_once('select-compile', f'Network stack: mode={m} disabled with model compile, using sum') + return False + return True + + +def seed_for(layer_name, net_name): + payload = f'{layer_name}|{net_name}|{mode()}|{round(density(), 6)}' + return int.from_bytes(hashlib.sha256(payload.encode()).digest()[:8], 'little') + + +def magnitude_threshold(delta, dens): + flat = delta.abs().flatten() + step = max(1, flat.numel() // SAMPLE_CAP) + return torch.quantile(flat[::step].float(), 1.0 - dens) + + +def dare_generator(device, layer_name, net_name): + gen = torch.Generator(device=device) + gen.manual_seed(seed_for(layer_name, net_name)) + return gen + + +def combine(named_deltas, layer_name): + """Combine per-network dense deltas under the active dense mode; returns a tensor in the first delta's dtype.""" + m = mode() + dens = density() + deltas = [d for _, d in named_deltas] + out_dtype = deltas[0].dtype + result = torch.zeros_like(deltas[0], dtype=torch.float32) + thresholds = [magnitude_threshold(d, dens) for d in deltas] if m in ('ties', 'magnitude_prune') else [None] * len(deltas) + gens = [dare_generator(deltas[0].device, layer_name, name) for name, _ in named_deltas] if m in ('dare_ties', 'dare_linear') else [None] * len(deltas) + for start in range(0, deltas[0].shape[0], ROW_CHUNK): + stop = min(start + ROW_CHUNK, deltas[0].shape[0]) + chunks = [] + for i, d in enumerate(deltas): + c = d[start:stop].to(torch.float32) + if thresholds[i] is not None: + c = c * (c.abs() >= thresholds[i]) + if gens[i] is not None: + keep = torch.rand(c.shape, generator=gens[i], device=c.device, dtype=torch.float32) < dens + c = c * keep / dens + chunks.append(c) + if m in ('ties', 'dare_ties'): + total = torch.stack(chunks).sum(dim=0) + elected = torch.sign(total) + agree = [c * ((torch.sign(c) == elected) & (c != 0)) for c in chunks] + count = torch.stack([(a != 0).to(torch.float32) for a in agree]).sum(dim=0).clamp(min=1.0) + result[start:stop] = torch.stack(agree).sum(dim=0) / count + else: # dare_linear, magnitude_prune: independent per-delta edits, plain sum + result[start:stop] = torch.stack(chunks).sum(dim=0) + return result.to(out_dtype) + + +def score_topk(up, down, k): + """K-LoRA layer score: sum of the top-K absolute delta entries (one dense materialization).""" + d = (up.to(torch.float32) @ down.to(torch.float32)).abs().flatten() + values = torch.topk(d, min(int(k), d.numel()), sorted=False).values + return float(values.sum()), float(d.sum()) + + +def score_energy(up, down): + """EST layer score: squared Frobenius norm of up@down via the Gram identity, no materialization.""" + u = up.to(torch.float32) + dn = down.to(torch.float32) + return float(((u.t() @ u) * (dn @ dn.t())).sum()) + + +def clear(): + state['entries'] = {} + state['flips'] = {} + state['gamma'] = 1.0 + state['total_steps'] = 0 + state['finalized'] = False + + +def register(layer_name, module, kind, segments, scores, factors=None): + """Record a select-mode layer: its two segments (or bf16 factor pairs) and static scores. + + kind 'factor': segments = [(start, stop), (start, stop)] column ranges in svd_up/svd_down + with the transposed-layout flag appended; stashes both segments' values for flips. + kind 'weight': factors = [(up0, down0), (up1, down1)] kept for recompute-from-backup. + """ + entry = {'module': weakref.ref(module), 'kind': kind, 'segments': segments, 'scores': scores, 'factors': factors, 'stash': None} + if kind == 'factor': + (s0, s1), (t0, t1), transposed = segments + up = module.svd_up.data + entry['stash'] = (segment_view(up, s0, s1, transposed).clone(), segment_view(up, t0, t1, transposed).clone()) + state['entries'][layer_name] = entry + state['finalized'] = False + + +def segment_view(up, start, stop, transposed): + return up[start:stop] if transposed else up[:, start:stop] + + +def layer_flip_step(scores, total_steps): + """First step index at which the style side wins; total_steps when it never does, 0 when style wins from the start.""" + m = mode() + sc, ss = scores + for step in range(total_steps): + t = step / max(1, total_steps - 1) + if m == 'klora': + ramp = state['gamma'] * (ramp_alpha() * t + KLORA_BETA) + if ss * ramp > sc: + return step + else: # estlora: content keeps the layer while sc >= gamma_t * ss + ramp = ramp_alpha() * t + (1.0 - manual_discrepancy()) + if sc < ramp * ss: + return step + return total_steps + + +def finalize(total_steps): + """Build the inverted flip map for the pass; select-mode layers start at their step-0 winner.""" + state['total_steps'] = int(total_steps) + state['flips'] = {} + for layer_name, entry in state['entries'].items(): + flip_at = layer_flip_step(entry['scores'], state['total_steps']) + initial = 1 if flip_at == 0 else 0 + apply_selection(layer_name, entry, initial) + if 0 < flip_at < state['total_steps']: + state['flips'].setdefault(flip_at, []).append(layer_name) + state['finalized'] = True + + +def reset(total_steps): + """Per-pass reset from set_callbacks_p: restore initial selections and reschedule for this pass's step count.""" + if mode() not in SELECT_MODES or not state['entries']: + return + finalize(total_steps) + + +def on_step(step): + """Flip the layers whose crossover is this step; non-flip steps are a dict miss.""" + if not state['finalized']: + return + for layer_name in state['flips'].get(int(step), ()): + entry = state['entries'].get(layer_name) + if entry is not None: + apply_selection(layer_name, entry, 1) + + +def apply_selection(layer_name, entry, winner): + module = entry['module']() + if module is None: + state['entries'].pop(layer_name, None) + return + if entry['kind'] == 'factor': + (s0, s1), (t0, t1), transposed = entry['segments'] + up = module.svd_up.data + keep, drop = ((t0, t1), (s0, s1)) if winner == 1 else ((s0, s1), (t0, t1)) + stash = entry['stash'][winner] + segment_view(up, keep[0], keep[1], transposed).copy_(stash.to(device=up.device, dtype=up.dtype)) + segment_view(up, drop[0], drop[1], transposed).zero_() + else: + weight_selection(module, entry, winner) + + +def weight_selection(module, entry, winner): + backup = getattr(module, 'network_weights_backup', None) + if not isinstance(backup, torch.Tensor): # fuse mode keeps a bool sentinel, not a pristine copy + warn_once('select-nobackup', 'Network stack: select flip skipped, no weight backup') + return + up, down = entry['factors'][winner] + weight = backup.to(device=module.weight.device, dtype=torch.float32) + delta = up.to(device=module.weight.device, dtype=torch.float32) @ down.to(device=module.weight.device, dtype=torch.float32) + module.weight.data.copy_((weight + delta.reshape(weight.shape)).to(module.weight.dtype)) diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 9e3b2e7a0..58548b82a 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -5,6 +5,7 @@ from modules.errorlimiter import limit_errors from modules.lora import lora_common as l from modules.lora import lora_overrides from modules.lora import lora_sdnq +from modules.lora import lora_stack from modules.lora.lora_apply import network_apply_weights, network_apply_direct, network_backup_weights, network_calc_weights from modules import shared, devices, sd_models from modules.logger import log, console @@ -89,7 +90,7 @@ def network_activate(include=None, exclude=None): refused = 0 with devices.inference_context(), pbar: wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () - stack_sig = lora_sdnq.signature() # apply-mechanism token tracked beside network_current_names so a settings-only flip re-applies + stack_sig = lora_stack.signature() + lora_sdnq.signature() # tracked beside network_current_names so settings-only stack or mechanism changes re-apply applied_layers.clear() lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind lora_sdnq.hosted_layers.clear() @@ -100,7 +101,7 @@ def network_activate(include=None, exclude=None): for _, module in modules[component]: network_layer_name = getattr(module, 'network_layer_name', None) current_names = getattr(module, "network_current_names", ()) - if getattr(module, 'weight', None) is None or shared.state.interrupted or (network_layer_name is None) or (current_names == component_wanted and getattr(module, 'network_current_stack', '') == stack_sig): + if getattr(module, 'weight', None) is None or shared.state.interrupted or (network_layer_name is None) or (current_names == component_wanted and getattr(module, 'network_current_stack', 'sum') == stack_sig): if task is not None: pbar.update(task, advance=1) continue diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index a873ea68d..93ebbb3aa 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -709,6 +709,12 @@ def create_settings(cmd_opts): "lora_sdnq_host_calib": OptionInfo(True, "LoRA quantized host calibration"), "lora_sdnq_host_cache": OptionInfo(10, "LoRA quantized host cache", gr.Slider, {"minimum": 0, "maximum": 100, "step": 1}), + "lora_stack_sep": OptionInfo("

Stacking options

", "", gr.HTML), + "lora_stack_mode": OptionInfo("sum", "LoRA stack mode", gr.Dropdown, {"choices": ["sum", "ties", "dare_ties", "dare_linear", "magnitude_prune", "klora", "estlora"]}), + "lora_stack_density": OptionInfo(0.5, "LoRA stack density", gr.Slider, {"minimum": 0.05, "maximum": 1.0, "step": 0.05}), + "lora_stack_alpha": OptionInfo(1.5, "LoRA stack ramp", gr.Slider, {"minimum": 0.0, "maximum": 3.0, "step": 0.1}), + "lora_stack_discrepancy": OptionInfo(0.5, "LoRA stack discrepancy", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.05}), + "lora_meta_sep": OptionInfo("

Metadata

", "", gr.HTML), "lora_add_hashes_to_infotext": OptionInfo(False, "LoRA add hash info to metadata"), })) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 3b745ad11..1949fd6a3 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -76,7 +76,7 @@ modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) from modules.errors import log # pylint: disable=wrong-import-position from modules import shared, sd_models # pylint: disable=wrong-import-position -from modules.lora import network, network_lora, lora_sdnq, networks # pylint: disable=wrong-import-position +from modules.lora import network, network_lora, lora_sdnq, lora_stack, networks # pylint: disable=wrong-import-position from modules.lora import lora_common as l_common # pylint: disable=wrong-import-position from sdnq.quantizer import sdnq_quantize_layer, SDNQConfig # pylint: disable=wrong-import-position @@ -1403,6 +1403,165 @@ def test_cache_fastpath_serves_mixed_set(): return True +def test_cache_fastpath_serves_dense_pair(): + import tempfile + layer = build_layer('uint4') + with tempfile.TemporaryDirectory() as tmp: + with host_rank(64), host_cache(10, os.path.join(tmp, 'cache')), stack_mode('ties'), mock_model(lin=layer): + net1, _D1 = cache_fixture(tmp, layer, name='densea', seed=65) + net2, _D2 = cache_fixture(tmp, layer, name='denseb', seed=66) + activate(net1, net2) + first = dq(layer) + activate() + with counting_calc() as calls: + activate(net1, net2) # the dense combine lives inside delta assembly; the replay skips both + assert calls['n'] == 0, 'a dense-pair replay must not assemble or combine deltas' + assert hasattr(layer, 'sdnq_lora_svd_stash') + assert torch.equal(dq(layer), first), 'dense-pair replay must be bit-identical to the fresh apply' + activate() + return True + + +CAT_STACK = category('stack-dense') + + +@contextmanager +def stack_mode(name, dens=None): + old_m = getattr(shared.opts, 'lora_stack_mode', 'sum') + old_d = getattr(shared.opts, 'lora_stack_density', 0.5) + shared.opts.lora_stack_mode = name + if dens is not None: + shared.opts.lora_stack_density = dens + try: + yield + finally: + shared.opts.lora_stack_mode = old_m + shared.opts.lora_stack_density = old_d + + +def test_ties_sign_consensus_drops_conflicts(): + with stack_mode('ties', dens=1.0): # density 1 disables the trim, isolating sign election + d1 = torch.tensor([[1.0, 1.0, -1.0]], device=DEVICE) + d2 = torch.tensor([[2.0, -0.5, -2.0]], device=DEVICE) + out = lora_stack.combine([('a', d1), ('b', d2)], 'lora_transformer_test') + expected = torch.tensor([[1.5, 1.0, -1.5]], device=DEVICE) # agree: mean; conflict: majority-mass side only + assert torch.allclose(out, expected), f'{out.tolist()}' + return True + + +def test_dare_mask_is_deterministic_across_calls(): + torch.manual_seed(21) + d1 = torch.randn(64, 96, device=DEVICE) * 1e-2 + d2 = torch.randn(64, 96, device=DEVICE) * 1e-2 + with stack_mode('dare_linear', dens=0.5): + out1 = lora_stack.combine([('a', d1), ('b', d2)], 'lora_transformer_test') + out2 = lora_stack.combine([('a', d1), ('b', d2)], 'lora_transformer_test') + other = lora_stack.combine([('a', d1), ('b', d2)], 'lora_transformer_other') + assert torch.equal(out1, out2), 'same layer and nets must draw the same masks' + assert not torch.equal(out1, other), 'a different layer must draw different masks' + return True + + +def test_dare_rescales_by_inverse_density(): + torch.manual_seed(22) + d1 = torch.randn(64, 96, device=DEVICE) + d2 = torch.randn(64, 96, device=DEVICE) + with stack_mode('dare_linear', dens=0.5): + out = lora_stack.combine([('a', d1), ('b', d2)], 'lora_transformer_test') + cands = torch.stack([torch.zeros_like(d1), 2 * d1, 2 * d2, 2 * d1 + 2 * d2]) + nearest = (cands - out.unsqueeze(0)).abs().min(dim=0).values + assert float(nearest.max()) < 1e-5, 'every element must be a 1/density-rescaled subset sum' + zero_frac = float((out == 0).float().mean()) + assert 0.1 < zero_frac < 0.45, f'both-dropped fraction {zero_frac} should sit near 0.25' + return True + + +def test_magnitude_prune_keeps_top_density(): + torch.manual_seed(23) + d1 = torch.randn(128, 64, device=DEVICE) + d2 = torch.zeros_like(d1) # inert second delta isolates the trim + with stack_mode('magnitude_prune', dens=0.25): + out = lora_stack.combine([('a', d1), ('b', d2)], 'lora_transformer_test') + kept = out != 0 + frac = float(kept.float().mean()) + assert 0.2 < frac < 0.3, f'kept fraction {frac}' + assert torch.equal(out[kept], d1[kept]), 'kept elements must pass through unchanged' + assert float(d1.abs()[~kept].max()) <= float(d1.abs()[kept].min()) + 1e-6, 'kept set must be the top magnitudes' + return True + + +def test_dense_two_plain_loras_hosted_not_summed(): + layer = build_layer('uint4') + A1, B1, D1 = make_delta(seed=31, sigma=1e-2) + A2, B2, D2 = make_delta(seed=32, sigma=1e-2) + n1 = make_net('td1', layer, A1, B1) + n2 = make_net('td2', layer, A2, B2) + with host_rank(64), mock_model(lin=layer): + Wdq0 = dq(layer) + with stack_mode('ties', dens=0.5): + activate(n1, n2) + # hosted at rank 64 leaves a rank-64 factor bucket; the exact concat of two rank-8 nets would leave 16 + assert layer.svd_up.shape[1] == 64, f'dense mode must route a factorable pair to hosting, rank={layer.svd_up.shape[1]}' + eff = dq(layer) - Wdq0 + activate() + assert torch.equal(dq(layer), Wdq0), 'removal must restore bit-exact' + with stack_mode('ties', dens=0.5): + ref = lora_stack.combine([('td1', D1), ('td2', D2)], 'lora_transformer_test') + s = D1 + D2 + assert float((eff - s).norm() / s.norm()) > 0.05, 'ties result must differ from the plain sum' + assert rho_of(eff, ref) > 0.8, f'hosted ties delta must track the ties reference, rho={rho_of(eff, ref):.3f}' # rank-64 truncation of the densified delta keeps ~0.89 + assert float((eff - ref).norm()) < float((eff - s).norm()), 'hosted result must sit closer to the ties reference than to the plain sum' + return True + + +def test_single_net_ignores_dense_mode(): + layer = build_layer('uint4') + A, B, D = make_delta(seed=33) + net = make_net('solo', layer, A, B) + with mock_model(lin=layer), stack_mode('ties', dens=0.5): + Wdq0 = dq(layer) + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'single net must stay on the exact factor path' + assert rho_of(dq(layer) - Wdq0, D) > 0.99 + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_te_layer_stays_plain_sum(): + layer = build_layer('uint4') + layer.network_layer_name = 'lora_te_test' + A1, B1, D1 = make_delta(seed=34) + A2, B2, D2 = make_delta(seed=35) + n1 = make_net('te1', layer, A1, B1) + n2 = make_net('te2', layer, A2, B2) + with mock_model(lin=layer), stack_mode('ties', dens=0.5): + Wdq0 = dq(layer) + activate(n1, n2) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'te layers must stay on the exact concat path' + assert rho_of(dq(layer) - Wdq0, D1 + D2) > 0.99 + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_sum_mode_keeps_exact_stacking(): + layer = build_layer('uint4') + A1, B1, D1 = make_delta(seed=36) + A2, B2, D2 = make_delta(seed=37) + n1 = make_net('s1', layer, A1, B1) + n2 = make_net('s2', layer, A2, B2) + with mock_model(lin=layer), stack_mode('sum'): + Wdq0 = dq(layer) + activate(n1, n2) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'sum mode must keep the exact concat path' + assert layer.svd_up.shape[1] == 16, f'sum mode must concat exactly, rank={layer.svd_up.shape[1]}' + assert rho_of(dq(layer) - Wdq0, D1 + D2) > 0.99 + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + CAT_COMPILE = category('compile') @@ -1579,9 +1738,14 @@ def run_tests(): log.warning('=== Factor cache ===') for fn in [test_factor_cache_roundtrip_bitexact, test_factor_cache_invalidates_on_multiplier, test_factor_cache_int8_quantization, test_factor_cache_disabled_at_zero, test_factor_cache_invalidates_on_calib_toggle, - test_cache_fastpath_skips_calc, test_cache_fastpath_serves_mixed_set, + test_cache_fastpath_skips_calc, test_cache_fastpath_serves_mixed_set, test_cache_fastpath_serves_dense_pair, test_attach_trims_stored_null_tail]: run_test(CAT_FCACHE, fn) + log.warning('=== Stack modes: dense ===') + for fn in [test_ties_sign_consensus_drops_conflicts, test_dare_mask_is_deterministic_across_calls, test_dare_rescales_by_inverse_density, + test_magnitude_prune_keeps_top_density, test_dense_two_plain_loras_hosted_not_summed, test_single_net_ignores_dense_mode, + test_te_layer_stays_plain_sum, test_sum_mode_keeps_exact_stacking]: + run_test(CAT_STACK, fn) log.warning('=== Compile ===') for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse]: run_test(CAT_COMPILE, fn) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 135283560..522ae19e6 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -868,6 +868,10 @@ {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry non-factorable adapter types (LoKR, LoHA, OFT, DoRA) on the side-channel of SDNQ models quantized below 8 bits, where merging would erase most of the adapter. Higher values keep more of the adapter at proportionally higher memory cost. Set to 0 to disable and merge into the quantized weights instead.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized host calibration","localized":"","hint":"Collection of per-channel activation statistics during normal generations on models quantized below 8 bits, cached per checkpoint. When available, the statistics weight side-channel hosting of non-factorable adapter types toward the channels carrying the most activation energy, improving delivered fidelity at the same host rank.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized host cache","localized":"","hint":"Disk budget in GB for caching the side-channel factors computed when hosting non-factorable adapter types on quantized models. A cached configuration skips the truncation math on reapply; least recently used entries are evicted past the budget. Set to 0 to disable.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack mode","localized":"","hint":"Combination rule applied when multiple LoRA networks target the same layer. sum adds all contributions. ties merges only elements whose signs agree after keeping the strongest ones; dare variants randomly drop elements and rescale the survivors; magnitude_prune keeps only the strongest elements of each network. klora and estlora select one of exactly two networks per layer, with the first network in the prompt treated as subject and the second as style, and the balance shifting from subject toward style over the sampling steps. Applied by the native loader only; other load methods behave as sum.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack density","localized":"","hint":"Fraction of elements kept by the ties, dare and magnitude_prune stack modes. Lower values keep only the strongest contributions of each network.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack ramp","localized":"","hint":"Steepness of the subject-to-style shift over the sampling steps for the klora and estlora stack modes. Higher values strengthen the late-step shift toward the style network.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack discrepancy","localized":"","hint":"Stand-in for the estlora mode's data-derived style separation estimate. Higher values shift the overall balance toward the subject network.","ui":"settings_lora"}, {"id":"","label":"LoRA auto-apply tags","localized":"","hint":"Automatically add trigger words/tags from LoRA metadata to your prompt.
Set to the number of tags to auto-apply, e.g., 3 = add top 3 trigger tags.
Set to 0 to disable, -1 to add all available tags.","ui":"settings_lora"}, {"id":"","label":"LoRA memory cache","localized":"","hint":"How many LoRAs to keep in network for future use before requiring reloading from storage","ui":"settings_lora"}, {"id":"","label":"LoRA add hash info to metadata","localized":"","hint":"Include LoRA file hashes in generated image metadata.
Useful for reproducibility and tracking which exact LoRA versions were used.","ui":"settings_lora"}, From 259e15fafe3f93ef61126f5ade3056b3e250b33e Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 02:58:11 +0100 Subject: [PATCH 063/270] feat(lora): per-layer select stack modes klora and estlora Two-network subject+style sets select a winner per layer instead of summing: scores are top-K magnitude sums (klora) or Frobenius energies (estlora), and a timestep ramp shifts layers from the subject network toward the style network across sampling, reduced to at most one precomputed flip per layer per pass. On sub-8-bit SDNQ the pair rides the side-channel as separate segments flipped in place; other layers recompute the winner from the pristine backup, so select modes force backup mode. Selection resets per pass from the callback setup and is gated off under model compile. estlora's measured style-discrepancy term is exposed as an option. Adds XYZ axes for the stack settings. --- modules/lora/extra_networks_lora.py | 3 + modules/lora/lora_apply.py | 8 +- modules/lora/lora_overrides.py | 3 + modules/lora/lora_sdnq.py | 67 +++++++- modules/lora/lora_stack.py | 81 ++++++++-- modules/lora/networks.py | 33 ++++ modules/processing_callbacks.py | 6 + scripts/xyz/xyz_grid_classes.py | 16 ++ test/test-sdnq-lora-factors.py | 228 ++++++++++++++++++++++++++++ 9 files changed, 426 insertions(+), 19 deletions(-) diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index f5cf5647d..c81b94072 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -225,6 +225,9 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): reason = '' load_method, load_reason = lora_overrides.get_method() + from modules.lora import lora_stack + if load_method != 'native' and lora_stack.mode() != 'sum': + lora_stack.warn_once(f'method-{load_method}', f'Network stack: mode={lora_stack.mode()} method={load_method} unsupported, using sum') if debug: import sys fn = f'{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}' # pylint: disable=protected-access diff --git a/modules/lora/lora_apply.py b/modules/lora/lora_apply.py index 8367d61ce..11b91d9e9 100644 --- a/modules/lora/lora_apply.py +++ b/modules/lora/lora_apply.py @@ -68,7 +68,7 @@ def network_backup_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.Gr return backup_size -def network_calc_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.GroupNorm | torch.nn.LayerNorm | diffusers.models.lora.LoRACompatibleLinear | diffusers.models.lora.LoRACompatibleConv, network_layer_name: str, use_previous: bool = False, *, elimit: Callable[[], None] | None = None): +def network_calc_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.GroupNorm | torch.nn.LayerNorm | diffusers.models.lora.LoRACompatibleLinear | diffusers.models.lora.LoRACompatibleConv, network_layer_name: str, use_previous: bool = False, *, elimit: Callable[[], None] | None = None, per_net: bool = False): if shared.opts.diffusers_offload_mode == "none": try: self.to(devices.device) @@ -77,8 +77,8 @@ def network_calc_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.Grou batch_updown = None batch_ex_bias = None stack_deltas = None - if lora_stack.mode() in lora_stack.DENSE_MODES and network_layer_name is not None and not network_layer_name.startswith('lora_te'): - stack_deltas = [] # collect per-net deltas; combined after the loop (bias deltas stay summed) + if per_net or (lora_stack.mode() in lora_stack.DENSE_MODES and network_layer_name is not None and not network_layer_name.startswith('lora_te')): + stack_deltas = [] # collect per-net deltas; combined after the loop unless the caller wants them separate (bias deltas stay summed) loaded = l.loaded_networks if not use_previous else l.previously_loaded_networks for net in loaded: module = net.modules.get(network_layer_name, None) @@ -142,6 +142,8 @@ def network_calc_weights(self: torch.nn.Conv2d | torch.nn.Linear | torch.nn.Grou if elimit is not None: elimit() continue + if per_net: + return stack_deltas, batch_ex_bias if stack_deltas is not None and stack_deltas: if len(stack_deltas) >= 2: t0 = time.time() diff --git a/modules/lora/lora_overrides.py b/modules/lora/lora_overrides.py index eb629896e..078b285b2 100644 --- a/modules/lora/lora_overrides.py +++ b/modules/lora/lora_overrides.py @@ -112,6 +112,9 @@ def disable_fuse(): round-trips it through its storage format. On quantized weights that is a dequantize-add-requantize cycle per network swap whose error compounds. """ + from modules.lora import lora_stack + if lora_stack.mode() in lora_stack.SELECT_MODES: + return True # select stack modes flip per-layer winners against the pristine backup sd_model = getattr(shared.sd_model, 'pipe', shared.sd_model) if is_quantized(sd_model): return True diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 7973121b5..b1ef10d45 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -174,6 +174,7 @@ def remove_factors(self): self.svd_up = svd_up self.svd_down = svd_down del self.sdnq_lora_svd_stash + lora_stack.drop(getattr(self, 'network_layer_name', None)) # a selection schedule must not outlive the segments it points into return True @@ -214,11 +215,23 @@ def apply_factors(self, network_layer_name, wanted_names): def append_factors(self, ups, downs): - """Concatenate ``[out, r]`` / ``[r, in]`` factor pairs onto the layer's svd channel and stash the originals.""" + """Concatenate ``[out, r]`` / ``[r, in]`` factor pairs onto the layer's svd channel and stash the originals. + + Returns the appended parts' rank ranges plus the transposed-layout flag; the + checkpoint's own factors occupy the range before the first entry and bucket + padding lands after the last, so the ranges stay valid on the live buffers. + """ deq = self.sdnq_dequantizer device = self.scale.device dtype = deq.result_dtype orig_up, orig_down = self.svd_up, self.svd_down + orig_rank = 0 + if orig_up is not None: + orig_rank = orig_up.shape[0] if deq.use_quantized_matmul else orig_up.shape[1] + segments, offset = [], orig_rank + for u in ups: + segments.append((offset, offset + u.shape[1])) + offset += u.shape[1] if deq.use_quantized_matmul: # matmul layout stores factors transposed: svd_up [r, out], svd_down [in, r] parts_up = ([orig_up.to(device=devices.device, dtype=dtype)] if orig_up is not None else []) + [u.t() for u in ups] @@ -240,6 +253,7 @@ def append_factors(self, ups, downs): self.sdnq_lora_svd_stash = (orig_up, orig_down) self.svd_up = torch.nn.Parameter(new_up.to(device=device), requires_grad=False) self.svd_down = torch.nn.Parameter(new_down.to(device=device), requires_grad=False) + return segments, deq.use_quantized_matmul def host_candidate(self, network_layer_name, wanted_names): @@ -434,6 +448,57 @@ def truncate_delta(self, D, dtype): return up_h, down_h, energy, rms is not None +def apply_select(self, network_layer_name, per_net, wanted_names): + """Attach two networks' contributions as separate side-channel segments for per-layer selection. + + Factorable members ride exactly; the rest host as their own truncated svd + with per-net cache entries. Segment ranges and selection scores register + with ``lora_stack``; the flip schedule executes from the step callback. + Returns None when the pair cannot ride the channel; the caller falls back. + """ + from sdnq.quant_utils import rotate_hadamard + deq = self.sdnq_dequantizer + changed = remove_factors(self) + if wanted_names == (): + return changed + if per_net is None or len(per_net) != 2: + return None + dtype = deq.result_dtype + lora_factor_cache.begin_pass(wanted_names) + pairs, ranks = [], [] + for i, (net_name, D) in enumerate(per_net): + if D is None or D.ndim != 2 or tuple(D.shape) != tuple(deq.original_shape): + return None + net = next((n for n in l.loaded_networks if n.name == net_name), None) + module = net.modules.get(network_layer_name, None) if net is not None else None + if module is None: + return None + ranks.append(int(getattr(module, 'dim', 0) or 0) or min(int(shared.opts.lora_sdnq_host_rank), *deq.original_shape)) + factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) + if factors is not None: + up_i, down_i = factors + if deq.use_hadamard: + down_i = rotate_hadamard(down_i.to(dtype=torch.float32), group_size=deq.hadamard_group_size).to(dtype=dtype) + else: + key = f'{network_layer_name}#{i}' + cached = lora_factor_cache.fetch(key) + if cached is not None: + up_i, down_i = cached[0].to(device=devices.device, dtype=dtype), cached[1].to(device=devices.device, dtype=dtype) + hosted_layers.append((key, cached[2], cached[3])) + else: + up_i, down_i, energy, calibrated = truncate_delta(self, D.detach().to(devices.device, torch.float32), dtype) + up_i, down_i = lora_factor_cache.store(key, up_i, down_i, energy, calibrated, float(D.detach().float().square().mean().sqrt())) + hosted_layers.append((key, energy, calibrated)) + pairs.append((up_i, down_i)) + d0 = per_net[0][1].detach().to(devices.device, torch.float32) + d1 = per_net[1][1].detach().to(devices.device, torch.float32) + scores, abs_sums = lora_stack.score_pair(d0, d1, ranks[0], ranks[1]) + del d0, d1 + segments, transposed = append_factors(self, [pairs[0][0], pairs[1][0]], [pairs[0][1], pairs[1][1]]) + lora_stack.register(network_layer_name, self, 'factor', scores, segments=(segments[0], segments[1], transposed), abs_sums=abs_sums) + return True + + def note_fallback(self, network_layer_name): """Record a quantized layer taking the requantize path (summary-logged per pass); layers the routing rule sent there are counted apart.""" if getattr(self, 'sdnq_dequantizer', None) is not None and network_layer_name not in routed_layers: diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index 224505cab..313038b39 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -30,7 +30,7 @@ KLORA_BETA = 0.5 # the paper's fixed ramp offset; only the slope is user-tunable ROW_CHUNK = 512 # fp32 interiors run in first-dim slices; also fixes the DARE draw sequence SAMPLE_CAP = 1 << 22 # strided subsample bound for magnitude quantiles (full-size quantile exceeds torch limits) -state: dict = {'entries': {}, 'flips': {}, 'gamma': 1.0, 'total_steps': 0, 'finalized': False} +state: dict = {'entries': {}, 'flips': {}, 'gamma': 1.0, 'gamma_num': 0.0, 'gamma_den': 0.0, 'total_steps': 0, 'finalized': False} warned: set = set() @@ -134,6 +134,45 @@ def combine(named_deltas, layer_name): return result.to(out_dtype) +def score_pair(d0, d1, rank0, rank1): + """Selection scores for a dense delta pair: klora top-K sums (K = rank product) or est energies; plus abs-sums for the global balance.""" + abs_sums = (float(d0.abs().sum()), float(d1.abs().sum())) + if mode() == 'klora': + k = max(1, int(rank0) * int(rank1)) + s0 = float(torch.topk(d0.abs().flatten(), min(k, d0.numel()), sorted=False).values.sum()) + s1 = float(torch.topk(d1.abs().flatten(), min(k, d1.numel()), sorted=False).values.sum()) + else: + s0 = float(d0.float().square().sum()) + s1 = float(d1.float().square().sum()) + return (s0, s1), abs_sums + + +def register_weight_pair(layer_name, module, per_net): + """Score and register a weight-kind selection pair; True when the layer is scheduled.""" + from modules.lora import lora_common as l + if per_net is None or len(per_net) != 2: + return False + ranks, names = [], [] + for net_name, d in per_net: + if d is None: + return False + net = next((n for n in l.loaded_networks if n.name == net_name), None) + net_module = net.modules.get(layer_name, None) if net is not None else None + if net_module is None: + return False + names.append(net_name) + ranks.append(int(getattr(net_module, 'dim', 0) or 0) or 64) + scores, abs_sums = score_pair(per_net[0][1].float(), per_net[1][1].float(), ranks[0], ranks[1]) + register(layer_name, module, 'weight', scores, nets=tuple(names), abs_sums=abs_sums) + return True + + +def drop(layer_name): + """Forget a layer's selection entry (its factors were removed or restored).""" + if layer_name is not None and state['entries'].pop(layer_name, None) is not None: + state['finalized'] = False + + def score_topk(up, down, k): """K-LoRA layer score: sum of the top-K absolute delta entries (one dense materialization).""" d = (up.to(torch.float32) @ down.to(torch.float32)).abs().flatten() @@ -152,22 +191,28 @@ def clear(): state['entries'] = {} state['flips'] = {} state['gamma'] = 1.0 + state['gamma_num'] = 0.0 + state['gamma_den'] = 0.0 state['total_steps'] = 0 state['finalized'] = False -def register(layer_name, module, kind, segments, scores, factors=None): - """Record a select-mode layer: its two segments (or bf16 factor pairs) and static scores. +def register(layer_name, module, kind, scores, segments=None, nets=None, abs_sums=None): + """Record a select-mode layer for schedule finalization. - kind 'factor': segments = [(start, stop), (start, stop)] column ranges in svd_up/svd_down - with the transposed-layout flag appended; stashes both segments' values for flips. - kind 'weight': factors = [(up0, down0), (up1, down1)] kept for recompute-from-backup. + kind 'factor': segments = ((s0, s1), (t0, t1), transposed) column ranges on the svd + channel; both segments' pristine values are stashed for flips. kind 'weight': nets = + the two network names; the winner delta is recomputed from the layer backup at + selection time. abs_sums feeds the global magnitude balance (klora gamma). """ - entry = {'module': weakref.ref(module), 'kind': kind, 'segments': segments, 'scores': scores, 'factors': factors, 'stash': None} + entry = {'layer': layer_name, 'module': weakref.ref(module), 'kind': kind, 'segments': segments, 'scores': scores, 'nets': nets, 'stash': None} if kind == 'factor': (s0, s1), (t0, t1), transposed = segments up = module.svd_up.data entry['stash'] = (segment_view(up, s0, s1, transposed).clone(), segment_view(up, t0, t1, transposed).clone()) + if abs_sums is not None: + state['gamma_num'] += abs_sums[0] + state['gamma_den'] += abs_sums[1] state['entries'][layer_name] = entry state['finalized'] = False @@ -196,6 +241,7 @@ def layer_flip_step(scores, total_steps): def finalize(total_steps): """Build the inverted flip map for the pass; select-mode layers start at their step-0 winner.""" state['total_steps'] = int(total_steps) + state['gamma'] = (state['gamma_num'] / state['gamma_den']) if state['gamma_den'] > 0 else 1.0 state['flips'] = {} for layer_name, entry in state['entries'].items(): flip_at = layer_flip_step(entry['scores'], state['total_steps']) @@ -208,7 +254,7 @@ def finalize(total_steps): def reset(total_steps): """Per-pass reset from set_callbacks_p: restore initial selections and reschedule for this pass's step count.""" - if mode() not in SELECT_MODES or not state['entries']: + if mode() not in SELECT_MODES or not state['entries'] or int(total_steps) <= 0: return finalize(total_steps) @@ -231,20 +277,25 @@ def apply_selection(layer_name, entry, winner): if entry['kind'] == 'factor': (s0, s1), (t0, t1), transposed = entry['segments'] up = module.svd_up.data - keep, drop = ((t0, t1), (s0, s1)) if winner == 1 else ((s0, s1), (t0, t1)) + keep_seg, drop_seg = ((t0, t1), (s0, s1)) if winner == 1 else ((s0, s1), (t0, t1)) stash = entry['stash'][winner] - segment_view(up, keep[0], keep[1], transposed).copy_(stash.to(device=up.device, dtype=up.dtype)) - segment_view(up, drop[0], drop[1], transposed).zero_() + segment_view(up, keep_seg[0], keep_seg[1], transposed).copy_(stash.to(device=up.device, dtype=up.dtype)) + segment_view(up, drop_seg[0], drop_seg[1], transposed).zero_() else: weight_selection(module, entry, winner) def weight_selection(module, entry, winner): + from modules.lora import lora_common as l + from modules.lora.lora_apply import network_apply_weights backup = getattr(module, 'network_weights_backup', None) if not isinstance(backup, torch.Tensor): # fuse mode keeps a bool sentinel, not a pristine copy warn_once('select-nobackup', 'Network stack: select flip skipped, no weight backup') return - up, down = entry['factors'][winner] - weight = backup.to(device=module.weight.device, dtype=torch.float32) - delta = up.to(device=module.weight.device, dtype=torch.float32) @ down.to(device=module.weight.device, dtype=torch.float32) - module.weight.data.copy_((weight + delta.reshape(weight.shape)).to(module.weight.dtype)) + net = next((n for n in l.loaded_networks if n.name == entry['nets'][winner]), None) + net_module = net.modules.get(entry['layer'], None) if net is not None else None + if net_module is None: + return + device = module.weight.device + updown = net_module.calc_updown(backup.to(device))[0] + network_apply_weights(module, updown, None, device=device) # recomputes from the pristine backup, requantizing where the layer needs it diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 58548b82a..59a66a6e0 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -91,6 +91,7 @@ def network_activate(include=None, exclude=None): with devices.inference_context(), pbar: wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () stack_sig = lora_stack.signature() + lora_sdnq.signature() # tracked beside network_current_names so settings-only stack or mechanism changes re-apply + select_active = lora_stack.active_select(len(l.loaded_networks)) applied_layers.clear() lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind lora_sdnq.hosted_layers.clear() @@ -108,6 +109,37 @@ def network_activate(include=None, exclude=None): if group_offload and component not in group_stripped and group_will_mutate(module, network_layer_name, l.loaded_networks): device = group_offload_strip(sd_model, component, group_stripped) calced = False # tracks whether this iteration assembled the delta, so the fallthrough reuses it instead of recomputing + if select_active and component_wanted and not network_layer_name.startswith('lora_te'): + if lora_sdnq.host_candidate(module, network_layer_name, component_wanted): # sub-8-bit SDNQ pairs ride the channel as separate segments + weights_backup = getattr(module, "network_weights_backup", None) + if weights_backup is not None and not isinstance(weights_backup, bool): + network_apply_weights(module, None, None, device=device) + per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=elimit, per_net=True) + if sel_bias is None: + applied = lora_sdnq.apply_select(module, network_layer_name, per_net, component_wanted) + if applied is not None: + if applied and component_wanted: + applied_layers.append(network_layer_name) + applied_weight += 1 + module.network_current_names = component_wanted + module.network_current_stack = stack_sig + if task is not None: + pbar.update(task, advance=1) + continue + else: # other layers select by recomputing the winner from the pristine backup at schedule time + backup_size += network_backup_weights(module, network_layer_name, component_wanted, fuse) + weights_backup = getattr(module, "network_weights_backup", None) + if weights_backup is not None and not isinstance(weights_backup, bool): + per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=elimit, per_net=True) + if sel_bias is None and lora_stack.register_weight_pair(network_layer_name, module, per_net): + network_apply_weights(module, None, None, device=device) # pristine until the schedule applies the winner + applied_layers.append(network_layer_name) + applied_weight += 1 + module.network_current_names = component_wanted + module.network_current_stack = stack_sig + if task is not None: + pbar.update(task, advance=1) + continue if lora_sdnq.factor_candidate(module, network_layer_name, component_wanted): weights_backup = getattr(module, "network_weights_backup", None) if weights_backup is not None and not isinstance(weights_backup, bool): @@ -153,6 +185,7 @@ def network_activate(include=None, exclude=None): continue backup_size += network_backup_weights(module, network_layer_name, component_wanted, fuse) if not component_wanted: + lora_stack.drop(network_layer_name) # a restored layer must leave the selection schedule weights_backup = getattr(module, "network_weights_backup", None) if weights_backup is None or isinstance(weights_backup, bool): # fuse mode has no tensor backup, restore stays with network_deactivate if task is not None: diff --git a/modules/processing_callbacks.py b/modules/processing_callbacks.py index 9b8728695..1cc11dde5 100644 --- a/modules/processing_callbacks.py +++ b/modules/processing_callbacks.py @@ -17,6 +17,8 @@ def set_callbacks_p(processing): global p, warned # pylint: disable=global-statement p = processing warned = False + from modules.lora import lora_stack + lora_stack.reset(int(getattr(processing, 'steps', 0) or 0)) # per-pass: restore initial selections and reschedule flips before any step runs def prompt_callback(step, kwargs): @@ -37,6 +39,8 @@ def prompt_callback(step, kwargs): def diffusers_callback_legacy(step: int, timestep: int, latents: torch.FloatTensor | np.ndarray): if p is None: return + from modules.lora import lora_stack + lora_stack.on_step(step) if isinstance(latents, np.ndarray): # latents from Onnx pipelines is ndarray. latents = torch.from_numpy(latents) shared.state.sampling_step = step @@ -56,6 +60,8 @@ def diffusers_callback(pipe, step: int = 0, timestep: int = 0, kwargs: dict | No if kwargs is None: kwargs = {} t0 = time.time() + from modules.lora import lora_stack + lora_stack.on_step(step) if shared.opts.torch_sync: if devices.backend == "ipex": diff --git a/scripts/xyz/xyz_grid_classes.py b/scripts/xyz/xyz_grid_classes.py index 2da29d7b3..198d93c91 100644 --- a/scripts/xyz/xyz_grid_classes.py +++ b/scripts/xyz/xyz_grid_classes.py @@ -104,6 +104,10 @@ class SharedSettingsStackHelper(): todo_ratio = None teacache_thresh = None extra_networks_default_multiplier = None + lora_stack_mode = None + lora_stack_density = None + lora_stack_alpha = None + lora_stack_discrepancy = None disable_apply_metadata = None disable_apply_params = None sdnq_quant_mode = None @@ -136,6 +140,10 @@ class SharedSettingsStackHelper(): self.sd_unet = shared.opts.sd_unet self.sd_text_encoder = shared.opts.sd_text_encoder self.extra_networks_default_multiplier = shared.opts.extra_networks_default_multiplier + self.lora_stack_mode = shared.opts.lora_stack_mode + self.lora_stack_density = shared.opts.lora_stack_density + self.lora_stack_alpha = shared.opts.lora_stack_alpha + self.lora_stack_discrepancy = shared.opts.lora_stack_discrepancy self.teacache_thresh = shared.opts.teacache_thresh self.disable_apply_metadata = shared.opts.disable_apply_metadata self.disable_apply_params = shared.opts.disable_apply_params @@ -148,6 +156,10 @@ class SharedSettingsStackHelper(): shared.opts.data["disable_apply_metadata"] = self.disable_apply_metadata shared.opts.data["disable_apply_params"] = self.disable_apply_params shared.opts.data["extra_networks_default_multiplier"] = self.extra_networks_default_multiplier + shared.opts.data["lora_stack_mode"] = self.lora_stack_mode + shared.opts.data["lora_stack_density"] = self.lora_stack_density + shared.opts.data["lora_stack_alpha"] = self.lora_stack_alpha + shared.opts.data["lora_stack_discrepancy"] = self.lora_stack_discrepancy shared.opts.data["prompt_attention"] = self.prompt_attention shared.opts.data["schedulers_solver_order"] = self.schedulers_solver_order shared.opts.data["schedulers_sigma_adjust"] = self.schedulers_sigma_adjust @@ -205,6 +217,10 @@ axis_options = [ AxisOption("[Prompt] Prompt parser", str, apply_setting("prompt_attention"), choices=lambda: ["native", "compel", "xhinker", "a1111", "fixed"]), AxisOption("[Network] LoRA", str, apply_lora, cost=0.5, choices=list_lora), AxisOption("[Network] LoRA strength", float, apply_lora_strength, cost=0.6), + AxisOption("[Network] LoRA stack mode", str, apply_setting("lora_stack_mode"), cost=0.6, choices=lambda: ["sum", "ties", "dare_ties", "dare_linear", "magnitude_prune", "klora", "estlora"]), + AxisOption("[Network] LoRA stack density", float, apply_setting("lora_stack_density"), cost=0.6), + AxisOption("[Network] LoRA stack ramp", float, apply_setting("lora_stack_alpha"), cost=0.6), + AxisOption("[Network] LoRA stack discrepancy", float, apply_setting("lora_stack_discrepancy"), cost=0.6), AxisOption("[Network] Styles", str, apply_styles, choices=lambda: [s.name for s in shared.prompt_styles.styles.values()]), AxisOption("[Param] Width", int, apply_field("width")), AxisOption("[Param] Height", int, apply_field("height")), diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 1949fd6a3..b1e1881d4 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -1562,6 +1562,228 @@ def test_sum_mode_keeps_exact_stacking(): return True +CAT_SELECT = category('stack-select') + + +@contextmanager +def select_mode(name, alpha=None, disc=None): + old = {k: getattr(shared.opts, k, None) for k in ('lora_stack_mode', 'lora_stack_alpha', 'lora_stack_discrepancy')} + shared.opts.lora_stack_mode = name + if alpha is not None: + shared.opts.lora_stack_alpha = alpha + if disc is not None: + shared.opts.lora_stack_discrepancy = disc + lora_stack.clear() + lora_stack.warned.clear() + try: + yield + finally: + for k, v in old.items(): + setattr(shared.opts, k, v) + lora_stack.clear() + + +def select_pair(layer, seed0=41, seed1=42, scale1=1.0): + A1, B1, D1 = make_delta(seed=seed0, sigma=1e-2) + A2, B2, D2 = make_delta(seed=seed1, sigma=1e-2) + if scale1 != 1.0: + A2, D2 = A2 * scale1, D2 * scale1 + n1 = make_net('subject', layer, A1, B1) + n2 = make_net('style', layer, A2, B2) + return n1, n2, D1, D2 + + +def test_select_flip_schedule_end_to_end(): + layer = build_layer('uint4') + n1, n2, D1, D2 = select_pair(layer) + with mock_model(lin=layer), select_mode('klora', alpha=1.5): + Wdq0 = dq(layer) + activate(n1, n2) + entry = lora_stack.state['entries'].get('lora_transformer_test') + assert entry is not None and entry['kind'] == 'factor', 'a factorable pair must register factor segments' + assert entry['segments'][0] == (0, 8) and entry['segments'][1] == (8, 16), f'segments {entry["segments"]}' + total = 20 + lora_stack.reset(total) + flips = [s for s, layers in lora_stack.state['flips'].items() for _ in layers] + assert len(flips) <= 1, 'a monotone ramp allows at most one flip per layer' + eff0 = dq(layer) - Wdq0 + winner0 = 0 if rho_of(eff0, D1) > rho_of(eff0, D2) else 1 + for s in range(total): + lora_stack.on_step(s) + eff1 = dq(layer) - Wdq0 + if flips: + assert rho_of(eff1, D2) > 0.99, 'after the flip the style delta must be selected' + assert rho_of(eff0, D1) > 0.99, 'before the flip the subject delta must be selected' + else: + assert rho_of(eff1, [D1, D2][winner0]) > 0.99 + activate() + assert torch.equal(dq(layer), Wdq0), 'removal from an end-of-schedule state must restore bit-exact' + return True + + +def test_select_initial_style_when_ramp_starts_won(): + layer = build_layer('uint4') + n1, n2, _D1, D2 = select_pair(seed0=43, seed1=44, scale1=8.0, layer=layer) # style delta dominates + with mock_model(lin=layer), select_mode('estlora', alpha=1.0, disc=0.5): + Wdq0 = dq(layer) + activate(n1, n2) + lora_stack.reset(20) + eff = dq(layer) - Wdq0 + assert rho_of(eff, D2) > 0.99, 'a layer whose style side wins at step 0 must start style-selected' + return True + + +def test_select_flip_is_inplace_and_shape_stable(): + layer = build_layer('uint4') + n1, n2, _D1, _D2 = select_pair(layer, seed0=45, seed1=46) + with mock_model(lin=layer), select_mode('klora'): + activate(n1, n2) + param_id = id(layer.svd_up) + shape = tuple(layer.svd_up.shape) + lora_stack.reset(20) + entry = lora_stack.state['entries']['lora_transformer_test'] + (s0, s1), (t0, t1), transposed = entry['segments'] + zeroed = lora_stack.segment_view(layer.svd_up.data, t0, t1, transposed) + kept = lora_stack.segment_view(layer.svd_up.data, s0, s1, transposed) + assert float(zeroed.abs().sum()) == 0.0 or float(kept.abs().sum()) == 0.0, 'exactly one segment must be zeroed initially' + for s in range(20): + lora_stack.on_step(s) + assert id(layer.svd_up) == param_id and tuple(layer.svd_up.shape) == shape, 'flips must mutate in place, never reassign' + return True + + +def test_select_matmul_transposed_layout(): + layer = build_layer('uint4', use_quantized_matmul=True) + n1, n2, D1, D2 = select_pair(layer, seed0=47, seed1=48) + with mock_model(lin=layer), select_mode('klora'): + Wdq0 = dq(layer) + activate(n1, n2) + entry = lora_stack.state['entries']['lora_transformer_test'] + assert entry['segments'][2] is True, 'quantized-matmul layout must register as transposed' + lora_stack.reset(20) + eff = dq(layer) - Wdq0 + assert max(rho_of(eff, D1), rho_of(eff, D2)) > 0.99, 'initial selection must realize one delta exactly' + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_select_per_net_hosted_pair(): + layer = build_layer('uint4') + torch.manual_seed(49) + Dd1 = (torch.randn(OUT_F, 24, device=DEVICE) @ torch.randn(24, IN_F, device=DEVICE)) * 1e-3 # rank inside the host cap so truncation is near-lossless + Dd2 = (torch.randn(OUT_F, 24, device=DEVICE) @ torch.randn(24, IN_F, device=DEVICE)) * 1e-3 + n1 = make_dense_net('lk1', layer, Dd1) + n2 = make_dense_net('lk2', layer, Dd2) + with host_rank(32), mock_model(lin=layer), select_mode('klora'): + Wdq0 = dq(layer) + activate(n1, n2) + entry = lora_stack.state['entries'].get('lora_transformer_test') + assert entry is not None, 'non-factorable pairs must register through per-net hosting' + assert entry['segments'][0] == (0, 24) and entry['segments'][1] == (24, 48), f'segments {entry["segments"]}' # hosting stores the effective rank (24), not the cap + lora_stack.reset(20) + eff = dq(layer) - Wdq0 + best = max(rho_of(eff, Dd1), rho_of(eff, Dd2)) + assert best > 0.9, f'initial selection must realize one hosted delta, rho={best:.3f}' + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_select_reset_restores_initial_state(): + layer = build_layer('uint4') + n1, n2, _D1, _D2 = select_pair(layer, seed0=51, seed1=52) + with mock_model(lin=layer), select_mode('klora'): + activate(n1, n2) + lora_stack.reset(20) + initial = dq(layer) + for s in range(20): + lora_stack.on_step(s) + lora_stack.reset(20) + assert torch.equal(dq(layer), initial), 'a fresh pass must restore the initial selection without re-activation' + return True + + +def test_select_deactivate_from_midflip(): + layer = build_layer('uint4') + n1, n2, _D1, _D2 = select_pair(layer, seed0=53, seed1=54) + with mock_model(lin=layer), select_mode('klora'): + Wdq0 = dq(layer) + activate(n1, n2) + lora_stack.reset(20) + for s in range(10): + lora_stack.on_step(s) + activate() + assert torch.equal(dq(layer), Wdq0), 'removal mid-schedule must restore bit-exact' + assert not lora_stack.state['entries'], 'removal must drop the selection entry' + return True + + +def test_select_requires_exactly_two_nets(): + layer = build_layer('uint4') + A3, B3, _D3 = make_delta(seed=55) + n1, n2, _D1, _D2 = select_pair(layer, seed0=56, seed1=57) + n3 = make_net('third', layer, A3, B3) + with mock_model(lin=layer), select_mode('klora'): + activate(n1, n2, n3) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'three nets must fall back to the exact concat path' + assert not lora_stack.state['entries'], 'no selection entries outside the two-net case' + activate() + return True + + +def test_select_gated_off_when_compiled(): + layer = build_layer('uint4') + n1, n2, _D1, _D2 = select_pair(layer, seed0=58, seed1=59) + old_compile = getattr(shared.opts, 'cuda_compile', None) + try: + shared.opts.cuda_compile = ['Model'] + with mock_model(lin=layer), select_mode('klora'): + activate(n1, n2) + assert not lora_stack.state['entries'], 'select must gate off under model compile' + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'gated select behaves as sum' + activate() + finally: + shared.opts.cuda_compile = old_compile + return True + + +def test_est_energy_matches_full_frobenius(): + torch.manual_seed(60) + up = torch.randn(64, 8, device=DEVICE) + down = torch.randn(8, 96, device=DEVICE) + gram = lora_stack.score_energy(up, down) + full = float((up @ down).square().sum()) + assert abs(gram - full) / full < 1e-5, f'{gram} vs {full}' + return True + + +def test_select_weight_kind_plain_layer(): + lin = torch.nn.Linear(IN_F, OUT_F, bias=False, dtype=torch.bfloat16, device=DEVICE) + with torch.no_grad(): + lin.weight.copy_(torch.randn(OUT_F, IN_F, device=DEVICE) * 0.02) + lin.network_layer_name = 'lora_transformer_plain' + lin.network_current_names = () + A1, B1, D1 = make_delta(seed=61, sigma=1e-2) + A2, B2, D2 = make_delta(seed=62, sigma=1e-2) + n1 = make_net('w1', lin, A1, B1) + n2 = make_net('w2', lin, A2, B2) + W0 = lin.weight.detach().float().clone() + with mock_model(lin=lin), select_mode('klora'): + activate(n1, n2) + entry = lora_stack.state['entries'].get('lora_transformer_plain') + assert entry is not None and entry['kind'] == 'weight', 'plain layers must register weight-kind selection' + assert torch.equal(lin.weight.detach().float(), W0), 'weights stay pristine until the schedule applies a winner' + lora_stack.reset(20) + eff = lin.weight.detach().float() - W0 + assert max(rho_of(eff, D1), rho_of(eff, D2)) > 0.95, 'initial selection must apply one delta from backup' + for s in range(20): + lora_stack.on_step(s) + activate() + assert torch.equal(lin.weight.detach().float(), W0), 'restore-only pass must return the pristine weight' + return True + + CAT_COMPILE = category('compile') @@ -1746,6 +1968,12 @@ def run_tests(): test_magnitude_prune_keeps_top_density, test_dense_two_plain_loras_hosted_not_summed, test_single_net_ignores_dense_mode, test_te_layer_stays_plain_sum, test_sum_mode_keeps_exact_stacking]: run_test(CAT_STACK, fn) + log.warning('=== Stack modes: select ===') + for fn in [test_select_flip_schedule_end_to_end, test_select_initial_style_when_ramp_starts_won, test_select_flip_is_inplace_and_shape_stable, + test_select_matmul_transposed_layout, test_select_per_net_hosted_pair, test_select_reset_restores_initial_state, + test_select_deactivate_from_midflip, test_select_requires_exactly_two_nets, test_select_gated_off_when_compiled, + test_est_energy_matches_full_frobenius, test_select_weight_kind_plain_layer]: + run_test(CAT_SELECT, fn) log.warning('=== Compile ===') for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse]: run_test(CAT_COMPILE, fn) From e2202bfbdfc8a7b6592287acac9d74792e1a3f0c Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 03:32:53 +0100 Subject: [PATCH 064/270] feat(lora): log exact side-channel applies The exact factor path was the only apply route with no log line; its success read as silence. Track layers taking it beside the hosted and fallback lists and report all three as key=value apply lines (apply=exact/hosted/requantize); the stack fallback notices use the same form. The suite pins its stack-mode baseline to sum so a mode left set in user config cannot reroute tests that assume plain summation. --- modules/lora/extra_networks_lora.py | 2 +- modules/lora/lora_sdnq.py | 10 ++++++++-- modules/lora/lora_stack.py | 6 +++--- modules/lora/networks.py | 1 + test/test-sdnq-lora-factors.py | 1 + 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index c81b94072..bd44ba7f5 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -227,7 +227,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): load_method, load_reason = lora_overrides.get_method() from modules.lora import lora_stack if load_method != 'native' and lora_stack.mode() != 'sum': - lora_stack.warn_once(f'method-{load_method}', f'Network stack: mode={lora_stack.mode()} method={load_method} unsupported, using sum') + lora_stack.warn_once(f'method-{load_method}', f'Network stack: mode={lora_stack.mode()} method={load_method} fallback=sum') if debug: import sys fn = f'{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}' # pylint: disable=protected-access diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index b1ef10d45..df2e7d2b0 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -55,6 +55,7 @@ from modules.logger import log fallback_layers: list[str] = [] hosted_layers: list[tuple[str, float, bool]] = [] hosted_ranks: list[int] = [] +factor_layers: list[str] = [] routed_layers: list[str] = [] REQUANT_RATIO = 0.30 # delta rms over mean grid step above which requantize can retain the delta @@ -211,6 +212,7 @@ def apply_factors(self, network_layer_name, wanted_names): if not ups: return changed append_factors(self, ups, downs) + factor_layers.append(network_layer_name) return True @@ -496,6 +498,7 @@ def apply_select(self, network_layer_name, per_net, wanted_names): del d0, d1 segments, transposed = append_factors(self, [pairs[0][0], pairs[1][0]], [pairs[0][1], pairs[1][1]]) lora_stack.register(network_layer_name, self, 'factor', scores, segments=(segments[0], segments[1], transposed), abs_sums=abs_sums) + factor_layers.append(network_layer_name) return True @@ -509,6 +512,9 @@ def report_fallbacks(): hits, misses = lora_factor_cache.flush() if hits > 0 or misses > 0: log.info(f'Network load: type=LoRA quant=sdnq cache hits={hits} misses={misses}') + if len(factor_layers) > 0: + log.info(f'Network load: type=LoRA quant=sdnq apply=exact layers={len(factor_layers)}') + factor_layers.clear() if len(hosted_layers) > 0: energies = sorted(e for _name, e, _c in hosted_layers) median = energies[len(energies) // 2] @@ -517,7 +523,7 @@ def report_fallbacks(): if len(hosted_ranks) > 0 and min(hosted_ranks) < int(shared.opts.lora_sdnq_host_rank): rs = sorted(hosted_ranks) ranks = f' k={rs[0]}-{rs[len(rs) // 2]}-{rs[-1]}' # realized rank spread; shown only when a spectrum collapsed below the cap - log.info(f'Network load: type=LoRA quant=sdnq hosted={len(hosted_layers)} rank={int(shared.opts.lora_sdnq_host_rank)}{ranks}{f" calib={calibrated}" if calibrated else ""} energy={median:.2f} min={energies[0]:.2f} non-factorable networks hosted on the svd side-channel') + log.info(f'Network load: type=LoRA quant=sdnq apply=hosted layers={len(hosted_layers)} rank={int(shared.opts.lora_sdnq_host_rank)}{ranks}{f" calib={calibrated}" if calibrated else ""} energy={median:.2f} min={energies[0]:.2f}') if l.debug: log.debug(f'Network load: type=LoRA quant=sdnq hosted={[(n, round(e, 3)) for n, e, _c in hosted_layers[:8]]}{"..." if len(hosted_layers) > 8 else ""}') hosted_layers.clear() @@ -529,7 +535,7 @@ def report_fallbacks(): routed_layers.clear() if len(fallback_layers) > 0: if enabled(): - log.warning(f'Network load: type=LoRA quant=sdnq layers={len(fallback_layers)} non-factorable networks requantized in place (reduced fidelity on quantized weights)') + log.warning(f'Network load: type=LoRA quant=sdnq apply=requantize layers={len(fallback_layers)} fidelity=reduced') else: log.info(f'Network load: type=LoRA quant=sdnq apply=requantize layers={len(fallback_layers)} reason=setting') if l.debug: diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index 313038b39..b1d889bda 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -78,10 +78,10 @@ def active_select(n_loaded): if m not in SELECT_MODES: return False if n_loaded != 2: - warn_once('select-count', f'Network stack: mode={m} networks={n_loaded} requires exactly 2, using sum') + warn_once('select-count', f'Network stack: mode={m} networks={n_loaded} required=2 fallback=sum') return False if select_blocked(): - warn_once('select-compile', f'Network stack: mode={m} disabled with model compile, using sum') + warn_once('select-compile', f'Network stack: mode={m} compile=model fallback=sum') return False return True @@ -290,7 +290,7 @@ def weight_selection(module, entry, winner): from modules.lora.lora_apply import network_apply_weights backup = getattr(module, 'network_weights_backup', None) if not isinstance(backup, torch.Tensor): # fuse mode keeps a bool sentinel, not a pristine copy - warn_once('select-nobackup', 'Network stack: select flip skipped, no weight backup') + warn_once('select-nobackup', 'Network stack: flip=skipped backup=none') return net = next((n for n in l.loaded_networks if n.name == entry['nets'][winner]), None) net_module = net.modules.get(entry['layer'], None) if net is not None else None diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 59a66a6e0..be543d2b2 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -95,6 +95,7 @@ def network_activate(include=None, exclude=None): applied_layers.clear() lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind lora_sdnq.hosted_layers.clear() + lora_sdnq.factor_layers.clear() backup_size = 0 for component in modules.keys(): component_wanted = wanted_names if component in components else () diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index b1e1881d4..7259cca26 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -82,6 +82,7 @@ from sdnq.quantizer import sdnq_quantize_layer, SDNQConfig # pylint: disable=wr DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') OUT_F, IN_F, RANK = 512, 512, 8 +shared.opts.lora_stack_mode = 'sum' # suite baseline regardless of user config; stack tests set modes via their own context managers results: dict[str, dict] = {} From 734215cc6dca8895b078124b06fd0bffa8979018 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 03:41:28 +0100 Subject: [PATCH 065/270] fix(lora): keep select stack modes dormant without a qualifying pair A select mode forced backup mode whenever it was merely set, so a leftover setting changed behavior for ordinary single-network loads. The fuse gate now engages only when the loaded set could actually select (exactly two networks, compile permitting) or while selection segments are still live on model layers. Re-application drops any stale per-layer schedule so a later pass reset can never replay an old winner over freshly applied weights. Fallback notices log per activation instead of once per session; only the in-loop flip notice stays latched. --- modules/lora/extra_networks_lora.py | 2 +- modules/lora/lora_overrides.py | 5 ++-- modules/lora/lora_stack.py | 14 +++++++++-- modules/lora/networks.py | 1 + test/test-sdnq-lora-factors.py | 37 +++++++++++++++++++++++++++++ 5 files changed, 54 insertions(+), 5 deletions(-) diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index bd44ba7f5..b08dbfaf8 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -227,7 +227,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): load_method, load_reason = lora_overrides.get_method() from modules.lora import lora_stack if load_method != 'native' and lora_stack.mode() != 'sum': - lora_stack.warn_once(f'method-{load_method}', f'Network stack: mode={lora_stack.mode()} method={load_method} fallback=sum') + log.warning(f'Network stack: mode={lora_stack.mode()} method={load_method} fallback=sum') if debug: import sys fn = f'{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}' # pylint: disable=protected-access diff --git a/modules/lora/lora_overrides.py b/modules/lora/lora_overrides.py index 078b285b2..305d1e0e6 100644 --- a/modules/lora/lora_overrides.py +++ b/modules/lora/lora_overrides.py @@ -112,9 +112,10 @@ def disable_fuse(): round-trips it through its storage format. On quantized weights that is a dequantize-add-requantize cycle per network swap whose error compounds. """ + from modules.lora import lora_common as l from modules.lora import lora_stack - if lora_stack.mode() in lora_stack.SELECT_MODES: - return True # select stack modes flip per-layer winners against the pristine backup + if lora_stack.select_possible(len(l.loaded_networks)) or lora_stack.select_engaged(): + return True # select flips per-layer winners against the pristine backup; a dormant select mode leaves fuse alone sd_model = getattr(shared.sd_model, 'pipe', shared.sd_model) if is_quantized(sd_model): return True diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index b1d889bda..a9899b1d4 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -73,15 +73,25 @@ def active_dense(n_contrib): return mode() in DENSE_MODES and n_contrib >= 2 +def select_possible(n_loaded): + """True when the loaded set could engage a select mode; silent, for the fuse gate.""" + return mode() in SELECT_MODES and n_loaded == 2 and not select_blocked() + + +def select_engaged(): + """True while selection schedules are live on model layers.""" + return bool(state['entries']) + + def active_select(n_loaded): m = mode() if m not in SELECT_MODES: return False if n_loaded != 2: - warn_once('select-count', f'Network stack: mode={m} networks={n_loaded} required=2 fallback=sum') + log.warning(f'Network stack: mode={m} networks={n_loaded} required=2 fallback=sum') return False if select_blocked(): - warn_once('select-compile', f'Network stack: mode={m} compile=model fallback=sum') + log.warning(f'Network stack: mode={m} compile=model fallback=sum') return False return True diff --git a/modules/lora/networks.py b/modules/lora/networks.py index be543d2b2..6e442f5f3 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -107,6 +107,7 @@ def network_activate(include=None, exclude=None): if task is not None: pbar.update(task, advance=1) continue + lora_stack.drop(network_layer_name) # re-application invalidates any live selection schedule; the select branch re-registers if group_offload and component not in group_stripped and group_will_mutate(module, network_layer_name, l.loaded_networks): device = group_offload_strip(sd_model, component, group_stripped) calced = False # tracks whether this iteration assembled the delta, so the fallthrough reuses it instead of recomputing diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 7259cca26..d48e660c1 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -1749,6 +1749,42 @@ def test_select_gated_off_when_compiled(): return True +def test_select_gate_dormant_without_pair(): + with select_mode('klora'): + assert lora_stack.select_possible(1) is False, 'a single network must leave the fuse gate alone' + assert lora_stack.select_possible(2) is True + assert lora_stack.select_possible(3) is False + old_compile = getattr(shared.opts, 'cuda_compile', None) + try: + shared.opts.cuda_compile = ['Model'] + assert lora_stack.select_possible(2) is False, 'compile block must keep the gate down' + finally: + shared.opts.cuda_compile = old_compile + assert lora_stack.select_engaged() is False + with select_mode('sum'): + assert lora_stack.select_possible(2) is False + return True + + +def test_stale_schedule_dropped_on_reapply(): + layer = build_layer('uint4') + n1, n2, D1, _D2 = select_pair(layer, seed0=64, seed1=65) + with mock_model(lin=layer), select_mode('klora'): + Wdq0 = dq(layer) + activate(n1, n2) + assert lora_stack.select_engaged(), 'the pair must register schedules' + lora_stack.reset(20) + activate(n1) # same mode still set, but a single net cannot select + assert not lora_stack.select_engaged(), 're-application must drop the stale schedule' + w_single = dq(layer) + assert rho_of(w_single - Wdq0, D1) > 0.99, 'the single net must apply exactly' + lora_stack.reset(20) # a later pass reset must find nothing to replay + assert torch.equal(dq(layer), w_single), 'a stale schedule must never overwrite a fresh apply' + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + def test_est_energy_matches_full_frobenius(): torch.manual_seed(60) up = torch.randn(64, 8, device=DEVICE) @@ -1973,6 +2009,7 @@ def run_tests(): for fn in [test_select_flip_schedule_end_to_end, test_select_initial_style_when_ramp_starts_won, test_select_flip_is_inplace_and_shape_stable, test_select_matmul_transposed_layout, test_select_per_net_hosted_pair, test_select_reset_restores_initial_state, test_select_deactivate_from_midflip, test_select_requires_exactly_two_nets, test_select_gated_off_when_compiled, + test_select_gate_dormant_without_pair, test_stale_schedule_dropped_on_reapply, test_est_energy_matches_full_frobenius, test_select_weight_kind_plain_layer]: run_test(CAT_SELECT, fn) log.warning('=== Compile ===') From c42adcf6806bdba1d36cfb3a17511bea1d9709e8 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 04:01:36 +0100 Subject: [PATCH 066/270] docs(i18n): rework lora hosting and stack mode hints Restructure the seven hints to the settings pattern: lead definition, tradeoff, scope, special values and stated default, with value and cross-setting markup. Mode bullets and special values match loader behavior: sub-8-bit hosting gate, rank 0 fallback, ramp 0 freezing the balance. --- ui/locale/locale_en.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 522ae19e6..678dede3e 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -865,13 +865,13 @@ {"id":"","label":"LoRA native fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_lora"}, {"id":"","label":"LoRA diffusers fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage and torch.compile compatibility.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized apply method","localized":"","hint":"How networks are applied to SDNQ-quantized model weights:
- exact: adapters are carried alongside the quantized weights at full precision; apply and removal are exact and the quantized weights are never modified. The carried factors take additional VRAM, growing with adapter rank, size and count
- requantize: adapters are merged into the quantized weights, matching the behavior of earlier releases. Uses no additional VRAM (a weight backup for network removal is held in system RAM); on models quantized below 8 bits rounding typically loses much of the adapter effect, with strong adapters retaining more

With requantize selected, the host rank, calibration and cache options below have no effect.

Default is exact.","ui":"settings_lora"}, - {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry non-factorable adapter types (LoKR, LoHA, OFT, DoRA) on the side-channel of SDNQ models quantized below 8 bits, where merging would erase most of the adapter. Higher values keep more of the adapter at proportionally higher memory cost. Set to 0 to disable and merge into the quantized weights instead.","ui":"settings_lora"}, - {"id":"","label":"LoRA quantized host calibration","localized":"","hint":"Collection of per-channel activation statistics during normal generations on models quantized below 8 bits, cached per checkpoint. When available, the statistics weight side-channel hosting of non-factorable adapter types toward the channels carrying the most activation energy, improving delivered fidelity at the same host rank.","ui":"settings_lora"}, - {"id":"","label":"LoRA quantized host cache","localized":"","hint":"Disk budget in GB for caching the side-channel factors computed when hosting non-factorable adapter types on quantized models. A cached configuration skips the truncation math on reapply; least recently used entries are evicted past the budget. Set to 0 to disable.","ui":"settings_lora"}, - {"id":"","label":"LoRA stack mode","localized":"","hint":"Combination rule applied when multiple LoRA networks target the same layer. sum adds all contributions. ties merges only elements whose signs agree after keeping the strongest ones; dare variants randomly drop elements and rescale the survivors; magnitude_prune keeps only the strongest elements of each network. klora and estlora select one of exactly two networks per layer, with the first network in the prompt treated as subject and the second as style, and the balance shifting from subject toward style over the sampling steps. Applied by the native loader only; other load methods behave as sum.","ui":"settings_lora"}, - {"id":"","label":"LoRA stack density","localized":"","hint":"Fraction of elements kept by the ties, dare and magnitude_prune stack modes. Lower values keep only the strongest contributions of each network.","ui":"settings_lora"}, - {"id":"","label":"LoRA stack ramp","localized":"","hint":"Steepness of the subject-to-style shift over the sampling steps for the klora and estlora stack modes. Higher values strengthen the late-step shift toward the style network.","ui":"settings_lora"}, - {"id":"","label":"LoRA stack discrepancy","localized":"","hint":"Stand-in for the estlora mode's data-derived style separation estimate. Higher values shift the overall balance toward the subject network.","ui":"settings_lora"}, + {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry adapter types that are not natively low-rank (LoKR, LoHA, OFT, DoRA) alongside the quantized weights instead of merging them in.
Higher values retain more of the adapter at proportionally more memory. Plain LoRA files are carried exactly at their own rank.

Applies only to SDNQ models quantized below 8 bits, where merging erases most of the adapter; at 8 bits and above merging retains it and hosting is skipped.

0 disables hosting and merges every adapter into the quantized weights.

Default is 256.","ui":"settings_lora"}, + {"id":"","label":"LoRA quantized host calibration","localized":"","hint":"Collects per-channel activation statistics from the model's own generations and uses them to focus hosted-adapter truncation on the channels with the strongest activations.
Statistics accumulate in the background on models quantized below 8 bits, persist per checkpoint, and raise delivered adapter fidelity at the same LoRA quantized host rank, most at low ranks.

Capture is skipped while the model is compiled; previously cached statistics still apply.

Enabled by default.","ui":"settings_lora"}, + {"id":"","label":"LoRA quantized host cache","localized":"","hint":"Disk space in GB for caching computed hosting factors.
A cached set skips the truncation math on the next load; least recently used entries are evicted once the budget is exceeded.

0 disables the cache.

Default is 10.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack mode","localized":"","hint":"How multiple networks targeting the same layer are combined:
- sum: adds all contributions
- ties: keeps each network's strongest elements and merges only where signs agree
- dare_ties: randomly drops elements, rescales the survivors, then merges where signs agree
- dare_linear: randomly drops elements, rescales the survivors and sums
- magnitude_prune: keeps each network's strongest elements and sums
- klora / estlora: assign each layer to one of exactly two networks, the first in the prompt as subject and the second as style, shifting from subject toward style over the sampling steps

Kept fractions are set by LoRA stack density; the subject-to-style shift by LoRA stack ramp and LoRA stack discrepancy.

Applies to the native load path; other load methods and text encoder networks always combine as sum. Selection modes fall back to sum unless exactly two networks are loaded, or when model compile is active.

Default is sum.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack density","localized":"","hint":"Fraction of elements each network keeps under the ties, dare_ties, dare_linear and magnitude_prune stack modes.
Lower values keep only the strongest contributions and reduce interference between networks at the cost of per-network detail. The dare variants drop at random and rescale the survivors to preserve expected strength.

Default is 0.5.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack ramp","localized":"","hint":"Slope of the subject-to-style shift across the sampling steps in the klora and estlora stack modes.
Higher values shift layers to the style network earlier and more broadly; lower values keep the subject network dominant for longer.

0 keeps the balance fixed for the whole generation.

Default is 1.5.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack discrepancy","localized":"","hint":"Stand-in for the measured style separation the estlora stack mode would otherwise derive from data.
Higher values keep layers with the subject network longer; lower values let the style network take layers earlier.

Applies only when LoRA stack mode is estlora.

Default is 0.5.","ui":"settings_lora"}, {"id":"","label":"LoRA auto-apply tags","localized":"","hint":"Automatically add trigger words/tags from LoRA metadata to your prompt.
Set to the number of tags to auto-apply, e.g., 3 = add top 3 trigger tags.
Set to 0 to disable, -1 to add all available tags.","ui":"settings_lora"}, {"id":"","label":"LoRA memory cache","localized":"","hint":"How many LoRAs to keep in network for future use before requiring reloading from storage","ui":"settings_lora"}, {"id":"","label":"LoRA add hash info to metadata","localized":"","hint":"Include LoRA file hashes in generated image metadata.
Useful for reproducibility and tracking which exact LoRA versions were used.","ui":"settings_lora"}, From 55c3eb1325598f0d081503c3cd0acf42c08c58bd Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 04:16:29 +0100 Subject: [PATCH 067/270] refactor(lora): remove the lora_apply_te setting Text encoder networks now apply unconditionally in the native path. - remove the option, the per-request parameter and the control threading - collapse activate_filtered into plain activate at all call sites - drop the toggle from the prompt embed cache key - register the retired key so existing configs load without warnings --- modules/control/run.py | 4 ++-- modules/detailer/detailer.py | 2 +- modules/extra_networks.py | 9 --------- modules/face/faceid.py | 2 +- modules/options_handler.py | 2 +- modules/processing_class.py | 2 -- modules/processing_diffusers.py | 4 ++-- modules/prompt_parser_diffusers.py | 5 +---- modules/ui_definitions.py | 1 - ui/locale/locale_en.json | 1 - 10 files changed, 8 insertions(+), 24 deletions(-) diff --git a/modules/control/run.py b/modules/control/run.py index f5dae8c2b..a64fabe60 100644 --- a/modules/control/run.py +++ b/modules/control/run.py @@ -403,7 +403,7 @@ def control_run(state: str = '', # pylint: disable=keyword-arg-before-vararg sequential_seed: bool | None = None, # prompt/attention overrides prompt_attention: str | None = None, prompt_mean_norm: bool | None = None, diffusers_zeros_prompt_pad: bool | None = None, - te_pooled_embeds: bool | None = None, lora_apply_te: bool | None = None, te_complex_human_instruction: str | None = None, te_use_mask: bool | None = None, + te_pooled_embeds: bool | None = None, te_complex_human_instruction: str | None = None, te_use_mask: bool | None = None, # generation modifier overrides (hijack) freeu_enabled: bool | None = None, freeu_b1: float | None = None, freeu_b2: float | None = None, freeu_s1: float | None = None, freeu_s2: float | None = None, hypertile_unet_enabled: bool | None = None, hypertile_hires_only: bool | None = None, hypertile_unet_tile: int | None = None, hypertile_unet_min_tile: int | None = None, @@ -586,7 +586,7 @@ def control_run(state: str = '', # pylint: disable=keyword-arg-before-vararg # prompt/attention overrides prompt_attention=prompt_attention, prompt_mean_norm=prompt_mean_norm, diffusers_zeros_prompt_pad=diffusers_zeros_prompt_pad, te_pooled_embeds=te_pooled_embeds, - lora_apply_te=lora_apply_te, te_complex_human_instruction=te_complex_human_instruction, te_use_mask=te_use_mask, + te_complex_human_instruction=te_complex_human_instruction, te_use_mask=te_use_mask, # generation modifier overrides (hijack) freeu_enabled=freeu_enabled, freeu_b1=freeu_b1, freeu_b2=freeu_b2, freeu_s1=freeu_s1, freeu_s2=freeu_s2, hypertile_unet_enabled=hypertile_unet_enabled, hypertile_hires_only=hypertile_hires_only, diff --git a/modules/detailer/detailer.py b/modules/detailer/detailer.py index 752e9fbdc..73bdd32f0 100644 --- a/modules/detailer/detailer.py +++ b/modules/detailer/detailer.py @@ -321,7 +321,7 @@ class Detailer(): pc.disable_extra_networks = True # disable processing_diffusers from handling network activation since its handled here network_same = len(p.network_data.values()) == len(pc.network_data.values()) and all(x == y for x, y in zip(p.network_data.values(), pc.network_data.values())) if not network_same: - extra_networks.activate_filtered(pc, pc.network_data) + extra_networks.activate(pc, pc.network_data) log.debug(f'Detail: model="{i+1}:{name}" item={j+1}/{len(items)} box={item.box} label="{item.label}" score={item.score:.2f} seg={detailer_opt(p, "detailer_segmentation")} network={network_same} prompt="{pc.prompt}"') pc.init_images = [image] pc.image_mask = [item.mask] diff --git a/modules/extra_networks.py b/modules/extra_networks.py index 0737f68f8..89acf5a4e 100644 --- a/modules/extra_networks.py +++ b/modules/extra_networks.py @@ -121,15 +121,6 @@ def activate(p: StableDiffusionProcessing, extra_network_data: defaultdict[str, p.network_data = extra_network_data -def activate_filtered(p: StableDiffusionProcessing, extra_network_data: defaultdict[str, list[ExtraNetworkParams]] | None = None, step=0): - """activate with text encoder components gated on lora_apply_te; must run before prompt encode so te networks affect embeds""" - apply_te = getattr(p, 'lora_apply_te', None) - if apply_te is None: - apply_te = shared.opts.lora_apply_te - exclude = [] if apply_te else ['text_encoder', 'text_encoder_2', 'text_encoder_3'] - activate(p, extra_network_data, step=step, exclude=exclude) - - def deactivate(p: StableDiffusionProcessing, extra_network_data: defaultdict[str, list[ExtraNetworkParams]] | None = None, force: bool | None = None): """call deactivate for extra networks in extra_network_data in specified order, then call deactivate for all remaining registered networks""" if p.disable_extra_networks: diff --git a/modules/face/faceid.py b/modules/face/faceid.py index 4c63bcd66..b2263d840 100644 --- a/modules/face/faceid.py +++ b/modules/face/faceid.py @@ -216,7 +216,7 @@ def face_id( p.subseeds = p.all_subseeds[n * p.batch_size:(n+1) * p.batch_size] p.prompts, p.network_data = extra_networks.parse_prompts(p.prompts, p.network_data) - extra_networks.activate_filtered(p, p.network_data) + extra_networks.activate(p, p.network_data) ip_model_dict.update({ "prompt": p.prompts[0], "negative_prompt": p.negative_prompts[0], diff --git a/modules/options_handler.py b/modules/options_handler.py index 2400a2069..8b7818994 100644 --- a/modules/options_handler.py +++ b/modules/options_handler.py @@ -17,7 +17,7 @@ if TYPE_CHECKING: import builtins cmd_opts = cmd_args.parse_args() -compatibility_opts = ['clip_skip', 'uni_pc_lower_order_final', 'uni_pc_order', 'xformers_options'] +compatibility_opts = ['clip_skip', 'uni_pc_lower_order_final', 'uni_pc_order', 'xformers_options', 'lora_apply_te'] removed_values = { # a stored choice that no longer exists is kept by validate, so it has to be rewritten or it selects nothing 'cross_attention_optimization': (['Batch matrix-matrix', 'Dynamic Attention BMM'], 'Scaled-Dot-Product'), } diff --git a/modules/processing_class.py b/modules/processing_class.py index b5f567379..624e874b7 100644 --- a/modules/processing_class.py +++ b/modules/processing_class.py @@ -254,7 +254,6 @@ class StableDiffusionProcessing: prompt_mean_norm: bool | None = None, diffusers_zeros_prompt_pad: bool | None = None, te_pooled_embeds: bool | None = None, - lora_apply_te: bool | None = None, te_complex_human_instruction: str | None = None, te_use_mask: bool | None = None, # generation modifier overrides (hijack) @@ -543,7 +542,6 @@ class StableDiffusionProcessing: self.prompt_mean_norm = prompt_mean_norm self.diffusers_zeros_prompt_pad = diffusers_zeros_prompt_pad self.te_pooled_embeds = te_pooled_embeds - self.lora_apply_te = lora_apply_te self.te_complex_human_instruction = te_complex_human_instruction self.te_use_mask = te_use_mask # generation modifier overrides (hijack) diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index 0f975ea72..a7cad820a 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -149,7 +149,7 @@ def process_base(p: processing.StableDiffusionProcessing): if 'detailer' in p.ops: desc = 'Detail' p.prompts, p.network_data = extra_networks.parse_prompts(p.prompts, p.network_data) - extra_networks.activate_filtered(p) # networks must patch weights before prompt encode so te loras affect embeds + extra_networks.activate(p) # networks must patch weights before prompt encode so te loras affect embeds base_args = set_pipeline_args( p=p, model=shared.sd_model, @@ -313,7 +313,7 @@ def process_hires(p: processing.StableDiffusionProcessing, output): prompts, p.network_data = extra_networks.parse_prompts(prompts) reset_prompts = True if reset_prompts or ('base' in p.skip): - extra_networks.activate_filtered(p) + extra_networks.activate(p) hires_args = set_pipeline_args( p=p, diff --git a/modules/prompt_parser_diffusers.py b/modules/prompt_parser_diffusers.py index 0b073baa8..d02817733 100644 --- a/modules/prompt_parser_diffusers.py +++ b/modules/prompt_parser_diffusers.py @@ -130,11 +130,8 @@ class PromptEmbedder: # unpack EN data in case of TE LoRA en_data = p.network_data en_data = [idx.items for item in en_data.values() for idx in item] - apply_te = getattr(p, 'lora_apply_te', None) - if apply_te is None: - apply_te = shared.opts.lora_apply_te effective_batch = 1 if self.allsame else self.batchsize - key = str([self.prompts, self.negative_prompts, effective_batch, self.clip_skip, self.steps, en_data, apply_te]) + key = str([self.prompts, self.negative_prompts, effective_batch, self.clip_skip, self.steps, en_data]) item = cache.get(key) if not item: if not any(flatten(emb) for emb in [self.prompt_embeds, diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 93ebbb3aa..1808f62a7 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -699,7 +699,6 @@ def create_settings(cmd_opts): "lora_apply_tags": OptionInfo(0, "LoRA auto-apply tags", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1}), "lora_apply_sep": OptionInfo("

Apply method

", "", gr.HTML), - "lora_apply_te": OptionInfo(False, "LoRA native apply to text encoder"), "lora_fuse_native": OptionInfo(True, "LoRA native fuse with model"), "lora_fuse_diffusers": OptionInfo(False, "LoRA diffusers fuse with model"), diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 678dede3e..2dd87c144 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -861,7 +861,6 @@ {"id":"","label":"Load custom Diffusers pipeline","localized":"","hint":"","ui":"settings_huggingface"}, {"id":"","label":"LoRA force reload always","localized":"","hint":"Forces LoRA networks to reload from storage on every generation, even if already cached.
Useful for debugging or when LoRA files are being modified externally.
Disable for normal use to benefit from caching.","ui":"settings_lora"}, {"id":"","label":"LoRA load using Diffusers method","localized":"","hint":"Alternative method uses diffusers built-in LoRA capabilities instead of native SD.Next implementation (may reduce LoRA compatibility)","ui":"settings_lora"}, - {"id":"","label":"LoRA native apply to text encoder","localized":"","hint":"","ui":"settings_lora"}, {"id":"","label":"LoRA native fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_lora"}, {"id":"","label":"LoRA diffusers fuse with model","localized":"","hint":"Merge LoRA into the model for lower memory usage and torch.compile compatibility.

Warning: After removing or switching a LoRA, you may still see its style in generated images. To get a clean model, reload it from the model selector.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized apply method","localized":"","hint":"How networks are applied to SDNQ-quantized model weights:
- exact: adapters are carried alongside the quantized weights at full precision; apply and removal are exact and the quantized weights are never modified. The carried factors take additional VRAM, growing with adapter rank, size and count
- requantize: adapters are merged into the quantized weights, matching the behavior of earlier releases. Uses no additional VRAM (a weight backup for network removal is held in system RAM); on models quantized below 8 bits rounding typically loses much of the adapter effect, with strong adapters retaining more

With requantize selected, the host rank, calibration and cache options below have no effect.

Default is exact.","ui":"settings_lora"}, From cf36f879a1eac60a80965a5c5b303f72d1504762 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 18 Jul 2026 06:09:13 +0100 Subject: [PATCH 068/270] fix(lora): harden select stack modes on quantized and offloaded models Select pairs now ride the svd side channel on any SDNQ linear, not only sub-8-bit ones: quantized backups are packed tensors, so the weight rewrite path cannot recompute a winner from them and left layers stripped mid-requantize. The sub-8-bit gate stays for dense hosting, where requantize retains the delta at 8 bits and above. Weight selection now only serves unquantized modules: finalize iterates a snapshot so dead entries drop cleanly, materializes balanced-offload modules before rewriting weights and skips modules with stripped or quantized weights instead of corrupting the layer. --- modules/lora/lora_sdnq.py | 14 ++++++++++---- modules/lora/lora_stack.py | 20 ++++++++++++++++++-- modules/lora/networks.py | 2 +- test/test-sdnq-lora-factors.py | 34 +++++++++++++++++++++++++++++++++- 4 files changed, 62 insertions(+), 8 deletions(-) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index df2e7d2b0..b58b26799 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -258,8 +258,8 @@ def append_factors(self, ups, downs): return segments, deq.use_quantized_matmul -def host_candidate(self, network_layer_name, wanted_names): - """True when a non-factorable set on this layer should be hosted as a truncated svd.""" +def select_candidate(self, network_layer_name, wanted_names): + """True when this layer can carry a set on the svd channel; select pairs ride it at any bit width.""" if not enabled(): return False if int(getattr(shared.opts, 'lora_sdnq_host_rank', 0) or 0) <= 0: @@ -268,11 +268,17 @@ def host_candidate(self, network_layer_name, wanted_names): return False if wanted_names == (): return False + return any(net.modules.get(network_layer_name, None) is not None for net in l.loaded_networks) + + +def host_candidate(self, network_layer_name, wanted_names): + """True when a non-factorable set on this layer should be hosted as a truncated svd.""" + if not select_candidate(self, network_layer_name, wanted_names): + return False from sdnq.common import dtype_dict if dtype_dict[self.sdnq_dequantizer.weights_dtype]['num_bits'] >= 8: return False # requantize retains most of the delta at 8 bits and above; truncation would lose more than it saves - - return any(net.modules.get(network_layer_name, None) is not None for net in l.loaded_networks) + return True def apply_cached(self, network_layer_name, wanted_names): diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index a9899b1d4..b74b25fde 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -248,12 +248,21 @@ def layer_flip_step(scores, total_steps): return total_steps +def materialize_model(): + """Weight-kind selection rewrites module weights outside the activation walk; rebuild balanced-offload modules real first (mirrors network_activate).""" + from modules import sd_models + if getattr(shared.opts, 'diffusers_offload_mode', None) == 'balanced' and getattr(shared, 'sd_model', None) is not None: + sd_models.apply_balanced_offload(shared.sd_model, force=True) + + def finalize(total_steps): """Build the inverted flip map for the pass; select-mode layers start at their step-0 winner.""" state['total_steps'] = int(total_steps) state['gamma'] = (state['gamma_num'] / state['gamma_den']) if state['gamma_den'] > 0 else 1.0 state['flips'] = {} - for layer_name, entry in state['entries'].items(): + if any(e['kind'] == 'weight' for e in state['entries'].values()): + materialize_model() + for layer_name, entry in list(state['entries'].items()): # snapshot: apply_selection drops entries whose module died flip_at = layer_flip_step(entry['scores'], state['total_steps']) initial = 1 if flip_at == 0 else 0 apply_selection(layer_name, entry, initial) @@ -298,6 +307,9 @@ def apply_selection(layer_name, entry, winner): def weight_selection(module, entry, winner): from modules.lora import lora_common as l from modules.lora.lora_apply import network_apply_weights + if getattr(module, 'sdnq_dequantizer', None) is not None: + warn_once('select-sdnq-weight', 'Network stack: flip=skipped layer=quantized') # quantized backups are packed tensors; only the segment path can flip them + return backup = getattr(module, 'network_weights_backup', None) if not isinstance(backup, torch.Tensor): # fuse mode keeps a bool sentinel, not a pristine copy warn_once('select-nobackup', 'Network stack: flip=skipped backup=none') @@ -306,6 +318,10 @@ def weight_selection(module, entry, winner): net_module = net.modules.get(entry['layer'], None) if net is not None else None if net_module is None: return - device = module.weight.device + weight = getattr(module, 'weight', None) + if weight is None or weight.is_meta: + warn_once('select-offloaded', 'Network stack: flip=skipped weight=offloaded') + return + device = weight.device updown = net_module.calc_updown(backup.to(device))[0] network_apply_weights(module, updown, None, device=device) # recomputes from the pristine backup, requantizing where the layer needs it diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 6e442f5f3..818f3c100 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -112,7 +112,7 @@ def network_activate(include=None, exclude=None): device = group_offload_strip(sd_model, component, group_stripped) calced = False # tracks whether this iteration assembled the delta, so the fallthrough reuses it instead of recomputing if select_active and component_wanted and not network_layer_name.startswith('lora_te'): - if lora_sdnq.host_candidate(module, network_layer_name, component_wanted): # sub-8-bit SDNQ pairs ride the channel as separate segments + if lora_sdnq.select_candidate(module, network_layer_name, component_wanted): # SDNQ pairs ride the channel as separate segments at any bit width; weight rewrites cannot flip a quantized layer weights_backup = getattr(module, "network_weights_backup", None) if weights_backup is not None and not isinstance(weights_backup, bool): network_apply_weights(module, None, None, device=device) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index d48e660c1..a94e38b68 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -1749,6 +1749,38 @@ def test_select_gated_off_when_compiled(): return True +def test_select_finalize_drops_dead_module(): + import weakref + layer = build_layer('uint4') + n1, n2, _D1, _D2 = select_pair(layer, seed0=61, seed1=62) + with mock_model(lin=layer), select_mode('klora'): + activate(n1, n2) + entry = lora_stack.state['entries'].get('lora_transformer_test') + assert entry is not None, 'pair must register before the module dies' + entry['module'] = weakref.ref(torch.nn.Linear(2, 2)) # referent dies immediately: simulates offload re-wraps replacing a registered module + assert entry['module']() is None + lora_stack.reset(12) + assert 'lora_transformer_test' not in lora_stack.state['entries'], 'a dead module must drop its entry without breaking finalize' + activate() + return True + + +def test_select_int8_pair_rides_segments(): + layer = build_layer('int8') + n1, n2, D1, D2 = select_pair(layer, seed0=63, seed1=64) + with mock_model(lin=layer), select_mode('klora'): + Wdq0 = dq(layer) + activate(n1, n2) + entry = lora_stack.state['entries'].get('lora_transformer_test') + assert entry is not None and entry['kind'] == 'factor', 'an int8 pair must ride svd segments, not weight rewrites' + lora_stack.reset(16) + eff = dq(layer) - Wdq0 + assert max(rho_of(eff, D1), rho_of(eff, D2)) > 0.99, 'initial selection must deliver one exact per-net delta' + activate() + assert torch.equal(dq(layer), Wdq0), 'removal must restore bit-exact' + return True + + def test_select_gate_dormant_without_pair(): with select_mode('klora'): assert lora_stack.select_possible(1) is False, 'a single network must leave the fuse gate alone' @@ -2009,7 +2041,7 @@ def run_tests(): for fn in [test_select_flip_schedule_end_to_end, test_select_initial_style_when_ramp_starts_won, test_select_flip_is_inplace_and_shape_stable, test_select_matmul_transposed_layout, test_select_per_net_hosted_pair, test_select_reset_restores_initial_state, test_select_deactivate_from_midflip, test_select_requires_exactly_two_nets, test_select_gated_off_when_compiled, - test_select_gate_dormant_without_pair, test_stale_schedule_dropped_on_reapply, + test_select_finalize_drops_dead_module, test_select_int8_pair_rides_segments, test_select_gate_dormant_without_pair, test_stale_schedule_dropped_on_reapply, test_est_energy_matches_full_frobenius, test_select_weight_kind_plain_layer]: run_test(CAT_SELECT, fn) log.warning('=== Compile ===') From 30ca66fe5fc715ec726cef7db30af94fa3e3164f Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 19 Jul 2026 17:02:38 +0100 Subject: [PATCH 069/270] fix(lora): host dense stack deltas on sdnq at any bit width Requantizing a dense-combined delta into 8-bit weights is checkpoint-fragile: on some checkpoints the round trip visibly damages the render while the same combination hosted on the svd channel is clean. Dense-mode sets with two or more contributing networks on a layer now ride the hosted path regardless of bit width; single-set behavior at 8 bits and above is unchanged. - host_candidate: dense multi-net layers qualify at any width - suite: dense pair at int8 hosts; single non-factorable set at int8 keeps the requantize fallback --- modules/lora/lora_sdnq.py | 13 +++++---- test/test-sdnq-lora-factors.py | 51 ++++++++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index b58b26799..45a514693 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -272,12 +272,15 @@ def select_candidate(self, network_layer_name, wanted_names): def host_candidate(self, network_layer_name, wanted_names): - """True when a non-factorable set on this layer should be hosted as a truncated svd.""" + """True when this layer's set should ride the svd channel as a truncated svd: non-factorable sets below 8 bits, dense-combined sets at any width.""" if not select_candidate(self, network_layer_name, wanted_names): return False + if lora_stack.mode() in lora_stack.DENSE_MODES and not network_layer_name.startswith('lora_te'): + if sum(1 for net in l.loaded_networks if net.modules.get(network_layer_name, None) is not None) >= 2: + return True # combined deltas host at any width: requantizing them is checkpoint-fragile, while single-adapter requantize is well retained from sdnq.common import dtype_dict if dtype_dict[self.sdnq_dequantizer.weights_dtype]['num_bits'] >= 8: - return False # requantize retains most of the delta at 8 bits and above; truncation would lose more than it saves + return False # requantize retains most of a single set's delta at 8 bits and above; truncation would lose more than it saves return True @@ -312,7 +315,7 @@ def apply_cached(self, network_layer_name, wanted_names): factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) if factors is not None: members.append(factors) - if len(members) == 0 and self.svd_up is None: + if not stack_dense and len(members) == 0 and self.svd_up is None: step = float(self.scale.detach().float().mean()) if step > 0 and rms / step > REQUANT_RATIO and energy < REQUANT_ENERGY: return None # routed to the grid: the caller assembles the delta and requantizes @@ -369,9 +372,9 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): # cut: both terms must agree, since a thin delta rounds away on the grid however # low its capture, and a low-rank delta hosts exactly however fat it is. Scoped to # sets the side-channel would otherwise carry whole: factorable members ride - # exactly. + # exactly and dense-combined deltas stay hosted at any magnitude. delta_rms = float(updown.detach().float().square().mean().sqrt()) - maybe_requant = len(members) == 0 and self.svd_up is None + maybe_requant = not stack_dense and len(members) == 0 and self.svd_up is None if maybe_requant: step = float(self.scale.detach().float().mean()) maybe_requant = step > 0 and delta_rms / step > REQUANT_RATIO diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index a94e38b68..8dcae106c 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -872,6 +872,19 @@ def test_route_svd_checkpoint_keeps_hosting(): return True +def test_route_dense_stack_keeps_hosting(): + layer = build_layer('uint4') + torch.manual_seed(27) + D1 = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 + D2 = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 + net1, net2 = make_dense_net('df1', layer, D1), make_dense_net('df2', layer, D2) + with host_rank(256), stack_mode('ties'), mock_model(lin=layer): + activate(net1, net2) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'dense-combined deltas host at any magnitude' + activate() + return True + + def test_route_replay_from_cache(): import tempfile layer = build_layer('uint4') @@ -1515,6 +1528,39 @@ def test_dense_two_plain_loras_hosted_not_summed(): return True +def test_dense_pair_hosts_at_int8(): + layer = build_layer('int8') + A1, B1, D1 = make_delta(seed=41, sigma=1e-2) + A2, B2, D2 = make_delta(seed=42, sigma=1e-2) + n1 = make_net('ti1', layer, A1, B1) + n2 = make_net('ti2', layer, A2, B2) + with host_rank(64), mock_model(lin=layer): + Wdq0 = dq(layer) + with stack_mode('ties', dens=0.5): + activate(n1, n2) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'dense pair at int8 must host, not requantize' + assert getattr(layer, 'network_weights_backup', None) is None, 'hosted dense pair must not take a weight backup' + eff = dq(layer) - Wdq0 + activate() + assert torch.equal(dq(layer), Wdq0), 'removal must restore bit-exact' + with stack_mode('ties', dens=0.5): + ref = lora_stack.combine([('ti1', D1), ('ti2', D2)], 'lora_transformer_test') + assert rho_of(eff, ref) > 0.8, f'hosted int8 ties delta must track the ties reference, rho={rho_of(eff, ref):.3f}' + return True + + +def test_dense_single_nonfactorable_int8_keeps_requantize(): + layer = build_layer('int8') + _A, _B, D = make_delta(sigma=3e-3) + net = make_dense_net('ti8solo', layer, D) + with host_rank(256), mock_model(lin=layer), stack_mode('ties', dens=0.5): + activate(net) + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'a single non-factorable set at int8 must keep the requantize path even under a dense mode' + assert isinstance(getattr(layer, 'network_weights_backup', None), torch.Tensor), 'the requantize fallback must take the backup' + activate() + return True + + def test_single_net_ignores_dense_mode(): layer = build_layer('uint4') A, B, D = make_delta(seed=33) @@ -2018,7 +2064,7 @@ def run_tests(): for fn in [test_hosted_low_rank_delta_is_kept, test_hosted_dense_delta_beats_requant, test_hosted_skips_int8, test_hosted_disabled_by_option, test_hosted_transitions_and_rng_isolation, test_route_fat_dense_delta_requantizes, test_route_rule_terms_gate_both_ways, test_route_low_rank_fat_delta_stays_hosted, - test_route_mixed_set_keeps_hosting, test_route_svd_checkpoint_keeps_hosting, + test_route_mixed_set_keeps_hosting, test_route_svd_checkpoint_keeps_hosting, test_route_dense_stack_keeps_hosting, test_route_replay_from_cache, test_hosted_null_tail_collapses_to_effective_rank, test_hosted_flat_spectrum_keeps_cap]: run_test(CAT_HOST, fn) log.warning('=== Calibration ===') @@ -2034,7 +2080,8 @@ def run_tests(): run_test(CAT_FCACHE, fn) log.warning('=== Stack modes: dense ===') for fn in [test_ties_sign_consensus_drops_conflicts, test_dare_mask_is_deterministic_across_calls, test_dare_rescales_by_inverse_density, - test_magnitude_prune_keeps_top_density, test_dense_two_plain_loras_hosted_not_summed, test_single_net_ignores_dense_mode, + test_magnitude_prune_keeps_top_density, test_dense_two_plain_loras_hosted_not_summed, + test_dense_pair_hosts_at_int8, test_dense_single_nonfactorable_int8_keeps_requantize, test_single_net_ignores_dense_mode, test_te_layer_stays_plain_sum, test_sum_mode_keeps_exact_stacking]: run_test(CAT_STACK, fn) log.warning('=== Stack modes: select ===') From b90afe1253e56efbf4625960f12a83595c35c1f6 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 19 Jul 2026 18:04:15 +0100 Subject: [PATCH 070/270] fix(lora): report the effective weight-state mode in load logs The mode field printed the configured fuse-or-backup strategy, which predates the factor path and reads as mode=backup on loads that took no backup at all. It now reports what the load actually holds: backup when weight backups were taken, fuse when fusing is active, factor when the whole load rode the svd channel and unload just drops factors. --- modules/lora/extra_networks_lora.py | 4 ++-- modules/lora/networks.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index b08dbfaf8..7d277e413 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -259,7 +259,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): if has_changed: jobid = shared.state.begin('LoRA') if len(l.previously_loaded_networks) > 0: - log.info(f'Network unload: type=LoRA networks={[n.name for n in l.previously_loaded_networks]} mode={"fuse" if lora_overrides.fuse_native() else "backup"}') + log.info(f'Network unload: type=LoRA networks={[n.name for n in l.previously_loaded_networks]} mode={networks.effective_mode()}') networks.network_deactivate(include, exclude) networks.network_activate(include, exclude) debug_log(f'Network change: type=LoRA previous={[n.name for n in l.previously_loaded_networks]} current={[n.name for n in l.loaded_networks]}') @@ -272,7 +272,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): prompt(p) if has_changed and len(include) == 0: # print only once actual_method = 'native' if any(len(n.modules) > 0 for n in l.loaded_networks) else load_method - log.info(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} load={load_method}({load_reason}) method={actual_method} mode={"fuse" if lora_overrides.fuse_native() else "backup"} te={te_multipliers} unet={unet_multipliers} time={l.timer.summary} reason="{reason}"') + log.info(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} load={load_method}({load_reason}) method={actual_method} mode={networks.effective_mode()} te={te_multipliers} unet={unet_multipliers} time={l.timer.summary} reason="{reason}"') def deactivate(self, p, force=False): if len(lora_diffusers.diffuser_loaded) > 0 and (shared.opts.lora_force_reload or force): diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 818f3c100..c0ffef6b1 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -222,6 +222,7 @@ def network_activate(include=None, exclude=None): lora_sdnq.report_fallbacks() native_active = len(l.loaded_networks) > 0 refused_writes = refused + l.last_backup_size = backup_size l.timer.activate += time.time() - t0 if refused > 0: log.error(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} weights={applied_weight} bias={applied_bias} refused={refused} network partially applied') @@ -232,6 +233,15 @@ def network_activate(include=None, exclude=None): sd_models.set_diffuser_offload(sd_model, op="model") +def effective_mode(): + """Weight-state label for load logs: backup and fuse say how touched weights restore, factor means the whole load rode the svd channel and unload just drops factors.""" + if getattr(l, 'last_backup_size', 0) > 0: + return 'backup' + if lora_overrides.fuse_native(): + return 'fuse' + return 'factor' + + def network_deactivate(include=None, exclude=None): if exclude is None: exclude = [] From c75e9410fe76f99379b6659e19e0cbf65d587306 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 19 Jul 2026 19:10:20 +0100 Subject: [PATCH 071/270] fix(lora): silence offload re-init logging on network changes Rebuilding balanced offload before touching weights reconstructs the OffloadHook, whose constructor prints the op=init banner and module inventory meant for model load, so every network switch replayed the full load-time announcement. The hook constructor and the model summary now honor the silent flag and the network activate, deactivate, and selection paths pass it; real model loads keep the full output. --- modules/lora/lora_stack.py | 2 +- modules/lora/networks.py | 4 ++-- modules/sd_offload_balanced.py | 11 ++++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index b74b25fde..9b7d22182 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -252,7 +252,7 @@ def materialize_model(): """Weight-kind selection rewrites module weights outside the activation walk; rebuild balanced-offload modules real first (mirrors network_activate).""" from modules import sd_models if getattr(shared.opts, 'diffusers_offload_mode', None) == 'balanced' and getattr(shared, 'sd_model', None) is not None: - sd_models.apply_balanced_offload(shared.sd_model, force=True) + sd_models.apply_balanced_offload(shared.sd_model, force=True, silent=True) def finalize(total_steps): diff --git a/modules/lora/networks.py b/modules/lora/networks.py index c0ffef6b1..a1af90518 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -63,7 +63,7 @@ def network_activate(include=None, exclude=None): sd_models.disable_offload(sd_model) sd_models.move_model(sd_model, device=devices.cpu) elif shared.opts.diffusers_offload_mode == "balanced": - sd_model = sd_models.apply_balanced_offload(sd_model, force=True) # dispatched modules hold meta tensors backed by the offload map; rebuild them real on cpu with hooks intact before touching weights + sd_model = sd_models.apply_balanced_offload(sd_model, force=True, silent=True) # dispatched modules hold meta tensors backed by the offload map; rebuild them real on cpu with hooks intact before touching weights group_offload = shared.opts.diffusers_offload_mode == "group" group_stripped = {} device = None @@ -259,7 +259,7 @@ def network_deactivate(include=None, exclude=None): sd_models.disable_offload(sd_model) sd_models.move_model(sd_model, device=devices.cpu) elif shared.opts.diffusers_offload_mode == "balanced": - sd_model = sd_models.apply_balanced_offload(sd_model, force=True) # dispatched modules hold meta tensors backed by the offload map; rebuild them real on cpu with hooks intact before touching weights + sd_model = sd_models.apply_balanced_offload(sd_model, force=True, silent=True) # dispatched modules hold meta tensors backed by the offload map; rebuild them real on cpu with hooks intact before touching weights group_offload = shared.opts.diffusers_offload_mode == "group" group_stripped = {} modules = {} diff --git a/modules/sd_offload_balanced.py b/modules/sd_offload_balanced.py index 589ff3522..23a7017c6 100644 --- a/modules/sd_offload_balanced.py +++ b/modules/sd_offload_balanced.py @@ -14,7 +14,7 @@ import modules.sd_offload_state as s class OffloadHook(accelerate.hooks.ModelHook): - def __init__(self, checkpoint_name): + def __init__(self, checkpoint_name, silent=False): if shared.opts.diffusers_offload_max_gpu_memory > 1: shared.opts.diffusers_offload_max_gpu_memory = 0.75 if shared.opts.diffusers_offload_max_cpu_memory > 1: @@ -32,8 +32,9 @@ class OffloadHook(accelerate.hooks.ModelHook): self.last_pre = None self.last_post = None self.last_cls = None - gpu = f'{(shared.gpu_memory * shared.opts.diffusers_offload_min_gpu_memory):.2f}-{(shared.gpu_memory * shared.opts.diffusers_offload_max_gpu_memory):.2f}:{shared.gpu_memory:.2f}' - log.info(f'Offload: type=balanced op=init watermark={self.min_watermark}-{self.max_watermark} gpu={gpu} cpu={shared.cpu_memory:.3f} limit={shared.opts.cuda_mem_fraction:.2f} always={self.offload_always} never={self.offload_never} pre={shared.opts.diffusers_offload_pre} streams={shared.opts.diffusers_offload_streams}') + if not silent: + gpu = f'{(shared.gpu_memory * shared.opts.diffusers_offload_min_gpu_memory):.2f}-{(shared.gpu_memory * shared.opts.diffusers_offload_max_gpu_memory):.2f}:{shared.gpu_memory:.2f}' + log.info(f'Offload: type=balanced op=init watermark={self.min_watermark}-{self.max_watermark} gpu={gpu} cpu={shared.cpu_memory:.3f} limit={shared.opts.cuda_mem_fraction:.2f} always={self.offload_always} never={self.offload_never} pre={shared.opts.diffusers_offload_pre} streams={shared.opts.diffusers_offload_streams}') self.validate() super().__init__() @@ -255,7 +256,7 @@ def apply_balanced_offload(sd_model=None, exclude: list[str] | None = None, forc checkpoint_name = sd_model.sd_checkpoint_info.name if getattr(sd_model, "sd_checkpoint_info", None) is not None else sd_model.__class__.__name__ if force or (s.offload_hook_instance is None) or (s.offload_hook_instance.min_watermark != shared.opts.diffusers_offload_min_gpu_memory) or (s.offload_hook_instance.max_watermark != shared.opts.diffusers_offload_max_gpu_memory) or (checkpoint_name != s.offload_hook_instance.checkpoint_name): cached = False - s.offload_hook_instance = OffloadHook(checkpoint_name) + s.offload_hook_instance = OffloadHook(checkpoint_name, silent=silent) if cached and shared.opts.diffusers_offload_pre: s.debug_move('Offload: type=balanced op=apply skip') @@ -277,6 +278,6 @@ def apply_balanced_offload(sd_model=None, exclude: list[str] | None = None, forc process_timer.add('offload', t1 - t0) fn = f'{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}' # pylint: disable=protected-access s.debug_move(f'Apply offload: time={t1 - t0:.2f} type=balanced fn={fn}') - if not cached: + if not cached and not silent: log.info(f'Model class={sd_model.__class__.__name__} modules={len(s.offload_hook_instance.offload_map)} size={s.offload_hook_instance.model_size():.3f}') return sd_model From f156026150a9f0cfb795de91edf9e76d6850fd46 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 20 Jul 2026 21:57:01 +0100 Subject: [PATCH 072/270] feat(lora): balance estlora layer scores by network magnitude EST-LoRA scores each layer by squared Frobenius energy, so a magnitude gap between the two networks enters squared and the louder network wins nearly every layer, starving the quieter one. The style side is now scaled by the total-energy ratio (mirroring klora's gamma), making selection scale-invariant so a network cannot take layers on magnitude alone. On the krea2 subject+style pair this lifts the style network from 18% to 65% of the layer-step budget. - lora_stack: accumulate per-mode energy totals, apply the balance in the est ramp - test: content-louder est pair now hands over mid-schedule where raw scoring never would - locale: note the est magnitude balance, and that a select mode gives each layer to one network so both can be under-applied, while dense modes blend more fully --- modules/lora/lora_stack.py | 13 ++++++++++-- test/test-sdnq-lora-factors.py | 39 ++++++++++++++++++++++++++++++---- ui/locale/locale_en.json | 4 ++-- 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index 9b7d22182..55453c858 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -30,7 +30,7 @@ KLORA_BETA = 0.5 # the paper's fixed ramp offset; only the slope is user-tunable ROW_CHUNK = 512 # fp32 interiors run in first-dim slices; also fixes the DARE draw sequence SAMPLE_CAP = 1 << 22 # strided subsample bound for magnitude quantiles (full-size quantile exceeds torch limits) -state: dict = {'entries': {}, 'flips': {}, 'gamma': 1.0, 'gamma_num': 0.0, 'gamma_den': 0.0, 'total_steps': 0, 'finalized': False} +state: dict = {'entries': {}, 'flips': {}, 'gamma': 1.0, 'gamma_num': 0.0, 'gamma_den': 0.0, 'gamma_e': 1.0, 'gamma_e_num': 0.0, 'gamma_e_den': 0.0, 'total_steps': 0, 'finalized': False} warned: set = set() @@ -203,6 +203,9 @@ def clear(): state['gamma'] = 1.0 state['gamma_num'] = 0.0 state['gamma_den'] = 0.0 + state['gamma_e'] = 1.0 + state['gamma_e_num'] = 0.0 + state['gamma_e_den'] = 0.0 state['total_steps'] = 0 state['finalized'] = False @@ -223,6 +226,9 @@ def register(layer_name, module, kind, scores, segments=None, nets=None, abs_sum if abs_sums is not None: state['gamma_num'] += abs_sums[0] state['gamma_den'] += abs_sums[1] + if mode() == 'estlora': # est scores ARE the per-layer energies; their totals give the scale-invariant balance + state['gamma_e_num'] += scores[0] + state['gamma_e_den'] += scores[1] state['entries'][layer_name] = entry state['finalized'] = False @@ -242,8 +248,10 @@ def layer_flip_step(scores, total_steps): if ss * ramp > sc: return step else: # estlora: content keeps the layer while sc >= gamma_t * ss + # est energies are ||dW||^2, so a magnitude gap enters squared; balance the style side by + # the total-energy ratio (mirrors klora's gamma) so the louder adapter cannot win on scale alone ramp = ramp_alpha() * t + (1.0 - manual_discrepancy()) - if sc < ramp * ss: + if sc < ramp * ss * state['gamma_e']: return step return total_steps @@ -259,6 +267,7 @@ def finalize(total_steps): """Build the inverted flip map for the pass; select-mode layers start at their step-0 winner.""" state['total_steps'] = int(total_steps) state['gamma'] = (state['gamma_num'] / state['gamma_den']) if state['gamma_den'] > 0 else 1.0 + state['gamma_e'] = (state['gamma_e_num'] / state['gamma_e_den']) if state['gamma_e_den'] > 0 else 1.0 state['flips'] = {} if any(e['kind'] == 'weight' for e in state['entries'].values()): materialize_model() diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 8dcae106c..b08f2988b 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -1669,14 +1669,45 @@ def test_select_flip_schedule_end_to_end(): def test_select_initial_style_when_ramp_starts_won(): + # scale-invariant selection means no single isolated layer starts style-won on magnitude alone + # (that is the balance working), so force flip_step 0 directly and assert the initial selection honors it layer = build_layer('uint4') - n1, n2, _D1, D2 = select_pair(seed0=43, seed1=44, scale1=8.0, layer=layer) # style delta dominates + n1, n2, _D1, D2 = select_pair(seed0=43, seed1=44, layer=layer) with mock_model(lin=layer), select_mode('estlora', alpha=1.0, disc=0.5): Wdq0 = dq(layer) activate(n1, n2) - lora_stack.reset(20) + orig = lora_stack.layer_flip_step + lora_stack.layer_flip_step = lambda scores, total: 0 # this layer's crossover is step 0 + try: + lora_stack.reset(20) + finally: + lora_stack.layer_flip_step = orig eff = dq(layer) - Wdq0 - assert rho_of(eff, D2) > 0.99, 'a layer whose style side wins at step 0 must start style-selected' + assert rho_of(eff, D2) > 0.99, 'a layer whose flip step is 0 must start style-selected' + return True + + +def test_estlora_energy_balance_defeats_magnitude(): + layer = build_layer('uint4') + n1, n2, _D1, D2 = select_pair(layer, seed0=51, seed1=52, scale1=0.33) # content ~3x louder than style + with mock_model(lin=layer), select_mode('estlora', alpha=1.5, disc=0.5): + Wdq0 = dq(layer) + activate(n1, n2) + lora_stack.reset(20) + entry = lora_stack.state['entries']['lora_transformer_test'] + assert lora_stack.state['gamma_e'] > 1.5, f'content-louder pair must give gamma_e>1: {lora_stack.state["gamma_e"]:.2f}' + balanced = lora_stack.layer_flip_step(entry['scores'], 20) + saved = lora_stack.state['gamma_e'] + lora_stack.state['gamma_e'] = 1.0 # paper-faithful est: energies compared raw + raw = lora_stack.layer_flip_step(entry['scores'], 20) + lora_stack.state['gamma_e'] = saved + assert raw == 20, f'without balance the squared magnitude gap keeps content the whole schedule, got {raw}' + assert 0 < balanced < 20, f'the energy balance must let the quieter style win mid-schedule, got {balanced}' + for s in range(20): + lora_stack.on_step(s) + assert rho_of(dq(layer) - Wdq0, D2) > 0.99, 'after the balanced flip the style delta must be selected' + activate() + assert torch.equal(dq(layer), Wdq0) return True @@ -2085,7 +2116,7 @@ def run_tests(): test_te_layer_stays_plain_sum, test_sum_mode_keeps_exact_stacking]: run_test(CAT_STACK, fn) log.warning('=== Stack modes: select ===') - for fn in [test_select_flip_schedule_end_to_end, test_select_initial_style_when_ramp_starts_won, test_select_flip_is_inplace_and_shape_stable, + for fn in [test_select_flip_schedule_end_to_end, test_select_initial_style_when_ramp_starts_won, test_estlora_energy_balance_defeats_magnitude, test_select_flip_is_inplace_and_shape_stable, test_select_matmul_transposed_layout, test_select_per_net_hosted_pair, test_select_reset_restores_initial_state, test_select_deactivate_from_midflip, test_select_requires_exactly_two_nets, test_select_gated_off_when_compiled, test_select_finalize_drops_dead_module, test_select_int8_pair_rides_segments, test_select_gate_dormant_without_pair, test_stale_schedule_dropped_on_reapply, diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 2dd87c144..f52b58a91 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -867,10 +867,10 @@ {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry adapter types that are not natively low-rank (LoKR, LoHA, OFT, DoRA) alongside the quantized weights instead of merging them in.
Higher values retain more of the adapter at proportionally more memory. Plain LoRA files are carried exactly at their own rank.

Applies only to SDNQ models quantized below 8 bits, where merging erases most of the adapter; at 8 bits and above merging retains it and hosting is skipped.

0 disables hosting and merges every adapter into the quantized weights.

Default is 256.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized host calibration","localized":"","hint":"Collects per-channel activation statistics from the model's own generations and uses them to focus hosted-adapter truncation on the channels with the strongest activations.
Statistics accumulate in the background on models quantized below 8 bits, persist per checkpoint, and raise delivered adapter fidelity at the same LoRA quantized host rank, most at low ranks.

Capture is skipped while the model is compiled; previously cached statistics still apply.

Enabled by default.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized host cache","localized":"","hint":"Disk space in GB for caching computed hosting factors.
A cached set skips the truncation math on the next load; least recently used entries are evicted once the budget is exceeded.

0 disables the cache.

Default is 10.","ui":"settings_lora"}, - {"id":"","label":"LoRA stack mode","localized":"","hint":"How multiple networks targeting the same layer are combined:
- sum: adds all contributions
- ties: keeps each network's strongest elements and merges only where signs agree
- dare_ties: randomly drops elements, rescales the survivors, then merges where signs agree
- dare_linear: randomly drops elements, rescales the survivors and sums
- magnitude_prune: keeps each network's strongest elements and sums
- klora / estlora: assign each layer to one of exactly two networks, the first in the prompt as subject and the second as style, shifting from subject toward style over the sampling steps

Kept fractions are set by LoRA stack density; the subject-to-style shift by LoRA stack ramp and LoRA stack discrepancy.

Applies to the native load path; other load methods and text encoder networks always combine as sum. Selection modes fall back to sum unless exactly two networks are loaded, or when model compile is active.

Default is sum.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack mode","localized":"","hint":"How multiple networks targeting the same layer are combined:
- sum: adds all contributions
- ties: keeps each network's strongest elements and merges only where signs agree
- dare_ties: randomly drops elements, rescales the survivors, then merges where signs agree
- dare_linear: randomly drops elements, rescales the survivors and sums
- magnitude_prune: keeps each network's strongest elements and sums
- klora / estlora: assign each layer to one of exactly two networks, the first in the prompt as subject and the second as style, shifting from subject toward style over the sampling steps

Each layer is given to a single network at a time, so a subject and a style that both need sustained strength can end up under-applied. For reliable blending of two strong networks, sum, ties and dare_ties apply every network throughout and combine more fully.

Kept fractions are set by LoRA stack density; the subject-to-style shift by LoRA stack ramp and LoRA stack discrepancy.

Applies to the native load path; other load methods and text encoder networks always combine as sum. Selection modes fall back to sum unless exactly two networks are loaded, or when model compile is active.

Default is sum.","ui":"settings_lora"}, {"id":"","label":"LoRA stack density","localized":"","hint":"Fraction of elements each network keeps under the ties, dare_ties, dare_linear and magnitude_prune stack modes.
Lower values keep only the strongest contributions and reduce interference between networks at the cost of per-network detail. The dare variants drop at random and rescale the survivors to preserve expected strength.

Default is 0.5.","ui":"settings_lora"}, {"id":"","label":"LoRA stack ramp","localized":"","hint":"Slope of the subject-to-style shift across the sampling steps in the klora and estlora stack modes.
Higher values shift layers to the style network earlier and more broadly; lower values keep the subject network dominant for longer.

0 keeps the balance fixed for the whole generation.

Default is 1.5.","ui":"settings_lora"}, - {"id":"","label":"LoRA stack discrepancy","localized":"","hint":"Stand-in for the measured style separation the estlora stack mode would otherwise derive from data.
Higher values keep layers with the subject network longer; lower values let the style network take layers earlier.

Applies only when LoRA stack mode is estlora.

Default is 0.5.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack discrepancy","localized":"","hint":"Stand-in for the measured style separation the estlora stack mode would otherwise derive from data.
Higher values keep layers with the subject network longer; lower values let the style network take layers earlier.

Layer scores are balanced by each network's overall strength, so a louder network does not take layers on magnitude alone.

Applies only when LoRA stack mode is estlora.

Default is 0.5.","ui":"settings_lora"}, {"id":"","label":"LoRA auto-apply tags","localized":"","hint":"Automatically add trigger words/tags from LoRA metadata to your prompt.
Set to the number of tags to auto-apply, e.g., 3 = add top 3 trigger tags.
Set to 0 to disable, -1 to add all available tags.","ui":"settings_lora"}, {"id":"","label":"LoRA memory cache","localized":"","hint":"How many LoRAs to keep in network for future use before requiring reloading from storage","ui":"settings_lora"}, {"id":"","label":"LoRA add hash info to metadata","localized":"","hint":"Include LoRA file hashes in generated image metadata.
Useful for reproducibility and tracking which exact LoRA versions were used.","ui":"settings_lora"}, From 3218740b20abc9538ce0a4654640972523c2db72 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 20 Jul 2026 23:33:03 +0100 Subject: [PATCH 073/270] fix(lora): surface the stack mode as an explicit field in load logs The active stack mode was only visible inside the stack= token of the trace-level network check line. Add it to the load summary as its own stack= field alongside method, mode, te and unet, carrying the mode and its tuning (ties:0.50, klora:1.50:0.50, sum). Non-native loads report sum, since those paths always combine as sum regardless of the setting. --- modules/lora/extra_networks_lora.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index 7d277e413..c0fce6fb4 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -272,7 +272,8 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): prompt(p) if has_changed and len(include) == 0: # print only once actual_method = 'native' if any(len(n.modules) > 0 for n in l.loaded_networks) else load_method - log.info(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} load={load_method}({load_reason}) method={actual_method} mode={networks.effective_mode()} te={te_multipliers} unet={unet_multipliers} time={l.timer.summary} reason="{reason}"') + stack = lora_stack.signature() if actual_method == 'native' else 'sum' # non-native paths always combine as sum + log.info(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} load={load_method}({load_reason}) method={actual_method} mode={networks.effective_mode()} stack={stack} te={te_multipliers} unet={unet_multipliers} time={l.timer.summary} reason="{reason}"') def deactivate(self, p, force=False): if len(lora_diffusers.diffuser_loaded) > 0 and (shared.opts.lora_force_reload or force): From 82e3c1d20f7e5557a3cbe03bf0c67f0cf7895f78 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 25 Jul 2026 22:14:47 +0100 Subject: [PATCH 074/270] feat(lora): log select stack schedules Select modes left no trace distinguishable from plain summation: apply_select counted its layers on the exact path, and the mode field in the load summary reflects the requested setting rather than what executed. A flip count can only come from a populated schedule. - report layers, initial style picks, flips, steps and gamma from finalize - deduplicate on content, since the schedule rebuilds on every pass - give select its own apply counter instead of inflating apply=exact --- modules/lora/lora_sdnq.py | 6 +++++- modules/lora/lora_stack.py | 11 ++++++++++- modules/lora/networks.py | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 45a514693..375e8d05a 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -56,6 +56,7 @@ fallback_layers: list[str] = [] hosted_layers: list[tuple[str, float, bool]] = [] hosted_ranks: list[int] = [] factor_layers: list[str] = [] +select_layers: list[str] = [] routed_layers: list[str] = [] REQUANT_RATIO = 0.30 # delta rms over mean grid step above which requantize can retain the delta @@ -507,7 +508,7 @@ def apply_select(self, network_layer_name, per_net, wanted_names): del d0, d1 segments, transposed = append_factors(self, [pairs[0][0], pairs[1][0]], [pairs[0][1], pairs[1][1]]) lora_stack.register(network_layer_name, self, 'factor', scores, segments=(segments[0], segments[1], transposed), abs_sums=abs_sums) - factor_layers.append(network_layer_name) + select_layers.append(network_layer_name) # counted apart from the plain concat: both ride the svd channel but only one is a summed set return True @@ -524,6 +525,9 @@ def report_fallbacks(): if len(factor_layers) > 0: log.info(f'Network load: type=LoRA quant=sdnq apply=exact layers={len(factor_layers)}') factor_layers.clear() + if len(select_layers) > 0: + log.info(f'Network load: type=LoRA quant=sdnq apply=select layers={len(select_layers)} mode={lora_stack.mode()}') + select_layers.clear() if len(hosted_layers) > 0: energies = sorted(e for _name, e, _c in hosted_layers) median = energies[len(energies) // 2] diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index 55453c858..38f586560 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -30,7 +30,7 @@ KLORA_BETA = 0.5 # the paper's fixed ramp offset; only the slope is user-tunable ROW_CHUNK = 512 # fp32 interiors run in first-dim slices; also fixes the DARE draw sequence SAMPLE_CAP = 1 << 22 # strided subsample bound for magnitude quantiles (full-size quantile exceeds torch limits) -state: dict = {'entries': {}, 'flips': {}, 'gamma': 1.0, 'gamma_num': 0.0, 'gamma_den': 0.0, 'gamma_e': 1.0, 'gamma_e_num': 0.0, 'gamma_e_den': 0.0, 'total_steps': 0, 'finalized': False} +state: dict = {'entries': {}, 'flips': {}, 'gamma': 1.0, 'gamma_num': 0.0, 'gamma_den': 0.0, 'gamma_e': 1.0, 'gamma_e_num': 0.0, 'gamma_e_den': 0.0, 'total_steps': 0, 'finalized': False, 'reported': None} warned: set = set() @@ -208,6 +208,7 @@ def clear(): state['gamma_e_den'] = 0.0 state['total_steps'] = 0 state['finalized'] = False + state['reported'] = None def register(layer_name, module, kind, scores, segments=None, nets=None, abs_sums=None): @@ -271,13 +272,21 @@ def finalize(total_steps): state['flips'] = {} if any(e['kind'] == 'weight' for e in state['entries'].values()): materialize_model() + style_first = 0 for layer_name, entry in list(state['entries'].items()): # snapshot: apply_selection drops entries whose module died flip_at = layer_flip_step(entry['scores'], state['total_steps']) initial = 1 if flip_at == 0 else 0 + style_first += initial apply_selection(layer_name, entry, initial) if 0 < flip_at < state['total_steps']: state['flips'].setdefault(flip_at, []).append(layer_name) state['finalized'] = True + if len(state['entries']) > 0: # only a built schedule can carry a flip count, so this is the line that shows selection is live rather than requested + gamma = state['gamma_e'] if mode() == 'estlora' else state['gamma'] + report = (mode(), len(state['entries']), style_first, sum(len(v) for v in state['flips'].values()), state['total_steps'], round(gamma, 3)) + if report != state['reported']: # rebuilt every pass, so a batch would otherwise repeat one line per image + state['reported'] = report + log.info(f'Network load: type=LoRA stack={report[0]} layers={report[1]} style={report[2]} flips={report[3]} steps={report[4]} gamma={report[5]:.3f}') def reset(total_steps): diff --git a/modules/lora/networks.py b/modules/lora/networks.py index a1af90518..0987c679d 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -96,6 +96,7 @@ def network_activate(include=None, exclude=None): lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind lora_sdnq.hosted_layers.clear() lora_sdnq.factor_layers.clear() + lora_sdnq.select_layers.clear() backup_size = 0 for component in modules.keys(): component_wanted = wanted_names if component in components else () From 72d9fd1b7805f4c32abf373e5ae95840b25707e0 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 25 Jul 2026 23:32:59 +0100 Subject: [PATCH 075/270] fix(lora): derive select stack balances from live schedule entries The klora and estlora balance factors accumulated across registrations without ever resetting, so a multiplier change or pair swap blended the previous registration into every later schedule. Balances now sum over the live entries at finalize time, which keeps drop and re-register consistent by construction. - key flips one step early: step callbacks fire after the denoise, so the winner is now live during the crossover step forward and a final-step crossover engages instead of expiring - include the calibration toggle in the factor cache signature so a hit never replays factors computed under the other setting - fall back to summation with a warning when hosting is disabled on a quantized model instead of registering schedules that cannot flip - drop the unused score_topk helper --- modules/lora/lora_stack.py | 32 +++++--------- modules/lora/networks.py | 3 ++ test/test-sdnq-lora-factors.py | 76 +++++++++++++++++++++++++++++++++- 3 files changed, 88 insertions(+), 23 deletions(-) diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index 38f586560..ef60bc735 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -30,7 +30,7 @@ KLORA_BETA = 0.5 # the paper's fixed ramp offset; only the slope is user-tunable ROW_CHUNK = 512 # fp32 interiors run in first-dim slices; also fixes the DARE draw sequence SAMPLE_CAP = 1 << 22 # strided subsample bound for magnitude quantiles (full-size quantile exceeds torch limits) -state: dict = {'entries': {}, 'flips': {}, 'gamma': 1.0, 'gamma_num': 0.0, 'gamma_den': 0.0, 'gamma_e': 1.0, 'gamma_e_num': 0.0, 'gamma_e_den': 0.0, 'total_steps': 0, 'finalized': False, 'reported': None} +state: dict = {'entries': {}, 'flips': {}, 'gamma': 1.0, 'gamma_e': 1.0, 'total_steps': 0, 'finalized': False, 'reported': None} warned: set = set() @@ -183,13 +183,6 @@ def drop(layer_name): state['finalized'] = False -def score_topk(up, down, k): - """K-LoRA layer score: sum of the top-K absolute delta entries (one dense materialization).""" - d = (up.to(torch.float32) @ down.to(torch.float32)).abs().flatten() - values = torch.topk(d, min(int(k), d.numel()), sorted=False).values - return float(values.sum()), float(d.sum()) - - def score_energy(up, down): """EST layer score: squared Frobenius norm of up@down via the Gram identity, no materialization.""" u = up.to(torch.float32) @@ -201,11 +194,7 @@ def clear(): state['entries'] = {} state['flips'] = {} state['gamma'] = 1.0 - state['gamma_num'] = 0.0 - state['gamma_den'] = 0.0 state['gamma_e'] = 1.0 - state['gamma_e_num'] = 0.0 - state['gamma_e_den'] = 0.0 state['total_steps'] = 0 state['finalized'] = False state['reported'] = None @@ -219,17 +208,11 @@ def register(layer_name, module, kind, scores, segments=None, nets=None, abs_sum the two network names; the winner delta is recomputed from the layer backup at selection time. abs_sums feeds the global magnitude balance (klora gamma). """ - entry = {'layer': layer_name, 'module': weakref.ref(module), 'kind': kind, 'segments': segments, 'scores': scores, 'nets': nets, 'stash': None} + entry = {'layer': layer_name, 'module': weakref.ref(module), 'kind': kind, 'segments': segments, 'scores': scores, 'nets': nets, 'abs_sums': abs_sums, 'stash': None} if kind == 'factor': (s0, s1), (t0, t1), transposed = segments up = module.svd_up.data entry['stash'] = (segment_view(up, s0, s1, transposed).clone(), segment_view(up, t0, t1, transposed).clone()) - if abs_sums is not None: - state['gamma_num'] += abs_sums[0] - state['gamma_den'] += abs_sums[1] - if mode() == 'estlora': # est scores ARE the per-layer energies; their totals give the scale-invariant balance - state['gamma_e_num'] += scores[0] - state['gamma_e_den'] += scores[1] state['entries'][layer_name] = entry state['finalized'] = False @@ -267,8 +250,13 @@ def materialize_model(): def finalize(total_steps): """Build the inverted flip map for the pass; select-mode layers start at their step-0 winner.""" state['total_steps'] = int(total_steps) - state['gamma'] = (state['gamma_num'] / state['gamma_den']) if state['gamma_den'] > 0 else 1.0 - state['gamma_e'] = (state['gamma_e_num'] / state['gamma_e_den']) if state['gamma_e_den'] > 0 else 1.0 + # both balances derive from the live entries every time, so drops and re-registrations stay consistent by construction + num = sum(e['abs_sums'][0] for e in state['entries'].values() if e['abs_sums'] is not None) + den = sum(e['abs_sums'][1] for e in state['entries'].values() if e['abs_sums'] is not None) + state['gamma'] = (num / den) if den > 0 else 1.0 + e_num = sum(e['scores'][0] for e in state['entries'].values()) # est scores ARE the per-layer energies; their totals give the scale-invariant balance + e_den = sum(e['scores'][1] for e in state['entries'].values()) + state['gamma_e'] = (e_num / e_den) if e_den > 0 else 1.0 state['flips'] = {} if any(e['kind'] == 'weight' for e in state['entries'].values()): materialize_model() @@ -279,7 +267,7 @@ def finalize(total_steps): style_first += initial apply_selection(layer_name, entry, initial) if 0 < flip_at < state['total_steps']: - state['flips'].setdefault(flip_at, []).append(layer_name) + state['flips'].setdefault(flip_at - 1, []).append(layer_name) # step callbacks fire after the denoise, so the flip runs one step early to be live during the crossover step's forward state['finalized'] = True if len(state['entries']) > 0: # only a built schedule can carry a flip count, so this is the line that shows selection is live rather than requested gamma = state['gamma_e'] if mode() == 'estlora' else state['gamma'] diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 0987c679d..651fe8826 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -129,6 +129,9 @@ def network_activate(include=None, exclude=None): if task is not None: pbar.update(task, advance=1) continue + elif getattr(module, 'sdnq_dequantizer', None) is not None: # hosting disabled: quantized layers have no side-channel to carry segments and packed backups cannot flip, so the sum paths below take the layer + if any(net.modules.get(network_layer_name, None) is not None for net in l.loaded_networks): + lora_stack.warn_once('select-host-disabled', f'Network stack: mode={lora_stack.mode()} quant=sdnq host=disabled fallback=sum') else: # other layers select by recomputing the winner from the pristine backup at schedule time backup_size += network_backup_weights(module, network_layer_name, component_wanted, fuse) weights_backup = getattr(module, "network_weights_backup", None) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index b08f2988b..7b4455077 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -1930,6 +1930,79 @@ def test_select_weight_kind_plain_layer(): return True +def test_select_gamma_tracks_live_entries(): + layer = build_layer('uint4') + n1, n2, _D1, _D2 = select_pair(layer, seed0=57, seed1=58) + with mock_model(lin=layer), select_mode('klora'): + activate(n1, n2) + lora_stack.reset(20) + entry = lora_stack.state['entries']['lora_transformer_test'] + live = entry['abs_sums'][0] / entry['abs_sums'][1] + assert abs(lora_stack.state['gamma'] - live) < 1e-9, f'gamma {lora_stack.state["gamma"]} vs live ratio {live}' + n2.te_multiplier = 0.5 + n2.unet_multiplier = [0.5] * 3 + activate(n1, n2) # multiplier change re-applies the pair through the drop/re-register walk + lora_stack.reset(20) + entry = lora_stack.state['entries']['lora_transformer_test'] + live2 = entry['abs_sums'][0] / entry['abs_sums'][1] + assert live2 > live * 1.5, f'halving the style multiplier must move the live ratio: {live} -> {live2}' + assert abs(lora_stack.state['gamma'] - live2) < 1e-9, f'gamma must equal the live-entry ratio, not blend with the previous registration: {lora_stack.state["gamma"]} vs {live2}' + activate() + with mock_model(lin=layer), select_mode('estlora'): + activate(n1, n2) + lora_stack.reset(20) + entry = lora_stack.state['entries']['lora_transformer_test'] + live_e = entry['scores'][0] / entry['scores'][1] + assert abs(lora_stack.state['gamma_e'] - live_e) < 1e-9 + n2.te_multiplier = 1.0 + n2.unet_multiplier = [1.0] * 3 + activate(n1, n2) + lora_stack.reset(20) + entry = lora_stack.state['entries']['lora_transformer_test'] + live_e2 = entry['scores'][0] / entry['scores'][1] + assert abs(lora_stack.state['gamma_e'] - live_e2) < 1e-9, f'energy balance must track the live registration: {lora_stack.state["gamma_e"]} vs {live_e2}' + activate() + return True + + +def test_select_host_disabled_falls_back_to_sum(): + layer = build_layer('uint4') + n1, n2, D1, D2 = select_pair(layer, seed0=53, seed1=54) + with mock_model(lin=layer), select_mode('klora'), host_rank(0): + Wdq0 = dq(layer) + activate(n1, n2) + assert not lora_stack.select_engaged(), 'hosting disabled: quantized layers cannot carry segments, nothing must schedule' + assert 'select-host-disabled' in lora_stack.warned, 'the degradation must be said once' + eff = dq(layer) - Wdq0 + assert rho_of(eff, D1 + D2) > 0.99, 'the pair must land as plain summation, not a pristine no-op' + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_flip_lands_before_crossover_step(): + layer = build_layer('uint4') + n1, n2, D1, D2 = select_pair(layer, seed0=55, seed1=56) + with mock_model(lin=layer), select_mode('klora'): + Wdq0 = dq(layer) + activate(n1, n2) + total = 20 + orig = lora_stack.layer_flip_step + lora_stack.layer_flip_step = lambda scores, t: t - 1 # crossover on the final step + try: + lora_stack.reset(total) + finally: + lora_stack.layer_flip_step = orig + assert list(lora_stack.state['flips'].keys()) == [total - 2], f'end-of-step callbacks: a crossover at step k must execute at the end of step k-1, got {list(lora_stack.state["flips"].keys())}' + assert rho_of(dq(layer) - Wdq0, D1) > 0.99, 'the subject holds the layer before the flip' + for s in range(total - 1): # the callback after the second-to-last denoise is the last one that can matter + lora_stack.on_step(s) + assert rho_of(dq(layer) - Wdq0, D2) > 0.99, 'the style side must be live for the final denoise' + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + CAT_COMPILE = category('compile') @@ -2120,7 +2193,8 @@ def run_tests(): test_select_matmul_transposed_layout, test_select_per_net_hosted_pair, test_select_reset_restores_initial_state, test_select_deactivate_from_midflip, test_select_requires_exactly_two_nets, test_select_gated_off_when_compiled, test_select_finalize_drops_dead_module, test_select_int8_pair_rides_segments, test_select_gate_dormant_without_pair, test_stale_schedule_dropped_on_reapply, - test_est_energy_matches_full_frobenius, test_select_weight_kind_plain_layer]: + test_est_energy_matches_full_frobenius, test_select_weight_kind_plain_layer, + test_select_gamma_tracks_live_entries, test_select_host_disabled_falls_back_to_sum, test_flip_lands_before_crossover_step]: run_test(CAT_SELECT, fn) log.warning('=== Compile ===') for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse]: From 4032ff61a88cbe3071f689563437a7815b7bc4b4 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 25 Jul 2026 23:38:21 +0100 Subject: [PATCH 076/270] fix(lora): keep the select count warning quiet without networks A restore-only activation walk carries zero networks, so the networks=0 required=2 fallback warning fired on every network-free generation whenever a select stack mode was set. The gate now short-circuits at zero; the 1-and-3-network warnings that remain meaningful are unchanged. --- modules/lora/networks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 651fe8826..aa4470da3 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -91,7 +91,7 @@ def network_activate(include=None, exclude=None): with devices.inference_context(), pbar: wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () stack_sig = lora_stack.signature() + lora_sdnq.signature() # tracked beside network_current_names so settings-only stack or mechanism changes re-apply - select_active = lora_stack.active_select(len(l.loaded_networks)) + select_active = len(l.loaded_networks) > 0 and lora_stack.active_select(len(l.loaded_networks)) # restore-only walks have nothing to stack; the count warning would fire on every network-free generation applied_layers.clear() lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind lora_sdnq.hosted_layers.clear() From 84220562ee917e26d0a1a21796b754402bc48f38 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 26 Jul 2026 00:07:29 +0100 Subject: [PATCH 077/270] fix(lora): count select backups once and log unridable pairs The weight-kind select branch counted its backup at its own call site and again at the shared backup call when registration fell through, so the reported backup size double-counted those layers; the size now lands with whichever path keeps the layer. A pair the svd channel cannot carry (bias delta or malformed member) previously dropped to the sum paths with no trace; the fallthrough now says so once. --- modules/lora/networks.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/lora/networks.py b/modules/lora/networks.py index aa4470da3..366997118 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -129,15 +129,17 @@ def network_activate(include=None, exclude=None): if task is not None: pbar.update(task, advance=1) continue + lora_stack.warn_once('select-unridable', f'Network stack: mode={lora_stack.mode()} layer="{network_layer_name}" fallback=sum') # a pair the channel cannot carry (bias delta or malformed member) sums like any unsupported set elif getattr(module, 'sdnq_dequantizer', None) is not None: # hosting disabled: quantized layers have no side-channel to carry segments and packed backups cannot flip, so the sum paths below take the layer if any(net.modules.get(network_layer_name, None) is not None for net in l.loaded_networks): lora_stack.warn_once('select-host-disabled', f'Network stack: mode={lora_stack.mode()} quant=sdnq host=disabled fallback=sum') else: # other layers select by recomputing the winner from the pristine backup at schedule time - backup_size += network_backup_weights(module, network_layer_name, component_wanted, fuse) + sel_backup = network_backup_weights(module, network_layer_name, component_wanted, fuse) weights_backup = getattr(module, "network_weights_backup", None) if weights_backup is not None and not isinstance(weights_backup, bool): per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=elimit, per_net=True) if sel_bias is None and lora_stack.register_weight_pair(network_layer_name, module, per_net): + backup_size += sel_backup # counted only when this branch keeps the layer; the fallthrough re-enters the shared backup call below, which counts it then network_apply_weights(module, None, None, device=device) # pristine until the schedule applies the winner applied_layers.append(network_layer_name) applied_weight += 1 From de5e94073cca152cccbc369f55a25d6b7ec12af4 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 26 Jul 2026 07:24:31 +0100 Subject: [PATCH 078/270] perf(lora): chunk select scoring and cache select scores for replay Select scoring staged full fp32 copies, an abs copy and top-k workspace per layer (hundreds of MB of transients that collide with block swapping on offloaded denoisers) and recomputed scores from freshly assembled deltas on every apply, which kept select modes out of the factor-cache fast path. - score_pair: row-chunked fp32 interiors, fp64 accumulators, one device sync - select scores persist in the factor cache as additive per-layer records under the existing configuration signature - apply_select_cached and register_weight_pair_cached replay a pair without assembling deltas; the weight-kind winner is still computed at schedule time --- modules/lora/lora_factor_cache.py | 24 ++++++ modules/lora/lora_sdnq.py | 54 +++++++++++++- modules/lora/lora_stack.py | 73 ++++++++++++++---- modules/lora/networks.py | 38 ++++++---- test/test-sdnq-lora-factors.py | 119 +++++++++++++++++++++++++++++- 5 files changed, 277 insertions(+), 31 deletions(-) diff --git a/modules/lora/lora_factor_cache.py b/modules/lora/lora_factor_cache.py index d6c95d681..aab36c7a5 100644 --- a/modules/lora/lora_factor_cache.py +++ b/modules/lora/lora_factor_cache.py @@ -157,6 +157,30 @@ def fetch(network_layer_name): return entry +def lookup_scores(network_layer_name): + """Cached select scores for a layer as ((s0, s1), (a0, a1)), or None. + + Score records ride the same signature-keyed entry as factors, and the + signature already pins everything the scores depend on (pair, multipliers, + stack mode and params). No hit/miss accounting: a record saves scoring and + delta assembly, not a sketch. + """ + if state['sig'] is None: + return None + t = state['store'].get(f'{network_layer_name}.sel') + if t is None: + return None + return (float(t[0]), float(t[1])), (float(t[2]), float(t[3])) + + +def store_scores(network_layer_name, scores, abs_sums): + """Persist a select-mode score record; additive to the entry, older files upgrade on their next pass.""" + if state['sig'] is None: + return + state['store'][f'{network_layer_name}.sel'] = torch.tensor([scores[0], scores[1], abs_sums[0], abs_sums[1]], dtype=torch.float64) + state['dirty'] = True + + def store(network_layer_name, up, down, energy, calibrated, rms): """Quantize-before-use: returns the dequantized round-trip the caller must apply. diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 375e8d05a..35635b227 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -460,6 +460,54 @@ def truncate_delta(self, D, dtype): return up_h, down_h, energy, rms is not None +def apply_select_cached(self, network_layer_name, wanted_names): + """Serve a select pair from cache and live factors before the walk assembles deltas. + + A cached score record plus a factor pair per network (exact factors for + factorable members, cached truncations otherwise) rebuild the segments and + the selection registration without any ``calc_updown``. Returns None when + any piece is missing; the caller assembles and ``apply_select`` recomputes + and stores. + """ + from sdnq.quant_utils import rotate_hadamard + deq = self.sdnq_dequantizer + changed = remove_factors(self) + if wanted_names == (): + return changed + if len(l.loaded_networks) != 2: + return None + dtype = deq.result_dtype + lora_factor_cache.begin_pass(wanted_names) + rec = lora_factor_cache.lookup_scores(network_layer_name) + if rec is None: + return None + pairs, notes = [], [] + for i, net in enumerate(l.loaded_networks): + module = net.modules.get(network_layer_name, None) + if module is None: + return None + factors = get_module_factors(module, devices.device, dtype, original_shape=deq.original_shape) + if factors is not None: + up_i, down_i = factors + if deq.use_hadamard: + down_i = rotate_hadamard(down_i.to(dtype=torch.float32), group_size=deq.hadamard_group_size).to(dtype=dtype) + else: + cached = lora_factor_cache.lookup(f'{network_layer_name}#{i}') + if cached is None: + return None + up_i, down_i = cached[0].to(device=devices.device, dtype=dtype), cached[1].to(device=devices.device, dtype=dtype) + notes.append((f'{network_layer_name}#{i}', cached[2], cached[3])) + pairs.append((up_i, down_i)) + scores, abs_sums = rec + segments, transposed = append_factors(self, [pairs[0][0], pairs[1][0]], [pairs[0][1], pairs[1][1]]) + lora_stack.register(network_layer_name, self, 'factor', scores, segments=(segments[0], segments[1], transposed), abs_sums=abs_sums) + for note in notes: + lora_factor_cache.note_hit() + hosted_layers.append(note) + select_layers.append(network_layer_name) + return True + + def apply_select(self, network_layer_name, per_net, wanted_names): """Attach two networks' contributions as separate side-channel segments for per-layer selection. @@ -502,10 +550,8 @@ def apply_select(self, network_layer_name, per_net, wanted_names): up_i, down_i = lora_factor_cache.store(key, up_i, down_i, energy, calibrated, float(D.detach().float().square().mean().sqrt())) hosted_layers.append((key, energy, calibrated)) pairs.append((up_i, down_i)) - d0 = per_net[0][1].detach().to(devices.device, torch.float32) - d1 = per_net[1][1].detach().to(devices.device, torch.float32) - scores, abs_sums = lora_stack.score_pair(d0, d1, ranks[0], ranks[1]) - del d0, d1 + scores, abs_sums = lora_stack.score_pair(per_net[0][1].detach(), per_net[1][1].detach(), ranks[0], ranks[1]) + lora_factor_cache.store_scores(network_layer_name, scores, abs_sums) segments, transposed = append_factors(self, [pairs[0][0], pairs[1][0]], [pairs[0][1], pairs[1][1]]) lora_stack.register(network_layer_name, self, 'factor', scores, segments=(segments[0], segments[1], transposed), abs_sums=abs_sums) select_layers.append(network_layer_name) # counted apart from the plain concat: both ride the svd channel but only one is a summed set diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index ef60bc735..acd1117fa 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -145,20 +145,43 @@ def combine(named_deltas, layer_name): def score_pair(d0, d1, rank0, rank1): - """Selection scores for a dense delta pair: klora top-K sums (K = rank product) or est energies; plus abs-sums for the global balance.""" - abs_sums = (float(d0.abs().sum()), float(d1.abs().sum())) - if mode() == 'klora': - k = max(1, int(rank0) * int(rank1)) - s0 = float(torch.topk(d0.abs().flatten(), min(k, d0.numel()), sorted=False).values.sum()) - s1 = float(torch.topk(d1.abs().flatten(), min(k, d1.numel()), sorted=False).values.sum()) - else: - s0 = float(d0.float().square().sum()) - s1 = float(d1.float().square().sum()) - return (s0, s1), abs_sums + """Selection scores for a dense delta pair: klora top-K sums (K = rank product) or est energies; plus abs-sums for the global balance. + + Row-chunked fp32 interiors with fp64 accumulators and one device sync for + all four reductions. Full-tensor staging (fp32 copy, abs copy, top-k + workspace) peaks hundreds of MB per large layer, which collides with block + swapping on offloaded denoisers; chunking bounds the transient to the + chunk. The global top-K over per-chunk top-K candidates selects the same + element set as a whole-tensor top-K. + """ + k = max(1, int(rank0) * int(rank1)) if mode() == 'klora' else 0 + accs = [] + for d in (d0, d1): + score = torch.zeros((), device=d.device, dtype=torch.float64) + abs_sum = torch.zeros((), device=d.device, dtype=torch.float64) + cands = [] + for start in range(0, d.shape[0], ROW_CHUNK): + c = d[start:start + ROW_CHUNK].to(torch.float32).abs() # out-of-place abs: to() may alias a caller-owned fp32 tensor + abs_sum += c.sum(dtype=torch.float64) + if k: + flat = c.flatten() + cands.append(torch.topk(flat, min(k, flat.numel()), sorted=False).values) + else: + score += c.square().sum(dtype=torch.float64) + if k and cands: + allc = torch.cat(cands) if len(cands) > 1 else cands[0] + score = torch.topk(allc, min(k, allc.numel()), sorted=False).values.sum(dtype=torch.float64) + accs.append((score, abs_sum)) + packed = torch.stack([accs[0][0], accs[0][1], accs[1][0], accs[1][1]]).cpu() + return (float(packed[0]), float(packed[2])), (float(packed[1]), float(packed[3])) -def register_weight_pair(layer_name, module, per_net): - """Score and register a weight-kind selection pair; True when the layer is scheduled.""" +def register_weight_pair(layer_name, module, per_net, wanted_names=None): + """Score and register a weight-kind selection pair; True when the layer is scheduled. + + The scores persist in the factor cache when a pass identity is given, so a + later apply of the same configuration registers from the record alone. + """ from modules.lora import lora_common as l if per_net is None or len(per_net) != 2: return False @@ -172,11 +195,35 @@ def register_weight_pair(layer_name, module, per_net): return False names.append(net_name) ranks.append(int(getattr(net_module, 'dim', 0) or 0) or 64) - scores, abs_sums = score_pair(per_net[0][1].float(), per_net[1][1].float(), ranks[0], ranks[1]) + scores, abs_sums = score_pair(per_net[0][1], per_net[1][1], ranks[0], ranks[1]) + if wanted_names is not None: + from modules.lora import lora_factor_cache + lora_factor_cache.begin_pass(wanted_names) + lora_factor_cache.store_scores(layer_name, scores, abs_sums) register(layer_name, module, 'weight', scores, nets=tuple(names), abs_sums=abs_sums) return True +def register_weight_pair_cached(layer_name, module, wanted_names): + """Register a weight-kind pair from its cached score record; True when served. + + The record was stored under the same configuration signature, which pins + the loaded pair, multipliers and stack settings, so both networks are known + to target the layer and the prompt-order roles are unchanged. + """ + from modules.lora import lora_common as l + from modules.lora import lora_factor_cache + if len(l.loaded_networks) != 2: + return False + lora_factor_cache.begin_pass(wanted_names) + rec = lora_factor_cache.lookup_scores(layer_name) + if rec is None: + return False + scores, abs_sums = rec + register(layer_name, module, 'weight', scores, nets=tuple(n.name for n in l.loaded_networks), abs_sums=abs_sums) + return True + + def drop(layer_name): """Forget a layer's selection entry (its factors were removed or restored).""" if layer_name is not None and state['entries'].pop(layer_name, None) is not None: diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 366997118..f62fe431a 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -117,18 +117,20 @@ def network_activate(include=None, exclude=None): weights_backup = getattr(module, "network_weights_backup", None) if weights_backup is not None and not isinstance(weights_backup, bool): network_apply_weights(module, None, None, device=device) - per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=elimit, per_net=True) - if sel_bias is None: - applied = lora_sdnq.apply_select(module, network_layer_name, per_net, component_wanted) - if applied is not None: - if applied and component_wanted: - applied_layers.append(network_layer_name) - applied_weight += 1 - module.network_current_names = component_wanted - module.network_current_stack = stack_sig - if task is not None: - pbar.update(task, advance=1) - continue + applied = lora_sdnq.apply_select_cached(module, network_layer_name, component_wanted) # a stored score record and factor pair serve before the deltas are assembled + if applied is None: + per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=elimit, per_net=True) + if sel_bias is None: + applied = lora_sdnq.apply_select(module, network_layer_name, per_net, component_wanted) + if applied is not None: + if applied and component_wanted: + applied_layers.append(network_layer_name) + applied_weight += 1 + module.network_current_names = component_wanted + module.network_current_stack = stack_sig + if task is not None: + pbar.update(task, advance=1) + continue lora_stack.warn_once('select-unridable', f'Network stack: mode={lora_stack.mode()} layer="{network_layer_name}" fallback=sum') # a pair the channel cannot carry (bias delta or malformed member) sums like any unsupported set elif getattr(module, 'sdnq_dequantizer', None) is not None: # hosting disabled: quantized layers have no side-channel to carry segments and packed backups cannot flip, so the sum paths below take the layer if any(net.modules.get(network_layer_name, None) is not None for net in l.loaded_networks): @@ -137,8 +139,18 @@ def network_activate(include=None, exclude=None): sel_backup = network_backup_weights(module, network_layer_name, component_wanted, fuse) weights_backup = getattr(module, "network_weights_backup", None) if weights_backup is not None and not isinstance(weights_backup, bool): + if lora_stack.register_weight_pair_cached(network_layer_name, module, component_wanted): # a stored score record registers without assembling the pair + backup_size += sel_backup + network_apply_weights(module, None, None, device=device) # pristine until the schedule applies the winner + applied_layers.append(network_layer_name) + applied_weight += 1 + module.network_current_names = component_wanted + module.network_current_stack = stack_sig + if task is not None: + pbar.update(task, advance=1) + continue per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=elimit, per_net=True) - if sel_bias is None and lora_stack.register_weight_pair(network_layer_name, module, per_net): + if sel_bias is None and lora_stack.register_weight_pair(network_layer_name, module, per_net, component_wanted): backup_size += sel_backup # counted only when this branch keeps the layer; the fallthrough re-enters the shared backup call below, which counts it then network_apply_weights(module, None, None, device=device) # pristine until the schedule applies the winner applied_layers.append(network_layer_name) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 7b4455077..61627f5f8 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -2003,6 +2003,122 @@ def test_flip_lands_before_crossover_step(): return True +def test_score_pair_chunked_precision(): + torch.manual_seed(71) + shapes = [(700, 460), (OUT_F, IN_F), (64,)] # off-chunk rows, square, and a 1-D norm delta + for shape in shapes: + d0 = (torch.randn(*shape, device=DEVICE) * 1e-2).to(torch.bfloat16) + d1 = (torch.randn(*shape, device=DEVICE) * 1e-2).to(torch.bfloat16) + for mode_name in ('klora', 'estlora'): + with select_mode(mode_name): + (s0, s1), (a0, a1) = lora_stack.score_pair(d0, d1, 8, 8) + f0, f1 = d0.to(torch.float64), d1.to(torch.float64) + ra0, ra1 = float(f0.abs().sum()), float(f1.abs().sum()) + if mode_name == 'klora': + k = 64 + rs0 = float(torch.topk(f0.abs().flatten(), min(k, f0.numel()), sorted=False).values.sum()) + rs1 = float(torch.topk(f1.abs().flatten(), min(k, f1.numel()), sorted=False).values.sum()) + else: + rs0, rs1 = float(f0.square().sum()), float(f1.square().sum()) + for got, ref, label in ((s0, rs0, 'score0'), (s1, rs1, 'score1'), (a0, ra0, 'abs0'), (a1, ra1, 'abs1')): + assert abs(got - ref) <= 1e-9 * max(abs(ref), 1e-12), f'{mode_name} {label} shape={shape}: got {got!r} ref {ref!r}' + frozen = torch.randn(300, 200, device=DEVICE, dtype=torch.float32) * 1e-2 # fp32 input aliases through to(); abs must stay out-of-place + pristine = frozen.clone() + with select_mode('klora'): + lora_stack.score_pair(frozen, frozen, 4, 4) + assert torch.equal(frozen, pristine), 'score_pair must not mutate a caller-owned fp32 delta' + return True + + +def test_select_replay_from_cache_skips_calc(): + import tempfile + layer = build_layer('uint4') + torch.manual_seed(73) + Dd1 = (torch.randn(OUT_F, 24, device=DEVICE) @ torch.randn(24, IN_F, device=DEVICE)) * 1e-3 + Dd2 = (torch.randn(OUT_F, 24, device=DEVICE) @ torch.randn(24, IN_F, device=DEVICE)) * 1e-3 + with tempfile.TemporaryDirectory() as tmp: + with host_rank(32), host_cache(10, os.path.join(tmp, 'cache')), mock_model(lin=layer), select_mode('klora'): + n1 = make_dense_net('selk1', layer, Dd1) + n2 = make_dense_net('selk2', layer, Dd2) + for net in (n1, n2): + lora_file = os.path.join(tmp, f'{net.name}.safetensors') + with open(lora_file, 'wb') as f: + f.write(b'0' * 64) + net.network_on_disk.filename = lora_file + from modules.modeldata import model_data + model_data.sd_model.sd_checkpoint_info = MockCheckpointInfo('test/cache-model') + Wdq0 = dq(layer) + with counting_calc() as calls: + activate(n1, n2) + assert calls['n'] > 0, 'a fresh select apply must assemble both deltas' + entry = lora_stack.state['entries'].get('lora_transformer_test') + assert entry is not None and entry['kind'] == 'factor' + fresh_scores, fresh_abs = entry['scores'], entry['abs_sums'] + first = dq(layer) + activate() + calls['n'] = 0 + real_svd = torch.svd_lowrank + torch.svd_lowrank = raise_no_svd + try: + activate(n1, n2) + finally: + torch.svd_lowrank = real_svd + assert calls['n'] == 0, f'a select replay must not assemble deltas: calc_updown ran {calls["n"]} times' + entry = lora_stack.state['entries'].get('lora_transformer_test') + assert entry is not None and entry['kind'] == 'factor', 'the replay must re-register the selection' + assert entry['scores'] == fresh_scores and entry['abs_sums'] == fresh_abs, 'cached scores must replay exactly' + assert torch.equal(dq(layer), first), 'select replay must be bit-identical to the fresh apply' + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_select_weight_replay_from_cache_skips_calc(): + import tempfile + lin = torch.nn.Linear(IN_F, OUT_F, bias=False, dtype=torch.bfloat16, device=DEVICE) + with torch.no_grad(): + lin.weight.copy_(torch.randn(OUT_F, IN_F, device=DEVICE) * 0.02) + lin.network_layer_name = 'lora_transformer_plainsel' + lin.network_current_names = () + torch.manual_seed(75) + Dd1 = (torch.randn(OUT_F, 24, device=DEVICE) @ torch.randn(24, IN_F, device=DEVICE)) * 1e-3 + Dd2 = (torch.randn(OUT_F, 24, device=DEVICE) @ torch.randn(24, IN_F, device=DEVICE)) * 1e-3 + W0 = lin.weight.detach().float().clone() + with tempfile.TemporaryDirectory() as tmp: + with host_cache(10, os.path.join(tmp, 'cache')), mock_model(lin=lin), select_mode('klora'): + n1 = make_dense_net('selw1', lin, Dd1) + n2 = make_dense_net('selw2', lin, Dd2) + for net in (n1, n2): + lora_file = os.path.join(tmp, f'{net.name}.safetensors') + with open(lora_file, 'wb') as f: + f.write(b'0' * 64) + net.network_on_disk.filename = lora_file + from modules.modeldata import model_data + model_data.sd_model.sd_checkpoint_info = MockCheckpointInfo('test/cache-model') + with counting_calc() as calls: + activate(n1, n2) + assert calls['n'] > 0, 'a fresh weight-kind select apply must assemble the pair' + entry = lora_stack.state['entries'].get('lora_transformer_plainsel') + assert entry is not None and entry['kind'] == 'weight' + fresh_scores = entry['scores'] + assert torch.equal(lin.weight.detach().float(), W0), 'weights stay pristine until the schedule applies a winner' + lora_stack.reset(20) + fresh_selected = lin.weight.detach().float().clone() + activate() + assert torch.equal(lin.weight.detach().float(), W0) + calls['n'] = 0 + activate(n1, n2) + assert calls['n'] == 0, f'a weight-kind select replay must not assemble the pair: calc_updown ran {calls["n"]} times' + entry = lora_stack.state['entries'].get('lora_transformer_plainsel') + assert entry is not None and entry['kind'] == 'weight', 'the replay must register from the score record' + assert entry['scores'] == fresh_scores, 'cached scores must replay exactly' + lora_stack.reset(20) # the winner recompute at schedule time still assembles its own delta, by design + assert torch.equal(lin.weight.detach().float(), fresh_selected), 'the replayed schedule must select the same winner' + activate() + assert torch.equal(lin.weight.detach().float(), W0) + return True + + CAT_COMPILE = category('compile') @@ -2194,7 +2310,8 @@ def run_tests(): test_select_deactivate_from_midflip, test_select_requires_exactly_two_nets, test_select_gated_off_when_compiled, test_select_finalize_drops_dead_module, test_select_int8_pair_rides_segments, test_select_gate_dormant_without_pair, test_stale_schedule_dropped_on_reapply, test_est_energy_matches_full_frobenius, test_select_weight_kind_plain_layer, - test_select_gamma_tracks_live_entries, test_select_host_disabled_falls_back_to_sum, test_flip_lands_before_crossover_step]: + test_select_gamma_tracks_live_entries, test_select_host_disabled_falls_back_to_sum, test_flip_lands_before_crossover_step, + test_score_pair_chunked_precision, test_select_replay_from_cache_skips_calc, test_select_weight_replay_from_cache_skips_calc]: run_test(CAT_SELECT, fn) log.warning('=== Compile ===') for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse]: From c762bfec18541c0a6d95f7eca2cff3c7caaab9d4 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 26 Jul 2026 16:41:27 +0100 Subject: [PATCH 079/270] perf(lora): materialize select winners on the accelerator and time the reset The weight-kind schedule reset ran each winner's calc_updown on the target weight's device, which on a block-swapped denoiser is the cpu; at hundreds of layers per pass the cpu matmuls dominated every select generation. The delta now computes on the accelerator and moves back, matching the activate walk's convention. - reset and flip execution log a debug timing line (materialize, select loop, move/calc/apply split); the reset runs outside the activate walk, so its cost was invisible to the load timers --- modules/lora/lora_stack.py | 31 +++++++++++++++-- test/test-sdnq-lora-factors.py | 63 +++++++++++++++++++++++++++++++++- 2 files changed, 90 insertions(+), 4 deletions(-) diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index acd1117fa..85818c8b9 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -15,6 +15,7 @@ EST-LoRA arXiv:2508.02165 (its measured style-discrepancy estimate is exposed as an option instead of being derived from probe generations). """ +import time import weakref import hashlib @@ -305,9 +306,16 @@ def finalize(total_steps): e_den = sum(e['scores'][1] for e in state['entries'].values()) state['gamma_e'] = (e_num / e_den) if e_den > 0 else 1.0 state['flips'] = {} - if any(e['kind'] == 'weight' for e in state['entries'].values()): + stats = {'weight_n': 0, 'factor_n': 0, 'materialize': 0.0, 'select': 0.0, 'w_move': 0.0, 'w_calc': 0.0, 'w_apply': 0.0} + state['stats'] = stats + stats['weight_n'] = sum(1 for e in state['entries'].values() if e['kind'] == 'weight') + stats['factor_n'] = len(state['entries']) - stats['weight_n'] + if stats['weight_n'] > 0: + t0 = time.time() materialize_model() + stats['materialize'] = time.time() - t0 style_first = 0 + t0 = time.time() for layer_name, entry in list(state['entries'].items()): # snapshot: apply_selection drops entries whose module died flip_at = layer_flip_step(entry['scores'], state['total_steps']) initial = 1 if flip_at == 0 else 0 @@ -315,6 +323,7 @@ def finalize(total_steps): apply_selection(layer_name, entry, initial) if 0 < flip_at < state['total_steps']: state['flips'].setdefault(flip_at - 1, []).append(layer_name) # step callbacks fire after the denoise, so the flip runs one step early to be live during the crossover step's forward + stats['select'] = time.time() - t0 state['finalized'] = True if len(state['entries']) > 0: # only a built schedule can carry a flip count, so this is the line that shows selection is live rather than requested gamma = state['gamma_e'] if mode() == 'estlora' else state['gamma'] @@ -322,6 +331,8 @@ def finalize(total_steps): if report != state['reported']: # rebuilt every pass, so a batch would otherwise repeat one line per image state['reported'] = report log.info(f'Network load: type=LoRA stack={report[0]} layers={report[1]} style={report[2]} flips={report[3]} steps={report[4]} gamma={report[5]:.3f}') + # logged every pass: the reset runs outside the activate walk, so its cost is invisible to the load timers + log.debug(f'Network select: type=LoRA reset weight={stats["weight_n"]} factor={stats["factor_n"]} time={{materialize: {stats["materialize"]:.2f}, select: {stats["select"]:.2f}, move: {stats["w_move"]:.2f}, calc: {stats["w_calc"]:.2f}, apply: {stats["w_apply"]:.2f}}}') def reset(total_steps): @@ -335,10 +346,15 @@ def on_step(step): """Flip the layers whose crossover is this step; non-flip steps are a dict miss.""" if not state['finalized']: return - for layer_name in state['flips'].get(int(step), ()): + layers = state['flips'].get(int(step), ()) + if not layers: + return + t0 = time.time() + for layer_name in layers: entry = state['entries'].get(layer_name) if entry is not None: apply_selection(layer_name, entry, 1) + log.debug(f'Network select: type=LoRA flip step={int(step)} layers={len(layers)} time={time.time() - t0:.2f}') def apply_selection(layer_name, entry, winner): @@ -375,6 +391,15 @@ def weight_selection(module, entry, winner): if weight is None or weight.is_meta: warn_once('select-offloaded', 'Network stack: flip=skipped weight=offloaded') return + from modules import devices + stats = state.get('stats') or {} device = weight.device - updown = net_module.calc_updown(backup.to(device))[0] + t0 = time.time() + base = backup.to(devices.device) # a swapped-out layer keeps its weight on cpu; the delta matmul belongs on the accelerator regardless + t1 = time.time() + updown = net_module.calc_updown(base)[0].to(device) + t2 = time.time() network_apply_weights(module, updown, None, device=device) # recomputes from the pristine backup, requantizing where the layer needs it + stats['w_move'] = stats.get('w_move', 0.0) + (t1 - t0) + stats['w_calc'] = stats.get('w_calc', 0.0) + (t2 - t1) + stats['w_apply'] = stats.get('w_apply', 0.0) + (time.time() - t2) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 61627f5f8..e5c4f82fb 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -2119,6 +2119,66 @@ def test_select_weight_replay_from_cache_skips_calc(): return True +def test_select_reset_reports_timing(): + lin = torch.nn.Linear(IN_F, OUT_F, bias=False, dtype=torch.bfloat16, device=DEVICE) + with torch.no_grad(): + lin.weight.copy_(torch.randn(OUT_F, IN_F, device=DEVICE) * 0.02) + lin.network_layer_name = 'lora_transformer_timed' + lin.network_current_names = () + A1, B1, _D1 = make_delta(seed=77, sigma=1e-2) + A2, B2, _D2 = make_delta(seed=78, sigma=1e-2) + n1 = make_net('t1', lin, A1, B1) + n2 = make_net('t2', lin, A2, B2) + with mock_model(lin=lin), select_mode('klora'): + activate(n1, n2) + lora_stack.reset(20) + stats = lora_stack.state.get('stats') + assert stats is not None, 'a reset must publish its timing stats' + assert stats['weight_n'] == 1 and stats['factor_n'] == 0, f'weight-kind counts wrong: {stats}' + assert stats['w_calc'] > 0.0, 'the weight-kind winner apply must account its calc time' + assert stats['select'] > 0.0 + activate() + layer = build_layer('uint4') + f1, f2, _Df1, _Df2 = select_pair(layer, seed0=79, seed1=80) + with mock_model(lin=layer), select_mode('klora'): + activate(f1, f2) + lora_stack.reset(20) + stats = lora_stack.state.get('stats') + assert stats is not None and stats['factor_n'] == 1 and stats['weight_n'] == 0, f'factor-kind counts wrong: {stats}' + assert stats['w_calc'] == 0.0, 'factor-kind resets flip segments and must not touch the weight path' + activate() + return True + + +def test_select_weight_flip_calcs_on_accelerator(): + from modules.lora import network_lora + lin = torch.nn.Linear(IN_F, OUT_F, bias=False, dtype=torch.bfloat16, device='cpu') # a swapped-out layer: weight lives on cpu + with torch.no_grad(): + lin.weight.copy_(torch.randn(OUT_F, IN_F) * 0.02) + lin.network_layer_name = 'lora_transformer_swapped' + lin.network_current_names = () + A1, B1, _D1 = make_delta(seed=81, sigma=1e-2) + A2, B2, _D2 = make_delta(seed=82, sigma=1e-2) + n1 = make_net('s1', lin, A1, B1) + n2 = make_net('s2', lin, A2, B2) + seen = [] + real = network_lora.NetworkModuleLora.calc_updown + def spy(self, target, *args, **kwargs): + seen.append(target.device.type) + return real(self, target, *args, **kwargs) + with mock_model(lin=lin), select_mode('klora'): + activate(n1, n2) + lin.to('cpu') # the offload dispatch swaps blocks back out after the walk; the reset must not follow the weight onto the cpu + network_lora.NetworkModuleLora.calc_updown = spy + try: + lora_stack.reset(20) + finally: + network_lora.NetworkModuleLora.calc_updown = real + assert seen and all(d == DEVICE.type for d in seen), f'winner materialization must calc on the accelerator, saw {seen}' + activate() + return True + + CAT_COMPILE = category('compile') @@ -2311,7 +2371,8 @@ def run_tests(): test_select_finalize_drops_dead_module, test_select_int8_pair_rides_segments, test_select_gate_dormant_without_pair, test_stale_schedule_dropped_on_reapply, test_est_energy_matches_full_frobenius, test_select_weight_kind_plain_layer, test_select_gamma_tracks_live_entries, test_select_host_disabled_falls_back_to_sum, test_flip_lands_before_crossover_step, - test_score_pair_chunked_precision, test_select_replay_from_cache_skips_calc, test_select_weight_replay_from_cache_skips_calc]: + test_score_pair_chunked_precision, test_select_replay_from_cache_skips_calc, test_select_weight_replay_from_cache_skips_calc, + test_select_reset_reports_timing, test_select_weight_flip_calcs_on_accelerator]: run_test(CAT_SELECT, fn) log.warning('=== Compile ===') for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse]: From 455a6d0e8f41a94cbd299293fb76aeae8fee7b1c Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 26 Jul 2026 20:20:43 +0100 Subject: [PATCH 080/270] feat(lora): default the select-mode ramp to 0 At 1.5 the ramp hands nearly every layer to the style network mid-generation, which on few-step models overwrites the forming subject before identity sets. Alpha 0 freezes the schedule into a static per-layer split: the subject keeps its layers for the whole generation and style keeps the layers where it is more salient. Nonzero values remain the scheduled handover toward the second network. - locale hints describe both regimes; the mode hint no longer implies the shift is always on --- modules/ui_definitions.py | 2 +- ui/locale/locale_en.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 1808f62a7..d52a142b6 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -711,7 +711,7 @@ def create_settings(cmd_opts): "lora_stack_sep": OptionInfo("

Stacking options

", "", gr.HTML), "lora_stack_mode": OptionInfo("sum", "LoRA stack mode", gr.Dropdown, {"choices": ["sum", "ties", "dare_ties", "dare_linear", "magnitude_prune", "klora", "estlora"]}), "lora_stack_density": OptionInfo(0.5, "LoRA stack density", gr.Slider, {"minimum": 0.05, "maximum": 1.0, "step": 0.05}), - "lora_stack_alpha": OptionInfo(1.5, "LoRA stack ramp", gr.Slider, {"minimum": 0.0, "maximum": 3.0, "step": 0.1}), + "lora_stack_alpha": OptionInfo(0.0, "LoRA stack ramp", gr.Slider, {"minimum": 0.0, "maximum": 3.0, "step": 0.1}), "lora_stack_discrepancy": OptionInfo(0.5, "LoRA stack discrepancy", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.05}), "lora_meta_sep": OptionInfo("

Metadata

", "", gr.HTML), diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index f52b58a91..3fb030aa1 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -867,9 +867,9 @@ {"id":"","label":"LoRA quantized host rank","localized":"","hint":"Maximum rank used to carry adapter types that are not natively low-rank (LoKR, LoHA, OFT, DoRA) alongside the quantized weights instead of merging them in.
Higher values retain more of the adapter at proportionally more memory. Plain LoRA files are carried exactly at their own rank.

Applies only to SDNQ models quantized below 8 bits, where merging erases most of the adapter; at 8 bits and above merging retains it and hosting is skipped.

0 disables hosting and merges every adapter into the quantized weights.

Default is 256.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized host calibration","localized":"","hint":"Collects per-channel activation statistics from the model's own generations and uses them to focus hosted-adapter truncation on the channels with the strongest activations.
Statistics accumulate in the background on models quantized below 8 bits, persist per checkpoint, and raise delivered adapter fidelity at the same LoRA quantized host rank, most at low ranks.

Capture is skipped while the model is compiled; previously cached statistics still apply.

Enabled by default.","ui":"settings_lora"}, {"id":"","label":"LoRA quantized host cache","localized":"","hint":"Disk space in GB for caching computed hosting factors.
A cached set skips the truncation math on the next load; least recently used entries are evicted once the budget is exceeded.

0 disables the cache.

Default is 10.","ui":"settings_lora"}, - {"id":"","label":"LoRA stack mode","localized":"","hint":"How multiple networks targeting the same layer are combined:
- sum: adds all contributions
- ties: keeps each network's strongest elements and merges only where signs agree
- dare_ties: randomly drops elements, rescales the survivors, then merges where signs agree
- dare_linear: randomly drops elements, rescales the survivors and sums
- magnitude_prune: keeps each network's strongest elements and sums
- klora / estlora: assign each layer to one of exactly two networks, the first in the prompt as subject and the second as style, shifting from subject toward style over the sampling steps

Each layer is given to a single network at a time, so a subject and a style that both need sustained strength can end up under-applied. For reliable blending of two strong networks, sum, ties and dare_ties apply every network throughout and combine more fully.

Kept fractions are set by LoRA stack density; the subject-to-style shift by LoRA stack ramp and LoRA stack discrepancy.

Applies to the native load path; other load methods and text encoder networks always combine as sum. Selection modes fall back to sum unless exactly two networks are loaded, or when model compile is active.

Default is sum.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack mode","localized":"","hint":"How multiple networks targeting the same layer are combined:
- sum: adds all contributions
- ties: keeps each network's strongest elements and merges only where signs agree
- dare_ties: randomly drops elements, rescales the survivors, then merges where signs agree
- dare_linear: randomly drops elements, rescales the survivors and sums
- magnitude_prune: keeps each network's strongest elements and sums
- klora / estlora: assign each layer to one of exactly two networks, the first in the prompt as subject and the second as style; LoRA stack ramp optionally shifts layers toward style over the sampling steps

Each layer is given to a single network at a time, so a subject and a style that both need sustained strength can end up under-applied. For reliable blending of two strong networks, sum, ties and dare_ties apply every network throughout and combine more fully.

Kept fractions are set by LoRA stack density; the subject-to-style shift by LoRA stack ramp and LoRA stack discrepancy.

Applies to the native load path; other load methods and text encoder networks always combine as sum. Selection modes fall back to sum unless exactly two networks are loaded, or when model compile is active.

Default is sum.","ui":"settings_lora"}, {"id":"","label":"LoRA stack density","localized":"","hint":"Fraction of elements each network keeps under the ties, dare_ties, dare_linear and magnitude_prune stack modes.
Lower values keep only the strongest contributions and reduce interference between networks at the cost of per-network detail. The dare variants drop at random and rescale the survivors to preserve expected strength.

Default is 0.5.","ui":"settings_lora"}, - {"id":"","label":"LoRA stack ramp","localized":"","hint":"Slope of the subject-to-style shift across the sampling steps in the klora and estlora stack modes.
Higher values shift layers to the style network earlier and more broadly; lower values keep the subject network dominant for longer.

0 keeps the balance fixed for the whole generation.

Default is 1.5.","ui":"settings_lora"}, + {"id":"","label":"LoRA stack ramp","localized":"","hint":"Slope of the subject-to-style shift across the sampling steps in the klora and estlora stack modes.

0 keeps the layer assignment fixed for the whole generation: each layer stays with the network that is more salient there, which preserves the subject while the style keeps its own layers. Higher values hand layers to the style network progressively, ending in a style takeover; on few-step models the handover happens early enough to override the subject.

Default is 0.","ui":"settings_lora"}, {"id":"","label":"LoRA stack discrepancy","localized":"","hint":"Stand-in for the measured style separation the estlora stack mode would otherwise derive from data.
Higher values keep layers with the subject network longer; lower values let the style network take layers earlier.

Layer scores are balanced by each network's overall strength, so a louder network does not take layers on magnitude alone.

Applies only when LoRA stack mode is estlora.

Default is 0.5.","ui":"settings_lora"}, {"id":"","label":"LoRA auto-apply tags","localized":"","hint":"Automatically add trigger words/tags from LoRA metadata to your prompt.
Set to the number of tags to auto-apply, e.g., 3 = add top 3 trigger tags.
Set to 0 to disable, -1 to add all available tags.","ui":"settings_lora"}, {"id":"","label":"LoRA memory cache","localized":"","hint":"How many LoRAs to keep in network for future use before requiring reloading from storage","ui":"settings_lora"}, From 2620b0cc5b83c15070e20f3f038a5e9008dfe4fe Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 26 Jul 2026 21:34:28 +0100 Subject: [PATCH 081/270] feat(lora): per-block strength scales each targeted layer's delta by a slot of a per-architecture block vector. VALUE is a preset name, a scalar, or a comma vector; presets stretch onto the block count of the current model and the a1111 17-slot and 12-slot layouts are accepted on sd and sdxl. The factor enters through the module multiplier, so every apply path carries it: the exact factor channel, hosting, requantize routing, dense stack combines and select scoring. - modules/lora/lora_blocks.py: slot classification from network_layer_mapping (namespace-first, anchored chain prefixes), preset resolution reusing the merge block-weight tables with BASE forced neutral, generated classic segment names plus DOUBLE/SINGLE chain names, per-model memoization - the raw spec stages through pending_config and promotes with the other multipliers, keeping fuse removal consistent - block weights join the activation signature, the per-module apply stamp and the factor cache identity; entries without block weights keep their existing signature bytes - non-native load methods warn once and ignore the argument --- modules/lora/extra_networks_lora.py | 17 +- modules/lora/lora_blocks.py | 348 ++++++++++++++++++++++++ modules/lora/lora_factor_cache.py | 7 +- modules/lora/lora_load.py | 3 +- modules/lora/network.py | 21 +- modules/lora/networks.py | 4 +- test/test-sdnq-lora-factors.py | 396 +++++++++++++++++++++++++++- 7 files changed, 778 insertions(+), 18 deletions(-) create mode 100644 modules/lora/lora_blocks.py diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index c0fce6fb4..81015af01 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -98,6 +98,7 @@ def parse(p, params_list, step=0): unet_multipliers = [] dyn_dims = [] lora_modules = [] + block_specs = [] for params in params_list: name = params.positional[0] @@ -131,6 +132,7 @@ def parse(p, params_list, step=0): te_multipliers.append(te_multiplier) unet_multipliers.append(unet_multiplier) dyn_dims.append(dyn_dim) + block_specs.append(params.named.get('lbw', None)) # per-block strength; resolved per layer by lora_blocks lora_module = [] name_lower = params.positional[0].lower() @@ -150,7 +152,7 @@ def parse(p, params_list, step=0): lora_modules.append(lora_module) - return names, te_multipliers, unet_multipliers, dyn_dims, lora_modules + return names, te_multipliers, unet_multipliers, dyn_dims, lora_modules, block_specs def unload_diffusers(): @@ -174,8 +176,9 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): self.model = None self.errors = {} - def signature(self, names: list[str], te_multipliers: list, unet_multipliers: list): - return [f'{name}:{te}:{unet}' for name, te, unet in zip(names, te_multipliers, unet_multipliers, strict=False)] + def signature(self, names: list[str], te_multipliers: list, unet_multipliers: list, block_specs: list | None = None): + specs = block_specs if block_specs else [None] * len(names) + return [f'{name}:{te}:{unet}' + (f':lbw={str(spec).strip().lower()}' if spec else '') for name, te, unet, spec in zip(names, te_multipliers, unet_multipliers, specs, strict=False)] def changed(self, requested: list[str], include: list[str] | None = None, exclude: list[str] | None = None) -> tuple[bool, str]: from modules.lora import lora_sdnq, lora_stack @@ -220,14 +223,16 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): if len(params_list) > 0 and not self.active: # activate patches once self.active = True self.model = shared.opts.sd_model_checkpoint - names, te_multipliers, unet_multipliers, dyn_dims, lora_modules = parse(p, params_list, step) - requested = self.signature(names, te_multipliers, unet_multipliers) + names, te_multipliers, unet_multipliers, dyn_dims, lora_modules, block_specs = parse(p, params_list, step) + requested = self.signature(names, te_multipliers, unet_multipliers, block_specs) reason = '' load_method, load_reason = lora_overrides.get_method() from modules.lora import lora_stack if load_method != 'native' and lora_stack.mode() != 'sum': log.warning(f'Network stack: mode={lora_stack.mode()} method={load_method} fallback=sum') + if load_method != 'native' and any(block_specs): + log.warning(f'Network blocks: method={load_method} fallback=none') if debug: import sys fn = f'{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}' # pylint: disable=protected-access @@ -254,7 +259,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): has_changed = lora_nunchaku.load_nunchaku(names, unet_multipliers) else: # native - lora_load.network_load(names, te_multipliers, unet_multipliers, dyn_dims, activate=False) # load only, activation below honors include/exclude + lora_load.network_load(names, te_multipliers, unet_multipliers, dyn_dims, block_specs=block_specs, activate=False) # load only, activation below honors include/exclude has_changed, reason = self.changed(requested, include, exclude) if has_changed: jobid = shared.state.begin('LoRA') diff --git a/modules/lora/lora_blocks.py b/modules/lora/lora_blocks.py new file mode 100644 index 000000000..211f1ac78 --- /dev/null +++ b/modules/lora/lora_blocks.py @@ -0,0 +1,348 @@ +"""Per-block LoRA strength: . + +Each targeted layer maps to one slot of a per-architecture weight vector and +the network's multiplier is scaled by that slot. Slot 0 is BASE: on unet +architectures it covers the text encoder and the unet layers outside the +block chain, on transformer architectures the layers outside the block +chain(s). The remaining slots follow the merge block-weight layout on unet +architectures (26 on sd, 20 on sdxl: input blocks, mid, output blocks) and +the transformer chain(s) in depth order elsewhere, with chain lengths +scanned from the live network_layer_mapping rather than hardcoded. + +VALUE is a preset name (case-insensitive), a single number broadcast to +every slot, or a comma list with one number per slot. Named presets force +BASE to 1.0, since the merge tables carry 0 there with merge semantics, and +stretch onto the block count of the current model; classic segment names +(INS, OUTALL, ...) generate from ranges, so they also work on transformer +chains via thirds, and DOUBLE/SINGLE mute one chain on two-chain +architectures. Explicit vectors are taken verbatim at the slot count, with +the a1111 17-slot (sd) and 12-slot (sdxl) layouts accepted and expanded, +omitted slots neutral. A value that fits nothing is ignored with a warning +and the network applies at its plain strength. +""" + +import re + +from modules import shared +from modules.logger import log +from modules.lora import lora_common as l + + +UNET_ARCHES = ('sd', 'sdxl') +CHAINS = { # arch -> anchored tail prefixes, one per chain, in depth order + 'sd3': ('transformer_blocks_',), + 'anima': ('transformer_blocks_',), + 'f1': ('transformer_blocks_', 'single_transformer_blocks_'), + 'f2': ('transformer_blocks_', 'single_transformer_blocks_'), + 'chroma': ('transformer_blocks_', 'single_transformer_blocks_'), + 'zimage': ('layers_',), + 'ernieimage': ('layers_',), + 'krea2': ('blocks_',), +} +CLASSIC = ('ALL', 'NONE', 'INALL', 'INS', 'IND', 'MIDD', 'OUTALL', 'OUTD', 'OUTS') +CHAIN_NAMES = ('DOUBLE', 'SINGLE') +SD1_17 = (0, 2, 3, 5, 6, 8, 9, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25) # BASE, IN01, IN02, IN04, IN05, IN07, IN08, MID, OUT03..OUT11 +SDXL_12 = (0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16) # BASE, IN04, IN05, IN07, IN08, MID, OUT00..OUT05 +VECTOR_MEMO_CAP = 64 +MISS = object() + +re_down = re.compile(r'^down_blocks_(\d+)_(resnets|attentions|downsamplers)_(\d+)') +re_up = re.compile(r'^up_blocks_(\d+)_(resnets|attentions|upsamplers)_(\d+)') +re_chain_index = re.compile(r'^(\d+)') + +state: dict = {'stamp': None, 'layout': None, 'index': {}, 'vectors': {}} +warned: set = set() + + +def warn_once(key, message): + if key not in warned: + warned.add(key) + log.warning(message) + + +def build_unet_layout(arch, mapping): + down, up = -1, -1 + for key in mapping: + if not key.startswith('lora_unet_'): + continue + tail = key[len('lora_unet_'):] + m = re_down.match(tail) + if m is not None: + down = max(down, int(m.group(1))) + continue + m = re_up.match(tail) + if m is not None: + up = max(up, int(m.group(1))) + if down < 0 or up < 0: + return None + n_in = 3 * (down + 1) # conv_in plus two pairs and a sampler slot per group: the compvis input_blocks count + n_out = 3 * (up + 1) + n = 2 + n_in + n_out + return { + 'arch': arch, 'kind': 'unet', 'n': n, 'n_in': n_in, + 'ins': list(range(1, 1 + n_in)), + 'mids': [1 + n_in], + 'outs': list(range(2 + n_in, n)), + } + + +def build_dit_layout(arch, mapping): + prefixes = CHAINS.get(arch) + if prefixes is None: + return None + counts = [0 for _ in prefixes] + for key in mapping: + if not key.startswith('lora_transformer_'): + continue + tail = key[len('lora_transformer_'):] + for i, prefix in enumerate(prefixes): + if tail.startswith(prefix): + m = re_chain_index.match(tail[len(prefix):]) + if m is not None: + counts[i] = max(counts[i], int(m.group(1)) + 1) + break + total = sum(counts) + if total == 0: + return None + chains = [] + offset = 0 + for prefix, count in zip(prefixes, counts, strict=False): + chains.append((prefix, count, offset)) + offset += count + n = 1 + total + blocks = list(range(1, n)) + return { + 'arch': arch, 'kind': 'dit', 'n': n, 'chains': chains, + 'ins': [s for i, s in enumerate(blocks) if i * 3 // total == 0], + 'mids': [s for i, s in enumerate(blocks) if i * 3 // total == 1], + 'outs': [s for i, s in enumerate(blocks) if i * 3 // total == 2], + } + + +def layout(): + sd_model = getattr(shared, 'sd_model', None) + mapping = getattr(sd_model, 'network_layer_mapping', None) if sd_model is not None else None + if not mapping: + return None + arch = shared.sd_model_type + stamp = (arch, id(mapping)) + if state['stamp'] == stamp: + return state['layout'] + state['stamp'] = stamp + state['layout'] = build_unet_layout(arch, mapping) if arch in UNET_ARCHES else build_dit_layout(arch, mapping) + state['index'].clear() + state['vectors'].clear() + return state['layout'] + + +def classify(sd_key, lay): + if sd_key.startswith('lora_te'): + return 0 if lay['kind'] == 'unet' else None # BASE covers the TE on unet arches; transformer vectors do not model the TE + if sd_key.startswith('lora_llm_adapter_'): + return None + if lay['kind'] == 'unet': + if not sd_key.startswith('lora_unet_'): + return None + tail = sd_key[len('lora_unet_'):] + m = re_down.match(tail) + if m is not None: + slot = 1 + 3 * int(m.group(1)) + (2 if m.group(2) == 'downsamplers' else int(m.group(3))) + return 1 + slot + m = re_up.match(tail) + if m is not None: + slot = 3 * int(m.group(1)) + (2 if m.group(2) == 'upsamplers' else int(m.group(3))) + return 2 + lay['n_in'] + slot + if tail.startswith('mid_block'): + return 1 + lay['n_in'] + if tail.startswith('conv_in'): + return 1 # IN00 + if tail.startswith('conv_out') or tail.startswith('conv_norm_out'): + return lay['n'] - 1 # the compvis out group belongs to the last output block + return 0 # time_embedding, add_embedding and other non-block leaves + if not sd_key.startswith('lora_transformer_'): + return None + tail = sd_key[len('lora_transformer_'):] + for prefix, count, offset in lay['chains']: + if tail.startswith(prefix): + m = re_chain_index.match(tail[len(prefix):]) + if m is not None and int(m.group(1)) < count: + return 1 + offset + int(m.group(1)) + return 0 + return 0 # embedders, projections, refiners and other non-chain layers + + +def block_index(sd_key): + lay = layout() + if lay is None: + return None + cached = state['index'].get(sd_key, MISS) + if cached is not MISS: + return cached + idx = classify(sd_key, lay) + state['index'][sd_key] = idx + return idx + + +def fill_band(vec, slots, lo, hi): + k = len(slots) + for i, s in enumerate(slots): + if lo * k <= i < hi * k: + vec[s] = 1.0 + + +def classic_vector(name, lay): + if name == 'ALL': + return [1.0] * lay['n'] + vec = [0.0] * lay['n'] + if name == 'NONE': + return vec + vec[0] = 1.0 + if name == 'INALL': + fill_band(vec, lay['ins'], 0.0, 1.0) + elif name == 'INS': # shallow half of the input side + fill_band(vec, lay['ins'], 0.0, 0.5) + elif name == 'IND': # deep half of the input side + fill_band(vec, lay['ins'], 0.5, 1.0) + elif name == 'MIDD': # the middle of the network: deep input half, mid, deep output half + fill_band(vec, lay['ins'], 0.5, 1.0) + fill_band(vec, lay['mids'], 0.0, 1.0) + fill_band(vec, lay['outs'], 0.0, 0.5) + elif name == 'OUTALL': + fill_band(vec, lay['outs'], 0.0, 1.0) + elif name == 'OUTD': # deep half of the output side, nearest the mid + fill_band(vec, lay['outs'], 0.0, 0.5) + elif name == 'OUTS': # shallow half of the output side, nearest the image + fill_band(vec, lay['outs'], 0.5, 1.0) + return vec + + +def chain_vector(name, lay): + chains = lay.get('chains') or [] + if len(chains) != 2: + return None + vec = [1.0] * lay['n'] + keep = 0 if name == 'DOUBLE' else 1 + for i, (_prefix, count, offset) in enumerate(chains): + val = 1.0 if i == keep else 0.0 + for s in range(1 + offset, 1 + offset + count): + vec[s] = val + return vec + + +def stretch(src, k): + if k == len(src): + return [float(v) for v in src] + out = [] + for i in range(k): + x = i * (len(src) - 1) / (k - 1) if k > 1 else 0.0 + lo = int(x) + hi = min(lo + 1, len(src) - 1) + f = x - lo + out.append(float(src[lo]) * (1.0 - f) + float(src[hi]) * f) + return out + + +def preset_vector(name, lay): + from modules.merging.merge_presets import BLOCK_WEIGHTS_PRESETS, SDXL_BLOCK_WEIGHTS_PRESETS + if name in CHAIN_NAMES: + return chain_vector(name, lay) + if name in CLASSIC: + return classic_vector(name, lay) + if lay['arch'] == 'sdxl': + src = SDXL_BLOCK_WEIGHTS_PRESETS.get(name) or SDXL_BLOCK_WEIGHTS_PRESETS.get('SDXL_' + name) + if src is not None: + return [1.0] + [float(v) for v in src[1:]] # merge tables carry 0 in the BASE slot; a preset must leave the TE alone + if name.startswith('SDXL_'): + return None # explicitly arch-tagged, not reinterpreted elsewhere + src = BLOCK_WEIGHTS_PRESETS.get(name) + if src is None: + return None + if lay['arch'] == 'sd': + return [1.0] + [float(v) for v in src[1:]] + return [1.0] + stretch(src[1:], lay['n'] - 1) + + +def parse_vector(parts, lay): + try: + vals = [float(x) for x in parts] + except ValueError: + return None + n = lay['n'] + if len(vals) == n: + return vals + if len(vals) == n - 1: + return [1.0] + vals + legacy = SD1_17 if lay['arch'] == 'sd' else (SDXL_12 if lay['arch'] == 'sdxl' else None) + if legacy is not None and len(vals) == len(legacy): + vec = [1.0] * n # slots the a1111 layouts omit stay neutral + for slot, v in zip(legacy, vals, strict=False): + vec[slot] = v + return vec + return None + + +def resolve(spec): + """Resolve a raw lbw value into a slot vector for the current model, or None when it fits nothing.""" + lay = layout() + if lay is None: + return None + raw = str(spec).strip() + key = raw.lower() + if key in state['vectors']: + return state['vectors'][key] + if len(state['vectors']) > VECTOR_MEMO_CAP: + state['vectors'].clear() + vec = None + if ',' in raw: + vec = parse_vector([x.strip() for x in raw.split(',')], lay) + if vec is None: + warn_once(f'lbw-vector:{key}:{lay["arch"]}', f'Network blocks: value="{raw}" arch={lay["arch"]} expected={lay["n"]} fallback=none') + else: + try: + vec = [float(raw)] * lay['n'] + except ValueError: + vec = preset_vector(raw.upper(), lay) + if vec is None: + warn_once(f'lbw-name:{key}:{lay["arch"]}', f'Network blocks: preset="{raw}" arch={lay["arch"]} fallback=none') + if vec is not None: + log.info(f'Network blocks: value="{raw}" arch={lay["arch"]} slots={lay["n"]} range={min(vec):.2f}-{max(vec):.2f}') + state['vectors'][key] = vec + return vec + + +def factor(sd_key, net): + """Per-layer scale from a network's block vector; 1.0 whenever the vector does not apply.""" + try: + spec = getattr(net, 'block_spec', None) + if not spec: + return 1.0 + vec = resolve(spec) + if vec is None: + return 1.0 + idx = block_index(sd_key) + if idx is None: + return 1.0 + return float(vec[idx]) + except Exception as e: + warn_once('lbw-error', f'Network blocks: {e} fallback=none') + return 1.0 + + +def net_signature(net): + """Normalized spec of one network, or None; joins content identities such as the factor cache signature.""" + spec = getattr(net, 'block_spec', None) + if not spec: + return None + return str(spec).strip().lower() + + +def active(): + return any(getattr(net, 'block_spec', None) for net in l.loaded_networks) + + +def signature(): + """Identity suffix for the per-module apply stamp; empty while no loaded network carries block weights.""" + specs = [f'{net.name}:{net_signature(net)}' for net in l.loaded_networks if getattr(net, 'block_spec', None)] + if len(specs) == 0: + return '' + return '|lbw=' + ','.join(specs) diff --git a/modules/lora/lora_factor_cache.py b/modules/lora/lora_factor_cache.py index aab36c7a5..1da7106c6 100644 --- a/modules/lora/lora_factor_cache.py +++ b/modules/lora/lora_factor_cache.py @@ -59,6 +59,7 @@ def signature(wanted_names): 'stack': lora_stack.signature(), 'nets': [], } + from modules.lora import lora_blocks for name, te, unet, dyn in wanted_names: net = next((n for n in l.loaded_networks if n.name == name), None) filename = getattr(getattr(net, 'network_on_disk', None), 'filename', None) @@ -66,7 +67,11 @@ def signature(wanted_names): st = os.stat(filename) except Exception: return None - parts['nets'].append([name, repr(te), repr(unet), repr(dyn), filename, int(st.st_mtime), st.st_size]) + entry = [name, repr(te), repr(unet), repr(dyn), filename, int(st.st_mtime), st.st_size] + spec = lora_blocks.net_signature(net) + if spec is not None: # appended only when set so existing cache files stay valid without block weights + entry.append(spec) + parts['nets'].append(entry) return parts diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index b297108bd..f9a885cf2 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -261,7 +261,7 @@ def gather_networks(names): return networks_on_disk -def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=None, lora_modules=None, activate=True): +def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=None, lora_modules=None, block_specs=None, activate=True): networks_on_disk = gather_networks(names) failed_to_load_networks = [] recompile_model, skip_lora_load = maybe_recompile_model(names, te_multipliers) @@ -309,6 +309,7 @@ def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=Non 'te': te_multipliers[i] if te_multipliers else shared.opts.extra_networks_default_multiplier, 'unet': unet_multipliers[i] if unet_multipliers else shared.opts.extra_networks_default_multiplier, 'dyn': dyn_dims[i] if dyn_dims else None, # a multiplier is not a rank; float dyn_dim crashes every consumer that slices with it + 'blocks': block_specs[i] if block_specs and len(block_specs) > i else None, } l.loaded_networks.append(net) diff --git a/modules/lora/network.py b/modules/lora/network.py index b16060563..fed18dd2e 100644 --- a/modules/lora/network.py +++ b/modules/lora/network.py @@ -148,6 +148,7 @@ class Network: # LoraModule self.te_multiplier = 1.0 self.unet_multiplier = [1.0] * 3 self.dyn_dim = None + self.block_spec = None # raw lbw= value; per-layer factors resolve through lora_blocks self.pending_config = None # staged multipliers; network_activate promotes them after the removal pass so fuse removal subtracts the delta that was applied self.modules = {} self.mismatch = 0 # deltas dropped for not fitting their target module; try_load_chain refuses the file when non-zero @@ -195,15 +196,19 @@ class NetworkModule: def multiplier(self): unet_multiplier = 3 * [self.network.unet_multiplier] if not isinstance(self.network.unet_multiplier, list) else self.network.unet_multiplier if self.sd_key.startswith('lora_te') or 'transformer' in self.sd_key[:20]: - return self.network.te_multiplier - if "down_blocks" in self.sd_key: - return unet_multiplier[0] - if "mid_block" in self.sd_key: - return unet_multiplier[1] - if "up_blocks" in self.sd_key: - return unet_multiplier[2] + base = self.network.te_multiplier + elif "down_blocks" in self.sd_key: + base = unet_multiplier[0] + elif "mid_block" in self.sd_key: + base = unet_multiplier[1] + elif "up_blocks" in self.sd_key: + base = unet_multiplier[2] else: - return unet_multiplier[0] + base = unet_multiplier[0] + if getattr(self.network, 'block_spec', None) is None: # per-block strength is off for this network; no shared access on this path + return base + from modules.lora import lora_blocks + return base * lora_blocks.factor(self.sd_key, self.network) def calc_scale(self): if self.scale is not None: diff --git a/modules/lora/networks.py b/modules/lora/networks.py index f62fe431a..479ea998a 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -2,6 +2,7 @@ from contextlib import nullcontext import time import rich.progress as rp from modules.errorlimiter import limit_errors +from modules.lora import lora_blocks from modules.lora import lora_common as l from modules.lora import lora_overrides from modules.lora import lora_sdnq @@ -55,6 +56,7 @@ def network_activate(include=None, exclude=None): net.te_multiplier = pending['te'] net.unet_multiplier = pending['unet'] net.dyn_dim = pending['dyn'] + net.block_spec = pending.get('blocks', None) t0 = time.time() fuse = lora_overrides.fuse_native() # resolve once: backup and apply passes must agree with limit_errors("network_activate") as elimit: @@ -90,7 +92,7 @@ def network_activate(include=None, exclude=None): refused = 0 with devices.inference_context(), pbar: wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () - stack_sig = lora_stack.signature() + lora_sdnq.signature() # tracked beside network_current_names so settings-only stack or mechanism changes re-apply + stack_sig = lora_stack.signature() + lora_blocks.signature() + lora_sdnq.signature() # tracked beside network_current_names so settings-only stack, block-weight or mechanism changes re-apply select_active = len(l.loaded_networks) > 0 and lora_stack.active_select(len(l.loaded_networks)) # restore-only walks have nothing to stack; the count warning would fire on every network-free generation applied_layers.clear() lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index e5c4f82fb..c0cf7fede 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -76,7 +76,7 @@ modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) from modules.errors import log # pylint: disable=wrong-import-position from modules import shared, sd_models # pylint: disable=wrong-import-position -from modules.lora import network, network_lora, lora_sdnq, lora_stack, networks # pylint: disable=wrong-import-position +from modules.lora import network, network_lora, lora_blocks, lora_sdnq, lora_stack, networks # pylint: disable=wrong-import-position from modules.lora import lora_common as l_common # pylint: disable=wrong-import-position from sdnq.quantizer import sdnq_quantize_layer, SDNQConfig # pylint: disable=wrong-import-position @@ -2321,6 +2321,392 @@ def test_stacked_shape_mismatch_falls_back(): return True +# ============================================================ +# Tests - per-block strength (lbw) +# ============================================================ + +CAT_BLOCKS = category('block-weights') + + +def block_fixture_keys(arch): + """Sparse network_layer_mapping keys per arch: the layout scan only needs each chain's max index.""" + if arch == 'sd': + return ['lora_unet_down_blocks_3_resnets_1_conv1', 'lora_unet_up_blocks_3_resnets_2_conv1'] + if arch == 'sdxl': + return ['lora_unet_down_blocks_2_resnets_1_conv1', 'lora_unet_up_blocks_2_resnets_2_conv1'] + if arch in ('f1', 'chroma'): + return ['lora_transformer_transformer_blocks_18_attn_to_q', 'lora_transformer_single_transformer_blocks_37_attn_to_q'] + if arch == 'krea2': + return ['lora_transformer_blocks_27_attn_wq', 'lora_transformer_txtfusion_layerwise_blocks_1_attn_wq', 'lora_transformer_txtfusion_refiner_blocks_1_mlp_down'] + if arch == 'anima': + return ['lora_transformer_transformer_blocks_27_attn1_to_q', 'lora_llm_adapter_blocks_5_self_attn_q_proj', 'lora_te_layers_3_mlp_gate_proj'] + if arch == 'zimage': + return ['lora_transformer_layers_29_attention_to_q', 'lora_transformer_noise_refiner_1_attention_to_q'] + if arch == 'sd3': + return ['lora_transformer_transformer_blocks_23_attn_to_q'] + return [] + + +@contextmanager +def block_model(arch, keys=None, **layers): + """mock_model plus a synthetic arch and network_layer_mapping for block classification.""" + from modules import modeldata + real_type = modeldata.get_model_type + modeldata.get_model_type = lambda _pipe: arch + try: + with mock_model(**layers): + shared.sd_model.network_layer_mapping = {k: None for k in (keys or block_fixture_keys(arch))} + lora_blocks.state.update(stamp=None, layout=None) + lora_blocks.state['index'].clear() + lora_blocks.state['vectors'].clear() + lora_blocks.warned.clear() + yield + finally: + modeldata.get_model_type = real_type + lora_blocks.state.update(stamp=None, layout=None) + lora_blocks.state['index'].clear() + lora_blocks.state['vectors'].clear() + lora_blocks.warned.clear() + + +def sd3_spec(n=25, **slots): + """A 25-slot sd3 vector as a spec string with named slot overrides.""" + vals = [1.0] * n + for slot, v in slots.items(): + vals[int(slot[1:])] = v + return ','.join(str(v) for v in vals) + + +def test_block_index_sd_unet_layout(): + with block_model('sd'): + lay = lora_blocks.layout() + assert lay is not None and lay['n'] == 26 and lay['kind'] == 'unet', f'layout={lay}' + cases = { + 'lora_unet_conv_in': 1, + 'lora_unet_down_blocks_0_attentions_0_transformer_blocks_0_attn1_to_q': 2, + 'lora_unet_down_blocks_0_resnets_1_conv1': 3, + 'lora_unet_down_blocks_0_downsamplers_0_conv': 4, + 'lora_unet_down_blocks_2_downsamplers_0_conv': 10, + 'lora_unet_down_blocks_3_resnets_1_conv1': 12, + 'lora_unet_mid_block_attentions_0_transformer_blocks_0_attn2_to_k': 13, + 'lora_unet_up_blocks_0_resnets_0_conv1': 14, + 'lora_unet_up_blocks_1_attentions_2_transformer_blocks_0_ff_net_0_proj': 19, + 'lora_unet_up_blocks_2_upsamplers_0_conv': 22, + 'lora_unet_up_blocks_3_resnets_2_conv1': 25, + 'lora_unet_conv_out': 25, + 'lora_unet_conv_norm_out': 25, + 'lora_unet_time_embedding_linear_1': 0, + 'lora_te_text_model_encoder_layers_0_self_attn_q_proj': 0, + } + for key, expected in cases.items(): + got = lora_blocks.block_index(key) + assert got == expected, f'{key}: got {got} expected {expected}' + return True + + +def test_block_index_sdxl_unet_layout(): + with block_model('sdxl'): + lay = lora_blocks.layout() + assert lay is not None and lay['n'] == 20, f'layout={lay}' + cases = { + 'lora_unet_down_blocks_1_attentions_0_transformer_blocks_3_attn1_to_v': 5, + 'lora_unet_mid_block_attentions_0_transformer_blocks_9_norm3': 10, + 'lora_unet_up_blocks_0_resnets_0_conv1': 11, + 'lora_unet_up_blocks_2_resnets_2_conv1': 19, + 'lora_unet_add_embedding_linear_1': 0, + 'lora_te1_text_model_encoder_layers_0_self_attn_k_proj': 0, + 'lora_te2_text_projection': 0, + } + for key, expected in cases.items(): + got = lora_blocks.block_index(key) + assert got == expected, f'{key}: got {got} expected {expected}' + return True + + +def test_block_index_flux_chains_concatenate(): + with block_model('f1'): + lay = lora_blocks.layout() + assert lay is not None and lay['n'] == 58, f'layout={lay}' # 19 double + 38 single + BASE + cases = { + 'lora_transformer_transformer_blocks_0_attn_to_q': 1, + 'lora_transformer_transformer_blocks_18_ff_net_0_proj': 19, + 'lora_transformer_single_transformer_blocks_0_attn_to_q': 20, + 'lora_transformer_single_transformer_blocks_37_proj_out': 57, + 'lora_transformer_x_embedder': 0, + 'lora_transformer_proj_out': 0, + } + for key, expected in cases.items(): + got = lora_blocks.block_index(key) + assert got == expected, f'{key}: got {got} expected {expected}' + return True + + +def test_block_index_anchoring_krea2_and_chroma(): + with block_model('krea2'): + lay = lora_blocks.layout() + assert lay is not None and lay['n'] == 29, f'layout={lay}' # txtfusion chains stay uncounted + assert lora_blocks.block_index('lora_transformer_blocks_5_attn_wq') == 6 + assert lora_blocks.block_index('lora_transformer_txtfusion_layerwise_blocks_0_attn_wq') == 0 + assert lora_blocks.block_index('lora_transformer_txtfusion_refiner_blocks_1_mlp_down') == 0 + with block_model('chroma'): + assert lora_blocks.block_index('lora_transformer_transformer_blocks_0_attn_to_q') == 1 + assert lora_blocks.block_index('lora_transformer_single_transformer_blocks_0_attn_to_q') == 20 # anchored: not the double chain's slot + assert lora_blocks.block_index('lora_transformer_distilled_guidance_layer_layers_0_linear_1') == 0 + return True + + +def test_block_index_namespace_collisions(): + with block_model('anima'): + assert lora_blocks.block_index('lora_transformer_transformer_blocks_5_attn1_to_q') == 6 + assert lora_blocks.block_index('lora_te_layers_0_self_attn_q_proj') is None, 'anima TE strips to the zimage pattern; the namespace must win' + assert lora_blocks.block_index('lora_llm_adapter_blocks_0_self_attn_q_proj') is None, 'anima llm_adapter strips to the krea2 pattern; the namespace must win' + from types import SimpleNamespace + muted = SimpleNamespace(name='m', block_spec='NONE') + assert lora_blocks.factor('lora_te_layers_0_self_attn_q_proj', muted) == 1.0, 'namespaces outside the vector stay neutral even under an all-zero spec' + return True + + +def test_unet_arithmetic_matches_conversion_map(): + from modules.lora import lora_convert + with block_model('sd'): + n_in = lora_blocks.layout()['n_in'] + checked = 0 + for sd_key, hf_key in lora_convert.make_unet_conversion_map().items(): + if sd_key.startswith('input_blocks'): + expected = 1 + int(sd_key.split('_')[2]) + elif sd_key.startswith('output_blocks'): + expected = 2 + n_in + int(sd_key.split('_')[2]) + elif sd_key.startswith('middle_block'): + expected = 1 + n_in + elif sd_key.startswith('time_embed') or sd_key.startswith('label_emb'): + expected = 0 + elif sd_key.startswith('out_'): + expected = 25 + else: + continue + got = lora_blocks.block_index('lora_unet_' + hf_key) + assert got == expected, f'{sd_key} -> {hf_key}: got {got} expected {expected}' + checked += 1 + assert checked > 60, f'the map cross-check covered only {checked} entries' + return True + + +def test_resolve_preset_case_and_arch_guard(): + from modules.merging.merge_presets import BLOCK_WEIGHTS_PRESETS, SDXL_BLOCK_WEIGHTS_PRESETS + with block_model('sd'): + v = lora_blocks.resolve('grad_v') + assert v is not None and len(v) == 26 and v[0] == 1.0, 'preset BASE must be forced neutral' + assert v[1:] == [float(x) for x in BLOCK_WEIGHTS_PRESETS['GRAD_V'][1:]] + assert lora_blocks.resolve('SDXL_GRAD_V') is None, 'arch-tagged presets must not resolve elsewhere' + with block_model('sdxl'): + v = lora_blocks.resolve('GRAD_V') + assert v is not None and len(v) == 20 and v[0] == 1.0 + assert v[1:] == [float(x) for x in SDXL_BLOCK_WEIGHTS_PRESETS['SDXL_GRAD_V'][1:]], 'the SDXL_ table must serve the unprefixed name' + v = lora_blocks.resolve('RING08_5') + assert v is not None and len(v) == 20 and v[0] == 1.0, 'a 26-slot preset must resample onto the sdxl layout' + return True + + +def test_resolve_dit_resample_drops_base(): + from modules.merging.merge_presets import BLOCK_WEIGHTS_PRESETS + src = BLOCK_WEIGHTS_PRESETS['GRAD_A'] + with block_model('f1'): + v = lora_blocks.resolve('GRAD_A') + assert v is not None and len(v) == 58 + assert v[0] == 1.0, 'BASE is a unet concept and must not inherit the merge slot' + assert v[1] == float(src[1]) and v[-1] == float(src[-1]), 'resampling must keep the endpoints' + assert min(v[1:]) >= min(src[1:]) - 1e-9 and max(v[1:]) <= max(src[1:]) + 1e-9 + return True + + +def test_resolve_vector_length_policy(): + with block_model('sd'): + full = [round(0.01 * i, 2) for i in range(26)] + v = lora_blocks.resolve(','.join(str(x) for x in full)) + assert v == full, 'a canonical-length vector must pass through verbatim' + v = lora_blocks.resolve(','.join(str(x) for x in full[1:])) + assert v == [1.0] + full[1:], 'a base-less vector must gain a neutral BASE' + v = lora_blocks.resolve(','.join(['0.5'] * 17)) + assert v is not None and len(v) == 26 and v[0] == 0.5 and v[2] == 0.5 and v[13] == 0.5 and v[25] == 0.5, 'the a1111 17-slot layout must expand' + assert v[1] == 1.0 and v[14] == 1.0, 'slots the a1111 layout omits stay neutral' + assert lora_blocks.resolve(','.join(['1'] * 24)) is None, 'an unmatched length must be rejected' + with block_model('sdxl'): + v = lora_blocks.resolve(','.join(['0.25'] * 12)) + assert v is not None and len(v) == 20 and v[0] == 0.25 and v[5] == 0.25 and v[10] == 0.25 and v[16] == 0.25 + assert v[1] == 1.0 and v[7] == 1.0 and v[17] == 1.0 + return True + + +def test_resolve_scalar_and_classic(): + with block_model('sd'): + assert lora_blocks.resolve('0.5') == [0.5] * 26, 'a scalar must broadcast to every slot' + v = lora_blocks.resolve('INS') + assert v[0] == 1.0 and all(x == 1.0 for x in v[1:7]) and all(x == 0.0 for x in v[7:]), f'INS must cover the shallow input half: {v}' + v = lora_blocks.resolve('OUTALL') + assert v[0] == 1.0 and all(x == 0.0 for x in v[1:14]) and all(x == 1.0 for x in v[14:]), f'OUTALL must cover the output side: {v}' + assert lora_blocks.resolve('NONE') == [0.0] * 26 + assert lora_blocks.resolve('DOUBLE') is None, 'chain names need a two-chain arch' + with block_model('f1'): + v = lora_blocks.resolve('DOUBLE') + assert v[0] == 1.0 and all(x == 1.0 for x in v[1:20]) and all(x == 0.0 for x in v[20:]), 'DOUBLE must keep the double chain only' + v = lora_blocks.resolve('SINGLE') + assert all(x == 0.0 for x in v[1:20]) and all(x == 1.0 for x in v[20:]), 'SINGLE must keep the single chain only' + return True + + +def test_bad_value_warns_once_and_ignores(): + from types import SimpleNamespace + with block_model('sd'): + assert lora_blocks.resolve('bogus') is None + assert lora_blocks.resolve('1,2,3') is None + warned_n = len(lora_blocks.warned) + lora_blocks.resolve('bogus') + assert len(lora_blocks.warned) == warned_n, 'a repeated bad value must not warn again' + net = SimpleNamespace(name='b', block_spec='bogus') + assert lora_blocks.factor('lora_unet_conv_in', net) == 1.0, 'an unresolvable spec must leave the plain strength' + return True + + +def test_multiplier_folds_block_weight(): + layer = build_layer('uint4') + layer.network_layer_name = 'lora_transformer_transformer_blocks_3_attn_to_q' + A, B, D = make_delta() + net = make_net('blocky', layer, A, B, te_mult=0.5) + with block_model('sd3', lin=layer): + net.block_spec = sd3_spec(s4=0.5) # block 3 sits in slot 4 + Wdq0 = dq(layer) + activate(net) + rho = rho_of(dq(layer) - Wdq0, D) + assert abs(rho - 0.25) < 0.01, f'expected multiplier 0.5 x block 0.5, rho={rho:.4f}' + activate() + assert torch.equal(dq(layer), Wdq0), 'unload must restore bit-exact' + return True + + +def test_block_weight_zero_kills_layer_delta(): + layer_a = build_layer('uint4') + layer_a.network_layer_name = 'lora_transformer_transformer_blocks_3_attn_to_q' + layer_b = build_layer('uint4', seed=7) + layer_b.network_layer_name = 'lora_transformer_transformer_blocks_5_attn_to_q' + A1, B1, D1 = make_delta(seed=1) + A2, B2, D2 = make_delta(seed=2) + net = make_net('zeroed', layer_a, A1, B1) + nw = network.NetworkWeights(network_key=layer_b.network_layer_name, sd_key=layer_b.network_layer_name, + w={'lora_up.weight': B2.cpu(), 'lora_down.weight': A2.cpu()}, sd_module=layer_b) + net.modules[layer_b.network_layer_name] = network_lora.NetworkModuleLora(net, nw) + with block_model('sd3', a=layer_a, b=layer_b): + net.block_spec = sd3_spec(s4=0.0) # zero the slot of block 3; block 5 stays at 1 + Wa0, Wb0 = dq(layer_a), dq(layer_b) + activate(net) + rho_a = rho_of(dq(layer_a) - Wa0, D1) + rho_b = rho_of(dq(layer_b) - Wb0, D2) + assert abs(rho_a) < 0.01, f'a zero slot must null the layer delta, rho={rho_a:.4f}' + assert rho_b > 0.99, f'a neutral slot must apply in full, rho={rho_b:.4f}' + activate() + assert torch.equal(dq(layer_a), Wa0) and torch.equal(dq(layer_b), Wb0), 'restore must be bit-exact' + return True + + +def test_signature_suffix_inactive_and_changes(): + from modules.lora import extra_networks_lora + layer = build_layer('uint4') + A, B, _D = make_delta() + net = make_net('siggy', layer, A, B) + l_common.loaded_networks.clear() + l_common.loaded_networks.append(net) + try: + assert lora_blocks.signature() == '', 'no spec must leave the stamp signature untouched' + net.block_spec = 'GRAD_V' + s1 = lora_blocks.signature() + assert s1 == '|lbw=siggy:grad_v', f's1={s1}' + net.block_spec = ' Grad_A ' + assert lora_blocks.signature() == '|lbw=siggy:grad_a', 'the spec must normalize' + en = extra_networks_lora.ExtraNetworkLora() + plain = en.signature(['a'], [1.0], [[1.0] * 3]) + with_spec = en.signature(['a'], [1.0], [[1.0] * 3], ['GRAD_V']) + assert plain == [f'a:1.0:{[1.0] * 3}'], 'legacy signature strings must stay byte-identical without specs' + assert with_spec[0] == plain[0] + ':lbw=grad_v' + finally: + l_common.loaded_networks.clear() + return True + + +def test_factor_cache_invalidates_on_block_weight(): + import tempfile + layer = build_layer('uint4') + layer.network_layer_name = 'lora_transformer_transformer_blocks_3_attn_to_q' + with tempfile.TemporaryDirectory() as tmp: + with host_rank(64), host_cache(10, os.path.join(tmp, 'cache')), block_model('sd3', lin=layer): + net, _D = cache_fixture(tmp, layer) + activate(net) + up_full = layer.svd_up.detach().clone() + activate() + net.block_spec = sd3_spec(s4=0.5) + activate(net) # different block vector: different signature, fresh svd, second entry + assert not torch.equal(layer.svd_up, up_full), 'a block-weight change must produce different factors' + activate() + files = os.listdir(os.path.join(tmp, 'cache')) + assert len(files) == 2, f'two cache entries expected, got {files}' + return True + + +def test_stack_ties_respects_per_net_blocks(): + layer = build_layer('uint4') + layer.network_layer_name = 'lora_transformer_transformer_blocks_3_attn_to_q' + torch.manual_seed(31) + Da = torch.randn(OUT_F, IN_F, device=DEVICE) * 3e-4 + Db = torch.randn(OUT_F, IN_F, device=DEVICE) * 3e-4 + net_a = make_dense_net('tiesa', layer, Da) + net_b = make_dense_net('tiesb', layer, Db) + with host_rank(64), stack_mode('ties', dens=0.5), block_model('sd3', lin=layer): + Wdq0 = dq(layer) + activate(net_a, net_b) + d_both = (dq(layer) - Wdq0).clone() + activate() + net_b.block_spec = 'NONE' + activate(net_a, net_b) + d_muted = (dq(layer) - Wdq0).clone() + activate() + assert not torch.allclose(d_both, d_muted), 'muting one member must change the combined delta' + assert rho_of(d_muted, Db) < 0.1, f'the muted member must not contribute: rho={rho_of(d_muted, Db):.3f}' + assert rho_of(d_muted, Da) > 0.3, f'the live member must survive the trim: rho={rho_of(d_muted, Da):.3f}' + return True + + +def test_pending_promote_updates_block_spec(): + layer = build_layer('uint4') + layer.network_layer_name = 'lora_transformer_transformer_blocks_3_attn_to_q' + A, B, D = make_delta() + net = make_net('promoted', layer, A, B) + with block_model('sd3', lin=layer): + Wdq0 = dq(layer) + net.pending_config = {'te': 1.0, 'unet': [1.0] * 3, 'dyn': None, 'blocks': 'NONE'} + activate(net) + assert net.block_spec == 'NONE', 'network_activate must promote the staged spec' + rho = rho_of(dq(layer) - Wdq0, D) + assert abs(rho) < 0.01, f'the promoted all-zero vector must null the delta, rho={rho:.4f}' + activate() + net.pending_config = {'te': 1.0, 'unet': [1.0] * 3, 'dyn': None, 'blocks': None} + activate(net) + assert net.block_spec is None, 'a spec-less reload must clear the previous spec' + rho = rho_of(dq(layer) - Wdq0, D) + assert rho > 0.99, f'without a spec the delta must apply in full, rho={rho:.4f}' + activate() + assert torch.equal(dq(layer), Wdq0) + return True + + +def test_layout_recomputes_on_mapping_change(): + with block_model('f1'): + assert lora_blocks.layout()['n'] == 58 + assert lora_blocks.block_index('lora_transformer_transformer_blocks_18_attn_to_q') == 19 + shared.sd_model.network_layer_mapping = {'lora_transformer_transformer_blocks_9_attn_to_q': None} # new object: the stamp must miss + assert lora_blocks.layout()['n'] == 11 + assert lora_blocks.block_index('lora_transformer_transformer_blocks_9_attn_to_q') == 10 + assert lora_blocks.block_index('lora_transformer_transformer_blocks_18_attn_to_q') == 0, 'an index past the scanned chain folds to BASE' + return True + + def run_tests(): t0 = time.time() log.warning('=== Erasure law ===') @@ -2380,6 +2766,14 @@ def run_tests(): log.warning('=== Robustness ===') for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back]: run_test(CAT_ROBUST, fn) + log.warning('=== Block weights ===') + for fn in [test_block_index_sd_unet_layout, test_block_index_sdxl_unet_layout, test_block_index_flux_chains_concatenate, + test_block_index_anchoring_krea2_and_chroma, test_block_index_namespace_collisions, test_unet_arithmetic_matches_conversion_map, + test_resolve_preset_case_and_arch_guard, test_resolve_dit_resample_drops_base, test_resolve_vector_length_policy, + test_resolve_scalar_and_classic, test_bad_value_warns_once_and_ignores, test_multiplier_folds_block_weight, + test_block_weight_zero_kills_layer_delta, test_signature_suffix_inactive_and_changes, test_factor_cache_invalidates_on_block_weight, + test_stack_ties_respects_per_net_blocks, test_pending_promote_updates_block_spec, test_layout_recomputes_on_mapping_change]: + run_test(CAT_BLOCKS, fn) elapsed = time.time() - t0 log.warning('=== Results ===') From b38167314367e4ca9d7d1587cd9ed026a2aff553 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 26 Jul 2026 21:36:07 +0100 Subject: [PATCH 082/270] feat(xyz): lora block weight axis String axis rewriting every lora tag in the prompt: an existing lbw= argument is replaced, None removes it for a clean baseline cell. Choices list the preset names; raw vectors go through csv mode with escaped commas. Long values truncate in the grid legend. --- scripts/xyz/xyz_grid_classes.py | 4 ++++ scripts/xyz/xyz_grid_shared.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/scripts/xyz/xyz_grid_classes.py b/scripts/xyz/xyz_grid_classes.py index 198d93c91..2f1ed59bf 100644 --- a/scripts/xyz/xyz_grid_classes.py +++ b/scripts/xyz/xyz_grid_classes.py @@ -19,6 +19,9 @@ from scripts.xyz.xyz_grid_shared import ( # pylint: disable=no-name-in-module, u list_lora, apply_lora, apply_lora_strength, + list_lora_blocks, + apply_lora_blocks, + format_value_trim, apply_te, apply_guidance, apply_styles, @@ -217,6 +220,7 @@ axis_options = [ AxisOption("[Prompt] Prompt parser", str, apply_setting("prompt_attention"), choices=lambda: ["native", "compel", "xhinker", "a1111", "fixed"]), AxisOption("[Network] LoRA", str, apply_lora, cost=0.5, choices=list_lora), AxisOption("[Network] LoRA strength", float, apply_lora_strength, cost=0.6), + AxisOption("[Network] LoRA block weight", str, apply_lora_blocks, cost=0.6, fmt=format_value_trim, choices=list_lora_blocks), AxisOption("[Network] LoRA stack mode", str, apply_setting("lora_stack_mode"), cost=0.6, choices=lambda: ["sum", "ties", "dare_ties", "dare_linear", "magnitude_prune", "klora", "estlora"]), AxisOption("[Network] LoRA stack density", float, apply_setting("lora_stack_density"), cost=0.6), AxisOption("[Network] LoRA stack ramp", float, apply_setting("lora_stack_alpha"), cost=0.6), diff --git a/scripts/xyz/xyz_grid_shared.py b/scripts/xyz/xyz_grid_shared.py index b90d37848..af6b30b77 100644 --- a/scripts/xyz/xyz_grid_shared.py +++ b/scripts/xyz/xyz_grid_shared.py @@ -260,6 +260,31 @@ def apply_lora_strength(p, x, xs): shared.opts.data['extra_networks_default_multiplier'] = x +def list_lora_blocks(): + from modules.lora import lora_blocks + from modules.merging.merge_presets import BLOCK_WEIGHTS_PRESETS, SDXL_BLOCK_WEIGHTS_PRESETS + return ['None'] + list(lora_blocks.CLASSIC) + list(lora_blocks.CHAIN_NAMES) + sorted(BLOCK_WEIGHTS_PRESETS) + sorted(SDXL_BLOCK_WEIGHTS_PRESETS) + + +re_lora_tag = re.compile(r']+)>') + + +def apply_lora_blocks(p, x, xs): + x = str(x or '').strip() + if ':' in x or '>' in x: + log.error(f'XYZ grid apply LoRA block weight: value="{x}" invalid characters') + return + def rewrite(m): + items = [i for i in m.group(1).split(':') if not i.lower().startswith('lbw=')] + if x and x.lower() != 'none': + items.append(f'lbw={x}') + return '' + p.prompt = re_lora_tag.sub(rewrite, p.prompt) + p.all_prompts = None # a populated list would shadow the edited prompt in processing + p.all_negative_prompts = None + log.debug(f'XYZ grid apply LoRA block weight: "{x}"') + + def apply_te(p, x, xs): shared.opts.data["sd_text_encoder"] = x sd_models.reload_text_encoder() @@ -383,6 +408,13 @@ def format_value_join_list(p, opt, x): return ", ".join(x) +def format_value_trim(p, opt, x): + x = str(x) + if len(x) > 40: + x = x[:37] + '...' # block-weight vectors would flood the grid legend + return f"{opt.label}: {x}" + + def do_nothing(p, x, xs): pass From 999224e91a03a67835fb92a871fdf8ee7963a688 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Thu, 20 Aug 2026 22:09:07 +0100 Subject: [PATCH 083/270] test(lora): pin the upstream fixes in the campaign suite The in-place weight installs, the promote-after-deactivate fuse ordering, and the dynamo reset at model unload live in the shared loader code; their regression pins belong in the campaign suite beside the paths they protect. --- test/test-sdnq-lora-factors.py | 117 ++++++++++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 2 deletions(-) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index c0cf7fede..b4308c14c 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -646,6 +646,91 @@ def test_mechanism_flip_restore_pass_strips(): assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'restore pass must strip the factors' assert torch.equal(dq(layer), Wdq0), 'strip must restore bit-exact' assert layer.network_current_names == (), 'stripped layer must be stamped restored' + +def test_apply_restore_preserves_weight_storage(): + """Apply and restore write into the existing parameter storage: kernel selection is + placement-sensitive, so a swapped-in Parameter shifts deterministic outputs bitwise.""" + lin = torch.nn.Linear(IN_F, OUT_F, bias=True, dtype=torch.bfloat16, device=DEVICE) + with torch.no_grad(): + lin.weight.copy_(torch.randn(OUT_F, IN_F, device=DEVICE) * 0.02) + lin.bias.copy_(torch.randn(OUT_F, device=DEVICE) * 0.01) + lin.network_layer_name = 'lora_transformer_storage' + lin.network_current_names = () + W0 = lin.weight.detach().clone() + B0 = lin.bias.detach().clone() + wptr, bptr = lin.weight.data_ptr(), lin.bias.data_ptr() + A, B, _D = make_delta(seed=91, sigma=1e-2) + net = make_net('storage', lin, A, B) + with mock_model(lin=lin): + activate(net) + assert not torch.equal(lin.weight.detach(), W0), 'apply must change the weight' + assert lin.weight.data_ptr() == wptr, 'apply must write into the existing weight storage' + assert lin.bias.data_ptr() == bptr, 'apply must keep the bias storage' + activate() + assert torch.equal(lin.weight.detach(), W0), 'restore must be bit-exact' + assert torch.equal(lin.bias.detach(), B0), 'restore must be bit-exact on bias' + assert lin.weight.data_ptr() == wptr, 'restore must write into the existing weight storage' + assert lin.bias.data_ptr() == bptr, 'restore must write into the existing bias storage' + return True + + +def fuse_fixture(te0): + """A plain bf16 Linear (unquantized, so fuse stays allowed) with one attached net at strength te0.""" + lin = torch.nn.Linear(IN_F, OUT_F, bias=False, dtype=torch.bfloat16, device=DEVICE) + with torch.no_grad(): + lin.weight.copy_(torch.randn(OUT_F, IN_F, device=DEVICE) * 0.02) + lin.network_layer_name = 'lora_transformer_fusefix' + lin.network_current_names = () + A, B, D = make_delta(seed=17, sigma=1e-2) + net = make_net('fusefix', lin, A, B, te_mult=te0) + return lin, net, D + + +def edit_strength(net, te): + """The production order for a strength edit: network_load stages the new values on the + shared net object, deactivate runs against the applied ones, activate promotes.""" + l_common.previously_loaded_networks[:] = l_common.loaded_networks + net.pending_config = {'te': te, 'unet': [te] * 3, 'dyn': None} + networks.network_deactivate() + networks.network_activate() + + +def test_fuse_promote_applies_new_multiplier(): + """Fuse removal subtracts a recomputed delta, so the multipliers it reads must be the + applied ones: staged values promote only in network_activate, after the removal pass.""" + lin, net, D = fuse_fixture(te0=0.5) + with mock_model(lin=lin): + shared.opts.lora_fuse_native = True + W0 = lin.weight.detach().float().clone() + activate(net) + assert isinstance(getattr(lin, 'network_weights_backup', None), bool), 'fuse mode must not take a tensor backup' + rho0 = rho_of(lin.weight.detach().float() - W0, D) + assert abs(rho0 - 0.5) < 0.05, f'rho={rho0:.3f} expected the initial strength' + edit_strength(net, 1.0) + assert net.te_multiplier == 1.0, 'activate must promote the staged multiplier' + rho1 = rho_of(lin.weight.detach().float() - W0, D) + assert abs(rho1 - 1.0) < 0.05, f'rho={rho1:.3f} expected the edited strength to apply, not the first one' + return True + + +def test_fuse_change_then_remove_restores_pristine(): + """Apply, edit, remove: the final subtraction must use the strength that was applied. + Pins the promote-after-deactivate ordering; a promote that runs before the removal + pass leaves half the delta baked into the weights.""" + lin, net, D = fuse_fixture(te0=0.5) + with mock_model(lin=lin): + shared.opts.lora_fuse_native = True + W0 = lin.weight.detach().float().clone() + activate(net) + edit_strength(net, 1.0) + l_common.previously_loaded_networks[:] = l_common.loaded_networks + l_common.loaded_networks.clear() + networks.network_deactivate() + networks.network_activate() + resid = lin.weight.detach().float() - W0 + rho2 = rho_of(resid, D) + assert abs(rho2) < 0.05, f'rho={rho2:.3f} removal must subtract the strength that was applied' + assert float(resid.abs().max()) < 2e-3, f'max={float(resid.abs().max()):.2e} removal must leave only rounding residue' return True @@ -2275,6 +2360,33 @@ def test_rank_bucket_graph_reuse(): return True +def test_recompile_wall_resets_on_unload(): + import sdnq.common as sdnq_common + if not sdnq_common.use_torch_compile: + return True + import torch._dynamo + import torch._dynamo.config as dcfg + from torch._dynamo.exc import FailOnRecompileLimitHit + old_acc = dcfg.accumulated_recompile_limit + dcfg.accumulated_recompile_limit = 4 + try: + fn = sdnq_common.compile_func(lambda w, s: w.to(torch.float32) * s) + hit = False + for i in range(8): # fresh shapes stand in for model switches: the lifetime counter climbs even when old guards are dead + try: + fn(torch.randint(0, 255, (32 + 16 * i, 8), dtype=torch.uint8, device=DEVICE), torch.rand(32 + 16 * i, 1, device=DEVICE)) + except FailOnRecompileLimitHit: + hit = True + break + assert hit, 'the lowered lifetime wall must trip on fullgraph recompiles' + sdnq_common.reset_compile_caches() # the unload-seam hook: counters and dead graphs cleared + fn(torch.randint(0, 255, (1024, 8), dtype=torch.uint8, device=DEVICE), torch.rand(1024, 1, device=DEVICE)) + finally: + dcfg.accumulated_recompile_limit = old_acc + torch._dynamo.reset() # leave no wall residue for later tests + return True + + CAT_ROBUST = category('robustness') @@ -2724,7 +2836,8 @@ def run_tests(): log.warning('=== Set transitions ===') for fn in [test_mixed_family_transition_restores_base, test_partial_coverage_layers_stay_independent, test_mechanism_gate_declines_candidates, test_requantize_option_routes_to_legacy_path, - test_mechanism_flip_strips_attached_factors, test_mechanism_flip_restore_pass_strips]: + test_mechanism_flip_strips_attached_factors, test_mechanism_flip_restore_pass_strips, + test_apply_restore_preserves_weight_storage, test_fuse_promote_applies_new_multiplier, test_fuse_change_then_remove_restores_pristine]: run_test(CAT_TRANS, fn) log.warning('=== Hosting ===') for fn in [test_hosted_low_rank_delta_is_kept, test_hosted_dense_delta_beats_requant, test_hosted_skips_int8, @@ -2761,7 +2874,7 @@ def run_tests(): test_select_reset_reports_timing, test_select_weight_flip_calcs_on_accelerator]: run_test(CAT_SELECT, fn) log.warning('=== Compile ===') - for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse]: + for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse, test_recompile_wall_resets_on_unload]: run_test(CAT_COMPILE, fn) log.warning('=== Robustness ===') for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back]: From 5cfa07fb5e57064303d5ca23e58919fd70604b54 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Thu, 20 Aug 2026 22:44:02 +0100 Subject: [PATCH 084/270] test(lora): extend apply-method coverage to select riding The mechanism gate tests assert select_candidate declines under requantize, and the apply-method hint names the cache option among those the requantize choice disables. --- modules/lora/networks.py | 2 +- test/test-sdnq-lora-factors.py | 185 +++++++++++++++++---------------- 2 files changed, 95 insertions(+), 92 deletions(-) diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 479ea998a..45afb8480 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -92,7 +92,7 @@ def network_activate(include=None, exclude=None): refused = 0 with devices.inference_context(), pbar: wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () - stack_sig = lora_stack.signature() + lora_blocks.signature() + lora_sdnq.signature() # tracked beside network_current_names so settings-only stack, block-weight or mechanism changes re-apply + stack_sig = lora_stack.signature() + lora_blocks.signature() + lora_sdnq.signature() # tracked beside network_current_names so stack-setting, block-weight and mechanism changes re-apply select_active = len(l.loaded_networks) > 0 and lora_stack.active_select(len(l.loaded_networks)) # restore-only walks have nothing to stack; the count warning would fire on every network-free generation applied_layers.clear() lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index b4308c14c..af44cb1b0 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -558,95 +558,6 @@ def test_partial_coverage_layers_stay_independent(): return True -@contextmanager -def apply_method(value): - old = getattr(shared.opts, 'lora_sdnq_apply', 'exact') - shared.opts.lora_sdnq_apply = value - try: - yield - finally: - shared.opts.lora_sdnq_apply = old - - -def test_mechanism_gate_declines_candidates(): - """The requantize option must gate every svd-channel entry point and flip the apply-stamp token.""" - layer = build_layer('uint4') - A, B, _D = make_delta() - l_common.loaded_networks.clear() - l_common.loaded_networks.append(make_net('one', layer, A, B)) - wanted = (('one', 1.0, 1.0, None),) - try: - assert lora_sdnq.factor_candidate(layer, layer.network_layer_name, wanted) - with host_rank(64): - assert lora_sdnq.host_candidate(layer, layer.network_layer_name, wanted) - assert lora_sdnq.signature() == '' - with apply_method('requantize'): - assert not lora_sdnq.factor_candidate(layer, layer.network_layer_name, wanted) - with host_rank(64): - assert not lora_sdnq.host_candidate(layer, layer.network_layer_name, wanted) - assert lora_sdnq.signature() == '|quant=requantize' - finally: - l_common.loaded_networks.clear() - return True - - -def test_requantize_option_routes_to_legacy_path(): - """With the option set, a factorable set must take the classic backup-and-requantize path end to end.""" - layer = build_layer('uint4') - A, B, _D = make_delta(sigma=3e-3) - net = make_net('one', layer, A, B) - with apply_method('requantize'), mock_model(lin=layer): - shared.opts.lora_fuse_native = False # a real quantized model forces backup mode; the mock carries no quantization config - Wdq0 = dq(layer) - activate(net) - assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'legacy path must not touch the svd channel' - assert layer.svd_up is None, 'legacy path must leave the channel empty' - assert isinstance(layer.network_weights_backup, torch.Tensor), 'legacy path must take a tensor backup' - assert not torch.equal(dq(layer), Wdq0), 'legacy path must requantize the weights' - activate() - assert torch.equal(dq(layer), Wdq0), 'legacy restore must be bit-exact from backup' - return True - - -def test_mechanism_flip_strips_attached_factors(): - """Flipping to requantize with factors attached must strip them before the weight path takes the layer; flipping back must re-enter the factor path.""" - layer = build_layer('uint4') - A, B, _D = make_delta(sigma=3e-3) - net = make_net('one', layer, A, B) - with mock_model(lin=layer): - shared.opts.lora_fuse_native = False # a real quantized model forces backup mode; the mock carries no quantization config - Wdq0 = dq(layer) - activate(net) - assert hasattr(layer, 'sdnq_lora_svd_stash'), 'default mechanism must take the factor path' - E_exact = dq(layer) - Wdq0 - with apply_method('requantize'): - activate(net) # same set; the mechanism token in the apply stamp must force re-processing - assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'flip must strip the attached factors' - assert layer.svd_up is None, 'stripped channel must be empty, or the requantized delta double-applies' - assert isinstance(layer.network_weights_backup, torch.Tensor), 'flipped layer must continue on the backup path' - activate(net) # flip back within the same loaded set - assert hasattr(layer, 'sdnq_lora_svd_stash'), 'flip back must re-enter the factor path' - assert torch.equal(dq(layer) - Wdq0, E_exact), 'exact re-apply must restore the base from backup before attaching' - activate() - assert torch.equal(dq(layer), Wdq0), 'unload must return bit-exact pristine' - return True - - -def test_mechanism_flip_restore_pass_strips(): - """A restore-only pass under the requantize option must still drop attached factors.""" - layer = build_layer('uint4') - A, B, _D = make_delta(sigma=3e-3) - net = make_net('one', layer, A, B) - with mock_model(lin=layer): - Wdq0 = dq(layer) - activate(net) - assert hasattr(layer, 'sdnq_lora_svd_stash') - with apply_method('requantize'): - activate() # unload with the gate closed: the fallthrough strip is the only removal route - assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'restore pass must strip the factors' - assert torch.equal(dq(layer), Wdq0), 'strip must restore bit-exact' - assert layer.network_current_names == (), 'stripped layer must be stamped restored' - def test_apply_restore_preserves_weight_storage(): """Apply and restore write into the existing parameter storage: kernel selection is placement-sensitive, so a swapped-in Parameter shifts deterministic outputs bitwise.""" @@ -734,6 +645,98 @@ def test_fuse_change_then_remove_restores_pristine(): return True +@contextmanager +def apply_method(value): + old = getattr(shared.opts, 'lora_sdnq_apply', 'exact') + shared.opts.lora_sdnq_apply = value + try: + yield + finally: + shared.opts.lora_sdnq_apply = old + + +def test_mechanism_gate_declines_candidates(): + """The requantize option must gate every svd-channel entry point and flip the apply-stamp token.""" + layer = build_layer('uint4') + A, B, _D = make_delta() + l_common.loaded_networks.clear() + l_common.loaded_networks.append(make_net('one', layer, A, B)) + wanted = (('one', 1.0, 1.0, None),) + try: + assert lora_sdnq.factor_candidate(layer, layer.network_layer_name, wanted) + with host_rank(64): + assert lora_sdnq.select_candidate(layer, layer.network_layer_name, wanted) + assert lora_sdnq.signature() == '' + with apply_method('requantize'): + assert not lora_sdnq.factor_candidate(layer, layer.network_layer_name, wanted) + with host_rank(64): + assert not lora_sdnq.select_candidate(layer, layer.network_layer_name, wanted) + assert not lora_sdnq.host_candidate(layer, layer.network_layer_name, wanted) + assert lora_sdnq.signature() == '|quant=requantize' + finally: + l_common.loaded_networks.clear() + return True + + +def test_requantize_option_routes_to_legacy_path(): + """With the option set, a factorable set must take the classic backup-and-requantize path end to end.""" + layer = build_layer('uint4') + A, B, _D = make_delta(sigma=3e-3) + net = make_net('one', layer, A, B) + with apply_method('requantize'), mock_model(lin=layer): + shared.opts.lora_fuse_native = False # a real quantized model forces backup mode; the mock carries no quantization config + Wdq0 = dq(layer) + activate(net) + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'legacy path must not touch the svd channel' + assert layer.svd_up is None, 'legacy path must leave the channel empty' + assert isinstance(layer.network_weights_backup, torch.Tensor), 'legacy path must take a tensor backup' + assert not torch.equal(dq(layer), Wdq0), 'legacy path must requantize the weights' + activate() + assert torch.equal(dq(layer), Wdq0), 'legacy restore must be bit-exact from backup' + return True + + +def test_mechanism_flip_strips_attached_factors(): + """Flipping to requantize with factors attached must strip them before the weight path takes the layer; flipping back must re-enter the factor path.""" + layer = build_layer('uint4') + A, B, _D = make_delta(sigma=3e-3) + net = make_net('one', layer, A, B) + with mock_model(lin=layer): + shared.opts.lora_fuse_native = False # a real quantized model forces backup mode; the mock carries no quantization config + Wdq0 = dq(layer) + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'default mechanism must take the factor path' + E_exact = dq(layer) - Wdq0 + with apply_method('requantize'): + activate(net) # same set; the mechanism token in the apply stamp must force re-processing + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'flip must strip the attached factors' + assert layer.svd_up is None, 'stripped channel must be empty, or the requantized delta double-applies' + assert isinstance(layer.network_weights_backup, torch.Tensor), 'flipped layer must continue on the backup path' + activate(net) # flip back within the same loaded set + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'flip back must re-enter the factor path' + assert torch.equal(dq(layer) - Wdq0, E_exact), 'exact re-apply must restore the base from backup before attaching' + activate() + assert torch.equal(dq(layer), Wdq0), 'unload must return bit-exact pristine' + return True + + +def test_mechanism_flip_restore_pass_strips(): + """A restore-only pass under the requantize option must still drop attached factors.""" + layer = build_layer('uint4') + A, B, _D = make_delta(sigma=3e-3) + net = make_net('one', layer, A, B) + with mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash') + with apply_method('requantize'): + activate() # unload with the gate closed: the fallthrough strip is the only removal route + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'restore pass must strip the factors' + assert torch.equal(dq(layer), Wdq0), 'strip must restore bit-exact' + assert layer.network_current_names == (), 'stripped layer must be stamped restored' + return True + + CAT_HOST = category('hosting') @@ -2835,9 +2838,9 @@ def run_tests(): run_test(CAT_E2E, fn) log.warning('=== Set transitions ===') for fn in [test_mixed_family_transition_restores_base, test_partial_coverage_layers_stay_independent, + test_apply_restore_preserves_weight_storage, test_fuse_promote_applies_new_multiplier, test_fuse_change_then_remove_restores_pristine, test_mechanism_gate_declines_candidates, test_requantize_option_routes_to_legacy_path, - test_mechanism_flip_strips_attached_factors, test_mechanism_flip_restore_pass_strips, - test_apply_restore_preserves_weight_storage, test_fuse_promote_applies_new_multiplier, test_fuse_change_then_remove_restores_pristine]: + test_mechanism_flip_strips_attached_factors, test_mechanism_flip_restore_pass_strips]: run_test(CAT_TRANS, fn) log.warning('=== Hosting ===') for fn in [test_hosted_low_rank_delta_is_kept, test_hosted_dense_delta_beats_requant, test_hosted_skips_int8, From 62bedf8834528f99ef8a1a428493f03f7368bd49 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 29 Aug 2026 13:05:20 +0200 Subject: [PATCH 085/270] update attention handlers and settings Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 13 +++-- TODO.md | 2 - cli/sdnq-attention-benchmark.py | 4 +- extensions-builtin/sdnq | 2 +- installer.py | 3 ++ modules/attention/backends/flash_ck.py | 10 ++-- modules/attention/backends/flex.py | 2 +- modules/attention/backends/sage.py | 8 ++-- modules/attention/backends/sdnq.py | 2 +- modules/attention/backends/triton_amd.py | 4 +- modules/attention/dispatcher.py | 56 +++++++++++++++------- modules/attention/registry.py | 2 +- modules/attention/router.py | 12 ++--- modules/attention/sparse/selector.py | 3 +- modules/devices.py | 59 ++++++++++++++--------- modules/framepack/framepack_install.py | 9 ---- modules/lora/lora_stack.py | 4 +- modules/processing_diffusers.py | 5 +- modules/sd_models.py | 3 -- modules/shared_defaults.py | 13 ++--- modules/shared_items.py | 13 +++-- modules/ui_definitions.py | 60 +++++++++++++----------- modules/ui_settings.py | 4 +- scripts/xyz/xyz_grid_classes.py | 3 -- scripts/xyz/xyz_grid_shared.py | 18 ------- test/test-attention-router.py | 12 ++--- test/test-xyz-attention.py | 30 +----------- ui/locale/locale_en.json | 2 +- 28 files changed, 173 insertions(+), 185 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ddbec6f8..09ac15643 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,19 +1,24 @@ # Change Log for SD.Next -## Update for 2026-08-28 +## Update for 2026-08-29 - **LoRA** + - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions + *note*: lora now has its own settings section in *settings -> lora* - new apply engine that allows lora to be applied much faster - new calibration engine that allows lora to be applied with far smaller error when dealing with highly quantized models - - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for details and usage instructions - *note*: calibration data is stored once calculated so it can be reused for future runs location is `models/calibration` folder - new factor cache that allows lora effects to be pre-calculated and persistently cached for future runs location is `models/lora-factor-cache` folder + - multi-network stack modes + can significantly improve lora quality when using multiple loras at once + - per-block strength - **Attention** + - *TODO*: see [Attention docs](https://vladmandic.github.io/sdnext-docs/Attention) for details and usage instructions + *note*: attention now has its own settings section in *settings -> cross attention* - new `sparse-attention` method that can be combined with other attention methods to reduce memory usage and improve performance on large models - *TODO*: see [Attention docs](https://vladmandic.github.io/sdnext-docs/Attention) for details and usage instructions - **Internal** - modular pipelines intercept and profiling hooks - attention mechanisms decision tree and apply method refactor @@ -1918,7 +1923,7 @@ And check out new **history** tab in the right panel, it now shows visualization *note*: this does not impact the actual image resolution, only the resolution at which detailer internally operates - refactor reuse-seed and add functionality to all tabs - refactor modernui js codebase - - move zluda flash attenion to *Triton Flash attention* option + - move zluda flash attenion to *Triton AMD Flash attention* option - remove samplers filtering - allow both flow-matching and discrete samplers for sdxl models - cleanup command line parameters diff --git a/TODO.md b/TODO.md index 032000612..a12d3234c 100644 --- a/TODO.md +++ b/TODO.md @@ -2,8 +2,6 @@ ## Short-term -- LoRA: merge new handler, @CalamitousFelicitousness -- Attn: merge refactor, @CalamitousFelicitousness - MiniMax LoRA: native loader for MiniMax-H3: fl2va, ref2va, pruned - MiniMax TAESD: - MiniMax: Create pre-quant for MiniMax-H3-Turbo diff --git a/cli/sdnq-attention-benchmark.py b/cli/sdnq-attention-benchmark.py index c0959bba1..7e3ddf354 100755 --- a/cli/sdnq-attention-benchmark.py +++ b/cli/sdnq-attention-benchmark.py @@ -992,7 +992,7 @@ def print_environment(fp8_result, prep_status, prep_detail, weight_dequant_resul lines.append(f"float8_e4m3fn matmul: [red]not supported on this gpu, selecting it fails generation[/red] [dim]({escape(fp8_result['qk'][1])})[/dim]") else: lines.append(f"float8_e4m3fn matmul: [red]failed to compile in this environment, selecting it fails generation[/red]; the error is not the hardware-capability signature, a torch or triton issue is more likely than the gpu [dim]({escape(fp8_result['qk'][1])})[/dim]") - lines.append(f"sdnq attention enabled in current config: {'[green]yes[/green]' if 'SDNQ attention' in shared.opts.sdp_overrides else '[yellow]no, enable via Compute Settings -> SDP overrides (requires restart)[/yellow]'}") + lines.append(f"sdnq attention enabled in current config: {'[green]yes[/green]' if 'SDNQ attention' in shared.opts.cross_attention_optimization else '[yellow]no, enable via Compute Settings -> Cross Attention (requires restart)[/yellow]'}") if prep_status == "disabled": lines.append("compiled input prep: torch.compile disabled in config, input prep runs eager") elif prep_status == "working": @@ -2849,7 +2849,7 @@ def bench_block_geometry(iters, warmup, config_timeout=300, selected=None): weights_mode = str(getattr(shared.opts, "sdnq_quantize_weights_mode", "")) current_id = None if weights_mode == "int8" and getattr(shared.opts, "sdnq_quantize_matmul_mode", "disabled") != "disabled": - current_id = "int8-mm-atten" if "SDNQ attention" in shared.opts.sdp_overrides else "int8-mm" + current_id = "int8-mm-atten" if "SDNQ attention" in shared.opts.cross_attention_optimization else "int8-mm" if current_id and results.get(current_id, {}).get("ms"): notes.append(f"current config runs the {results[current_id]['label']} row for int8-quantized models") if any(entry.get("ms") for config_id, entry in results.items() if config_id.endswith("sagefp16")): diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index 530f4d96c..f18fbf08a 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit 530f4d96c0ccd755246d894e474202a1b16cdf5a +Subproject commit f18fbf08a5987e9f3f166cd837298e738d2bb881 diff --git a/installer.py b/installer.py index b02558659..0a5521d38 100644 --- a/installer.py +++ b/installer.py @@ -57,6 +57,7 @@ args = Dot({ 'use_ipex': False, 'use_cuda': False, 'use_rocm': False, + 'use_openvino': False, 'experimental': False, 'test': False, 'tls_selfsign': False, @@ -555,6 +556,8 @@ def check_python(supported_minors=None, experimental_minors=None, reason=None): def register_sdnq(): t_start = time.time() os.environ.setdefault('SDNQ_LOGGER_NAME', 'sd') + if not args.use_openvino: + os.environ.setdefault('SDNQ_USE_OPENVINO_MM', '0') fn = os.path.join('extensions-builtin', 'sdnq', 'src', 'sdnq', '__init__.py') name = "sdnq" spec = importlib.util.spec_from_file_location(name, fn) diff --git a/modules/attention/backends/flash_ck.py b/modules/attention/backends/flash_ck.py index 09bd86e75..ebd0b27c0 100644 --- a/modules/attention/backends/flash_ck.py +++ b/modules/attention/backends/flash_ck.py @@ -5,13 +5,17 @@ from modules.attention.registry import AttentionBackend, Constraints, Platform def prepare(platform: Platform, original): # pylint: disable=unused-argument + try: + import flash_attn # pylint: disable=unused-import + except ImportError: + log.warning('Attention: type="Flash attention" not installed: starting build, this may take a while...') if platform.backend == 'rocm': if not installed('flash-attn'): - log.info('Torch attention: type="Flash attention" building...') + log.info('Attention: type="Flash attention" building...') agent = rocm.Agent(platform.device) install(rocm.get_flash_attention_command(agent), reinstall=True) else: - install('flash-attn') + install('--no-build-isolation flash-attn') from flash_attn import flash_attn_func def call(query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa): # pylint: disable=unused-argument @@ -34,7 +38,7 @@ def prepare(platform: Platform, original): # pylint: disable=unused-argument attn_output = attn_output.squeeze(0) return attn_output - log.debug('Torch attention: type="Flash attention"') + log.debug('Attention: type="Flash attention"') return call diff --git a/modules/attention/backends/flex.py b/modules/attention/backends/flex.py index c5e6a9d25..2bf283cea 100644 --- a/modules/attention/backends/flex.py +++ b/modules/attention/backends/flex.py @@ -35,7 +35,7 @@ def prepare(platform: Platform, original): # pylint: disable=unused-argument block_mask = create_block_mask(causal_mask, query.shape[0], query.shape[1], query.shape[-2], key.shape[-2], device=query.device) return flex_attention(query, key, value, score_mod=score_mod, block_mask=block_mask, scale=scale, enable_gqa=enable_gqa) - log.debug('Torch attention: type="Flex attention"') + log.debug('Attention: type="Flex attention"') return call diff --git a/modules/attention/backends/sage.py b/modules/attention/backends/sage.py index d51055970..19b01992e 100644 --- a/modules/attention/backends/sage.py +++ b/modules/attention/backends/sage.py @@ -1,11 +1,13 @@ import torch -from installer import install +from installer import install, installed from modules.logger import log from modules.attention.registry import AttentionBackend, Constraints, Platform def prepare(platform: Platform, original): # pylint: disable=unused-argument - install('sageattention') + if not installed('sageattention'): + log.warning('Attention: type="Sage attention" not installed: starting build, this may take a while...') + install('--no-build-isolation git+http://github.com/thu-ml/SageAttention.git', 'sageattention') use_cuda_backend = False if platform.backend == 'cuda' and torch.cuda.get_device_capability(platform.device) == (8, 6): @@ -43,7 +45,7 @@ def prepare(platform: Platform, original): # pylint: disable=unused-argument value = value.repeat_interleave(query.size(-3)//value.size(-3), -3) return sage_attn_impl(query, key, value, is_causal, scale) - log.debug(f'Torch attention: type="Sage attention" backend={"cuda" if use_cuda_backend else "auto"}') + log.debug(f'Attention: type="Sage attention" backend={"cuda" if use_cuda_backend else "auto"}') return call diff --git a/modules/attention/backends/sdnq.py b/modules/attention/backends/sdnq.py index 3769da964..4422ce6f1 100644 --- a/modules/attention/backends/sdnq.py +++ b/modules/attention/backends/sdnq.py @@ -33,7 +33,7 @@ def prepare(platform: Platform, original): # pylint: disable=unused-argument call.caps = backend.caps if block_mask else frozenset() if not block_mask and getattr(shared.opts, 'sparse_attention_enabled', False): log.warning('SDNQ attention: the installed sdnq has no block mask input, sparse attention cannot use it; update the sdnq submodule') - log.debug(f'Torch attention: type="SDNQ attention" matmul={options["matmul_dtype"]}:{options["pv_matmul_dtype"]} smooth={options["smooth_k"]} hadamard={options["use_hadamard"]} quantize_fp32={options["quantize_fp32"]} fp16_accum={options["use_fp16_accum"]} block_mask={block_mask}') + log.debug(f'Attention: type="SDNQ attention" matmul={options["matmul_dtype"]}:{options["pv_matmul_dtype"]} smooth={options["smooth_k"]} hadamard={options["use_hadamard"]} quantize_fp32={options["quantize_fp32"]} fp16_accum={options["use_fp16_accum"]} block_mask={block_mask}') return call diff --git a/modules/attention/backends/triton_amd.py b/modules/attention/backends/triton_amd.py index a1f3be7df..45a655ede 100644 --- a/modules/attention/backends/triton_amd.py +++ b/modules/attention/backends/triton_amd.py @@ -21,12 +21,12 @@ def prepare(platform: Platform, original): # pylint: disable=unused-argument interface_fa.fwd(query, key, value, out_padded, dropout_p, scale, is_causal) return out_padded[..., :head_size_og].transpose(1, 2) - log.debug('Torch attention: type="Triton Flash attention"') + log.debug('Attention: type="Triton AMD Flash attention"') return call backend = AttentionBackend( - name='triton', label='Triton Flash attention', priority=30, prepare=prepare, + name='triton', label='Triton AMD Flash attention', priority=30, prepare=prepare, constraints=Constraints(max_head_dim=128, allow_mask=False, same_device=True), platforms=frozenset({'rocm', 'zluda'}), ) diff --git a/modules/attention/dispatcher.py b/modules/attention/dispatcher.py index ea7466373..ad5082d2c 100644 --- a/modules/attention/dispatcher.py +++ b/modules/attention/dispatcher.py @@ -3,32 +3,52 @@ from modules.logger import log from installer import install, torch_info -def set_diffusers_attention(pipe, quiet = False): - from modules import shared, devices - - log.quiet(quiet, f'Setting model: attention="{shared.opts.cross_attention_optimization}"') - if shared.opts.cross_attention_optimization == "Disabled": - torch_info.set(attention="disabled") - elif shared.opts.cross_attention_optimization == "Scaled-Dot-Product": # The default set by Diffusers - devices.set_sdpa_params() - elif shared.opts.cross_attention_optimization == "xFormers": - if hasattr(pipe, 'enable_xformers_memory_efficient_attention'): - torch_info.set(attention="xformers") - pipe.enable_xformers_memory_efficient_attention() - else: - log.warning(f"Attention: xFormers is not compatible with {pipe.__class__.__name__}") +def set_xformers_attention(pipe): + try: + # install('xformers') + import xformers + log.debug(f'Attention: xFormers={xformers.__version__}') + import diffusers.utils.import_utils + diffusers.utils.import_utils._xformers_available = True # pylint: disable=protected-access + diffusers.utils.import_utils._xformers_version = xformers.__version__ # pylint: disable=protected-access + import diffusers.models.attention_processor + import importlib + importlib.reload(diffusers.models.attention_processor) + # diffusers.models.attention_processor.xformers = xformers + except Exception as e: + log.error(f'Attention: xFormers {e}') + return + if hasattr(pipe, 'enable_xformers_memory_efficient_attention'): + torch_info.set(attention="xformers") + pipe.enable_xformers_memory_efficient_attention() else: - log.warning(f'Torch attention: method="{shared.opts.cross_attention_optimization}" unknown, pipe={pipe.__class__.__name__} keeps its own attention processor') + log.warning(f"Attention: xFormers is not compatible with {pipe.__class__.__name__}") + + +def set_diffusers_attention(pipe, quiet = False): + from modules import shared, attention + log.quiet(quiet, f'Setting model: attention="{shared.opts.cross_attention_optimization}"') + + attention.reapply() + plan = attention.get_plan() + if plan is not None and (plan.entries or plan.terminal): + pass # already set by router + elif shared.opts.cross_attention_optimization == "Scaled-Dot-Product": # The default set by Diffusers + pass # attention.reapply already called devices.set_sdpa_params + elif shared.opts.cross_attention_optimization == "xFormers": + set_xformers_attention(pipe) + elif shared.opts.cross_attention_optimization == "Disabled" or shared.opts.cross_attention_optimization == "Default": + torch_info.set(attention="default") + else: + log.warning(f'Attention: cls={pipe.__class__.__name__} method="{shared.opts.cross_attention_optimization}" not applied') if shared.opts.attention_slicing != "Default" and hasattr(pipe, "enable_attention_slicing") and hasattr(pipe, "disable_attention_slicing"): if shared.opts.attention_slicing == "Enabled": pipe.enable_attention_slicing() else: pipe.disable_attention_slicing() - log.debug(f"Torch attention: slicing={shared.opts.attention_slicing}") - + log.debug(f"Attention: slicing={shared.opts.attention_slicing}") pipe.current_attn_name = shared.opts.cross_attention_optimization - pipe.current_attn_overrides = list(shared.opts.sdp_overrides) orig_get_kernel = None diff --git a/modules/attention/registry.py b/modules/attention/registry.py index 69f9cc231..2403cde85 100644 --- a/modules/attention/registry.py +++ b/modules/attention/registry.py @@ -57,7 +57,7 @@ class Constraints: class AttentionBackend: """One attention implementation: how to prepare it once and which calls it serves.""" name: str - label: str # the sdp_overrides choice that enables it + label: str # the cross_attention_optimization choice that enables it priority: int # higher priority entries are tried first prepare: Callable[[Platform, AttentionCall], AttentionCall | None] # imports and configures the implementation, returns its call or None constraints: Constraints = field(default_factory=Constraints) diff --git a/modules/attention/router.py b/modules/attention/router.py index a99009959..e1e7d80a1 100644 --- a/modules/attention/router.py +++ b/modules/attention/router.py @@ -42,12 +42,12 @@ def build_plan(labels, platform: Platform, original: AttentionCall, reg: Registr if backend.label not in labels: continue if not backend.available_on(platform): - log.warning(f'Torch attention: type="{backend.label}" not available on backend={platform.backend}') + log.warning(f'Attention: type="{backend.label}" not available on backend={platform.backend}') continue try: call = backend.prepare(platform, original) except Exception as err: - log.error(f'Torch attention: type="{backend.label}" {err}') + log.error(f'Attention: type="{backend.label}" {err}') continue if call is None: continue @@ -100,7 +100,7 @@ def install_router(labels, platform: Platform, original: AttentionCall, reg: Reg torch.nn.functional.scaled_dot_product_attention = make_router(plan, observer, stage) if (plan.entries or plan.terminal is not None) else original current_plan = plan torch_info.set(attention='>'.join(plan.chain())) - log.debug(f'Torch attention: chain={">".join(plan.chain())} overrides={list(labels)} backend={platform.backend} sparse={stage is not None}') + log.debug(f'Attention: chain={">".join(plan.chain())} backend={platform.backend} sparse={stage is not None}') return plan @@ -116,7 +116,7 @@ def build_sparse_stage(plan: Plan): capable = [entry.backend.name for entry in plan.entries if 'block_mask' in entry.caps] if not capable: names = [backend.label for backend in default_registry.with_cap('block_mask')] - log.warning(f'Sparse attention: enabled but no active backend consumes a block mask, enable one of {names} in sdp overrides; attention stays dense') + log.warning(f'Attention: sparse=True compatible={names} not set') return None built = sparse_stage.make_stage(options) if built is not None: @@ -132,7 +132,7 @@ def reapply_options(reg: Registry | None = None) -> list[str]: """Settings whose change rebuilds the chain: the override set, the torch kernel flags, every option a backend captures, and the sparse stage.""" from modules.attention.sparse import stage as sparse_stage reg = reg if reg is not None else default_registry - return ['sdp_options', 'sdp_overrides', *reg.options(), *sparse_stage.OPTION_NAMES] + return ['sdp_options', 'cross_attention_optimization', *reg.options(), *sparse_stage.OPTION_NAMES] def reapply() -> None: @@ -142,7 +142,7 @@ def reapply() -> None: compiled = getattr(shared, 'compiled_model_state', None) if compiled is not None and getattr(compiled, 'is_compiled', False): torch._dynamo.reset() # pylint: disable=protected-access - log.debug('Torch attention: dynamo reset, compiled model resident') + log.debug('Attention: dynamo reset, compiled model resident') def report() -> dict: diff --git a/modules/attention/sparse/selector.py b/modules/attention/sparse/selector.py index dc3cb19fc..815494882 100644 --- a/modules/attention/sparse/selector.py +++ b/modules/attention/sparse/selector.py @@ -27,7 +27,8 @@ class BlockSelection: @property def shape(self) -> tuple[int, int, int, int]: - return tuple(self.keep.shape) + b, h, nq, nk = self.keep.shape + return (b, h, nq, nk) def density(self) -> float: """Fraction of tiles kept. Reads back from the accelerator, so this is for reporting and tests, never the hot path.""" diff --git a/modules/devices.py b/modules/devices.py index b29b0213c..001bd0eed 100644 --- a/modules/devices.py +++ b/modules/devices.py @@ -493,17 +493,45 @@ def override_ipex_math(): log.warning(f'Torch ipex: {e}') +def report_attention(): + from importlib.metadata import version + try: + flash = version('flash-attn') + except Exception: + flash = False + try: + sage = version('sageattention') + except Exception: + sage = False + try: + xformers = version('xformers') + except Exception: + xformers = False + try: + kernels = version('kernels') + except Exception: + kernels = False + from diffusers.models import attention_dispatch as a + try: + import sdnq + sdnq_ver = sdnq.__version__ + except Exception: + sdnq_ver = False + # log.debug(f'Attention available: flash={a._CAN_USE_FLASH_ATTN} flash3={a._CAN_USE_FLASH_ATTN_3} sage={a._CAN_USE_SAGE_ATTN} flex={a._CAN_USE_FLEX_ATTN} npu={a._CAN_USE_NPU_ATTN} xla={a._CAN_USE_XLA_ATTN} xformers={a._CAN_USE_XFORMERS_ATTN} kernels={a.is_kernels_available()} sdnq=True') # pylint: disable=protected-access + log.debug(f'Attention available: sdnq={sdnq_ver} flash={flash} sage={sage} flex={a._CAN_USE_FLEX_ATTN} xformers={xformers} npu={a._CAN_USE_NPU_ATTN} xla={a._CAN_USE_XLA_ATTN} kernels={kernels}') # pylint: disable=protected-access + + def set_sdpa_params(): try: + global sdpa_original # pylint: disable=global-statement + report = sdpa_original is None try: - global sdpa_original # pylint: disable=global-statement if sdpa_original is not None: torch.nn.functional.scaled_dot_product_attention = sdpa_original else: sdpa_original = torch.nn.functional.scaled_dot_product_attention except Exception as err: - log.warning(f'Torch attention: type="sdpa" {err}') - + log.warning(f'Attention: type="sdpa" {err}') try: torch.backends.cuda.enable_flash_sdp('Flash' in opts.sdp_options or 'Flash attention' in opts.sdp_options) torch.backends.cuda.enable_mem_efficient_sdp('Memory' in opts.sdp_options or 'Memory attention' in opts.sdp_options) @@ -511,27 +539,12 @@ def set_sdpa_params(): if hasattr(torch.backends.cuda, "allow_fp16_bf16_reduction_math_sdp"): # only valid for torch >= 2.5 torch.backends.cuda.allow_fp16_bf16_reduction_math_sdp(True) torch_info.set(attention="sdpa") - log.debug(f'Torch attention: type="sdpa" kernels={opts.sdp_options} overrides={opts.sdp_overrides}') + log.debug(f'Attention: type="sdpa" kernels={opts.sdp_options}') except Exception as err: - log.warning(f'Torch attention: type="sdpa" {err}') - - attention.install_router(opts.sdp_overrides, attention.Platform(backend=backend, device=device), sdpa_original) - - from importlib.metadata import version - try: - flash = version('flash-attn') - except Exception: - flash = False - try: - sage = version('sageattention') - except Exception: - sage = False - if flash or sage: - log.debug(f'Torch attention installed: flashattn={flash} sageattention={sage}') - - from diffusers.models import attention_dispatch as a - log.debug(f'Torch attention available: flash={a._CAN_USE_FLASH_ATTN} flash3={a._CAN_USE_FLASH_ATTN_3} sage={a._CAN_USE_SAGE_ATTN} flex={a._CAN_USE_FLEX_ATTN} npu={a._CAN_USE_NPU_ATTN} xla={a._CAN_USE_XLA_ATTN} xformers={a._CAN_USE_XFORMERS_ATTN} kernels={a.is_kernels_available()} sdnq=True') # pylint: disable=protected-access - + log.warning(f'Attention: type="sdpa" {err}') + attention.install_router([opts.cross_attention_optimization], attention.Platform(backend=backend, device=device), sdpa_original) + if report: + report_attention() except Exception as e: log.warning(f'Torch SDPA: {e}') diff --git a/modules/framepack/framepack_install.py b/modules/framepack/framepack_install.py index 121b6c680..404e89652 100644 --- a/modules/framepack/framepack_install.py +++ b/modules/framepack/framepack_install.py @@ -18,15 +18,6 @@ def rename(src:str, dst:str): def install_requirements(attention:str='SDPA'): install('av') - if attention == 'Xformers': - log.debug('FramePack install: xformers') - install('xformers') - elif attention == 'FlashAttention': - log.debug('FramePack install: flash-attn') - install('flash-attn') - elif attention == 'SageAttention': - log.debug('FramePack install: sageattention') - install('sageattention') def git_clone(git_repo:str, git_dir:str, tmp_dir:str): diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index 85818c8b9..b0fa08910 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -248,7 +248,7 @@ def clear(): state['reported'] = None -def register(layer_name, module, kind, scores, segments=None, nets=None, abs_sums=None): +def register(layer_name, module, kind, scores, segments: tuple[tuple[int, int], tuple[int, int], bool] | None = None, nets=None, abs_sums=None): """Record a select-mode layer for schedule finalization. kind 'factor': segments = ((s0, s1), (t0, t1), transposed) column ranges on the svd @@ -258,6 +258,8 @@ def register(layer_name, module, kind, scores, segments=None, nets=None, abs_sum """ entry = {'layer': layer_name, 'module': weakref.ref(module), 'kind': kind, 'segments': segments, 'scores': scores, 'nets': nets, 'abs_sums': abs_sums, 'stash': None} if kind == 'factor': + if segments is None: + raise ValueError("segments is required when kind='factor'") (s0, s1), (t0, t1), transposed = segments up = module.svd_up.data entry['stash'] = (segment_view(up, s0, s1, transposed).clone(), segment_view(up, t0, t1, transposed).clone()) diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index a7cad820a..b8ae288b0 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -546,9 +546,8 @@ def update_pipeline(sd_model, p: processing.StableDiffusionProcessing): global orig_pipeline # pylint: disable=global-statement orig_pipeline = updated_model # processed ONNX pipeline should not be replaced with original pipeline. current_attn = getattr(updated_model, "current_attn_name", None) - current_overrides = getattr(updated_model, "current_attn_overrides", None) - if current_attn != shared.opts.cross_attention_optimization or current_overrides != list(shared.opts.sdp_overrides): - log.info(f"Setting attention optimization: {shared.opts.cross_attention_optimization} overrides={shared.opts.sdp_overrides}") + if current_attn != shared.opts.cross_attention_optimization: + # log.info(f"Setting attention optimization: {shared.opts.cross_attention_optimization}") attention.set_diffusers_attention(updated_model) return updated_model diff --git a/modules/sd_models.py b/modules/sd_models.py index 6140571e9..a21877dc8 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -1261,7 +1261,6 @@ def copy_diffuser_options(new_pipe, orig_pipe): new_pipe.sd_model_hash = getattr(orig_pipe, 'sd_model_hash', None) new_pipe.has_accelerate = getattr(orig_pipe, 'has_accelerate', False) new_pipe.current_attn_name = getattr(orig_pipe, 'current_attn_name', None) - new_pipe.current_attn_overrides = getattr(orig_pipe, 'current_attn_overrides', None) new_pipe.default_scheduler = getattr(orig_pipe, 'default_scheduler', None) new_pipe.image_encoder = getattr(orig_pipe, 'image_encoder', None) new_pipe.feature_extractor = getattr(orig_pipe, 'feature_extractor', None) @@ -1289,7 +1288,6 @@ def backup_pipe_components(pipe): 'sd_model_hash': getattr(pipe, "sd_model_hash", None), 'has_accelerate': getattr(pipe, "has_accelerate", None), 'current_attn_name': getattr(pipe, "current_attn_name", None), - 'current_attn_overrides': getattr(pipe, "current_attn_overrides", None), 'default_scheduler': getattr(pipe, "default_scheduler", None), 'image_encoder': getattr(pipe, "image_encoder", None), 'feature_extractor': getattr(pipe, "feature_extractor", None), @@ -1311,7 +1309,6 @@ def restore_pipe_components(pipe, components): pipe.sd_model_hash = components['sd_model_hash'] pipe.has_accelerate = components['has_accelerate'] pipe.current_attn_name = components['current_attn_name'] - pipe.current_attn_overrides = components.get('current_attn_overrides') pipe.default_scheduler = components['default_scheduler'] if components['image_encoder'] is not None: diff --git a/modules/shared_defaults.py b/modules/shared_defaults.py index 0530fb6a3..46ee0af83 100644 --- a/modules/shared_defaults.py +++ b/modules/shared_defaults.py @@ -44,20 +44,15 @@ def get_default_modes(cmd_opts, mem_stat): default_sdp_choices = ['Flash', 'Memory', 'Math'] default_sdp_options = ['Flash', 'Memory', 'Math'] - default_sdp_override_choices = ['Dynamic attention', 'Flex attention', 'Flash attention', 'Sage attention', 'SDNQ attention'] - default_sdp_override_options = [] - if devices.backend == "zluda": default_sdp_options = ['Math'] - default_sdp_override_options = ['Dynamic attention'] - default_sdp_override_choices.append('Triton Flash attention') + default_cross_attention = ['Dynamic attention'] elif devices.backend == "rocm": - default_sdp_override_choices.append('Triton Flash attention') agent = devices.get_hip_agent() if agent.gfx_version < 0x1100: - default_sdp_override_options = ['Dynamic attention'] # only RDNA2 and older GPUs needs this + default_cross_attention = ['Dynamic attention'] # only RDNA2 and older GPUs needs this elif devices.backend in {"cpu", "mps"}: - default_sdp_override_options = ['Dynamic attention'] + default_cross_attention = ['Dynamic attention'] if devices.get_optimal_device_name() != "cpu": os.environ.setdefault('SDNQ_USE_OPENVINO_MM', '0') # TODO sdnq openvino: this is too late as sdnq already initialized it @@ -69,8 +64,6 @@ def get_default_modes(cmd_opts, mem_stat): default_cross_attention, default_sdp_options, default_sdp_choices, - default_sdp_override_options, - default_sdp_override_choices, default_diffusers_offload_always, default_diffusers_offload_never, ) diff --git a/modules/shared_items.py b/modules/shared_items.py index ad37125db..75efe9dba 100644 --- a/modules/shared_items.py +++ b/modules/shared_items.py @@ -139,12 +139,17 @@ def refresh_te_list(): def list_crossattention(): return [ - "Disabled", - "Scaled-Dot-Product", - "xFormers", + 'Default', + 'Scaled-Dot-Product', + 'SDNQ attention', + 'xFormers', + 'Flex attention', + 'Flash attention', + 'Sage attention', + 'Dynamic attention', + 'Triton AMD Flash attention' ] - def get_pipelines(): from modules.logger import log """ diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 3d6f02a08..0ea9bd9db 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -63,7 +63,7 @@ def create_settings(cmd_opts): # Calculate default modes mem_stat = memory_stats() - startup_offload_mode, startup_offload_min_gpu, startup_offload_max_gpu, startup_cross_attention, startup_sdp_options, startup_sdp_choices, startup_sdp_override_options, startup_sdp_override_choices, startup_offload_always, startup_offload_never = get_default_modes(cmd_opts=cmd_opts, mem_stat=mem_stat) + startup_offload_mode, startup_offload_min_gpu, startup_offload_max_gpu, startup_cross_attention, startup_sdp_options, startup_sdp_choices, startup_offload_always, startup_offload_never = get_default_modes(cmd_opts=cmd_opts, mem_stat=mem_stat) # System variables gpu_memory = round(mem_stat['gpu']['total'] if "gpu" in mem_stat else 0) @@ -155,7 +155,7 @@ def create_settings(cmd_opts): "group_offload_type": OptionInfo("leaf_level", "Group offload type", gr.Radio, {"choices": ['leaf_level', 'block_level']}), "group_offload_stream": OptionInfo(False, "Prefetch with streams", gr.Checkbox), 'group_offload_record': OptionInfo(False, "Overlap stream transfers", gr.Checkbox), - 'group_offload_pin': OptionInfo(True, "Pin offload memory", gr.Checkbox), + 'group_offload_pin': OptionInfo(False, "Pin offload memory", gr.Checkbox), 'group_offload_blocks': OptionInfo(1, "Group offload blocks", gr.Number), "caption_offload_sep": OptionInfo("

Caption Model Offloading

", "", gr.HTML), "caption_offload": OptionInfo(True, "Offload caption models"), @@ -206,6 +206,7 @@ def create_settings(cmd_opts): "trt_quantization": OptionInfo([], "Quantization enabled", gr.CheckboxGroup, {"choices": ["Model"]}), "trt_quantization_type": OptionInfo("int8", "Quantization type", gr.Dropdown, {"choices": ["int8", "int4", "fp8", "nf4", "nvfp4"]}), })) + # --- VAE & Text Encoder --- options_templates.update(options_section(('vae_encoder', "Variational Auto Encoder"), { "sd_vae": OptionInfo("Automatic", "VAE model", gr.Dropdown, lambda: {"choices": shared_items.sd_vae_items()}, refresh=shared_items.refresh_vae_list), @@ -234,25 +235,18 @@ def create_settings(cmd_opts): })) # --- Compute Settings --- - options_templates.update(options_section(('cuda', "Compute Settings"), { - "math_sep": OptionInfo("

Execution Precision

", "", gr.HTML), - "precision": OptionInfo("Autocast", "Precision type", gr.Radio, {"choices": ["Autocast", "Full"], "visible": False}), - "cuda_dtype": OptionInfo("Auto", "Device precision type", gr.Radio, {"choices": ["Auto", "FP32", "FP16", "BF16"]}), - "force_dtype": OptionInfo(False, "Force dtype on load", None, None, None), - "no_half": OptionInfo(False, "Force full precision (--no-half)", None, None, None), - "upcast_sampling": OptionInfo(False if sys.platform != "darwin" else True, "Upcast sampling", gr.Checkbox, {"visible": False}), - - "generator_sep": OptionInfo("

Noise Options

", "", gr.HTML), - "diffusers_generator_device": OptionInfo("GPU", "Generator device", gr.Radio, {"choices": ["GPU", "CPU", "Unset"]}), - - "cross_attention_sep": OptionInfo("

Cross Attention

", "", gr.HTML), + options_templates.update(options_section(('cuda', "Cross Attention"), { "cross_attention_optimization": OptionInfo(startup_cross_attention, "Attention method", gr.Radio, lambda: {"choices": shared_items.list_crossattention()}), - "sdp_options": OptionInfo(startup_sdp_options, "SDP kernels", gr.CheckboxGroup, {"choices": startup_sdp_choices}), - "sdp_overrides": OptionInfo(startup_sdp_override_options, "SDP overrides", gr.CheckboxGroup, {"choices": startup_sdp_override_choices}), + # "sdp_overrides": OptionInfo(startup_sdp_override_options, "SDP overrides", gr.CheckboxGroup, {"choices": startup_sdp_override_choices}), + + "attention_slicing_sep": OptionInfo("

Attention Slicing

", "", gr.HTML), "attention_slicing": OptionInfo('Default', "Attention slicing", gr.Radio, {"choices": ['Default', 'Enabled', 'Disabled']}), "dynamic_attention_slice_rate": OptionInfo(0.5, "Dynamic Attention slicing rate", gr.Slider, {"minimum": 0.01, "maximum": max(gpu_memory,4), "step": 0.01}), "dynamic_attention_trigger_rate": OptionInfo(1, "Dynamic Attention trigger rate", gr.Slider, {"minimum": 0.01, "maximum": max(gpu_memory,4)*2, "step": 0.01}), + "sdp_attention_sep": OptionInfo("

SDP Attention

", "", gr.HTML), + "sdp_options": OptionInfo(startup_sdp_options, "SDP kernels", gr.CheckboxGroup, {"choices": startup_sdp_choices}), + "sdnq_attention_sep": OptionInfo("

SDNQ Attention

", "", gr.HTML), "sdnq_attention_smooth_k": OptionInfo(True, "SDNQ Attention use Smooth K", gr.Checkbox), "sdnq_attention_use_hadamard": OptionInfo(False, "SDNQ Attention use Hadamard", gr.Checkbox), @@ -275,16 +269,18 @@ def create_settings(cmd_opts): "hf_attention": OptionInfo('', "Attention dispatcher kernel", gr.Textbox), })) - # --- Server Settings --- - options_templates.update(options_section(('server', "Server Settings"), { - "server_listen": OptionInfo(False, "Listen on all interfaces", gr.Checkbox), - "server_status": OptionInfo(120, "Automatic server status monitor rate", gr.Number, {"minimum": 0, "maximum": 1000, "step": 1}), - "server_monitor": OptionInfo(0, "Automatic server memory monitor rate", gr.Number, {"minimum": 0, "maximum": 1000, "step": 1}), - "server_rate_limit": OptionInfo(300, "API base rate limit rate", gr.Number, {"minimum": 0, "maximum": 1000, "step": 1}), - })) - # --- Backend Settings --- - options_templates.update(options_section(('backends', "Backend Settings"), { + options_templates.update(options_section(('backends', "Compute Settings"), { + "math_sep": OptionInfo("

Execution Precision

", "", gr.HTML), + "precision": OptionInfo("Autocast", "Precision type", gr.Radio, {"choices": ["Autocast", "Full"], "visible": False}), + "cuda_dtype": OptionInfo("Auto", "Device precision type", gr.Radio, {"choices": ["Auto", "FP32", "FP16", "BF16"]}), + "force_dtype": OptionInfo(False, "Force dtype on load", None, None, None), + "no_half": OptionInfo(False, "Force full precision (--no-half)", None, None, None), + "upcast_sampling": OptionInfo(False if sys.platform != "darwin" else True, "Upcast sampling", gr.Checkbox, {"visible": False}), + + "generator_sep": OptionInfo("

Noise Options

", "", gr.HTML), + "diffusers_generator_device": OptionInfo("GPU", "Generator device", gr.Radio, {"choices": ["GPU", "CPU", "Unset"]}), + "other_sep": OptionInfo("

Torch Options

", "", gr.HTML), "opt_channelslast": OptionInfo(False, "Channels last "), "cudnn_deterministic": OptionInfo(False, "Deterministic mode"), @@ -305,7 +301,7 @@ def create_settings(cmd_opts): "onnx_execution_provider": OptionInfo(default_onnx_execution_provider, 'ONNX Execution Provider', gr.Dropdown, lambda: {"choices": default_onnx_execution_providers}), "onnx_cpu_fallback": OptionInfo(True, 'ONNX allow fallback to CPU'), "onnx_cache_converted": OptionInfo(True, 'ONNX cache converted models'), - "onnx_unload_base": OptionInfo(False, 'ONNX unload base model when processing refiner'), + "onnx_unload_base": OptionInfo(False, 'ONNX unload base model when processing refiner', gr.Checkbox, {"visible": False}), "olive_sep": OptionInfo("

Olive

", "", gr.HTML), "olive_float16": OptionInfo(True, 'Olive use FP16 on optimization'), @@ -324,8 +320,8 @@ def create_settings(cmd_opts): "openvino_disable_memory_cleanup": OptionInfo(True, "OpenVINO disable memory cleanup", gr.Checkbox, {"visible": cmd_opts.use_openvino}), })) - # --- Pipeline Modifiers --- - options_templates.update(options_section(('advanced', "Pipeline Modifiers"), { + # --- Compute Add-ons --- + options_templates.update(options_section(('advanced', "Compute Add-ons"), { "clip_skip_sep": OptionInfo("

CLiP Skip

", "", gr.HTML), "clip_skip_enabled": OptionInfo(False, "CLiP skip enabled"), @@ -430,6 +426,14 @@ def create_settings(cmd_opts): "pruna_pruners": OptionInfo([], "Pruna pruners", gr.CheckboxGroup, {"choices": ["kvpress", "padding_pruning", "token_merging", "torch_structured", "torch_unstructured"]}), })) + # --- Server Settings --- + options_templates.update(options_section(('server', "Server Settings"), { + "server_listen": OptionInfo(False, "Listen on all interfaces", gr.Checkbox), + "server_status": OptionInfo(120, "Automatic server status monitor rate", gr.Number, {"minimum": 0, "maximum": 1000, "step": 1}), + "server_monitor": OptionInfo(0, "Automatic server memory monitor rate", gr.Number, {"minimum": 0, "maximum": 1000, "step": 1}), + "server_rate_limit": OptionInfo(300, "API base rate limit rate", gr.Number, {"minimum": 0, "maximum": 1000, "step": 1}), + })) + # --- System Paths --- options_templates.update(options_section(('system-paths', "System Paths"), { "models_paths_sep_options": OptionInfo("

Models Paths

", "", gr.HTML), diff --git a/modules/ui_settings.py b/modules/ui_settings.py index c1f8938a7..216895788 100644 --- a/modules/ui_settings.py +++ b/modules/ui_settings.py @@ -268,7 +268,7 @@ def create_ui(disabled_tabs=None): item for item in shared.opts.data_labels.items() if item[1].section is not None and item[1].section[0] == section_id ] # find all items in this section - hidden = section_id is None or 'hidden' in section_id.lower() or 'hidden' in section_text.lower() + hidden = (section_id is None) or ('hidden' in section_id.lower()) or ('hidden' in section_text.lower()) or ('legacy' in section_id.lower()) or ('legacy' in section_text.lower()) # log.trace(f'Settings: section="{section_id}" title="{section_text}" items={len(items)} hidden={hidden}') if hidden: for (key, _item) in items: @@ -282,7 +282,7 @@ def create_ui(disabled_tabs=None): quicksettings_list.append((key, item)) components.append(dummy_component) else: - with gr.Row(elem_id=f"settings_section_row_{section_id}", elem_classes=["settings_section"]): # only so we can add dirty indicator at the start of the row + with gr.Row(elem_id=f"settings_section_row_{section_id}", elem_classes=["settings_section"]): component = create_setting_component(key) shared.settings_components[key] = component current_items.append(key) diff --git a/scripts/xyz/xyz_grid_classes.py b/scripts/xyz/xyz_grid_classes.py index f8ff5d05c..2dd9ed356 100644 --- a/scripts/xyz/xyz_grid_classes.py +++ b/scripts/xyz/xyz_grid_classes.py @@ -4,9 +4,7 @@ from scripts.xyz.xyz_grid_shared import ( # pylint: disable=no-name-in-module, u apply_task_args, apply_setting, apply_attention, - apply_attention_overrides, apply_attention_dispatcher, - list_sdp_overrides, save_attention, restore_attention, apply_prompt_primary, @@ -280,7 +278,6 @@ axis_options = [ AxisOption("[Quant] SDNQ quant mode", str, apply_sdnq_quant, cost=0.9, fmt=format_value_add_label, choices=lambda: ['none'] + sorted(shared_items.sdnq_quant_modes)), AxisOption("[Quant] SDNQ quant mode TE", str, apply_sdnq_quant_te, cost=0.9, fmt=format_value_add_label, choices=lambda: ['none'] + sorted(shared_items.sdnq_quant_modes)), AxisOption("[Attention] Method", str, apply_setting('cross_attention_optimization'), cost=0.2, choices=shared_items.list_crossattention), - AxisOption("[Attention] SDP override", str, apply_attention_overrides, cost=0.2, choices=list_sdp_overrides), AxisOption("[Attention] Dispatcher", str, apply_attention_dispatcher, cost=0.2, choices=lambda: ['None'] + attention.list_dispatcher_backends()), AxisOption("[Attention] SDNQ matmul", str, apply_attention('sdnq_attention_matmul_type'), cost=0.2, choices=lambda: list(shared_items.sdnq_matmul_modes)), AxisOption("[Attention] SDNQ PV matmul", str, apply_attention('sdnq_attention_pv_matmul_type'), cost=0.2, choices=lambda: list(shared_items.sdnq_matmul_modes)), diff --git a/scripts/xyz/xyz_grid_shared.py b/scripts/xyz/xyz_grid_shared.py index bb6deabdb..34e9d971f 100644 --- a/scripts/xyz/xyz_grid_shared.py +++ b/scripts/xyz/xyz_grid_shared.py @@ -87,13 +87,6 @@ def attention_options() -> list: return ['cross_attention_optimization', 'hf_attention', *attention.reapply_options()] -def list_sdp_overrides() -> list: - item = shared.opts.data_labels.get('sdp_overrides', None) - args = item.component_args if item is not None else None - args = args() if callable(args) else args - return ['None'] + list((args or {}).get('choices', None) or []) - - def apply_attention(field): def fun(p, x, xs): from modules import attention @@ -106,17 +99,6 @@ def apply_attention(field): return fun -def apply_attention_overrides(p, x, xs): - from modules import attention - labels = [label.strip() for label in str(x).split('+') if len(label.strip()) > 0 and label.strip().lower() != 'none'] - unknown = [label for label in labels if attention.registry.by_label(label) is None] - if len(unknown) > 0: - log.warning(f'XYZ grid apply attention: unknown overrides={unknown} available={attention.registry.labels()}') - shared.opts.data['sdp_overrides'] = labels - attention.reapply() - log.debug(f'XYZ grid apply attention: overrides={labels}') - - def apply_attention_dispatcher(p, x, xs): from modules import attention value = '' if str(x).strip().lower() in ['none', 'default'] else str(x).strip() diff --git a/test/test-attention-router.py b/test/test-attention-router.py index 0bf20e3c0..f51b4898c 100644 --- a/test/test-attention-router.py +++ b/test/test-attention-router.py @@ -110,17 +110,17 @@ def run_test(cat: str, fn): # devices.set_sdpa_params applied the hijacks in this order; each wrapped the previous, so the # last applied was tried first. Dynamic replaced the chain end instead of wrapping it; flex did # too, which left everything stacked before it unreachable, so it is an ordinary entry now. -OLD_ORDER = ['Dynamic attention', 'Flex attention', 'Triton Flash attention', 'Flash attention', 'Sage attention', 'SDNQ attention'] +OLD_ORDER = ['Dynamic attention', 'Flex attention', 'Triton AMD Flash attention', 'Flash attention', 'Sage attention', 'SDNQ attention'] OLD_TERMINALS = {'Dynamic attention'} OLD_NAMES = { 'Dynamic attention': 'dynamic', 'Flex attention': 'flex', - 'Triton Flash attention': 'triton', + 'Triton AMD Flash attention': 'triton', 'Flash attention': 'flash', 'Sage attention': 'sage', 'SDNQ attention': 'sdnq', } -# mirrors shared_defaults.get_default_modes: five choices everywhere, Triton Flash attention added on rocm and zluda +# mirrors shared_defaults.get_default_modes: five choices everywhere, Triton AMD Flash attention added on rocm and zluda CHOICES = OLD_ORDER TRITON_PLATFORMS = {'rocm', 'zluda'} @@ -137,7 +137,7 @@ GATES = { def oracle_chain(labels, platform_backend): enabled = [label for label in OLD_ORDER if label in labels] if platform_backend not in TRITON_PLATFORMS: - enabled = [label for label in enabled if label != 'Triton Flash attention'] + enabled = [label for label in enabled if label != 'Triton AMD Flash attention'] terminal = None entries = [] for label in enabled: @@ -465,7 +465,7 @@ def test_attention_slicing_follows_the_choice(): saved = {key: shared.opts.data.get(key, None) for key in ['attention_slicing', 'cross_attention_optimization']} try: - shared.opts.data['cross_attention_optimization'] = 'Disabled' # the branch under test is the only one that should act + shared.opts.data['cross_attention_optimization'] = 'Default' # the branch under test is the only one that should act for choice, expected in [('Default', []), ('Enabled', ['enable']), ('Disabled', ['disable'])]: shared.opts.data['attention_slicing'] = choice pipe = Pipe() @@ -533,7 +533,7 @@ def test_escape_hatch_bypasses_the_router(): def test_reapply_options_cover_declared_backend_options(): from modules import shared names = attention.reapply_options() - assert names[:2] == ['sdp_options', 'sdp_overrides'], names + assert names[:2] == ['sdp_options'], names declared = attention.registry.options() assert set(declared) <= set(names), (declared, names) assert attention.registry.backends['sdnq'].options and set(attention.registry.backends['sdnq'].options) <= set(declared) diff --git a/test/test-xyz-attention.py b/test/test-xyz-attention.py index 3a16754f2..2f3f65914 100644 --- a/test/test-xyz-attention.py +++ b/test/test-xyz-attention.py @@ -93,7 +93,7 @@ def sample_value(axis): """A value the axis accepts that is not the current one, avoiding backends whose prepare installs a package.""" if axis.choices is None: return int(shared.opts.get(option_of(axis) or 'sparse_attention_budget') or 0) + 5 - choices = [choice for choice in axis.choices() if choice not in ['Sage attention', 'Flash attention', 'Triton Flash attention']] + choices = [choice for choice in axis.choices() if choice not in ['Sage attention', 'Flash attention', 'Triton AMD Flash attention']] current = str(shared.opts.get(option_of(axis)) if option_of(axis) else '') return next((choice for choice in choices if str(choice) != current), choices[0]) @@ -162,32 +162,6 @@ def test_bool_axes_coerce_the_string_the_dropdown_sends(): return True -def test_override_axis_parses_labels(): - saved = xyz.save_attention() - try: - xyz.apply_attention_overrides(None, 'None', []) - assert shared.opts.data['sdp_overrides'] == [], shared.opts.data['sdp_overrides'] - xyz.apply_attention_overrides(None, 'Flex attention', []) - assert shared.opts.data['sdp_overrides'] == ['Flex attention'], shared.opts.data['sdp_overrides'] - xyz.apply_attention_overrides(None, 'Flex attention+SDNQ attention', []) - assert shared.opts.data['sdp_overrides'] == ['Flex attention', 'SDNQ attention'], shared.opts.data['sdp_overrides'] - finally: - xyz.restore_attention(saved) - return True - - -def test_override_axis_rebuilds_the_chain(): - saved = xyz.save_attention() - try: - xyz.apply_attention_overrides(None, 'Flex attention', []) - assert 'flex' in attention.get_plan().chain(), attention.get_plan().chain() - xyz.apply_attention_overrides(None, 'None', []) - assert 'flex' not in attention.get_plan().chain(), attention.get_plan().chain() - finally: - xyz.restore_attention(saved) - return True - - def test_dispatcher_axis_clears_on_none(): saved = xyz.save_attention() try: @@ -224,8 +198,6 @@ def run_all(): for fn in [ test_axes_write_and_restore_exactly, test_bool_axes_coerce_the_string_the_dropdown_sends, - test_override_axis_parses_labels, - test_override_axis_rebuilds_the_chain, test_dispatcher_axis_clears_on_none, test_restore_set_covers_every_attention_setting, ]: diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 07665ddb2..4e84f1f34 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -1465,7 +1465,7 @@ {"id":"","label":"Sections","localized":"","hint":"","ui":"video"}, {"id":"","label":"Samplers","localized":"","hint":"Samplers/schedulers advanced settings","ui":"tab_txt2img"}, {"id":"","label":"SDP kernels","localized":"","hint":"Which of torch's built-in attention kernels torch is allowed to choose from. These are permissions rather than a selection: torch picks one per call from whatever is left enabled, preferring Flash, dropping to Memory for calls flash cannot serve such as those carrying an arbitrary attention mask, and to Math when neither fits. Clearing a box removes a candidate; it never pins the remaining one to every call.

Flash is torch's own build of the FlashAttention kernel. It is not the same thing as the Flash attention entry in SDP overrides, which calls the separately installed flash-attn package and bypasses torch entirely.
Memory is the memory-efficient kernel, which accepts arbitrary masks that flash does not.
Math is the unfused reference path, the widest in what it accepts and the least optimized. Leaving it enabled keeps a fallback for calls the other two decline.

Applies while Attention method is Scaled-Dot-Product, and continues to govern the calls that an enabled override declines.

All three by default. ZLUDA starts with Math alone.","ui":"settings_cuda"}, - {"id":"","label":"SDP overrides","localized":"","hint":"Replaces torch attention with another implementation. Each entry declares the shapes, dtypes and mask conditions it can serve; a call that fails them moves to the next entry and finally back to torch, so several can be enabled together and the chain resolves per call.

Flash attention installs and calls the flash-attn package directly, for calls with no attention mask, half precision inputs and a head dimension of 128 or less.
Sage attention computes attention with quantized matmuls, for head dimensions of 64, 96 or 128 and no attention mask.
SDNQ attention is SD.Next's own quantized Triton kernel, configured in the section below. It takes attention masks, which the other quantized backends do not, and it is one of the two backends Sparse Attention can drive.
Flex attention uses torch's compiled flex_attention, the other backend Sparse Attention can drive.
Dynamic attention slices attention to fit available memory and serves every call the others decline, standing in for the torch fallback.
Triton Flash attention is a Triton implementation for ROCm and ZLUDA, listed only on those backends.

The quantized and compiled backends trade some numerical accuracy for throughput. How much of each arrives depends on the model, the sequence length and the GPU, so comparing them on the actual workload settles it faster than picking by reputation.

None by default on CUDA. ZLUDA, CPU and MPS start with Dynamic attention, as do ROCm GPUs older than RDNA3.","ui":"settings_cuda"}, + {"id":"","label":"SDP overrides","localized":"","hint":"Replaces torch attention with another implementation. Each entry declares the shapes, dtypes and mask conditions it can serve; a call that fails them moves to the next entry and finally back to torch, so several can be enabled together and the chain resolves per call.

Flash attention installs and calls the flash-attn package directly, for calls with no attention mask, half precision inputs and a head dimension of 128 or less.
Sage attention computes attention with quantized matmuls, for head dimensions of 64, 96 or 128 and no attention mask.
SDNQ attention is SD.Next's own quantized Triton kernel, configured in the section below. It takes attention masks, which the other quantized backends do not, and it is one of the two backends Sparse Attention can drive.
Flex attention uses torch's compiled flex_attention, the other backend Sparse Attention can drive.
Dynamic attention slices attention to fit available memory and serves every call the others decline, standing in for the torch fallback.
Triton AMD Flash attention is a Triton implementation for ROCm and ZLUDA, listed only on those backends.

The quantized and compiled backends trade some numerical accuracy for throughput. How much of each arrives depends on the model, the sequence length and the GPU, so comparing them on the actual workload settles it faster than picking by reputation.

None by default on CUDA. ZLUDA, CPU and MPS start with Dynamic attention, as do ROCm GPUs older than RDNA3.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention","localized":"","hint":"Settings for the SDNQ attention entry in SDP overrides. They do nothing until that override is enabled.

The kernel quantizes the two matmuls inside attention, computing them on lower precision operands and rescaling the result. It is written in Triton, so it needs a working Triton for the active device.
It takes an attention mask and a block mask together, which is what lets Sparse Attention use it.
Short sequences and single-head calls are left to the rest of the chain, so text encoders and the VAE keep ordinary attention.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention use Smooth K","localized":"","hint":"Subtracts the mean of the keys before quantizing them. Keys carry a large offset that is shared across the sequence, which spends most of the quantized range representing a value identical for every key and leaves little of it for the differences that decide the attention.
Softmax ignores a constant shift applied to every score in a row, so removing that offset changes the quantization error and not the attention.

Costs one mean and one subtraction per call.
Enabled by default.","ui":"settings_cuda"}, {"id":"","label":"SDNQ Attention use Hadamard","localized":"","hint":"Rotates queries and keys by a Hadamard transform before quantizing them. The rotation spreads a few oversized channels across all of them, which is the error shape quantization handles worst. The transform is orthogonal, so the scores it produces are the ones the unrotated tensors would produce, minus the quantization error it removes.
With SDNQ Attention PV MatMul type also set, the values are rotated as well and the output is rotated back.

Costs a rotation pass on every attention call, so it is worth enabling where a model shows quantization artifacts without it.
Idle while SDNQ Attention MatMul type is disabled, since nothing is quantized then.

Disabled by default.","ui":"settings_cuda"}, From 34a3155f965169cee720c4d799fa098f1c00dccd Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 29 Aug 2026 14:12:01 +0200 Subject: [PATCH 086/270] work on convert-to-modular Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + TODO.md | 4 +-- modules/modular.py | 44 +++++++++++---------------------- modules/modular_guiders.py | 4 ++- modules/processing_diffusers.py | 8 +++--- modules/processing_prompt.py | 5 +++- modules/ui_guidance.py | 8 +++--- scripts/xyz/xyz_grid_classes.py | 1 - 8 files changed, 32 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09ac15643..e2fcfe1b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ - **Attention** - *TODO*: see [Attention docs](https://vladmandic.github.io/sdnext-docs/Attention) for details and usage instructions *note*: attention now has its own settings section in *settings -> cross attention* + *note*: this is a breaking change - if you had custom attention settings in previous releases, you will need to re-apply them in the new settings section - new `sparse-attention` method that can be combined with other attention methods to reduce memory usage and improve performance on large models - **Internal** diff --git a/TODO.md b/TODO.md index a12d3234c..8ed48d892 100644 --- a/TODO.md +++ b/TODO.md @@ -9,6 +9,7 @@ - Inpaint: https://discord.com/channels/1101998836328697867/1130536562422186044/1506850651035144322, @vladmandic - Control tab verify overrides handling, @vladmandic - LTX: Create pre-quant for LTX-2.5 +- Modular guiders ## Features @@ -51,11 +52,8 @@ ### Modular -*Pending finalization of modular pipelines implementation and development of compatibility layer* - - Switch to modular pipelines - Feature: Transformers unified cache handler -- Refactor: [Modular pipelines and guiders](https://github.com/huggingface/diffusers/issues/11915) - [MagCache](https://github.com/huggingface/diffusers/pull/12744) - [SmoothCache](https://github.com/huggingface/diffusers/issues/11135) - [STG](https://github.com/huggingface/diffusers/blob/main/examples/community/README.md#spatiotemporal-skip-guidance) diff --git a/modules/modular.py b/modules/modular.py index c4c8d3ebf..193ac76da 100644 --- a/modules/modular.py +++ b/modules/modular.py @@ -1,27 +1,26 @@ -import time +import os import diffusers from modules import shared from modules.logger import log -modular_map= { - 'StableDiffusionXLPipeline': 'StableDiffusionXLAutoBlocks', - 'StableDiffusionXLImg2ImgPipeline': 'StableDiffusionXLAutoBlocks', - 'StableDiffusionXLInpaintPipeline': 'StableDiffusionXLAutoBlocks', - 'FluxPipeline': 'FluxAutoBlocks', - 'FluxImg2ImgPipeline': 'FluxAutoBlocks', - 'FluxInpaintPipeline': 'FluxAutoBlocks', - 'WanPipeline': 'WanAutoBlocks', - 'WanImageToVideoPipeline': 'WanAutoBlocks', - 'QwenImagePipeline': 'QwenImageAutoBlocks', - 'QwenImageEditPipeline': 'QwenImageEditAutoBlocks', -} +debug = os.environ.get('SD_MODULAR_DEBUG', None) is not None + + +def get_modular_class_name(diffusion_pipeline: diffusers.DiffusionPipeline) -> str: + name = diffusion_pipeline.__class__.__name__ + name = name.replace('Pipeline', '').replace('Img2Img', '').replace('Inpaint', '').replace('ImageToVideo', '') + name = f'{name}AutoBlocks' + modular_cls = getattr(diffusers, name, None) + if debug: + log.trace(f'Modular lookup: key={name} source={diffusion_pipeline.__class__.__name__} target={modular_cls.__name__ if modular_cls else None}') + return modular_cls def is_compatible(diffusion_pipeline: diffusers.DiffusionPipeline) -> bool: if not shared.opts.model_modular_enable: return False - compatible = diffusion_pipeline.__class__.__name__ in modular_map + compatible = get_modular_class_name(diffusion_pipeline) is not None if not compatible: log.debug(f'Modular: source={diffusion_pipeline.__class__.__name__} incompatible pipeline') return compatible @@ -35,28 +34,15 @@ def is_guider(diffusion_pipeline: diffusers.DiffusionPipeline) -> bool: def convert_to_modular(diffusion_pipeline: diffusers.DiffusionPipeline) -> diffusers.ModularPipeline: modular_pipe = None try: - t0 = time.time() - modular_cls = modular_map.get(diffusion_pipeline.__class__.__name__, None) + modular_cls = get_modular_class_name(diffusion_pipeline) if modular_cls is None: raise ValueError(f'unknown: cls={diffusion_pipeline.__class__.__name__}') - modular_cls = getattr(diffusers, modular_cls, None) - if modular_cls is None: - raise ValueError(f'invalid: cls={diffusion_pipeline.__class__.__name__}') modular_blocks = modular_cls() modular_pipe = modular_blocks.init_pipeline() components_dct = {k: v for k, v in diffusion_pipeline.components.items() if v is not None} modular_pipe.update_components(**components_dct, **diffusion_pipeline.parameters) modular_pipe.original_pipe = diffusion_pipeline - t1 = time.time() - log.debug(f'Modular: source={diffusion_pipeline.__class__.__name__} target={modular_pipe.__class__.__name__} time={t1 - t0:.2f}') - """ - for expected_input_param in modular_pipe.blocks.inputs: - name = expected_input_param.name - default = expected_input_param.default - kwargs_type = expected_input_param.kwargs_type - log.trace(f'Modular input: name={name} type={kwargs_type} default={default}') - """ - + log.debug(f'Modular convert: source={diffusion_pipeline.__class__.__name__} target={modular_pipe.__class__.__name__}') except Exception as e: log.error(f'Modular: {e}') raise e diff --git a/modules/modular_guiders.py b/modules/modular_guiders.py index 00e45f83b..b39e26f70 100644 --- a/modules/modular_guiders.py +++ b/modules/modular_guiders.py @@ -61,7 +61,7 @@ def set_guider(p: processing.StableDiffusionProcessing): guider_cls = guider_info['cls'] guider_args = {} for k, v in base_args.items(): - if v is not None and v >= 0.0: + if isinstance(v, float): guider_args[k] = v log.warning('Guiders: partially implemented') # TODO: guiders for k, v in guider_info['args'].items(): @@ -94,3 +94,5 @@ def set_guider(p: processing.StableDiffusionProcessing): except Exception as e: log.error(f'Guider: name={guidance_name} cls={guider_cls.__name__} args={guider_args} {e}') return + else: + log.warning(f'Guider: name={guidance_name} cls=None args={guider_args}') diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index b8ae288b0..9ff88d4d1 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -469,9 +469,11 @@ def process_decode(p: processing.StableDiffusionProcessing, output): if not hasattr(output, 'images') and hasattr(output, 'frames'): log.debug(f'Generated: frames={len(output.frames[0])}') output.images = output.frames[0] - if getattr(p, 'video_still', False) and hasattr(output, 'images') and output.images is not None: + if hasattr(output, 'latents') and hasattr(output, 'images') and (output.images is None): + output.images = output.latents # modular pipelines may return latents instead of images + if getattr(p, 'video_still', False) and hasattr(output, 'images') and (output.images is not None): output.images = output.images[:1] # only the first frame derives from real latents; the rest decode from padding - if output.images is not None and len(output.images) > 0 and isinstance(output.images[0], Image.Image): + if (output.images is not None) and (len(output.images) > 0) and isinstance(output.images[0], Image.Image): sd_models.offload_ondemand(shared.sd_model) # in-pipe decode paths return materialized frames; the vae seam in processing_vae never runs return attach_audio(output.images, audio) model = shared.sd_model if not is_refiner_enabled(p) else shared.sd_refiner @@ -622,7 +624,7 @@ def process_diffusers(p: processing.StableDiffusionProcessing): images = shared.history.last_latent output = SimpleNamespace(images=images) if images is not None else None - if (output is None or (hasattr(output, 'images') and len(output.images) == 0)) and has_images: + if (output is None or (hasattr(output, 'images') and (output.images is None or len(output.images) == 0))) and has_images: if output is not None: log.debug('Processing: using input as base output') output.images = p.init_images diff --git a/modules/processing_prompt.py b/modules/processing_prompt.py index cab96ce23..6eac4a8bf 100644 --- a/modules/processing_prompt.py +++ b/modules/processing_prompt.py @@ -3,7 +3,7 @@ from __future__ import annotations import os from typing import TYPE_CHECKING import torch -from modules import shared, errors, timer, prompt_parser_diffusers +from modules import shared, errors, timer, prompt_parser_diffusers, processing_helpers from modules.logger import log if TYPE_CHECKING: @@ -189,6 +189,9 @@ def set_prompt(p: StableDiffusionProcessing, args = set_fallback_prompt(args, possible, prompts=prompts, negative_prompts=negative_prompts, prompts_2=None, negative_prompts_2=None) prompt_attention = 'fixed' + if processing_helpers.is_modular(): + return prompt_attention, args + if 'prompt_embeds' not in args and 'negative_prompt_embeds' not in args: # pass secondary prompts as-in args = set_fallback_prompt(args, possible, prompts=None, negative_prompts=None, prompts_2=prompts_2, negative_prompts_2=negative_prompts_2) diff --git a/modules/ui_guidance.py b/modules/ui_guidance.py index c451d2863..d9d7670d3 100644 --- a/modules/ui_guidance.py +++ b/modules/ui_guidance.py @@ -1,9 +1,7 @@ import gradio as gr from modules import shared from modules import ui_symbols, ui_components - - -guiders = ['Default', 'CFG', 'Zero', 'PAG', 'APG', 'SLG', 'SEG', 'TCFG', 'FDG'] +from modules.modular_guiders import guiders def create_guidance_inputs(tab): @@ -11,7 +9,7 @@ def create_guidance_inputs(tab): with gr.Group(): with gr.Row(elem_id=f"{tab}_guider_row", elem_classes=['flexbox'], visible=shared.opts.model_modular_enable): - guidance_name = gr.Dropdown(choices=guiders, value='Default', label='Guider', elem_id=f"{tab}_guider") + guidance_name = gr.Dropdown(choices=guiders.keys(), value='Default', label='Guider', elem_id=f"{tab}_guider") guidance_btn = ui_components.ToolButton(value=ui_symbols.book, elem_id=f"{tab}_guider_docs") guidance_btn.click(fn=None, _js='getGuidanceDocs', inputs=[guidance_name], outputs=[]) with gr.Row(visible=shared.opts.model_modular_enable): @@ -123,6 +121,6 @@ def create_guidance_inputs(tab): cfg_true = gr.Slider(minimum=-1.0, maximum=30.0, step=0.05, label='Attention guidance', value=-1.0, elem_id=f"{tab}_cfg_true") cfg_adaptive = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='Adaptive scaling', value=0.5, elem_id=f"{tab}_cfg_adaptive") - _modular_args = guidance_args + lsc_args + guidance_auto_args + guidance_zero_args + guidance_pag_args + guidance_apg_args + guidance_slg_args + guidance_seg_args + guidance_fdg_args + _modular_args = guidance_args + lsc_args + guidance_auto_args + guidance_zero_args + guidance_pag_args + guidance_apg_args + guidance_slg_args + guidance_seg_args + guidance_fdg_args # TODO modular: guidance args are not implemented standard_args = [cfg_scale, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end] return guidance_args + standard_args diff --git a/scripts/xyz/xyz_grid_classes.py b/scripts/xyz/xyz_grid_classes.py index 2dd9ed356..655fc6dfb 100644 --- a/scripts/xyz/xyz_grid_classes.py +++ b/scripts/xyz/xyz_grid_classes.py @@ -264,7 +264,6 @@ axis_options = [ AxisOption("[Guidance] End", float, apply_field("cfg_end")), AxisOption("[Guidance] Image scale", float, apply_field("cfg_image")), AxisOption("[Guidance] Rescale", float, apply_field("cfg_rescale")), - AxisOption("[Guidance] Modular name", str, apply_guidance, choices=lambda: ['Default', 'CFG', 'Auto', 'Zero', 'PAG', 'APG', 'SLG', 'SEG', 'TCFG', 'FDG']), AxisOption("[Refine] Upscaler", str, apply_field("hr_upscaler"), cost=0.3, choices=lambda: [x.name for x in shared.sd_upscalers]), AxisOption("[Refine] Sampler", str, apply_hr_sampler_name, fmt=format_value_add_label, confirm=confirm_samplers, choices=lambda: [x.name for x in sd_samplers.visible_samplers()]), AxisOption("[Refine] Denoising strength", float, apply_field("denoising_strength")), From a0dceebd573fe28d754ef5e2ba1eb26f78ffc292 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 29 Aug 2026 15:33:47 +0200 Subject: [PATCH 087/270] proto modular guiders Signed-off-by: Vladimir Mandic --- modules/modular.py | 4 ++- modules/modular_guiders.py | 61 ++++++++++++++++++++++---------------- modules/ui_guidance.py | 45 ++++++++++++++++++++-------- 3 files changed, 71 insertions(+), 39 deletions(-) diff --git a/modules/modular.py b/modules/modular.py index 193ac76da..32a35d1a8 100644 --- a/modules/modular.py +++ b/modules/modular.py @@ -1,6 +1,6 @@ import os import diffusers -from modules import shared +from modules import shared, sd_hijack_modular from modules.logger import log @@ -46,6 +46,8 @@ def convert_to_modular(diffusion_pipeline: diffusers.DiffusionPipeline) -> diffu except Exception as e: log.error(f'Modular: {e}') raise e + sd_hijack_modular.install_state_hook(modular_pipe) + sd_hijack_modular.register_callbacks(modular_pipe) return modular_pipe diff --git a/modules/modular_guiders.py b/modules/modular_guiders.py index b39e26f70..5ce8442e0 100644 --- a/modules/modular_guiders.py +++ b/modules/modular_guiders.py @@ -1,27 +1,21 @@ +import inspect import diffusers -from modules import shared, errors, processing +from modules import errors, shared, processing from modules.logger import log -# ['Default', 'CFG', 'Zero', 'PAG', 'APG', 'SLG', 'SEG', 'TCFG', 'FDG'] guiders = { # 'None': { 'cls': None, 'args': {}, }, 'Default': { 'cls': None, 'args': {}, }, 'CFG: ClassifierFreeGuidance': { 'cls': diffusers.ClassifierFreeGuidance, 'args': {} }, - 'Auto: AutoGuidance': { 'cls': diffusers.AutoGuidance, 'args': { 'dropout': 1.0, 'auto_guidance_layers': [7, 8, 9], 'auto_guidance_config': None } }, - 'Zero: ClassifierFreeZeroStar': { 'cls': diffusers.ClassifierFreeZeroStarGuidance, 'args': { 'zero_init_steps': 1 } }, - 'PAG: PerturbedAttentionGuidance': { 'cls': diffusers.PerturbedAttentionGuidance, 'args': { 'perturbed_guidance_scale': 2.8, 'perturbed_guidance_start': 0.01, 'perturbed_guidance_stop': 0.2, 'perturbed_guidance_layers': [7, 8, 9], 'perturbed_guidance_config': None } }, - 'APG: AdaptiveProjectedGuidance': { 'cls': diffusers.AdaptiveProjectedGuidance, 'args': { 'adaptive_projected_guidance_momentum': -1, 'adaptive_projected_guidance_rescale': 15.0 } }, - 'SLG: SkipLayerGuidance': { 'cls': diffusers.SkipLayerGuidance, 'args': { 'skip_layer_guidance_scale': 2.8, 'skip_layer_guidance_start': 0.01, 'skip_layer_guidance_stop': 0.2, 'skip_layer_guidance_layers': [7, 8, 9], 'skip_layer_config': None } }, - 'SEG: SmoothedEnergyGuidance': { 'cls': diffusers.SmoothedEnergyGuidance, 'args': { 'seg_guidance_scale': 3.0, 'seg_blur_sigma': 9999999.0, 'seg_blur_threshold_inf': 9999.0, 'seg_guidance_start': 0.0, 'seg_guidance_stop': 1.0, 'seg_guidance_layers': [7, 8, 9], 'seg_guidance_config': None } }, + 'Auto: AutoGuidance': { 'cls': diffusers.AutoGuidance, 'args': {} }, + 'Zero: ClassifierFreeZeroStar': { 'cls': diffusers.ClassifierFreeZeroStarGuidance, 'args': {} }, + 'PAG: PerturbedAttentionGuidance': { 'cls': diffusers.PerturbedAttentionGuidance, 'args': {} }, + 'APG: AdaptiveProjectedGuidance': { 'cls': diffusers.AdaptiveProjectedGuidance, 'args': {} }, + 'SLG: SkipLayerGuidance': { 'cls': diffusers.SkipLayerGuidance, 'args': {} }, + 'SEG: SmoothedEnergyGuidance': { 'cls': diffusers.SmoothedEnergyGuidance, 'args': {} }, 'TCFG: TangentialClassifierFreeGuidance': { 'cls': diffusers.TangentialClassifierFreeGuidance, 'args': {} }, - 'FDG: FrequencyDecoupledGuidance': { 'cls': diffusers.FrequencyDecoupledGuidance, 'args': { 'guidance_scales': [10.0, 5.0], 'parallel_weights': 1.0, 'guidance_rescale_space': "data" } }, -} -base_args = { - 'guidance_scale': 6.0, - 'guidance_rescale': 0.0, - 'start': 0.0, - 'stop': 1.0, + 'FDG: FrequencyDecoupledGuidance': { 'cls': diffusers.FrequencyDecoupledGuidance, 'args': {} }, } @@ -50,20 +44,35 @@ def set_guider(p: processing.StableDiffusionProcessing): guider_args = {k: v for k, v in guider_info.config.items() if not k.startswith('_') and v is not None} else: guider_args = {} - log.info(f'Guider: name={guidance_name} cls={guider_cls.__name__ if guider_cls is not None else None} args={guider_args}') + log.info(f'Guider: name="{guidance_name}" cls={guider_cls.__name__ if guider_cls is not None else None} args={guider_args}') return if guidance_name == 'None': shared.sd_model.update_components(guider=None) # breaks the pipeline - log.info(f'Guider: name={guidance_name}') + log.info(f'Guider: name="{guidance_name}"') return guider_info = guiders[guidance_name] guider_cls = guider_info['cls'] + guider_args = {} - for k, v in base_args.items(): - if isinstance(v, float): - guider_args[k] = v - log.warning('Guiders: partially implemented') # TODO: guiders + possible = list(inspect.signature(guider_cls.__init__).parameters) if guider_cls is not None else [] + if p.guidance_scale >= 0.0 and 'guidance_scale' in possible: + guider_args['guidance_scale'] = float(p.guidance_scale) + if p.guidance_rescale >= 0.0 and 'guidance_rescale' in possible: + guider_args['guidance_rescale'] = float(p.guidance_rescale) + if p.guidance_start >= 0.0 and 'start' in possible: + guider_args['start'] = float(p.guidance_start) + if p.guidance_stop >= 0.0 and 'stop' in possible: + guider_args['stop'] = float(p.guidance_stop) + + """ + import modules.ui_guidance + for k, v in modules.ui_guidance.get_modular_args().items(): + log.trace(f'Guiders: arg={k} value={v}') + """ + + log.warning('Guiders: advanced parameters are not yet implemented') # TODO: guiders + """ for k, v in guider_info['args'].items(): try: if k is None: @@ -86,13 +95,15 @@ def set_guider(p: processing.StableDiffusionProcessing): log.error(f'Guiders: arg={k} value={v} error={e}') errors.display(e, 'Guiders') # guider_args.update(guider_info['args']) + """ if guider_cls is not None: try: - guider_instance = guider_cls(**guider_args) - log.info(f'Guider: name={guidance_name} cls={guider_cls.__name__} args={guider_args}') + guider_instance: diffusers.BaseGuidance = guider_cls(**guider_args) + log.info(f'Guider: name="{guidance_name}" cls={guider_cls.__name__} args={guider_args}') shared.sd_model.update_components(guider=guider_instance) except Exception as e: - log.error(f'Guider: name={guidance_name} cls={guider_cls.__name__} args={guider_args} {e}') + log.error(f'Guider: name="{guidance_name}" cls={guider_cls.__name__} args={guider_args} {e}') + errors.display(e, 'Guiders') return else: - log.warning(f'Guider: name={guidance_name} cls=None args={guider_args}') + log.warning(f'Guider: name="{guidance_name}" cls=None args={guider_args}') diff --git a/modules/ui_guidance.py b/modules/ui_guidance.py index d9d7670d3..4fffb1e2a 100644 --- a/modules/ui_guidance.py +++ b/modules/ui_guidance.py @@ -1,23 +1,34 @@ +from functools import partial import gradio as gr from modules import shared from modules import ui_symbols, ui_components from modules.modular_guiders import guiders +_stored_args = {} + + +def get_modular_args(): + return _stored_args + + def create_guidance_inputs(tab): with gr.Accordion(open=False, label='Guidance', elem_id=f"{tab}_guidance", elem_classes=["small-accordion"]): with gr.Group(): with gr.Row(elem_id=f"{tab}_guider_row", elem_classes=['flexbox'], visible=shared.opts.model_modular_enable): guidance_name = gr.Dropdown(choices=guiders.keys(), value='Default', label='Guider', elem_id=f"{tab}_guider") - guidance_btn = ui_components.ToolButton(value=ui_symbols.book, elem_id=f"{tab}_guider_docs") + guidance_btn = ui_components.ToolButton(value=ui_symbols.info, elem_id=f"{tab}_guider_docs") guidance_btn.click(fn=None, _js='getGuidanceDocs', inputs=[guidance_name], outputs=[]) - with gr.Row(visible=shared.opts.model_modular_enable): - guidance_scale = gr.Slider(minimum=-1.0, maximum=30.0, step=0.1, label='_Guidance scale', value=-1.0, elem_id=f"{tab}_guidance_scale") - guidance_rescale = gr.Slider(minimum=-1.0, maximum=1.0, step=0.05, label='_Guidance rescale', value=-1.0, elem_id=f"{tab}_guidance_rescale") - with gr.Row(visible=shared.opts.model_modular_enable): - guidance_start = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='_Guidance start', value=0.0, elem_id=f"{tab}_guidance_start") - guidance_stop = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='_Guidance stop', value=1.0, elem_id=f"{tab}_guidance_stop") + + base_group = gr.Group(visible=False) # default inherits from model + with base_group: + with gr.Row(visible=shared.opts.model_modular_enable): + guidance_scale = gr.Slider(minimum=-1.0, maximum=30.0, step=0.1, label='Guidance scale', value=-1.0, elem_id=f"{tab}_guidance_scale") + guidance_rescale = gr.Slider(minimum=-1.0, maximum=1.0, step=0.05, label='Guidance rescale', value=-1.0, elem_id=f"{tab}_guidance_rescale") + with gr.Row(visible=shared.opts.model_modular_enable): + guidance_start = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='Guidance start', value=0.0, elem_id=f"{tab}_guidance_start") + guidance_stop = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='Guidance stop', value=1.0, elem_id=f"{tab}_guidance_stop") guidance_args = [guidance_name, guidance_scale, guidance_rescale, guidance_start, guidance_stop] lsc_group = gr.Accordion(open=False, label='Layer skip guidance', elem_classes=["small-accordion"], visible=shared.opts.model_modular_enable) @@ -25,7 +36,7 @@ def create_guidance_inputs(tab): with gr.Row(): guidance_lsc_enabled = gr.Checkbox(label='Enable LayerSkipConfig', value=False) guidance_lsc_label = gr.Label(value='LSC: LayerSkipConfig', elem_id=f"{tab}_lsc_label", visible=False) - guidance_lsc_btn = ui_components.ToolButton(value=ui_symbols.book, elem_id=f"{tab}_lsc_docs", elem_classes=["guidance-docs"]) + guidance_lsc_btn = ui_components.ToolButton(value=ui_symbols.info, elem_id=f"{tab}_lsc_docs", elem_classes=["guidance-docs"]) guidance_lsc_btn.click(fn=None, _js='getGuidanceDocs', inputs=[guidance_lsc_label], outputs=[]) with gr.Row(): guidance_lsc_indices = gr.Textbox(label='LSC layer indices', value='1, 2, 3', placeholder='Comma-separated layer indices to skip') @@ -99,6 +110,7 @@ def create_guidance_inputs(tab): def adv_visibility(guidance_name): return [ + gr.update(visible=guidance_name != 'Default' and guidance_name != 'None'), gr.update(visible=guidance_name.startswith('Auto')), gr.update(visible=guidance_name.startswith('Zero')), gr.update(visible=guidance_name.startswith('PAG')), @@ -108,19 +120,26 @@ def create_guidance_inputs(tab): gr.update(visible=guidance_name.startswith('TCFG')), gr.update(visible=guidance_name.startswith('FDG')), ] - guidance_name.change(fn=adv_visibility, inputs=[guidance_name], outputs=[auto_group, zero_group, pag_group, apg_group, slg_group, seg_group, tcfg_group, fdg_group]) + guidance_name.change(fn=adv_visibility, inputs=[guidance_name], outputs=[base_group, auto_group, zero_group, pag_group, apg_group, slg_group, seg_group, tcfg_group, fdg_group]) - gr.HTML(value='

Fallback guidance

', visible=shared.opts.model_modular_enable, elem_id=f"{tab}_guidance_note") - with gr.Row(elem_id=f"{tab}_cfg_row", elem_classes=['flexbox']): + with gr.Row(elem_id=f"{tab}_cfg_row", elem_classes=['flexbox'], visible=not shared.opts.model_modular_enable): cfg_scale = gr.Slider(minimum=-1.0, maximum=30.0, step=0.1, label='Guidance scale', value=-1.0, elem_id=f"{tab}_cfg_scale") cfg_end = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='Guidance end', value=1.0, elem_id=f"{tab}_cfg_end") - with gr.Row(): + with gr.Row(visible=not shared.opts.model_modular_enable): cfg_rescale = gr.Slider(minimum=-1.0, maximum=1.0, step=0.05, label='Guidance rescale', value=-1.0, elem_id=f"{tab}_image_cfg_rescale") cfg_image = gr.Slider(minimum=-1.0, maximum=30.0, step=0.1, label='Refine guidance', value=-1.0, elem_id=f"{tab}_cfg_image") - with gr.Row(): + with gr.Row(visible=not shared.opts.model_modular_enable): cfg_true = gr.Slider(minimum=-1.0, maximum=30.0, step=0.05, label='Attention guidance', value=-1.0, elem_id=f"{tab}_cfg_true") cfg_adaptive = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='Adaptive scaling', value=0.5, elem_id=f"{tab}_cfg_adaptive") _modular_args = guidance_args + lsc_args + guidance_auto_args + guidance_zero_args + guidance_pag_args + guidance_apg_args + guidance_slg_args + guidance_seg_args + guidance_fdg_args # TODO modular: guidance args are not implemented + def update_stored(component, label): + _stored_args[label] = component + for component in _modular_args: + label = getattr(component, 'label', None) + value = getattr(component, 'value', None) + _stored_args[label] = value + component.change(fn=partial(update_stored, label=label), inputs=[component], outputs=[]) + standard_args = [cfg_scale, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end] return guidance_args + standard_args From 525e8dec9d45e0be9fb1251b9941dd44337f099f Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 29 Aug 2026 16:20:57 +0200 Subject: [PATCH 088/270] modular set latents and steps Signed-off-by: Vladimir Mandic --- TODO.md | 7 +++---- modules/sd_hijack_modular.py | 40 +++++++++++++++++++++++++----------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/TODO.md b/TODO.md index 8ed48d892..e31f08986 100644 --- a/TODO.md +++ b/TODO.md @@ -2,14 +2,15 @@ ## Short-term -- MiniMax LoRA: native loader for MiniMax-H3: fl2va, ref2va, pruned +- MiniMax LoRA: native loader for MiniMax-H3: fl2va, ref2va, pruned, @CalamitousFelicitousness - MiniMax TAESD: - MiniMax: Create pre-quant for MiniMax-H3-Turbo - Benchmark tool productize: @CalamitousFelicitousness - Inpaint: https://discord.com/channels/1101998836328697867/1130536562422186044/1506850651035144322, @vladmandic - Control tab verify overrides handling, @vladmandic - LTX: Create pre-quant for LTX-2.5 -- Modular guiders +- Modular guiders, @vladmandic +- ROCm: v10 ## Features @@ -27,8 +28,6 @@ - Video capabilities to processing tab, add RIFE, upscaling (once available) - Distraction-free UI mode with prompt-only, chat-based interface - Revisit transformer caching for modular pipelines -- Revisit guidance for modular pipelines -- Implement modular for some image models - Video models: support finetunes - Incorporate [prompting guides](https://github.com/CalamitousFelicitousness/ai-prompting-guides) - Video models: use Networks/Reference instead of custom diff --git a/modules/sd_hijack_modular.py b/modules/sd_hijack_modular.py index 528e4a0f2..2c06a0c14 100644 --- a/modules/sd_hijack_modular.py +++ b/modules/sd_hijack_modular.py @@ -6,30 +6,46 @@ import diffusers from modules.logger import log from modules import shared, sd_offload, timer from modules.attention import context as attention_context +from modules.lora import lora_stack debug = os.environ.get('SD_MODULAR_DEBUG', None) is not None intercepted = set() +def modular_step(state: diffusers.modular_pipelines.modular_pipeline.BlockState): + keys = state if isinstance(state, list) else list(state.__dict__.keys()) + if 'num_inference_steps' in keys: + shared.state.sampling_steps = state.num_inference_steps + if 'latents' in keys: + shared.state.step() + shared.state.current_latent = state.latents + lora_stack.on_step(shared.state.sampling_step) + if shared.state.interrupted or shared.state.skipped: + raise AssertionError('Interrupted...') + if shared.state.paused: + log.debug('Sampling paused') + while shared.state.paused: + if shared.state.interrupted or shared.state.skipped: + raise AssertionError('Interrupted...') + time.sleep(0.1) + + def modular_intercept(self, components, state: diffusers.modular_pipelines.modular_pipeline.BlockState, *args, **kwargs): t0 = time.time() block = type(self).__name__ - keys = state if isinstance(state, list) else list(state.__dict__.keys()) # run code before block call result = self.__orig_call__(components, state, *args, **kwargs) t1 = time.time() timer.blocks.add(block, t1 - t0) # run code after block call - # TODO modular: intercept latents and set current latents for preview - """ - if 'latents' in keys: - ... - t2 = time.time() - timer.blocks.add('callback', t2 - t1) - """ + if 'LoopDenoiser' in block: # BeforeDenoiser/AfterDenoiser are not used by all pipelines + modular_step(state) + t2 = time.time() + timer.blocks.add('callback', t2 - t1) if debug: - log.trace(f'Modular intercept: block={block} state={keys} time={t1 - t0:.4f}') + keys = state if isinstance(state, list) else list(state.__dict__.keys()) + log.trace(f'Modular intercept: block={block} keys={keys} time={t1 - t0:.4f}') return result @@ -105,7 +121,7 @@ def install_state_hook(pipe): attention_context.set_role('transformer') publish_layout(kwargs) if new_phase: - sd_offload.offload_ondemand(pipe, exclude=['transformer', 'transformer_ref'], reason='generate', force=hasattr(pipe, 'sdnext_force_offload')) + sd_offload.offload_ondemand(pipe, exclude=['transformer', 'transformer_ref', 'unet'], reason='generate', force=hasattr(pipe, 'sdnext_force_offload')) if shared.state.sampling_steps == 0 and getattr(pipe, 'num_timesteps', 0) > 0: shared.state.sampling_steps = pipe.num_timesteps if shared.state.paused: @@ -114,7 +130,7 @@ def install_state_hook(pipe): if shared.state.interrupted or shared.state.skipped: raise AssertionError('Interrupted...') time.sleep(0.1) - shared.state.step() + # shared.state.step() attention_context.tick() if shared.state.interrupted or shared.state.skipped: raise AssertionError('Interrupted...') @@ -143,7 +159,7 @@ def install_state_hook(pipe): if shared.state.interrupted or shared.state.skipped: # fires per tile, so tiled encodes abort promptly raise AssertionError('Interrupted...') - for name in ('transformer', 'transformer_ref'): + for name in ('unet', 'transformer', 'transformer_ref'): module = getattr(pipe, name, None) if module is not None: target = getattr(module, 'model', module) # conditioning calls the inner model directly From a637d57ea5b535cee18a36bc2bc99ce484623903 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 29 Aug 2026 17:40:04 +0200 Subject: [PATCH 089/270] modular cleanup Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 3 + TODO.md | 2 +- modules/framepack/framepack_api.py | 2 - modules/framepack/framepack_install.py | 2 +- modules/framepack/framepack_ui.py | 5 +- modules/framepack/framepack_wrappers.py | 8 +- modules/minimax/minimax_ui.py | 11 +- modules/modular.py | 6 +- modules/sd_hijack_modular.py | 5 +- modules/taesd/taehv.py | 528 ++++++++++++++++++------ modules/vae/sd_vae_taesd.py | 10 +- 11 files changed, 435 insertions(+), 147 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2fcfe1b1..95107a94f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,9 @@ to reduce memory usage and improve performance on large models - **Internal** - modular pipelines intercept and profiling hooks + - modular pipelines convert standard model on-demand + - modular pipelines previews + - modular pipelines basic guidance - attention mechanisms decision tree and apply method refactor ## Update for 2026-08-26 diff --git a/TODO.md b/TODO.md index e31f08986..ffa870508 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,7 @@ ## Short-term - MiniMax LoRA: native loader for MiniMax-H3: fl2va, ref2va, pruned, @CalamitousFelicitousness -- MiniMax TAESD: +- MiniMax TAESD: need to unpack latents, @vladmandic - MiniMax: Create pre-quant for MiniMax-H3-Turbo - Benchmark tool productize: @CalamitousFelicitousness - Inpaint: https://discord.com/channels/1101998836328697867/1130536562422186044/1506850651035144322, @vladmandic diff --git a/modules/framepack/framepack_api.py b/modules/framepack/framepack_api.py index 9cc2ace1a..74cdbb2f0 100644 --- a/modules/framepack/framepack_api.py +++ b/modules/framepack/framepack_api.py @@ -37,7 +37,6 @@ class ReqFramepack(BaseModel): mp4_opt: str | None = Field(default="crf=16", title="Options", description="Options for the video codec") mp4_ext: str | None = Field(default="mp4", title="Format", description="Format for the video") mp4_interpolate: int | None = Field(default=0, title="Interpolation", description="Interpolation for the video") - attention: str | None = Field(default="Default", title="Attention", description="Attention type for the model") vae_type: str | None = Field(default="Local", title="VAE", description="VAE type for the model") vlm_enhance: bool | None = Field(default=False, title="VLM enhance", description="Enable VLM enhance") vlm_model: str | None = Field(default=None, title="VLM model", description="VLM model to use") @@ -114,7 +113,6 @@ def framepack_post(request: ReqFramepack): mp4_opt=request.mp4_opt, mp4_ext=request.mp4_ext, mp4_interpolate=request.mp4_interpolate, - attention=request.attention, vae_type=request.vae_type, vlm_enhance=request.vlm_enhance, vlm_model=request.vlm_model, diff --git a/modules/framepack/framepack_install.py b/modules/framepack/framepack_install.py index 404e89652..905010f9d 100644 --- a/modules/framepack/framepack_install.py +++ b/modules/framepack/framepack_install.py @@ -16,7 +16,7 @@ def rename(src:str, dst:str): raise e -def install_requirements(attention:str='SDPA'): +def install_requirements(): install('av') diff --git a/modules/framepack/framepack_ui.py b/modules/framepack/framepack_ui.py index c9fb51340..c2edbbb0f 100644 --- a/modules/framepack/framepack_ui.py +++ b/modules/framepack/framepack_ui.py @@ -63,7 +63,6 @@ def create_ui(prompt, negative, styles, _overrides, script_inputs, mp4_fps, mp4_ optimized_prompt = gr.Checkbox(label='FP use optimized system prompt', value=True) use_cfgzero = gr.Checkbox(label='FP enable CFGZero', value=False) use_preview = gr.Checkbox(label='FP enable Preview', value=True) - attention = gr.Dropdown(label="FP attention", choices=['Default', 'Xformers', 'FlashAttention', 'SageAttention'], value='Default', type='value') vae_type = gr.Dropdown(label="FP VAE", choices=['Full', 'Tiny', 'Remote'], value='Full', type='value') with gr.Column(elem_id='framepack-output-column', scale=2) as _column_output: @@ -88,7 +87,7 @@ def create_ui(prompt, negative, styles, _overrides, script_inputs, mp4_fps, mp4_ duration.change(fn=change_sections, inputs=[duration, mp4_fps, mp4_interpolate, latent_ws, variant], outputs=[section_html, section_prompt]) mp4_fps.change(fn=change_sections, inputs=[duration, mp4_fps, mp4_interpolate, latent_ws, variant], outputs=[section_html, section_prompt]) mp4_interpolate.change(fn=change_sections, inputs=[duration, mp4_fps, mp4_interpolate, latent_ws, variant], outputs=[section_html, section_prompt]) - btn_load.click(fn=load_model, inputs=[variant, attention], outputs=framepack_outputs) + btn_load.click(fn=load_model, inputs=[variant], outputs=framepack_outputs) btn_unload.click(fn=unload_model, outputs=framepack_outputs) receipe_get.click(fn=framepack_load.get_model, inputs=[], outputs=receipe) receipe_set.click(fn=framepack_load.set_model, inputs=[receipe], outputs=[]) @@ -108,7 +107,7 @@ def create_ui(prompt, negative, styles, _overrides, script_inputs, mp4_fps, mp4_ use_teacache, use_cfgzero, use_preview, mp4_fps, mp4_codec, mp4_sf, mp4_video, mp4_frames, mp4_thumb, mp4_opt, mp4_ext, mp4_interpolate, mp4_scale, mp4_upscaler, - attention, vae_type, variant, + vae_type, variant, vlm_enhance, vlm_model, vlm_system_prompt, ] diff --git a/modules/framepack/framepack_wrappers.py b/modules/framepack/framepack_wrappers.py index 94eb5155d..1ac40aee3 100644 --- a/modules/framepack/framepack_wrappers.py +++ b/modules/framepack/framepack_wrappers.py @@ -91,11 +91,11 @@ def prepare_prompts(p, init_image, prompt:str, section_prompt:str, num_sections: return generated_prompts -def load_model(variant, attention): +def load_model(variant): global loaded_variant # pylint: disable=global-statement if (shared.sd_model_type != 'hunyuanvideo') or (loaded_variant != variant): yield gr.update(), gr.update(), 'Verifying FramePack' - framepack_install.install_requirements(attention) + framepack_install.install_requirements() # framepack_install.git_clone(git_repo=git_repo, git_dir=git_dir, tmp_dir=tmp_dir) # framepack_install.git_update(git_dir=git_dir, git_commit=git_commit) # sys.path.append(git_dir) @@ -114,7 +114,7 @@ def unload_model(): yield gr.update(), gr.update(), 'Model unloaded' -def run_framepack(task_id, _ui_state, init_image, end_image, start_weight, end_weight, vision_weight, prompt, system_prompt, optimized_prompt, section_prompt, negative_prompt, styles, seed, resolution, duration, latent_ws, steps, cfg_scale, cfg_distilled, cfg_rescale, shift, use_teacache, use_cfgzero, use_preview, mp4_fps, mp4_codec, mp4_sf, mp4_video, mp4_frames, mp4_thumb, mp4_opt, mp4_ext, mp4_interpolate, mp4_scale, mp4_upscaler, attention, vae_type, variant, vlm_enhance, vlm_model, vlm_system_prompt, *_args, **_kwargs): +def run_framepack(task_id, _ui_state, init_image, end_image, start_weight, end_weight, vision_weight, prompt, system_prompt, optimized_prompt, section_prompt, negative_prompt, styles, seed, resolution, duration, latent_ws, steps, cfg_scale, cfg_distilled, cfg_rescale, shift, use_teacache, use_cfgzero, use_preview, mp4_fps, mp4_codec, mp4_sf, mp4_video, mp4_frames, mp4_thumb, mp4_opt, mp4_ext, mp4_interpolate, mp4_scale, mp4_upscaler, vae_type, variant, vlm_enhance, vlm_model, vlm_system_prompt, *_args, **_kwargs): variant = variant or 'Bi-Directional' if variant == 'None': log.error('FramePack: no model selected') @@ -137,7 +137,7 @@ def run_framepack(task_id, _ui_state, init_image, end_image, start_weight, end_w with call_queue.get_lock(): progress.start_task(task_id) - yield from load_model(variant, attention) + yield from load_model(variant) if shared.sd_model_type != 'hunyuanvideo': progress.finish_task(task_id) yield gr.update(), gr.update(), 'Model load failed' diff --git a/modules/minimax/minimax_ui.py b/modules/minimax/minimax_ui.py index 314628b06..56dbf0e65 100644 --- a/modules/minimax/minimax_ui.py +++ b/modules/minimax/minimax_ui.py @@ -25,16 +25,17 @@ def create_ui(prompt, _negative, styles, overrides, script_inputs, mp4_fps, mp4_ with gr.Row(): width, height = ui_sections.create_resolution_inputs('minimax', default_width=1024, default_height=576, step=32) with gr.Row(): - steps = gr.Slider(minimum=2, maximum=100, step=1, label="MiniMax Steps", elem_id='minimax_steps', value=30) - frames = gr.Slider(label='MiniMax Frames', minimum=22, maximum=362, step=17, value=124, elem_id='minimax_frames') + steps = gr.Slider(minimum=2, maximum=100, step=1, label="MiniMax steps", elem_id='minimax_steps', value=30) + frames = gr.Slider(label='MiniMax frames', minimum=22, maximum=362, step=17, value=124, elem_id='minimax_frames') with gr.Row(): - video_shift = gr.Slider(minimum=8.0, maximum=16.0, step=0.1, label="MiniMax Video Shift", elem_id='minimax_video_shift', value=12) - audio_shift = gr.Slider(minimum=1.5, maximum=6.0, step=0.1, label="MiniMax Audio Shift", elem_id='minimax_audio_shift', value=3) + video_shift = gr.Slider(minimum=8.0, maximum=16.0, step=0.1, label="MiniMax video shift", elem_id='minimax_video_shift', value=12) + audio_shift = gr.Slider(minimum=1.5, maximum=6.0, step=0.1, label="MiniMax audio shift", elem_id='minimax_audio_shift', value=3) with gr.Row(): seed = gr.Number(label='Seed', value=-1, elem_id='minimax_seed', container=True) random_seed = ToolButton(ui_symbols.random, elem_id='minimax_seed_random') random_seed.click(fn=lambda: -1, show_progress='hidden', inputs=[], outputs=[seed]) - audio_enable = gr.Checkbox(label='Audio Enabled', value=True, elem_id="minimax_audio_enable") + with gr.Row(): + audio_enable = gr.Checkbox(label='Enable audio', value=True, elem_id="minimax_audio_enable") with gr.Accordion(open=False, label="Input media", elem_id='minimax_input_media_accordion', visible=True) as input_accordion: with gr.Row(): init_image = gr.Image(label='Image', elem_id='minimax_init_image', type='pil', image_mode='RGB', width=256, height=256) diff --git a/modules/modular.py b/modules/modular.py index 32a35d1a8..3916ca210 100644 --- a/modules/modular.py +++ b/modules/modular.py @@ -7,7 +7,7 @@ from modules.logger import log debug = os.environ.get('SD_MODULAR_DEBUG', None) is not None -def get_modular_class_name(diffusion_pipeline: diffusers.DiffusionPipeline) -> str: +def get_modular_class(diffusion_pipeline: diffusers.DiffusionPipeline): name = diffusion_pipeline.__class__.__name__ name = name.replace('Pipeline', '').replace('Img2Img', '').replace('Inpaint', '').replace('ImageToVideo', '') name = f'{name}AutoBlocks' @@ -20,7 +20,7 @@ def get_modular_class_name(diffusion_pipeline: diffusers.DiffusionPipeline) -> s def is_compatible(diffusion_pipeline: diffusers.DiffusionPipeline) -> bool: if not shared.opts.model_modular_enable: return False - compatible = get_modular_class_name(diffusion_pipeline) is not None + compatible = get_modular_class(diffusion_pipeline) is not None if not compatible: log.debug(f'Modular: source={diffusion_pipeline.__class__.__name__} incompatible pipeline') return compatible @@ -34,7 +34,7 @@ def is_guider(diffusion_pipeline: diffusers.DiffusionPipeline) -> bool: def convert_to_modular(diffusion_pipeline: diffusers.DiffusionPipeline) -> diffusers.ModularPipeline: modular_pipe = None try: - modular_cls = get_modular_class_name(diffusion_pipeline) + modular_cls = get_modular_class(diffusion_pipeline) if modular_cls is None: raise ValueError(f'unknown: cls={diffusion_pipeline.__class__.__name__}') modular_blocks = modular_cls() diff --git a/modules/sd_hijack_modular.py b/modules/sd_hijack_modular.py index 2c06a0c14..2aa77fcdf 100644 --- a/modules/sd_hijack_modular.py +++ b/modules/sd_hijack_modular.py @@ -19,8 +19,11 @@ def modular_step(state: diffusers.modular_pipelines.modular_pipeline.BlockState) shared.state.sampling_steps = state.num_inference_steps if 'latents' in keys: shared.state.step() + # TODO: MiniMax runs AfterDenoise only at the end of the loop and it does latents unpacking shared.state.current_latent = state.latents lora_stack.on_step(shared.state.sampling_step) + if debug: + log.trace(f'Modular step: step={shared.state.sampling_step} latent={state.latents.shape}') if shared.state.interrupted or shared.state.skipped: raise AssertionError('Interrupted...') if shared.state.paused: @@ -60,7 +63,7 @@ def patch_blocks(blocks: diffusers.ModularPipelineBlocks): block_cls._is_patched = True # pylint: disable=protected-access intercepted.add(block_cls) if debug: - log.trace(f'Modular hijack: {block_cls.__name__}') + log.trace(f'Modular hijack: block={block_cls.__name__}') for attr in ("sub_blocks", "blocks"): # recurse into child blocks if containers exist sub = getattr(current_block, attr, None) if isinstance(sub, dict): diff --git a/modules/taesd/taehv.py b/modules/taesd/taehv.py index 4e974deae..9239ac864 100644 --- a/modules/taesd/taehv.py +++ b/modules/taesd/taehv.py @@ -9,7 +9,6 @@ import torch.nn as nn import torch.nn.functional as F from tqdm.auto import tqdm -DecoderResult = namedtuple("DecoderResult", ("frame", "memory")) TWorkItem = namedtuple("TWorkItem", ("input_tensor", "block_index")) def conv(n_in, n_out, **kwargs): @@ -28,6 +27,18 @@ class MemBlock(nn.Module): def forward(self, x, past): return self.act(self.conv(torch.cat([x, past], 1)) + self.skip(x)) +class SuperMemBlock(nn.Module): + """MemBlock variant used by the Super decoder (ConvNeXt-style: 7x7 depthwise conv + inverted bottleneck).""" + def __init__(self, n_f): + super().__init__() + self.conv = nn.Sequential( + nn.Conv2d(n_f*2, n_f*2, 7, padding=3, groups=n_f*2, bias=False), + nn.Conv2d(n_f*2, n_f*4, 1), nn.ReLU(inplace=True), + nn.Conv2d(n_f*4, n_f, 1, bias=False), + ) + def forward(self, x, past): + return self.conv(torch.cat([x, past], 1)) + x + class TPool(nn.Module): def __init__(self, n_f, stride): super().__init__() @@ -47,6 +58,106 @@ class TGrow(nn.Module): x = self.conv(x) return x.reshape(-1, C, H, W) +def apply_model_with_memblocks_parallel(model, x, show_progress_bar): + """ + Apply a sequential model with memblocks to the given input, + with parallelization over the time axis and iteration over blocks. + + Args: + - model: nn.Sequential of blocks to apply + - x: input data, of dimensions NTCHW + - show_progress_bar: if True, enables tqdm progressbar display + + Returns NTCHW tensor of output data. + """ + assert x.ndim == 5, f"TAEHV operates on NTCHW tensors, but got {x.ndim}-dim tensor" + N, T, C, H, W = x.shape + x = x.reshape(N*T, C, H, W) + + # parallel over input timesteps, iterate over blocks + for b in tqdm(model, disable=not show_progress_bar): + if isinstance(b, (MemBlock, SuperMemBlock)): + NT, C, H, W = x.shape + T = NT // N + _x = x.reshape(N, T, C, H, W) + # pad with zeros along time axis (i.e. empty memory), slice + block_memory = F.pad(_x, (0,0,0,0,0,0,1,0), value=0)[:,:T].reshape(x.shape) + x = b(x, block_memory) + else: + x = b(x) + NT, C, H, W = x.shape + T = NT // N + return x.view(N, T, C, H, W) + +def apply_model_with_memblocks_sequential_single_step(model, memory, work_queue, progress_bar=None): + """ + Process the work queue (a graph traversal over blocks and timesteps) + until an output frame is produced or the queue is empty. + Mutates memory and work_queue in place. + + Returns N1CHW output tensor, or None if the queue needs more input. + """ + while work_queue: + xt, i = work_queue.pop(0) + if progress_bar is not None and i == 0: + progress_bar.update(1) + if i == len(model): + return xt.unsqueeze(1) + b = model[i] + if isinstance(b, (MemBlock, SuperMemBlock)): + # mem blocks are simple since we're visiting the graph in causal order + if memory[i] is None: + xt_new = b(xt, xt * 0) + else: + xt_new = b(xt, memory[i]) + memory[i] = xt + work_queue.insert(0, TWorkItem(xt_new, i+1)) + elif isinstance(b, TPool): + # pool blocks accumulate inputs until they have enough to pool + if memory[i] is None: + memory[i] = [] + memory[i].append(xt) + if len(memory[i]) > b.stride: + raise ValueError(f"TPool memory overflow: {len(memory[i])} items for stride {b.stride}") + elif len(memory[i]) == b.stride: + N, C, H, W = xt.shape + xt = b(torch.cat(memory[i], 1).view(N*b.stride, C, H, W)) + memory[i] = [] + work_queue.insert(0, TWorkItem(xt, i+1)) + elif isinstance(b, TGrow): + xt = b(xt) + NT, C, H, W = xt.shape + for xt_next in reversed(xt.view(NT//b.stride, b.stride*C, H, W).chunk(b.stride, 1)): + work_queue.insert(0, TWorkItem(xt_next, i+1)) + else: + xt = b(xt) + work_queue.insert(0, TWorkItem(xt, i+1)) + return None + +def apply_model_with_memblocks_sequential(model, x, show_progress_bar): + """ + Apply a sequential model with memblocks to the given input, + with iteration over timesteps as well as blocks. + + Args: + - model: nn.Sequential of blocks to apply + - x: input data, of dimensions NTCHW + - show_progress_bar: if True, enables tqdm progressbar display + + Returns NTCHW tensor of output data. + """ + assert x.ndim == 5, f"TAEHV operates on NTCHW tensors, but got {x.ndim}-dim tensor" + work_queue = [TWorkItem(xt, 0) for xt in x.unbind(1)] + memory = [None] * len(model) + progress_bar = tqdm(range(len(work_queue)), disable=not show_progress_bar) + out = [] + while work_queue: + xt = apply_model_with_memblocks_sequential_single_step(model, memory, work_queue, progress_bar) + if xt is not None: + out.append(xt) + progress_bar.close() + return torch.cat(out, 1) + def apply_model_with_memblocks(model, x, parallel, show_progress_bar): """ Apply a sequential model with memblocks to the given input. @@ -59,141 +170,72 @@ def apply_model_with_memblocks(model, x, parallel, show_progress_bar): Returns NTCHW tensor of output data. """ - if x.ndim == 4: - x = x.unsqueeze(0) - assert x.ndim == 5, f"TAEHV operates on NTCHW tensors, but got {x.ndim}-dim tensor" - if x.shape[1] == 16 and x.shape[2] != 16: - x = x.transpose(1,2) # NCTHW to NTCHW - N, T, C, H, W = x.shape if parallel: - x = x.reshape(N*T, C, H, W) - # parallel over input timesteps, iterate over blocks - for b in tqdm(model, disable=not show_progress_bar): - if isinstance(b, MemBlock): - NT, C, H, W = x.shape - T = NT // N - _x = x.reshape(N, T, C, H, W) - mem = F.pad(_x, (0,0,0,0,0,0,1,0), value=0)[:,:T].reshape(x.shape) - x = b(x, mem) - else: - x = b(x) - NT, C, H, W = x.shape - T = NT // N - x = x.view(N, T, C, H, W) + return apply_model_with_memblocks_parallel(model, x, show_progress_bar) else: - out = [] - # iterate over input timesteps and also iterate over blocks. - # because of the cursed TPool/TGrow blocks, this is not a nested loop, - # it's actually a ***graph traversal*** problem! so let's make a queue - work_queue = [TWorkItem(xt, 0) for t, xt in enumerate(x.reshape(N, T * C, H, W).chunk(T, dim=1))] - # in addition to manually managing our queue, we also need to manually manage our progressbar. - # we'll update it for every source node that we consume. - progress_bar = tqdm(range(T), disable=not show_progress_bar) - # we'll also need a separate addressable memory per node as well - mem = [None] * len(model) - while work_queue: - xt, i = work_queue.pop(0) - if i == 0: - # new source node consumed - progress_bar.update(1) - if i == len(model): - # reached end of the graph, append result to output list - out.append(xt) - else: - # fetch the block to process - b = model[i] - if isinstance(b, MemBlock): - # mem blocks are simple since we're visiting the graph in causal order - if mem[i] is None: - xt_new = b(xt, xt * 0) - mem[i] = xt - else: - xt_new = b(xt, mem[i]) - mem[i].copy_(xt) # inplace might reduce mysterious pytorch memory allocations? doesn't help though - # add successor to work queue - work_queue.insert(0, TWorkItem(xt_new, i+1)) - elif isinstance(b, TPool): - # pool blocks are miserable - if mem[i] is None: - mem[i] = [] # pool memory is itself a queue of inputs to pool - mem[i].append(xt) - if len(mem[i]) > b.stride: - # pool mem is in invalid state, we should have pooled before this - raise ValueError("???") - elif len(mem[i]) < b.stride: - # pool mem is not yet full, go back to processing the work queue - pass - else: - # pool mem is ready, run the pool block - N, C, H, W = xt.shape - xt = b(torch.cat(mem[i], 1).view(N*b.stride, C, H, W)) - # reset the pool mem - mem[i] = [] - # add successor to work queue - work_queue.insert(0, TWorkItem(xt, i+1)) - elif isinstance(b, TGrow): - xt = b(xt) - NT, C, H, W = xt.shape - # each tgrow has multiple successor nodes - for xt_next in reversed(xt.view(N, b.stride*C, H, W).chunk(b.stride, 1)): - # add successor to work queue - work_queue.insert(0, TWorkItem(xt_next, i+1)) - else: - # normal block with no funny business - xt = b(xt) - # add successor to work queue - work_queue.insert(0, TWorkItem(xt, i+1)) - progress_bar.close() - x = torch.stack(out, 1) - return x + return apply_model_with_memblocks_sequential(model, x, show_progress_bar) class TAEHV(nn.Module): - latent_channels = 16 - image_channels = 3 - def __init__(self, checkpoint_path="taehv.pth", decoder_time_upscale=(True, True), decoder_space_upscale=(True, True, True)): + def __init__(self, checkpoint_path="taehv.pth", encoder_time_downscale=(True, True, False), decoder_time_upscale=(False, True, True), decoder_space_upscale=(True, True, True), patch_size=1, latent_channels=16, arch_variant=None): """Initialize pretrained TAEHV from the given checkpoint. Arg: checkpoint_path: path to weight file to load. taehv.pth for Hunyuan, taew2_1.pth for Wan 2.1. + encoder_time_downscale: whether temporal downsampling is enabled for each block. decoder_time_upscale: whether temporal upsampling is enabled for each block. upsampling can be disabled for a cheaper preview. decoder_space_upscale: whether spatial upsampling is enabled for each block. upsampling can be disabled for a cheaper preview. + patch_size: input/output pixelshuffle patch-size for this model. + latent_channels: number of latent channels (z dim) for this model. + arch_variant: decoder architecture variant. None (base) or "super" (higher-quality, ~2x decoder params). Autodetected from filename if None. """ super().__init__() - from modules import shared + self.patch_size = patch_size + self.latent_channels = latent_channels + self.image_channels = 3 + if len(decoder_time_upscale) == 2: + decoder_time_upscale = (False, *decoder_time_upscale) + self.is_cogvideox = checkpoint_path is not None and "taecvx" in checkpoint_path + self.is_h3 = checkpoint_path is not None and "taeh3" in checkpoint_path + if checkpoint_path is not None and "taew2_2" in checkpoint_path: + self.patch_size, self.latent_channels = 2, 48 + if checkpoint_path is not None and "taehv1_5" in checkpoint_path: + self.patch_size, self.latent_channels = 2, 32 + if self.is_h3: + self.patch_size, self.latent_channels, encoder_time_downscale = 2, 24, (True, True, False) + if checkpoint_path is not None and "taeltx" in checkpoint_path: # same for both 2 and 2.3 + self.patch_size, self.latent_channels, encoder_time_downscale, decoder_time_upscale = 4, 128, (True, True, True), (True, True, True) + if arch_variant is None and checkpoint_path is not None and "_super" in checkpoint_path: + arch_variant = "super" + assert arch_variant in (None, "super"), f"unrecognized arch_variant {arch_variant!r}" self.encoder = nn.Sequential( - conv(TAEHV.image_channels, 64), nn.ReLU(inplace=True), - TPool(64, 2), conv(64, 64, stride=2, bias=False), MemBlock(64, 64), MemBlock(64, 64), MemBlock(64, 64), - TPool(64, 2), conv(64, 64, stride=2, bias=False), MemBlock(64, 64), MemBlock(64, 64), MemBlock(64, 64), - TPool(64, 1), conv(64, 64, stride=2, bias=False), MemBlock(64, 64), MemBlock(64, 64), MemBlock(64, 64), - conv(64, TAEHV.latent_channels), + conv(self.image_channels*self.patch_size**2, 64), nn.ReLU(inplace=True), + TPool(64, 2 if encoder_time_downscale[0] else 1), conv(64, 64, stride=2, bias=False), MemBlock(64, 64), MemBlock(64, 64), MemBlock(64, 64), + TPool(64, 2 if encoder_time_downscale[1] else 1), conv(64, 64, stride=2, bias=False), MemBlock(64, 64), MemBlock(64, 64), MemBlock(64, 64), + TPool(64, 2 if encoder_time_downscale[2] else 1), conv(64, 64, stride=2, bias=False), MemBlock(64, 64), MemBlock(64, 64), MemBlock(64, 64), + conv(64, self.latent_channels), ) - n_f = [256, 128, 64, 64] - self.frames_to_trim = 2**sum(decoder_time_upscale) - 1 - - if shared.opts.taesd_layers == 1: + if arch_variant == "super": + n_f = [512, 256, 128, 64] self.decoder = nn.Sequential( - Clamp(), conv(TAEHV.latent_channels, n_f[0]), nn.ReLU(inplace=True), - MemBlock(n_f[0], n_f[0]), MemBlock(n_f[0], n_f[0]), MemBlock(n_f[0], n_f[0]), nn.Upsample(scale_factor=2 if decoder_space_upscale[0] else 1), TGrow(n_f[0], 1), conv(n_f[0], n_f[1], bias=False), - MemBlock(n_f[1], n_f[1]), MemBlock(n_f[1], n_f[1]), MemBlock(n_f[1], n_f[1]), nn.Identity(), TGrow(n_f[1], 2 if decoder_time_upscale[0] else 1), conv(n_f[1], n_f[2], bias=False), - MemBlock(n_f[2], n_f[2]), MemBlock(n_f[2], n_f[2]), MemBlock(n_f[2], n_f[2]), nn.Identity(), TGrow(n_f[2], 2 if decoder_time_upscale[1] else 1), conv(n_f[2], n_f[3], bias=False), - nn.ReLU(inplace=True), conv(n_f[3], TAEHV.image_channels), - ) - elif shared.opts.taesd_layers == 2: - self.decoder = nn.Sequential( - Clamp(), conv(TAEHV.latent_channels, n_f[0]), nn.ReLU(inplace=True), - MemBlock(n_f[0], n_f[0]), MemBlock(n_f[0], n_f[0]), MemBlock(n_f[0], n_f[0]), nn.Upsample(scale_factor=2 if decoder_space_upscale[0] else 1), TGrow(n_f[0], 1), conv(n_f[0], n_f[1], bias=False), - MemBlock(n_f[1], n_f[1]), MemBlock(n_f[1], n_f[1]), MemBlock(n_f[1], n_f[1]), nn.Upsample(scale_factor=2 if decoder_space_upscale[1] else 1), TGrow(n_f[1], 2 if decoder_time_upscale[0] else 1), conv(n_f[1], n_f[2], bias=False), - MemBlock(n_f[2], n_f[2]), MemBlock(n_f[2], n_f[2]), MemBlock(n_f[2], n_f[2]), nn.Identity(), TGrow(n_f[2], 2 if decoder_time_upscale[1] else 1), conv(n_f[2], n_f[3], bias=False), - nn.ReLU(inplace=True), conv(n_f[3], TAEHV.image_channels), + nn.Conv2d(self.latent_channels, n_f[0], 1, bias=False), + SuperMemBlock(n_f[0]), SuperMemBlock(n_f[0]), SuperMemBlock(n_f[0]), conv(n_f[0], n_f[1]*(2 if decoder_space_upscale[0] else 1)**2), nn.ReLU(inplace=True), nn.PixelShuffle(2 if decoder_space_upscale[0] else 1), TGrow(n_f[1], 2 if decoder_time_upscale[0] else 1), + SuperMemBlock(n_f[1]), SuperMemBlock(n_f[1]), SuperMemBlock(n_f[1]), conv(n_f[1], n_f[2]*(2 if decoder_space_upscale[1] else 1)**2), nn.ReLU(inplace=True), nn.PixelShuffle(2 if decoder_space_upscale[1] else 1), TGrow(n_f[2], 2 if decoder_time_upscale[1] else 1), + SuperMemBlock(n_f[2]), SuperMemBlock(n_f[2]), SuperMemBlock(n_f[2]), conv(n_f[2], n_f[3]*(2 if decoder_space_upscale[2] else 1)**2), nn.ReLU(inplace=True), nn.PixelShuffle(2 if decoder_space_upscale[2] else 1), TGrow(n_f[3], 2 if decoder_time_upscale[2] else 1), + conv(n_f[3], self.image_channels*self.patch_size**2), ) else: + n_f = [256, 128, 64, 64] self.decoder = nn.Sequential( - Clamp(), conv(TAEHV.latent_channels, n_f[0]), nn.ReLU(inplace=True), - MemBlock(n_f[0], n_f[0]), MemBlock(n_f[0], n_f[0]), MemBlock(n_f[0], n_f[0]), nn.Upsample(scale_factor=2 if decoder_space_upscale[0] else 1), TGrow(n_f[0], 1), conv(n_f[0], n_f[1], bias=False), - MemBlock(n_f[1], n_f[1]), MemBlock(n_f[1], n_f[1]), MemBlock(n_f[1], n_f[1]), nn.Upsample(scale_factor=2 if decoder_space_upscale[1] else 1), TGrow(n_f[1], 2 if decoder_time_upscale[0] else 1), conv(n_f[1], n_f[2], bias=False), - MemBlock(n_f[2], n_f[2]), MemBlock(n_f[2], n_f[2]), MemBlock(n_f[2], n_f[2]), nn.Upsample(scale_factor=2 if decoder_space_upscale[2] else 1), TGrow(n_f[2], 2 if decoder_time_upscale[1] else 1), conv(n_f[2], n_f[3], bias=False), - nn.ReLU(inplace=True), conv(n_f[3], TAEHV.image_channels), + Clamp(), conv(self.latent_channels, n_f[0]), nn.ReLU(inplace=True), + MemBlock(n_f[0], n_f[0]), MemBlock(n_f[0], n_f[0]), MemBlock(n_f[0], n_f[0]), nn.Upsample(scale_factor=2 if decoder_space_upscale[0] else 1), TGrow(n_f[0], 2 if decoder_time_upscale[0] else 1), conv(n_f[0], n_f[1], bias=False), + MemBlock(n_f[1], n_f[1]), MemBlock(n_f[1], n_f[1]), MemBlock(n_f[1], n_f[1]), nn.Upsample(scale_factor=2 if decoder_space_upscale[1] else 1), TGrow(n_f[1], 2 if decoder_time_upscale[1] else 1), conv(n_f[1], n_f[2], bias=False), + MemBlock(n_f[2], n_f[2]), MemBlock(n_f[2], n_f[2]), MemBlock(n_f[2], n_f[2]), nn.Upsample(scale_factor=2 if decoder_space_upscale[2] else 1), TGrow(n_f[2], 2 if decoder_time_upscale[2] else 1), conv(n_f[2], n_f[3], bias=False), + nn.ReLU(inplace=True), conv(n_f[3], self.image_channels*self.patch_size**2), ) + # computed properties + self.t_downscale = 2**sum(t.stride == 2 for t in self.encoder if isinstance(t, TPool)) + self.t_upscale = 2**sum(t.stride == 2 for t in self.decoder if isinstance(t, TGrow)) + self.frames_to_trim = self.t_upscale - 1 if checkpoint_path is not None: self.load_state_dict(self.patch_tgrow_layers(torch.load(checkpoint_path, map_location="cpu", weights_only=True))) @@ -213,6 +255,38 @@ class TAEHV(nn.Module): sd[key] = sd[key][-new_sd[key].shape[0]:] return sd + def preprocess_input_frames(self, x): + """Preprocess RGB input frames prior to the main encoder sequence.""" + if self.patch_size > 1: + x = F.pixel_unshuffle(x, self.patch_size) + return x + + def _encode_h3_video(self, x, parallel, show_progress_bar): + """Match H3's 17-frame chunks and three-token drop. + https://huggingface.co/MiniMaxAI/MiniMax-H3/blob/fa9c8ab1eaa21c8ae25e7e40b83b2e6002f340af/FL2VA/video_vae/klvae.py#L461-L503 + """ + batch = x.shape[0] + x = torch.cat([x, x[:, -1:].expand(-1, -x.shape[1] % 17, -1, -1, -1)], dim=1) + x = F.pad(x.reshape(batch, -1, 17, *x.shape[2:]), (0, 0, 0, 0, 0, 0, 3, 0)) + x = self.preprocess_input_frames(x) + if parallel: + x = apply_model_with_memblocks(self.encoder, x.flatten(0, 1), True, show_progress_bar) + x = x.reshape(batch, -1, *x.shape[2:]) + else: + x = torch.cat([apply_model_with_memblocks(self.encoder, chunk, False, False) + for chunk in tqdm(x.unbind(1), disable=not show_progress_bar)], dim=1) + return x[:, :-3] + + def _decode_h3_video(self, x, parallel, show_progress_bar): + """Match H3's five-token chunks and per-chunk prefix trim. + https://huggingface.co/MiniMaxAI/MiniMax-H3/blob/fa9c8ab1eaa21c8ae25e7e40b83b2e6002f340af/FL2VA/video_vae/klvae.py#L678-L786 + """ + x = apply_model_with_memblocks(self.decoder, x, parallel, show_progress_bar) + chunk_frames = 5 * self.t_upscale + x = F.pad(x, (0, 0, 0, 0, 0, 0, 0, -x.shape[1] % chunk_frames)) + x = x.unflatten(1, (-1, chunk_frames))[:, :, self.frames_to_trim:].flatten(1, 2) + return self.postprocess_output_frames(x[:, :-3 * self.t_upscale]) + def encode_video(self, x, parallel=True, show_progress_bar=True): """Encode a sequence of frames. @@ -223,23 +297,43 @@ class TAEHV(nn.Module): if False, frames will be processed sequentially. Returns NTCHW latent tensor with ~Gaussian values. """ + if self.is_h3: + return self._encode_h3_video(x, parallel, show_progress_bar) + x = self.preprocess_input_frames(x) + if x.shape[1] % self.t_downscale != 0: + # pad at end to multiple of self.t_downscale + n_pad = self.t_downscale - x.shape[1] % self.t_downscale + padding = x[:, -1:].repeat_interleave(n_pad, dim=1) + x = torch.cat([x, padding], 1) return apply_model_with_memblocks(self.encoder, x, parallel, show_progress_bar) + def postprocess_output_frames(self, x): + """Postprocess RGB frames after the main decoder sequence.""" + if self.patch_size > 1: + x = F.pixel_shuffle(x, self.patch_size) + return x.clamp_(0, 1) + def decode_video(self, x, parallel=True, show_progress_bar=True): """Decode a sequence of frames. Args: - x: input NTCHW latent (C=12) tensor with ~Gaussian values. + x: input NTCHW latent (C=self.latent_channels) tensor with ~Gaussian values. parallel: if True, all frames will be processed at once. (this is faster but may require more memory). if False, frames will be processed sequentially. Returns NTCHW RGB tensor with ~[0, 1] values. """ + if self.is_h3: + return self._decode_h3_video(x, parallel, show_progress_bar) + skip_trim = self.is_cogvideox and x.shape[1] % 2 == 0 x = apply_model_with_memblocks(self.decoder, x, parallel, show_progress_bar) - return x[:, self.frames_to_trim:] * 2.0 - 1.0 - - def forward(self, x): - return self.c(x) + x = self.postprocess_output_frames(x) + if skip_trim: + # skip trimming for cogvideox to make frame counts match. + # this still doesn't have correct temporal alignment for certain frame counts + # (cogvideox seems to pad at the start?), but for multiple-of-4 it's fine. + return x + return x[:, self.frames_to_trim:] def decode(self, x, parallel=True, show_progress_bar=False, return_dict=False): # pylint: disable=unused-argument """Decode a sequence of frames.""" @@ -248,3 +342,193 @@ class TAEHV(nn.Module): def encode(self, x, parallel=True, show_progress_bar=False, return_dict=False): # pylint: disable=unused-argument """Encode a sequence of frames.""" return self.encode_video(x, parallel=False, show_progress_bar=False) + +class StreamingTAEHV(nn.Module): + def __init__(self, taehv): + """Streaming wrapper around TAEHV for real-time use-cases (where not all inputs are available immediately). + + Encode-decode (video-to-video) usage: + streaming = StreamingTAEHV(taehv) + for frame in video_frames: + latent = streaming.encode(frame_tensor) + decoded = streaming.decode(latent) # feeds latent if not None, then returns next frame + if decoded is not None: + display(decoded) + for frame in streaming.flush(): + display(frame) + + Decode-only (world model) usage: + streaming = StreamingTAEHV(taehv) + while running: + latent = world_model.step() # latent represents t_upscale frames + frame = streaming.decode(latent) # returns first frame immediately + while frame is not None: # retrieve remaining frames from this latent + display(frame) + frame = streaming.decode() + """ + super().__init__() + self.taehv = taehv + self.reset() + + def reset(self): + """Reset all internal state. Call this to start encoding/decoding a new stream.""" + self.encoder_work_queue, self.encoder_memory = [], [None] * len(self.taehv.encoder) + self.decoder_work_queue, self.decoder_memory = [], [None] * len(self.taehv.decoder) + self.n_frames_encoded, self.n_frames_decoded = 0, 0 + self._last_encoder_input_frame = None + + def encode(self, x=None): + """Feed an input frame (optional) and try to produce an encoder output. + + The encoder accumulates t_downscale input frames before producing one latent, + so most calls will return None. Use flush_encoder() at end-of-stream to pad and + drain any remaining latents. + + Args: + x: NTCHW RGB frame tensor with values in [0, 1], or None to just process pending work. + Returns: N1CHW latent tensor, or None if not enough input has been accumulated. + """ + if x is not None: + assert x.ndim == 5 and x.shape[2] == self.taehv.image_channels, f"Expected NTCHW frames but got {x.shape=}" + self._last_encoder_input_frame = x[:, -1:] # pylint: disable=attribute-defined-outside-init + x = self.taehv.preprocess_input_frames(x) + self.encoder_work_queue.extend(TWorkItem(xt, 0) for xt in x.unbind(1)) + self.n_frames_encoded += x.shape[1] + xt = apply_model_with_memblocks_sequential_single_step( + self.taehv.encoder, self.encoder_memory, self.encoder_work_queue) + return xt + + def decode(self, x=None): + """Feed a latent (optional) and try to produce a decoded frame. + + Each latent produces t_upscale output frames due to temporal upscaling. The first + decode(latent) call returns the first of these frames; call decode() with no argument + to retrieve the rest, one at a time. Each call does the minimum decoder work needed to + produce one frame. + + Startup frames (the first frames_to_trim raw decoder outputs, used for causal alignment + with the reference VAE) are consumed internally and never returned. + + Args: + x: NTCHW latent tensor, or None to retrieve the next pending frame. + Returns: N1CHW decoded RGB frame tensor, or None if the queue needs more input. + """ + if x is not None: + assert x.ndim == 5 and x.shape[2] == self.taehv.latent_channels, f"Expected NTCHW latents but got {x.shape=}" + self.decoder_work_queue.extend(TWorkItem(xt, 0) for xt in x.unbind(1)) + while True: + xt = apply_model_with_memblocks_sequential_single_step( + self.taehv.decoder, self.decoder_memory, self.decoder_work_queue) + if xt is None: + return None + self.n_frames_decoded += 1 + # skip startup frames (to match decode_video trim behavior) + if not self.taehv.is_cogvideox and self.n_frames_decoded <= self.taehv.frames_to_trim: + continue + return self.taehv.postprocess_output_frames(xt) + + def flush_encoder(self): + """Pad (if needed) and drain all remaining latents from the encoder. + + Returns list of N1CHW latent tensors. + """ + latents = [] + if self._last_encoder_input_frame is not None and self.n_frames_encoded % self.taehv.t_downscale != 0: + n_pad = self.taehv.t_downscale - self.n_frames_encoded % self.taehv.t_downscale + for _ in range(n_pad): + lat = self.encode(self._last_encoder_input_frame) + if lat is not None: + latents.append(lat) + while (lat := self.encode()) is not None: + latents.append(lat) + return latents + + def flush_decoder(self): + """Drain all remaining decoded frames from the decoder. + + Returns list of N1CHW decoded RGB frame tensors. + """ + frames = [] + while (frame := self.decode()) is not None: + frames.append(frame) + return frames + + def flush(self): + """Flush encoder (with padding) and decoder, returning all remaining decoded frames. + + Returns list of N1CHW decoded RGB frame tensors. + """ + frames = [] + for latent in self.flush_encoder(): + frame = self.decode(latent) + if frame is not None: + frames.append(frame) + frames.extend(self.flush_decoder()) + return frames + +@torch.no_grad() +def main(): + """Run TAEHV roundtrip reconstruction on the given video paths.""" + import os + import sys + import cv2 # no highly esteemed deed is commemorated here + + class VideoTensorReader: + def __init__(self, video_file_path): + self.cap = cv2.VideoCapture(video_file_path) + assert self.cap.isOpened(), f"Could not load {video_file_path}" + self.fps = self.cap.get(cv2.CAP_PROP_FPS) + def __iter__(self): + return self + def __next__(self): + ret, frame = self.cap.read() + if not ret: + self.cap.release() + raise StopIteration # End of video or error + return torch.from_numpy(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)).permute(2, 0, 1) # BGR HWC -> RGB CHW + + class VideoTensorWriter: + def __init__(self, video_file_path, width_height, fps=30): + self.writer = cv2.VideoWriter(video_file_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, width_height) + assert self.writer.isOpened(), f"Could not create writer for {video_file_path}" + def write(self, frame_tensor): + assert frame_tensor.ndim == 3 and frame_tensor.shape[0] == 3, f"{frame_tensor.shape}??" + self.writer.write(cv2.cvtColor(frame_tensor.permute(1, 2, 0).numpy(), cv2.COLOR_RGB2BGR)) # RGB CHW -> BGR HWC + def __del__(self): + if hasattr(self, 'writer'): + self.writer.release() + + dev = torch.device("cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu") + dtype = torch.float16 + checkpoint_path = os.getenv("TAEHV_CHECKPOINT_PATH", "taehv.pth") + checkpoint_name = os.path.splitext(os.path.basename(checkpoint_path))[0] + print(f"Using device \033[31m{dev}\033[0m, dtype \033[32m{dtype}\033[0m, checkpoint \033[34m{checkpoint_name}\033[0m ({checkpoint_path})") + taehv = TAEHV(checkpoint_path=checkpoint_path).to(dev, dtype) + for video_path in sys.argv[1:]: + print(f"Processing {video_path}...") + video_in = VideoTensorReader(video_path) + video = torch.stack(list(video_in), 0)[None] + vid_dev = video.to(dev, dtype).div_(255.0) + # convert to device tensor + if video.numel() < 100_000_000: + print(f" {video_path} seems small enough, will process all frames in parallel") + # convert to device tensor + vid_enc = taehv.encode_video(vid_dev) + print(f" Encoded {video_path} -> {vid_enc.shape}. Decoding...") + vid_dec = taehv.decode_video(vid_enc) + print(f" Decoded {video_path} -> {vid_dec.shape}") + else: + print(f" {video_path} seems large, will process each frame sequentially") + # convert to device tensor + vid_enc = taehv.encode_video(vid_dev, parallel=False) + print(f" Encoded {video_path} -> {vid_enc.shape}. Decoding...") + vid_dec = taehv.decode_video(vid_enc, parallel=False) + print(f" Decoded {video_path} -> {vid_dec.shape}") + video_out_path = video_path + f".reconstructed_by_{checkpoint_name}.mp4" + video_out = VideoTensorWriter(video_out_path, (vid_dec.shape[-1], vid_dec.shape[-2]), fps=int(round(video_in.fps))) + for frame in vid_dec.clamp_(0, 1).mul_(255).round_().byte().cpu()[0]: + video_out.write(frame) + print(f" Saved to {video_out_path}") + +if __name__ == "__main__": + main() diff --git a/modules/vae/sd_vae_taesd.py b/modules/vae/sd_vae_taesd.py index f40d3b8cc..0436339af 100644 --- a/modules/vae/sd_vae_taesd.py +++ b/modules/vae/sd_vae_taesd.py @@ -27,6 +27,7 @@ TAESD_MODELS = { 'TAE HunyuanVideo': { 'fn': 'taehv.pth', 'uri': 'https://github.com/madebyollin/taehv/raw/refs/heads/main/taehv.pth', 'model': None }, 'TAE WanVideo': { 'fn': 'taew1.pth', 'uri': 'https://github.com/madebyollin/taehv/raw/refs/heads/main/taew2_1.pth', 'model': None }, 'TAE MochiVideo': { 'fn': 'taem1.pth', 'uri': 'https://github.com/madebyollin/taem1/raw/refs/heads/main/taem1.pth', 'model': None }, + 'TAE MiniMax-H3': { 'fn': 'taeh3.pth', 'uri': 'https://github.com/madebyollin/taehv/raw/refs/heads/main/taeh3.pth', 'model': None }, } CQYAN_MODELS = { 'Hybrid-Tiny SD': { @@ -79,6 +80,8 @@ def get_model(model_cls, variant=None): variant = 'TAE SD3' elif model_cls in {'wanai', 'qwen', 'chrono', 'cosmos', 'anima', 'fibo', 'joy', 'krea2'}: variant = 'TAE WanVideo' + elif model_cls in {'minimaxh3'}: + variant = 'TAE MiniMax-H3' else: warn_once(f'cls={shared.sd_model.__class__.__name__} type={shared.sd_model_type} unsuppported', variant=variant) return model_cls, None @@ -122,10 +125,7 @@ def load_model(model_type = 'decoder', variant = None, vae_file: str | None = No log.print() # new line log.debug(f'Decode: type="taesd" variant="{variant}" fn="{fn}" layers={shared.opts.taesd_layers} load') vae = None - if 'TAE HunyuanVideo' in variant: - from modules.taesd.taehv import TAEHV - vae = TAEHV(checkpoint_path=fn) - elif 'TAE WanVideo' in variant: + if ('TAE HunyuanVideo' in variant) or ('TAE WanVideo' in variant) or ('TAE MiniMax-H3' in variant): from modules.taesd.taehv import TAEHV vae = TAEHV(checkpoint_path=fn) elif 'TAE MochiVideo' in variant: @@ -194,7 +194,7 @@ def decode(latents, fast=False): variant = prev_variant else: vae, variant = load_model(model_type='decoder') - if vae is None or max(latents.shape) > 256: # safety check of large tensors + if vae is None or max(latents.shape) > 384: # safety check of large tensors return latents prev_model = vae prev_variant = variant From fd2e082be52e4eeef84972f018b41de4593db8dc Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 04:31:50 +0100 Subject: [PATCH 090/270] fix(lora): keep the loaded-network type contract under nunchaku The nunchaku path replaced the loaded network list with the on-disk entries it composed from, so reading a loaded network back hit an object without the fields it expects: choosing the reported method reads len(net.modules) and raised on every set change, costing that generation its infotext and trigger tags. The adapter was already composed by then, so the image was unaffected. Wrap the composed set in Network objects and mutate the list in place. --- modules/lora/lora_nunchaku.py | 11 +++++++++-- test/test-sdnq-lora-factors.py | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/modules/lora/lora_nunchaku.py b/modules/lora/lora_nunchaku.py index 1fc8ff9b1..b7499387e 100644 --- a/modules/lora/lora_nunchaku.py +++ b/modules/lora/lora_nunchaku.py @@ -1,12 +1,19 @@ import time from modules import shared, errors from modules.logger import log -from modules.lora import lora_load, lora_common +from modules.lora import lora_load, lora_common, network previously_loaded = [] # we maintain private state here +def wrap_network(network_on_disk): + net = network.Network(network_on_disk.name, network_on_disk) + net.mentioned_name = network_on_disk.name + network_on_disk.read_hash() # nothing else on this path fills the hash infotext reads + return net + + def load_nunchaku(names, strengths): global previously_loaded # pylint: disable=global-statement strengths = [s[0] if isinstance(s, list) else s for s in strengths] @@ -26,7 +33,7 @@ def load_nunchaku(names, strengths): from nunchaku.lora.flux.compose import compose_lora composed_lora = compose_lora(loras) shared.sd_model.transformer.update_lora_params(composed_lora) - lora_common.loaded_networks = [n[0] for n in networks] # used by infotext + lora_common.loaded_networks[:] = [wrap_network(n[0]) for n in networks] # read by infotext and the trigger tags t1 = time.time() lora_common.timer.load = t1 - t0 log.debug(f"Network load: type=LoRA method=nunchaku loras={names} strength={strengths} time={t1-t0:.3f}") diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index af44cb1b0..cb864d213 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -154,6 +154,9 @@ class MockNOD: self.shorthash = '' self.sd_version = 'unknown' + def read_hash(self): + pass + def make_net(name, layer, A, B, te_mult=1.0, alpha=None, dora=False): net = network.Network(name, MockNOD(name)) @@ -2411,6 +2414,16 @@ def test_remove_factors_after_device_move(): return True +def test_nunchaku_entries_carry_the_network_interface(): + from modules.lora import lora_nunchaku + nod = MockNOD('composed') + net = lora_nunchaku.wrap_network(nod) + assert len(net.modules) == 0, 'a composed set owns no modules: the reported method probes this to tell native from nunchaku' + assert net.network_on_disk is nod, 'infotext reads the hash through network_on_disk' + assert net.name == nod.name + return True + + def test_stacked_shape_mismatch_falls_back(): from types import SimpleNamespace layer = build_layer('uint4') @@ -2880,7 +2893,7 @@ def run_tests(): for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse, test_recompile_wall_resets_on_unload]: run_test(CAT_COMPILE, fn) log.warning('=== Robustness ===') - for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back]: + for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back, test_nunchaku_entries_carry_the_network_interface]: run_test(CAT_ROBUST, fn) log.warning('=== Block weights ===') for fn in [test_block_index_sd_unet_layout, test_block_index_sdxl_unet_layout, test_block_index_flux_chains_concatenate, From 2db573d283a3f2fba6e5c3b2e0c205c87c0f1e75 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 04:35:07 +0100 Subject: [PATCH 091/270] fix(lora): bind 4-d oft files to the boft module type The generic loader never offered a file to the boft type, so butterfly OFT adapters reached the oft type instead, which claims any oft_blocks key without checking its rank and then reads the block count as the lora dim. Register boft ahead of oft; files with 3-d blocks still land on oft. --- modules/lora/lora_common.py | 3 ++- test/test-sdnq-lora-factors.py | 25 ++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/modules/lora/lora_common.py b/modules/lora/lora_common.py index 7f171846b..8fc5532a5 100644 --- a/modules/lora/lora_common.py +++ b/modules/lora/lora_common.py @@ -1,6 +1,6 @@ import os from modules.lora import lora_timers -from modules.lora import network_lora, network_hada, network_ia3, network_oft, network_lokr, network_full, network_norm, network_glora +from modules.lora import network_lora, network_hada, network_ia3, network_oft, network_boft, network_lokr, network_full, network_norm, network_glora timer = lora_timers.Timer() @@ -9,6 +9,7 @@ module_types = [ network_lora.ModuleTypeLora(), network_hada.ModuleTypeHada(), network_ia3.ModuleTypeIa3(), + network_boft.ModuleTypeBOFT(), # ahead of oft, which claims any oft_blocks key without checking its rank network_oft.ModuleTypeOFT(), network_lokr.ModuleTypeLokr(), network_full.ModuleTypeFull(), diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index cb864d213..d4bbb9a2c 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -2414,6 +2414,28 @@ def test_remove_factors_after_device_move(): return True +def dispatch_module_type(w): + """Pick a module type the way the generic loader does.""" + host = torch.nn.Linear(IN_F, OUT_F) + net = network.Network('typed', MockNOD('typed')) + nw = network.NetworkWeights(network_key='lora_unet_x', sd_key='lora_unet_x', w=w, sd_module=host) + for nettype in l_common.module_types: + mod = nettype.create_module(net, nw) + if mod is not None: + return mod + return None + + +def test_four_dim_oft_blocks_load_as_boft(): + blocks4 = torch.zeros(2, 8, 64, 64) # (boft_m, block_num, block_size, block_size) + mod = dispatch_module_type({'oft_blocks': blocks4, 'alpha': torch.tensor(1.0)}) + assert type(mod).__name__ == 'NetworkModuleBOFT', f'4-d oft_blocks must bind to boft, got {type(mod).__name__}' + blocks3 = torch.zeros(8, 64, 64) # (num_blocks, block_size, block_size) + mod = dispatch_module_type({'oft_blocks': blocks3, 'alpha': torch.tensor(1.0)}) + assert type(mod).__name__ == 'NetworkModuleOFT', f'3-d oft_blocks must stay on oft, got {type(mod).__name__}' + return True + + def test_nunchaku_entries_carry_the_network_interface(): from modules.lora import lora_nunchaku nod = MockNOD('composed') @@ -2893,7 +2915,8 @@ def run_tests(): for fn in [test_factor_add_inside_compiled_graph, test_rank_bucket_graph_reuse, test_recompile_wall_resets_on_unload]: run_test(CAT_COMPILE, fn) log.warning('=== Robustness ===') - for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back, test_nunchaku_entries_carry_the_network_interface]: + for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back, test_nunchaku_entries_carry_the_network_interface, + test_four_dim_oft_blocks_load_as_boft]: run_test(CAT_ROBUST, fn) log.warning('=== Block weights ===') for fn in [test_block_index_sd_unet_layout, test_block_index_sdxl_unet_layout, test_block_index_flux_chains_concatenate, From 88d263ba1411e9c1890cdf19d0df923d08e1ebeb Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 04:39:01 +0100 Subject: [PATCH 092/270] fix(lora): let stack degradation warnings recur after a settings change The keys that mark a degradation as reported lived for the life of the process, so a user who saw "flip=skipped weight=offloaded", changed the offload mode and hit the same wall again was told nothing the second time. Tie the set to the settings the warnings speak about: the stack signature, the offload mode, the host rank and the checkpoint. Repeating under one context still says it once. --- modules/lora/lora_stack.py | 11 +++++++++++ test/test-sdnq-lora-factors.py | 36 +++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index b0fa08910..544035e36 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -33,6 +33,7 @@ SAMPLE_CAP = 1 << 22 # strided subsample bound for magnitude quantiles (full-siz state: dict = {'entries': {}, 'flips': {}, 'gamma': 1.0, 'gamma_e': 1.0, 'total_steps': 0, 'finalized': False, 'reported': None} warned: set = set() +warned_context = None def mode(): @@ -60,7 +61,17 @@ def signature(): return 'sum' +def warn_context(): + """Settings the degradation warnings below speak about.""" + return (signature(), getattr(shared.opts, 'diffusers_offload_mode', ''), int(getattr(shared.opts, 'lora_sdnq_host_rank', 0) or 0), getattr(shared.opts, 'sd_model_checkpoint', '')) + + def warn_once(key, message): + global warned_context # pylint: disable=global-statement + context = warn_context() + if context != warned_context: + warned.clear() # what was reported under the old settings says nothing about the new ones + warned_context = context if key not in warned: warned.add(key) log.warning(message) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index d4bbb9a2c..191429890 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -2071,6 +2071,40 @@ def test_select_host_disabled_falls_back_to_sum(): return True +def test_degradation_warning_rearms_on_settings_change(): + class CountingLog: + def __init__(self): + self.warnings = 0 + + def warning(self, _message): + self.warnings += 1 + + counter = CountingLog() + real_log = lora_stack.log + saved = {k: getattr(shared.opts, k, None) for k in ('lora_stack_mode', 'lora_sdnq_host_rank')} + lora_stack.log = counter + lora_stack.warned.clear() + lora_stack.warned_context = None + try: + shared.opts.lora_stack_mode = 'klora' + lora_stack.warn_once('probe', 'Network stack: probe') + lora_stack.warn_once('probe', 'Network stack: probe') + assert counter.warnings == 1, f'one degradation under one settings context says it once, got {counter.warnings}' + shared.opts.lora_stack_mode = 'estlora' + lora_stack.warn_once('probe', 'Network stack: probe') + assert counter.warnings == 2, 'changing the stack mode must let the degradation be said again' + shared.opts.lora_sdnq_host_rank = 0 + lora_stack.warn_once('probe', 'Network stack: probe') + assert counter.warnings == 3, 'the host rank belongs to that context too' + finally: + lora_stack.log = real_log + for k, v in saved.items(): + setattr(shared.opts, k, v) + lora_stack.warned.clear() + lora_stack.warned_context = None + return True + + def test_flip_lands_before_crossover_step(): layer = build_layer('uint4') n1, n2, D1, D2 = select_pair(layer, seed0=55, seed1=56) @@ -2907,7 +2941,7 @@ def run_tests(): test_select_deactivate_from_midflip, test_select_requires_exactly_two_nets, test_select_gated_off_when_compiled, test_select_finalize_drops_dead_module, test_select_int8_pair_rides_segments, test_select_gate_dormant_without_pair, test_stale_schedule_dropped_on_reapply, test_est_energy_matches_full_frobenius, test_select_weight_kind_plain_layer, - test_select_gamma_tracks_live_entries, test_select_host_disabled_falls_back_to_sum, test_flip_lands_before_crossover_step, + test_select_gamma_tracks_live_entries, test_select_host_disabled_falls_back_to_sum, test_degradation_warning_rearms_on_settings_change, test_flip_lands_before_crossover_step, test_score_pair_chunked_precision, test_select_replay_from_cache_skips_calc, test_select_weight_replay_from_cache_skips_calc, test_select_reset_reports_timing, test_select_weight_flip_calcs_on_accelerator]: run_test(CAT_SELECT, fn) From 44a4a8e2a59a4eec6a5235ad170424e75d3f4f6f Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 04:39:46 +0100 Subject: [PATCH 093/270] fix(lora): align the stack ramp fallback with its option default The ramp read 1.5 when the option was absent while the option itself defaults to 0.0, so a config without the key ran a ramp the settings page said was off. Only reachable where the options registry is not loaded, which is where the offline suites run. --- modules/lora/lora_stack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/lora/lora_stack.py b/modules/lora/lora_stack.py index 544035e36..d5c0001c7 100644 --- a/modules/lora/lora_stack.py +++ b/modules/lora/lora_stack.py @@ -45,7 +45,7 @@ def density(): def ramp_alpha(): - return float(getattr(shared.opts, 'lora_stack_alpha', 1.5)) + return float(getattr(shared.opts, 'lora_stack_alpha', 0.0)) def manual_discrepancy(): From 7f430aae4e41f9ba0ea053585291d03f928dc8e5 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 04:41:36 +0100 Subject: [PATCH 094/270] refactor(lora): drop the unused timer fields and accumulate deactivate time The restore field had no writer and add() had no caller. Deactivate assigned its elapsed time where activate accumulates, so a generation that unloaded more than once reported only the last pass; both are zeroed together when the generation ends. --- modules/lora/lora_timers.py | 5 ----- modules/lora/networks.py | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/modules/lora/lora_timers.py b/modules/lora/lora_timers.py index 6f3e48c33..34a77b03b 100644 --- a/modules/lora/lora_timers.py +++ b/modules/lora/lora_timers.py @@ -5,7 +5,6 @@ class Timer: calc: float = 0 apply: float = 0 move: float = 0 - restore: float = 0 activate: float = 0 deactivate: float = 0 @@ -26,13 +25,9 @@ class Timer: self.calc = 0 self.apply = 0 self.move = 0 - self.restore = 0 if complete: self.activate = 0 self.deactivate = 0 - def add(self, name, t): - self.__dict__[name] += t - def __str__(self): return f'{self.__class__.__name__}({self.summary})' diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 45afb8480..d75a6e795 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -330,7 +330,7 @@ def network_deactivate(include=None, exclude=None): module.network_current_names = () if task is not None: pbar.update(task, advance=1, description=f'networks={len(l.previously_loaded_networks)} modules={active_components} layers={total} unapply={len(applied_layers)}') - l.timer.deactivate = time.time() - t0 + l.timer.deactivate += time.time() - t0 if refused > 0: log.error(f'Network unload: type=LoRA networks={[n.name for n in l.previously_loaded_networks]} unapply={len(applied_layers)} refused={refused} network partially removed') if l.debug and len(l.previously_loaded_networks) > 0: From 65e49a323c3612c0b8bc0e70f4b270643b1af7e9 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 04:47:10 +0100 Subject: [PATCH 095/270] refactor(lora): extract the shared activation pass plumbing Both passes opened with the same four steps written twice: bring the model into a writable state, enumerate the components to walk, open a progress bar, and probe a weight backup before restoring it. Pull each into a helper and call it from both entry points. The component collector keeps the two lists it is given, so deactivate still walks its own shorter set, and promotion now clears the staged config it consumed. --- modules/lora/networks.py | 151 +++++++++++++++++++++------------------ 1 file changed, 83 insertions(+), 68 deletions(-) diff --git a/modules/lora/networks.py b/modules/lora/networks.py index d75a6e795..38b6f979b 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -16,6 +16,7 @@ applied_layers: list[str] = [] refused_writes: int = 0 # deltas the modules would not take on the last activate pass; infotext reports the network as partial native_active: bool = False default_components = ['text_encoder', 'text_encoder_2', 'text_encoder_3', 'text_encoder_4', 'unet', 'transformer', 'transformer_2', 'llm_adapter'] +deactivate_components = ['text_encoder', 'text_encoder_2', 'text_encoder_3', 'unet', 'transformer', 'llm_adapter'] def group_will_mutate(module, network_layer_name: str, loaded) -> bool: @@ -45,48 +46,91 @@ def group_offload_strip(sd_model, component_name: str, stripped: dict): return stripped[component_name] -def network_activate(include=None, exclude=None): - if exclude is None: - exclude = [] - if include is None: - include = [] - for net in l.loaded_networks: # promote staged multipliers only now: the deactivate pass ran against the previous values, which fuse-mode removal recomputes with +def promote_pending(): + """Promote staged multipliers onto the loaded networks; the deactivate pass ran against the previous values, which fuse-mode removal recomputes with.""" + for net in l.loaded_networks: pending = getattr(net, 'pending_config', None) if pending is not None: net.te_multiplier = pending['te'] net.unet_multiplier = pending['unet'] net.dyn_dim = pending['dyn'] net.block_spec = pending.get('blocks', None) + net.pending_config = None # promotion is one-shot + + +def prepare_model_for_write(sd_model): + """Bring the model into a state where weight writes land; balanced offload returns a rebuilt model.""" + if shared.opts.diffusers_offload_mode == "sequential": + sd_models.disable_offload(sd_model) + sd_models.move_model(sd_model, device=devices.cpu) + elif shared.opts.diffusers_offload_mode == "balanced": + sd_model = sd_models.apply_balanced_offload(sd_model, force=True, silent=True) # dispatched modules hold meta tensors backed by the offload map; rebuild them real on cpu with hooks intact before touching weights + return sd_model + + +def collect_components(sd_model, include, exclude, defaults, restore_filtered): + """Modules to walk, as (modules, wanted components, walked component names, module count). + + With restore_filtered the walk also covers the components a filter left + out, so they restore to backup instead of freezing with stale weights; + those names stay out of the reported list because nothing applies to them. + """ + components = include if len(include) > 0 else defaults + components = [x for x in components if x not in exclude] + filtered = [x for x in defaults if x not in components] if restore_filtered else [] + modules = {} + active_components = [] + for name in components + filtered: + component = getattr(sd_model, name, None) + if component is not None and hasattr(component, 'named_modules'): + if name in components: + active_components.append(name) + modules[name] = list(component.named_modules()) + return modules, components, active_components, sum(len(x) for x in modules.values()) + + +def pass_progress(action, total, show): + """Progress bar for one pass, or a nullcontext with no task when there is nothing to show.""" + if not show: + return nullcontext(), None + pbar = rp.Progress(rp.TextColumn(f'[cyan]Network: type=LoRA action={action}'), rp.BarColumn(), rp.TaskProgressColumn(), rp.TimeRemainingColumn(), rp.TimeElapsedColumn(), rp.TextColumn('[cyan]{task.description}'), console=console) + return pbar, pbar.add_task(description='', total=total) + + +def tensor_backup(module): + """The module's weight backup when it holds real tensors; None in fuse mode, where the backup is a marker.""" + weights_backup = getattr(module, 'network_weights_backup', None) + return None if isinstance(weights_backup, bool) else weights_backup + + +def restore_pristine(module, device): + """Put a backed-up layer back on its checkpoint weights, so a mechanism sees the pristine base.""" + if tensor_backup(module) is not None: + network_apply_weights(module, None, None, device=device) + + +def should_skip(module, network_layer_name, wanted, stack_sig): + """True when the pass has nothing to do here: no weight, interrupted, unnamed, or already carrying this set under these settings.""" + if getattr(module, 'weight', None) is None or shared.state.interrupted or network_layer_name is None: + return True + return getattr(module, 'network_current_names', ()) == wanted and getattr(module, 'network_current_stack', 'sum') == stack_sig + + +def network_activate(include=None, exclude=None): + if exclude is None: + exclude = [] + if include is None: + include = [] + promote_pending() t0 = time.time() fuse = lora_overrides.fuse_native() # resolve once: backup and apply passes must agree with limit_errors("network_activate") as elimit: - sd_model = getattr(shared.sd_model, "pipe", shared.sd_model) - if shared.opts.diffusers_offload_mode == "sequential": - sd_models.disable_offload(sd_model) - sd_models.move_model(sd_model, device=devices.cpu) - elif shared.opts.diffusers_offload_mode == "balanced": - sd_model = sd_models.apply_balanced_offload(sd_model, force=True, silent=True) # dispatched modules hold meta tensors backed by the offload map; rebuild them real on cpu with hooks intact before touching weights + sd_model = prepare_model_for_write(getattr(shared.sd_model, "pipe", shared.sd_model)) group_offload = shared.opts.diffusers_offload_mode == "group" group_stripped = {} device = None - modules = {} - components = include if len(include) > 0 else default_components - components = [x for x in components if x not in exclude] - filtered_components = [x for x in default_components if x not in components] # filtered components restore to backup so a filter means detached, not frozen with stale weights - active_components = [] - for name in components + filtered_components: - component = getattr(sd_model, name, None) - if component is not None and hasattr(component, 'named_modules'): - if name in components: - active_components.append(name) - modules[name] = list(component.named_modules()) - total = sum(len(x) for x in modules.values()) - if len(l.loaded_networks) > 0: - pbar = rp.Progress(rp.TextColumn('[cyan]Network: type=LoRA action=activate'), rp.BarColumn(), rp.TaskProgressColumn(), rp.TimeRemainingColumn(), rp.TimeElapsedColumn(), rp.TextColumn('[cyan]{task.description}'), console=console) - task = pbar.add_task(description='' , total=total) - else: - task = None - pbar = nullcontext() + modules, components, active_components, total = collect_components(sd_model, include, exclude, default_components, restore_filtered=True) + pbar, task = pass_progress('activate', total, len(l.loaded_networks) > 0) applied_weight = 0 applied_bias = 0 refused = 0 @@ -105,8 +149,7 @@ def network_activate(include=None, exclude=None): device = getattr(sd_model, component, None).device for _, module in modules[component]: network_layer_name = getattr(module, 'network_layer_name', None) - current_names = getattr(module, "network_current_names", ()) - if getattr(module, 'weight', None) is None or shared.state.interrupted or (network_layer_name is None) or (current_names == component_wanted and getattr(module, 'network_current_stack', 'sum') == stack_sig): + if should_skip(module, network_layer_name, component_wanted, stack_sig): if task is not None: pbar.update(task, advance=1) continue @@ -116,9 +159,7 @@ def network_activate(include=None, exclude=None): calced = False # tracks whether this iteration assembled the delta, so the fallthrough reuses it instead of recomputing if select_active and component_wanted and not network_layer_name.startswith('lora_te'): if lora_sdnq.select_candidate(module, network_layer_name, component_wanted): # SDNQ pairs ride the channel as separate segments at any bit width; weight rewrites cannot flip a quantized layer - weights_backup = getattr(module, "network_weights_backup", None) - if weights_backup is not None and not isinstance(weights_backup, bool): - network_apply_weights(module, None, None, device=device) + restore_pristine(module, device) applied = lora_sdnq.apply_select_cached(module, network_layer_name, component_wanted) # a stored score record and factor pair serve before the deltas are assembled if applied is None: per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=elimit, per_net=True) @@ -139,8 +180,7 @@ def network_activate(include=None, exclude=None): lora_stack.warn_once('select-host-disabled', f'Network stack: mode={lora_stack.mode()} quant=sdnq host=disabled fallback=sum') else: # other layers select by recomputing the winner from the pristine backup at schedule time sel_backup = network_backup_weights(module, network_layer_name, component_wanted, fuse) - weights_backup = getattr(module, "network_weights_backup", None) - if weights_backup is not None and not isinstance(weights_backup, bool): + if tensor_backup(module) is not None: # a flip recomputes the winner from the pristine tensor, which fuse mode does not keep if lora_stack.register_weight_pair_cached(network_layer_name, module, component_wanted): # a stored score record registers without assembling the pair backup_size += sel_backup network_apply_weights(module, None, None, device=device) # pristine until the schedule applies the winner @@ -163,9 +203,7 @@ def network_activate(include=None, exclude=None): pbar.update(task, advance=1) continue if lora_sdnq.factor_candidate(module, network_layer_name, component_wanted): - weights_backup = getattr(module, "network_weights_backup", None) - if weights_backup is not None and not isinstance(weights_backup, bool): - network_apply_weights(module, None, None, device=device) # an earlier non-factorable set requantized this layer, restore the pristine base before attaching factors + restore_pristine(module, device) # an earlier non-factorable set may have requantized this layer applied = lora_sdnq.apply_factors(module, network_layer_name, component_wanted) if applied is not None: # exact path took the layer; None falls through to hosting or requantize if applied and component_wanted: @@ -177,9 +215,7 @@ def network_activate(include=None, exclude=None): pbar.update(task, advance=1) continue if lora_sdnq.host_candidate(module, network_layer_name, component_wanted): - weights_backup = getattr(module, "network_weights_backup", None) - if weights_backup is not None and not isinstance(weights_backup, bool): - network_apply_weights(module, None, None, device=device) # the hosted delta is measured against the pristine base + restore_pristine(module, device) # the hosted delta is measured against the pristine base hosted = lora_sdnq.apply_cached(module, network_layer_name, component_wanted) # a stored entry serves the layer before the delta is assembled if hosted is None: batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, elimit=elimit) @@ -208,8 +244,7 @@ def network_activate(include=None, exclude=None): backup_size += network_backup_weights(module, network_layer_name, component_wanted, fuse) if not component_wanted: lora_stack.drop(network_layer_name) # a restored layer must leave the selection schedule - weights_backup = getattr(module, "network_weights_backup", None) - if weights_backup is None or isinstance(weights_backup, bool): # fuse mode has no tensor backup, restore stays with network_deactivate + if tensor_backup(module) is None: # fuse mode has no tensor backup, restore stays with network_deactivate if task is not None: pbar.update(task, advance=1) continue @@ -274,31 +309,11 @@ def network_deactivate(include=None, exclude=None): return t0 = time.time() with limit_errors("network_deactivate") as elimit: - sd_model = getattr(shared.sd_model, "pipe", shared.sd_model) - if shared.opts.diffusers_offload_mode == "sequential": - sd_models.disable_offload(sd_model) - sd_models.move_model(sd_model, device=devices.cpu) - elif shared.opts.diffusers_offload_mode == "balanced": - sd_model = sd_models.apply_balanced_offload(sd_model, force=True, silent=True) # dispatched modules hold meta tensors backed by the offload map; rebuild them real on cpu with hooks intact before touching weights + sd_model = prepare_model_for_write(getattr(shared.sd_model, "pipe", shared.sd_model)) group_offload = shared.opts.diffusers_offload_mode == "group" group_stripped = {} - modules = {} - - components = include if len(include) > 0 else ['text_encoder', 'text_encoder_2', 'text_encoder_3', 'unet', 'transformer', 'llm_adapter'] - components = [x for x in components if x not in exclude] - active_components = [] - for name in components: - component = getattr(sd_model, name, None) - if component is not None and hasattr(component, 'named_modules'): - modules[name] = list(component.named_modules()) - active_components.append(name) - total = sum(len(x) for x in modules.values()) - if len(l.previously_loaded_networks) > 0 and l.debug: - pbar = rp.Progress(rp.TextColumn('[cyan]Network: type=LoRA action=deactivate'), rp.BarColumn(), rp.TaskProgressColumn(), rp.TimeRemainingColumn(), rp.TimeElapsedColumn(), rp.TextColumn('[cyan]{task.description}'), console=console) - task = pbar.add_task(description='', total=total) - else: - task = None - pbar = nullcontext() + modules, _components, active_components, total = collect_components(sd_model, include, exclude, deactivate_components, restore_filtered=False) + pbar, task = pass_progress('deactivate', total, len(l.previously_loaded_networks) > 0 and l.debug) refused = 0 with devices.inference_context(), pbar: applied_layers.clear() From 3f86973bc6a32e8bce46d671764b4fd34295e785 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 04:55:16 +0100 Subject: [PATCH 096/270] refactor(lora): split the activation ladder into atomic mechanisms The per-module walk carried four mechanisms inline, each repeating the same tail: count the layer, stamp the pair that marks it current, advance the bar, continue. Five copies of that tail and three of the backup probe put the deepest arm nine levels in. Each mechanism is now a function that either takes the layer or declines to the next, and the walk reads as the four of them in order. The pass state they share moves onto one object built before the walk starts, with the accept tail, the stamp and the bar tick as its methods. That takes network_activate from 218 lines to 55, none of it deeper than the module loop. Two shapes are deliberately not folded into that tail: the weight path counts weights and bias separately and tracks what the module refused, and the factor-strip restore stamps without counting. Hosting hands a declined delta back rather than leaving it in a flag, so a pair of Nones still reads as assembled and no layer is calculated twice. --- modules/lora/networks.py | 333 +++++++++++++++++++-------------- test/test-sdnq-lora-factors.py | 38 +++- 2 files changed, 225 insertions(+), 146 deletions(-) diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 38b6f979b..da606a16c 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -19,6 +19,64 @@ default_components = ['text_encoder', 'text_encoder_2', 'text_encoder_3', 'text_ deactivate_components = ['text_encoder', 'text_encoder_2', 'text_encoder_3', 'unet', 'transformer', 'llm_adapter'] +class ActivationPass: + """State of one activation walk, built before the walk so a pass that raises still has it. + + `wanted_names` is built once here and reaches every layer as + `component_wanted`, either this tuple or the empty one. The factor cache + keys its pass entry on that object's identity, so an equal tuple rebuilt + per component would send every lookup back to disk. + """ + + def __init__(self, fuse): + self.sd_model = getattr(shared.sd_model, "pipe", shared.sd_model) + self.fuse = fuse + self.elimit = None # the error limiter, bound for the duration of the walk + self.wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () + self.stack_sig = lora_stack.signature() + lora_blocks.signature() + lora_sdnq.signature() # tracked beside network_current_names so stack-setting, block-weight and mechanism changes re-apply + self.select_active = len(l.loaded_networks) > 0 and lora_stack.active_select(len(l.loaded_networks)) # restore-only walks have nothing to stack; the count warning would fire on every network-free generation + self.component_wanted = () + self.device = None + self.group_offload = shared.opts.diffusers_offload_mode == "group" + self.group_stripped = {} + self.pbar = nullcontext() + self.task = None + self.total = 0 + self.active_components = [] + self.applied_weight = 0 + self.applied_bias = 0 + self.refused = 0 + self.backup_size = 0 + + def stamp(self, module): + """Mark the layer as carrying this set under these settings; the pair is the skip key.""" + module.network_current_names = self.component_wanted + module.network_current_stack = self.stack_sig + + def tick(self, description=None): + if self.task is None: + return + if description is None: + self.pbar.update(self.task, advance=1) + else: + self.pbar.update(self.task, advance=1, description=description) + + def claim(self, module, network_layer_name, changed): + """Accept a layer one of the mechanisms took; only a layer whose weights changed counts as applied.""" + if changed and self.component_wanted: + applied_layers.append(network_layer_name) + self.applied_weight += 1 + self.stamp(module) + self.tick() + + def keep_selected(self, module, network_layer_name, sel_backup): + """Hold a scheduled weight-kind layer on its pristine tensor until the schedule applies the winner.""" + self.backup_size += sel_backup # counted only where this branch keeps the layer; the weight path below re-enters the shared backup call, which counts it then + network_apply_weights(module, None, None, device=self.device) + self.claim(module, network_layer_name, True) + return True + + def group_will_mutate(module, network_layer_name: str, loaded) -> bool: """True when the pass will write to this module: a loaded network covers its layer, a tensor backup awaits restore, or an svd factor stash awaits removal.""" @@ -116,6 +174,108 @@ def should_skip(module, network_layer_name, wanted, stack_sig): return getattr(module, 'network_current_names', ()) == wanted and getattr(module, 'network_current_stack', 'sum') == stack_sig +def try_select(ctx, module, network_layer_name): + """Put the layer under a selection schedule; True when it took the layer. + + The three arms are mutually exclusive and their warnings are keyed, so a + layer that cannot be scheduled reports one reason and falls through. + """ + if not ctx.select_active or not ctx.component_wanted or network_layer_name.startswith('lora_te'): + return False + if lora_sdnq.select_candidate(module, network_layer_name, ctx.component_wanted): # SDNQ pairs ride the channel as separate segments at any bit width; weight rewrites cannot flip a quantized layer + restore_pristine(module, ctx.device) + applied = lora_sdnq.apply_select_cached(module, network_layer_name, ctx.component_wanted) # a stored score record and factor pair serve before the deltas are assembled + if applied is None: + per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=ctx.elimit, per_net=True) + if sel_bias is None: + applied = lora_sdnq.apply_select(module, network_layer_name, per_net, ctx.component_wanted) + if applied is not None: + ctx.claim(module, network_layer_name, applied) + return True + lora_stack.warn_once('select-unridable', f'Network stack: mode={lora_stack.mode()} layer="{network_layer_name}" fallback=sum') # a pair the channel cannot carry (bias delta or malformed member) sums like any unsupported set + elif getattr(module, 'sdnq_dequantizer', None) is not None: # hosting disabled: quantized layers have no side-channel to carry segments and packed backups cannot flip, so the sum paths below take the layer + if any(net.modules.get(network_layer_name, None) is not None for net in l.loaded_networks): + lora_stack.warn_once('select-host-disabled', f'Network stack: mode={lora_stack.mode()} quant=sdnq host=disabled fallback=sum') + else: # other layers select by recomputing the winner from the pristine backup at schedule time + sel_backup = network_backup_weights(module, network_layer_name, ctx.component_wanted, ctx.fuse) + if tensor_backup(module) is not None: # a flip recomputes the winner from the pristine tensor, which fuse mode does not keep + if lora_stack.register_weight_pair_cached(network_layer_name, module, ctx.component_wanted): # a stored score record registers without assembling the pair + return ctx.keep_selected(module, network_layer_name, sel_backup) + per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=ctx.elimit, per_net=True) + if sel_bias is None and lora_stack.register_weight_pair(network_layer_name, module, per_net, ctx.component_wanted): + return ctx.keep_selected(module, network_layer_name, sel_backup) + return False + + +def try_factors(ctx, module, network_layer_name): + """Attach the set to the quantized side channel as exact factors; True when it took the layer.""" + if not lora_sdnq.factor_candidate(module, network_layer_name, ctx.component_wanted): + return False + restore_pristine(module, ctx.device) # an earlier non-factorable set may have requantized this layer + applied = lora_sdnq.apply_factors(module, network_layer_name, ctx.component_wanted) + if applied is None: # the exact path declined; hosting or the weight path takes the layer + return False + ctx.claim(module, network_layer_name, applied) + return True + + +def try_hosted(ctx, module, network_layer_name): + """Host the combined delta on the side channel as truncated factors. + + Returns whether it took the layer and, when it declined after assembling + the delta, that delta, so the weight path applies it without a second + calc. A returned pair of Nones still counts as assembled. + """ + if not lora_sdnq.host_candidate(module, network_layer_name, ctx.component_wanted): + return False, None + restore_pristine(module, ctx.device) # the hosted delta is measured against the pristine base + batch = None + hosted = lora_sdnq.apply_cached(module, network_layer_name, ctx.component_wanted) # a stored entry serves the layer before the delta is assembled + if hosted is None: + batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, elimit=ctx.elimit) + batch = (batch_updown, batch_ex_bias) + if batch_ex_bias is None: # bias deltas need the plain path; weight-only sets ride the side-channel without a weight backup + hosted = lora_sdnq.apply_hosted(module, network_layer_name, batch_updown, ctx.component_wanted) + if hosted is not None: + batch = None # hosting took the delta + if hosted is None: + return False, batch + ctx.claim(module, network_layer_name, hosted) + return True, None + + +def apply_generic(ctx, module, network_layer_name, batch): + """The weight path, which takes any layer the mechanisms above declined.""" + stripped = lora_sdnq.remove_factors(module) # the mechanism gate can decline a layer still carrying attached factors; the weight path must start from the pristine channel + if stripped and not ctx.component_wanted: # factor-mode layers have no tensor backup, dropping the factors is the whole restore + ctx.stamp(module) + ctx.tick() + return + ctx.backup_size += network_backup_weights(module, network_layer_name, ctx.component_wanted, ctx.fuse) + if not ctx.component_wanted: + lora_stack.drop(network_layer_name) # a restored layer must leave the selection schedule + if tensor_backup(module) is None: # fuse mode has no tensor backup, restore stays with network_deactivate + ctx.tick() + return + batch_updown, batch_ex_bias = None, None # restore-only pass, apply with no weights reverts to backup + else: + batch_updown, batch_ex_bias = batch if batch is not None else network_calc_weights(module, network_layer_name, elimit=ctx.elimit) + if batch_updown is not None: + lora_sdnq.note_fallback(module, network_layer_name) # only layers whose quantized weight actually takes a delta + if ctx.fuse: + weight_written, bias_written = network_apply_direct(module, batch_updown, batch_ex_bias, device=ctx.device) + else: + weight_written, bias_written = network_apply_weights(module, batch_updown, batch_ex_bias, device=ctx.device) + if batch_updown is not None or batch_ex_bias is not None: + applied_layers.append(network_layer_name) + ctx.applied_weight += 1 if weight_written else 0 + ctx.applied_bias += 1 if bias_written else 0 + ctx.refused += (batch_updown is not None and not weight_written) + (batch_ex_bias is not None and not bias_written) # a delta the module would not take leaves that layer on its base value + ctx.stamp(module) + bs = round(ctx.backup_size/1024/1024/1024, 2) if ctx.backup_size > 0 else None + ctx.tick(f'networks={len(l.loaded_networks)} modules={ctx.active_components} layers={ctx.total} weights={ctx.applied_weight} bias={ctx.applied_bias} backup={bs} device={ctx.device}') + + def network_activate(include=None, exclude=None): if exclude is None: exclude = [] @@ -123,169 +283,52 @@ def network_activate(include=None, exclude=None): include = [] promote_pending() t0 = time.time() - fuse = lora_overrides.fuse_native() # resolve once: backup and apply passes must agree + ctx = ActivationPass(lora_overrides.fuse_native()) # fuse resolved once: the backup, apply and restore paths must agree with limit_errors("network_activate") as elimit: - sd_model = prepare_model_for_write(getattr(shared.sd_model, "pipe", shared.sd_model)) - group_offload = shared.opts.diffusers_offload_mode == "group" - group_stripped = {} - device = None - modules, components, active_components, total = collect_components(sd_model, include, exclude, default_components, restore_filtered=True) - pbar, task = pass_progress('activate', total, len(l.loaded_networks) > 0) - applied_weight = 0 - applied_bias = 0 - refused = 0 - with devices.inference_context(), pbar: - wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () - stack_sig = lora_stack.signature() + lora_blocks.signature() + lora_sdnq.signature() # tracked beside network_current_names so stack-setting, block-weight and mechanism changes re-apply - select_active = len(l.loaded_networks) > 0 and lora_stack.active_select(len(l.loaded_networks)) # restore-only walks have nothing to stack; the count warning would fire on every network-free generation + ctx.elimit = elimit + ctx.sd_model = prepare_model_for_write(ctx.sd_model) + modules, components, ctx.active_components, ctx.total = collect_components(ctx.sd_model, include, exclude, default_components, restore_filtered=True) + ctx.pbar, ctx.task = pass_progress('activate', ctx.total, len(l.loaded_networks) > 0) + with devices.inference_context(), ctx.pbar: applied_layers.clear() lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind lora_sdnq.hosted_layers.clear() lora_sdnq.factor_layers.clear() lora_sdnq.select_layers.clear() - backup_size = 0 for component in modules.keys(): - component_wanted = wanted_names if component in components else () - device = getattr(sd_model, component, None).device + ctx.component_wanted = ctx.wanted_names if component in components else () # the pass tuple itself, never a copy + ctx.device = getattr(ctx.sd_model, component, None).device for _, module in modules[component]: network_layer_name = getattr(module, 'network_layer_name', None) - if should_skip(module, network_layer_name, component_wanted, stack_sig): - if task is not None: - pbar.update(task, advance=1) + if should_skip(module, network_layer_name, ctx.component_wanted, ctx.stack_sig): + ctx.tick() continue lora_stack.drop(network_layer_name) # re-application invalidates any live selection schedule; the select branch re-registers - if group_offload and component not in group_stripped and group_will_mutate(module, network_layer_name, l.loaded_networks): - device = group_offload_strip(sd_model, component, group_stripped) - calced = False # tracks whether this iteration assembled the delta, so the fallthrough reuses it instead of recomputing - if select_active and component_wanted and not network_layer_name.startswith('lora_te'): - if lora_sdnq.select_candidate(module, network_layer_name, component_wanted): # SDNQ pairs ride the channel as separate segments at any bit width; weight rewrites cannot flip a quantized layer - restore_pristine(module, device) - applied = lora_sdnq.apply_select_cached(module, network_layer_name, component_wanted) # a stored score record and factor pair serve before the deltas are assembled - if applied is None: - per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=elimit, per_net=True) - if sel_bias is None: - applied = lora_sdnq.apply_select(module, network_layer_name, per_net, component_wanted) - if applied is not None: - if applied and component_wanted: - applied_layers.append(network_layer_name) - applied_weight += 1 - module.network_current_names = component_wanted - module.network_current_stack = stack_sig - if task is not None: - pbar.update(task, advance=1) - continue - lora_stack.warn_once('select-unridable', f'Network stack: mode={lora_stack.mode()} layer="{network_layer_name}" fallback=sum') # a pair the channel cannot carry (bias delta or malformed member) sums like any unsupported set - elif getattr(module, 'sdnq_dequantizer', None) is not None: # hosting disabled: quantized layers have no side-channel to carry segments and packed backups cannot flip, so the sum paths below take the layer - if any(net.modules.get(network_layer_name, None) is not None for net in l.loaded_networks): - lora_stack.warn_once('select-host-disabled', f'Network stack: mode={lora_stack.mode()} quant=sdnq host=disabled fallback=sum') - else: # other layers select by recomputing the winner from the pristine backup at schedule time - sel_backup = network_backup_weights(module, network_layer_name, component_wanted, fuse) - if tensor_backup(module) is not None: # a flip recomputes the winner from the pristine tensor, which fuse mode does not keep - if lora_stack.register_weight_pair_cached(network_layer_name, module, component_wanted): # a stored score record registers without assembling the pair - backup_size += sel_backup - network_apply_weights(module, None, None, device=device) # pristine until the schedule applies the winner - applied_layers.append(network_layer_name) - applied_weight += 1 - module.network_current_names = component_wanted - module.network_current_stack = stack_sig - if task is not None: - pbar.update(task, advance=1) - continue - per_net, sel_bias = network_calc_weights(module, network_layer_name, elimit=elimit, per_net=True) - if sel_bias is None and lora_stack.register_weight_pair(network_layer_name, module, per_net, component_wanted): - backup_size += sel_backup # counted only when this branch keeps the layer; the fallthrough re-enters the shared backup call below, which counts it then - network_apply_weights(module, None, None, device=device) # pristine until the schedule applies the winner - applied_layers.append(network_layer_name) - applied_weight += 1 - module.network_current_names = component_wanted - module.network_current_stack = stack_sig - if task is not None: - pbar.update(task, advance=1) - continue - if lora_sdnq.factor_candidate(module, network_layer_name, component_wanted): - restore_pristine(module, device) # an earlier non-factorable set may have requantized this layer - applied = lora_sdnq.apply_factors(module, network_layer_name, component_wanted) - if applied is not None: # exact path took the layer; None falls through to hosting or requantize - if applied and component_wanted: - applied_layers.append(network_layer_name) - applied_weight += 1 - module.network_current_names = component_wanted - module.network_current_stack = stack_sig - if task is not None: - pbar.update(task, advance=1) - continue - if lora_sdnq.host_candidate(module, network_layer_name, component_wanted): - restore_pristine(module, device) # the hosted delta is measured against the pristine base - hosted = lora_sdnq.apply_cached(module, network_layer_name, component_wanted) # a stored entry serves the layer before the delta is assembled - if hosted is None: - batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, elimit=elimit) - calced = True - if batch_ex_bias is None: # bias deltas need the plain path; weight-only sets ride the side-channel without a weight backup - hosted = lora_sdnq.apply_hosted(module, network_layer_name, batch_updown, component_wanted) - if hosted is not None: - batch_updown, batch_ex_bias = None, None - del batch_updown, batch_ex_bias - if hosted is not None: - if hosted and component_wanted: - applied_layers.append(network_layer_name) - applied_weight += 1 - module.network_current_names = component_wanted - module.network_current_stack = stack_sig - if task is not None: - pbar.update(task, advance=1) - continue - stripped = lora_sdnq.remove_factors(module) # the mechanism gate can decline a layer still carrying attached factors; the weight path must start from the pristine channel - if stripped and not component_wanted: # factor-mode layers have no tensor backup, dropping the factors is the whole restore - module.network_current_names = () - module.network_current_stack = stack_sig - if task is not None: - pbar.update(task, advance=1) + if ctx.group_offload and component not in ctx.group_stripped and group_will_mutate(module, network_layer_name, l.loaded_networks): + ctx.device = group_offload_strip(ctx.sd_model, component, ctx.group_stripped) + if try_select(ctx, module, network_layer_name): continue - backup_size += network_backup_weights(module, network_layer_name, component_wanted, fuse) - if not component_wanted: - lora_stack.drop(network_layer_name) # a restored layer must leave the selection schedule - if tensor_backup(module) is None: # fuse mode has no tensor backup, restore stays with network_deactivate - if task is not None: - pbar.update(task, advance=1) - continue - batch_updown, batch_ex_bias = None, None # restore-only pass, apply with no weights reverts to backup - else: - if not calced: # the host branch may have assembled the delta already; a declined layer reuses it - batch_updown, batch_ex_bias = network_calc_weights(module, network_layer_name, elimit=elimit) - if batch_updown is not None: - lora_sdnq.note_fallback(module, network_layer_name) # only layers whose quantized weight actually takes a delta - if fuse: - weight_written, bias_written = network_apply_direct(module, batch_updown, batch_ex_bias, device=device) - else: - weight_written, bias_written = network_apply_weights(module, batch_updown, batch_ex_bias, device=device) - if batch_updown is not None or batch_ex_bias is not None: - applied_layers.append(network_layer_name) - applied_weight += 1 if weight_written else 0 - applied_bias += 1 if bias_written else 0 - refused += (batch_updown is not None and not weight_written) + (batch_ex_bias is not None and not bias_written) # a delta the module would not take leaves that layer on its base value - batch_updown, batch_ex_bias = None, None - del batch_updown, batch_ex_bias - module.network_current_names = component_wanted - module.network_current_stack = stack_sig - if task is not None: - bs = round(backup_size/1024/1024/1024, 2) if backup_size > 0 else None - pbar.update(task, advance=1, description=f'networks={len(l.loaded_networks)} modules={active_components} layers={total} weights={applied_weight} bias={applied_bias} backup={bs} device={device}') - - if task is not None and len(applied_layers) == 0: - pbar.remove_task(task) # hide progress bar for no action + if try_factors(ctx, module, network_layer_name): + continue + hosted, batch = try_hosted(ctx, module, network_layer_name) + if hosted: + continue + apply_generic(ctx, module, network_layer_name, batch) + if ctx.task is not None and len(applied_layers) == 0: + ctx.pbar.remove_task(ctx.task) # hide progress bar for no action global native_active, refused_writes # pylint: disable=global-statement lora_sdnq.report_fallbacks() native_active = len(l.loaded_networks) > 0 - refused_writes = refused - l.last_backup_size = backup_size + refused_writes = ctx.refused + l.last_backup_size = ctx.backup_size l.timer.activate += time.time() - t0 - if refused > 0: - log.error(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} weights={applied_weight} bias={applied_bias} refused={refused} network partially applied') + if ctx.refused > 0: + log.error(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} weights={ctx.applied_weight} bias={ctx.applied_bias} refused={ctx.refused} network partially applied') if l.debug and len(l.loaded_networks) > 0: - log.debug(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} modules={active_components} layers={total} weights={applied_weight} bias={applied_bias} refused={refused} backup={round(backup_size/1024/1024/1024, 2)} fuse={fuse}:{shared.opts.lora_fuse_diffusers} device={device} time={l.timer.summary}') + log.debug(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} modules={ctx.active_components} layers={ctx.total} weights={ctx.applied_weight} bias={ctx.applied_bias} refused={ctx.refused} backup={round(ctx.backup_size/1024/1024/1024, 2)} fuse={ctx.fuse}:{shared.opts.lora_fuse_diffusers} device={ctx.device} time={l.timer.summary}') modules.clear() - if len(applied_layers) > 0 or shared.opts.diffusers_offload_mode == "sequential" or len(group_stripped) > 0: - sd_models.set_diffuser_offload(sd_model, op="model") + if len(applied_layers) > 0 or shared.opts.diffusers_offload_mode == "sequential" or len(ctx.group_stripped) > 0: + sd_models.set_diffuser_offload(ctx.sd_model, op="model") def effective_mode(): diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 191429890..dbfd89482 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -900,6 +900,41 @@ def test_route_fat_dense_delta_requantizes(): return True +def test_declined_host_delta_is_not_recomputed(): + layer = build_layer('uint4') + torch.manual_seed(21) + D = torch.randn(OUT_F, IN_F, device=DEVICE) * 1e-2 # fat and full-rank: hosting assembles the delta and then routes it to the grid + net = make_dense_net('recompute', layer, D) + with host_rank(256), mock_model(lin=layer), counting_calc() as calls: + activate(net) + assert not hasattr(layer, 'sdnq_lora_svd_stash'), 'the fixture must reach the weight path, not the side channel' + assert calls['n'] == 1, f'a declined host hands its delta on instead of assembling it twice, got {calls["n"]}' + return True + + +def test_pass_presents_one_wanted_names_tuple(): + from modules.lora import lora_factor_cache as fc + layer = build_layer('uint4') + _A, _B, D = make_delta(sigma=3e-3) + net = make_dense_net('identity', layer, D) + seen = [] # holds the objects, so a freed tuple cannot lend its address to the next one + real = fc.begin_pass + + def recording(wanted_names): + seen.append(wanted_names) + return real(wanted_names) + + fc.begin_pass = recording + try: + with host_rank(64), mock_model(lin=layer): + activate(net) + finally: + fc.begin_pass = real + assert len(seen) >= 2, f'the hosted path must consult the cache more than once for this to prove anything, got {len(seen)}' + assert all(x is seen[0] for x in seen), 'one walk must present one tuple: the cache memoizes its entry on identity, and an equal rebuild rereads it from disk' + return True + + def test_route_rule_terms_gate_both_ways(): layer = build_layer('uint4') torch.manual_seed(23) @@ -2914,7 +2949,8 @@ def run_tests(): log.warning('=== Hosting ===') for fn in [test_hosted_low_rank_delta_is_kept, test_hosted_dense_delta_beats_requant, test_hosted_skips_int8, test_hosted_disabled_by_option, test_hosted_transitions_and_rng_isolation, - test_route_fat_dense_delta_requantizes, test_route_rule_terms_gate_both_ways, test_route_low_rank_fat_delta_stays_hosted, + test_route_fat_dense_delta_requantizes, test_declined_host_delta_is_not_recomputed, test_pass_presents_one_wanted_names_tuple, + test_route_rule_terms_gate_both_ways, test_route_low_rank_fat_delta_stays_hosted, test_route_mixed_set_keeps_hosting, test_route_svd_checkpoint_keeps_hosting, test_route_dense_stack_keeps_hosting, test_route_replay_from_cache, test_hosted_null_tail_collapses_to_effective_rank, test_hosted_flat_spectrum_keeps_cap]: run_test(CAT_HOST, fn) From 4886761980ad663aabb7591d42da52a6f4487369 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 04:59:47 +0100 Subject: [PATCH 097/270] fix(lora): finish the activation pass when it aborts The error limiter halts a pass by raising, and nothing between the raise and the caller put the model back. A halted pass left group offload hooks stripped from every component the walk had reached, left a sequential model on the cpu with offload disabled, and left the counters other modules read describing the pass before it. The epilogue moves into finish_pass under a finally, so the model returns to its offload mode and the counters describe the pass that just ran. The abort still reaches the caller. Pass state is reset in one place in lora_sdnq now. Two of the six accumulators were not being cleared at the start of a pass, and a stale routed layer suppresses the fallback count for that layer next time. --- modules/lora/lora_sdnq.py | 10 ++++ modules/lora/networks.py | 92 +++++++++++++++++++--------------- test/test-sdnq-lora-factors.py | 34 ++++++++++++- 3 files changed, 94 insertions(+), 42 deletions(-) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 35635b227..cb257a2f9 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -564,6 +564,16 @@ def note_fallback(self, network_layer_name): fallback_layers.append(network_layer_name) +def reset_pass(): + """Clear every per-pass accumulator, so a pass that raised leaves nothing behind for the next one.""" + fallback_layers.clear() + hosted_layers.clear() + hosted_ranks.clear() + factor_layers.clear() + select_layers.clear() + routed_layers.clear() # note_fallback reads this to suppress double counting, so a stale entry silences a real fallback + + def report_fallbacks(): hits, misses = lora_factor_cache.flush() if hits > 0 or misses > 0: diff --git a/modules/lora/networks.py b/modules/lora/networks.py index da606a16c..2d78b72e0 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -276,46 +276,13 @@ def apply_generic(ctx, module, network_layer_name, batch): ctx.tick(f'networks={len(l.loaded_networks)} modules={ctx.active_components} layers={ctx.total} weights={ctx.applied_weight} bias={ctx.applied_bias} backup={bs} device={ctx.device}') -def network_activate(include=None, exclude=None): - if exclude is None: - exclude = [] - if include is None: - include = [] - promote_pending() - t0 = time.time() - ctx = ActivationPass(lora_overrides.fuse_native()) # fuse resolved once: the backup, apply and restore paths must agree - with limit_errors("network_activate") as elimit: - ctx.elimit = elimit - ctx.sd_model = prepare_model_for_write(ctx.sd_model) - modules, components, ctx.active_components, ctx.total = collect_components(ctx.sd_model, include, exclude, default_components, restore_filtered=True) - ctx.pbar, ctx.task = pass_progress('activate', ctx.total, len(l.loaded_networks) > 0) - with devices.inference_context(), ctx.pbar: - applied_layers.clear() - lora_sdnq.fallback_layers.clear() # a raise mid-pass leaves stale entries behind - lora_sdnq.hosted_layers.clear() - lora_sdnq.factor_layers.clear() - lora_sdnq.select_layers.clear() - for component in modules.keys(): - ctx.component_wanted = ctx.wanted_names if component in components else () # the pass tuple itself, never a copy - ctx.device = getattr(ctx.sd_model, component, None).device - for _, module in modules[component]: - network_layer_name = getattr(module, 'network_layer_name', None) - if should_skip(module, network_layer_name, ctx.component_wanted, ctx.stack_sig): - ctx.tick() - continue - lora_stack.drop(network_layer_name) # re-application invalidates any live selection schedule; the select branch re-registers - if ctx.group_offload and component not in ctx.group_stripped and group_will_mutate(module, network_layer_name, l.loaded_networks): - ctx.device = group_offload_strip(ctx.sd_model, component, ctx.group_stripped) - if try_select(ctx, module, network_layer_name): - continue - if try_factors(ctx, module, network_layer_name): - continue - hosted, batch = try_hosted(ctx, module, network_layer_name) - if hosted: - continue - apply_generic(ctx, module, network_layer_name, batch) - if ctx.task is not None and len(applied_layers) == 0: - ctx.pbar.remove_task(ctx.task) # hide progress bar for no action +def finish_pass(ctx, t0): + """Publish what the pass did and put the model back under its offload mode. + + Runs even when the error limiter aborts the walk: the hooks it stripped + and the offload it disabled have to come back, and the counters other + modules read have to describe this pass. + """ global native_active, refused_writes # pylint: disable=global-statement lora_sdnq.report_fallbacks() native_active = len(l.loaded_networks) > 0 @@ -326,11 +293,54 @@ def network_activate(include=None, exclude=None): log.error(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} weights={ctx.applied_weight} bias={ctx.applied_bias} refused={ctx.refused} network partially applied') if l.debug and len(l.loaded_networks) > 0: log.debug(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} modules={ctx.active_components} layers={ctx.total} weights={ctx.applied_weight} bias={ctx.applied_bias} refused={ctx.refused} backup={round(ctx.backup_size/1024/1024/1024, 2)} fuse={ctx.fuse}:{shared.opts.lora_fuse_diffusers} device={ctx.device} time={l.timer.summary}') - modules.clear() if len(applied_layers) > 0 or shared.opts.diffusers_offload_mode == "sequential" or len(ctx.group_stripped) > 0: sd_models.set_diffuser_offload(ctx.sd_model, op="model") +def network_activate(include=None, exclude=None): + if exclude is None: + exclude = [] + if include is None: + include = [] + promote_pending() + t0 = time.time() + ctx = ActivationPass(lora_overrides.fuse_native()) # fuse resolved once: the backup, apply and restore paths must agree + applied_layers.clear() + lora_sdnq.reset_pass() + modules = {} + try: + with limit_errors("network_activate") as elimit: + ctx.elimit = elimit + ctx.sd_model = prepare_model_for_write(ctx.sd_model) + modules, components, ctx.active_components, ctx.total = collect_components(ctx.sd_model, include, exclude, default_components, restore_filtered=True) + ctx.pbar, ctx.task = pass_progress('activate', ctx.total, len(l.loaded_networks) > 0) + with devices.inference_context(), ctx.pbar: + for component in modules.keys(): + ctx.component_wanted = ctx.wanted_names if component in components else () # the pass tuple itself, never a copy + ctx.device = getattr(ctx.sd_model, component, None).device + for _, module in modules[component]: + network_layer_name = getattr(module, 'network_layer_name', None) + if should_skip(module, network_layer_name, ctx.component_wanted, ctx.stack_sig): + ctx.tick() + continue + lora_stack.drop(network_layer_name) # re-application invalidates any live selection schedule; the select branch re-registers + if ctx.group_offload and component not in ctx.group_stripped and group_will_mutate(module, network_layer_name, l.loaded_networks): + ctx.device = group_offload_strip(ctx.sd_model, component, ctx.group_stripped) + if try_select(ctx, module, network_layer_name): + continue + if try_factors(ctx, module, network_layer_name): + continue + hosted, batch = try_hosted(ctx, module, network_layer_name) + if hosted: + continue + apply_generic(ctx, module, network_layer_name, batch) + if ctx.task is not None and len(applied_layers) == 0: + ctx.pbar.remove_task(ctx.task) # hide progress bar for no action + finally: + finish_pass(ctx, t0) + modules.clear() + + def effective_mode(): """Weight-state label for load logs: backup and fuse say how touched weights restore, factor means the whole load rode the svd channel and unload just drops factors.""" if getattr(l, 'last_backup_size', 0) > 0: diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index dbfd89482..7eec5928f 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -2515,6 +2515,38 @@ def test_nunchaku_entries_carry_the_network_interface(): return True +def test_aborted_pass_still_publishes_its_state(): + layer = build_layer('uint4') + _A, _B, D = make_delta() + net = make_dense_net('aborted', layer, D) + reported = {'n': 0} + real_prepare = networks.prepare_model_for_write + real_report = lora_sdnq.report_fallbacks + + def exploding(_sd_model): + raise RuntimeError('offload rebuild failed') # a raise before the walk binds anything the epilogue reads + + def counting_report(): + reported['n'] += 1 + real_report() + + networks.prepare_model_for_write = exploding + lora_sdnq.report_fallbacks = counting_report + try: + with mock_model(lin=layer): + raised = None + try: + activate(net) + except RuntimeError as e: + raised = e + assert raised is not None and 'offload rebuild failed' in str(raised), f'the original failure must reach the caller, got {raised!r}' + assert reported['n'] == 1, 'an aborted pass must still publish its counters and put the model back under its offload mode' + finally: + networks.prepare_model_for_write = real_prepare + lora_sdnq.report_fallbacks = real_report + return True + + def test_stacked_shape_mismatch_falls_back(): from types import SimpleNamespace layer = build_layer('uint4') @@ -2986,7 +3018,7 @@ def run_tests(): run_test(CAT_COMPILE, fn) log.warning('=== Robustness ===') for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back, test_nunchaku_entries_carry_the_network_interface, - test_four_dim_oft_blocks_load_as_boft]: + test_four_dim_oft_blocks_load_as_boft, test_aborted_pass_still_publishes_its_state]: run_test(CAT_ROBUST, fn) log.warning('=== Block weights ===') for fn in [test_block_index_sd_unet_layout, test_block_index_sdxl_unet_layout, test_block_index_flux_chains_concatenate, From e8659c87acf3fccf15070d8032c4f7e835d0fa4c Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 05:01:16 +0100 Subject: [PATCH 098/270] fix(lora): record how the pass left the weights The mode shown in the load and unload lines was derived at print time from the live fuse setting, so a set applied under one setting was reported under whatever the setting said later, and the unload line described the pass that was about to replace it rather than the one being removed. The pass records the mode it actually used. last_backup_size was created on lora_common by assignment from networks.py and read back through a getattr default; both fields are declared where they live now. --- modules/lora/lora_common.py | 2 ++ modules/lora/networks.py | 16 ++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/modules/lora/lora_common.py b/modules/lora/lora_common.py index 8fc5532a5..51d70fdbf 100644 --- a/modules/lora/lora_common.py +++ b/modules/lora/lora_common.py @@ -19,3 +19,5 @@ module_types = [ loaded_networks: list = [] # no type due to circular import previously_loaded_networks: list = [] # no type due to circular import extra_network_lora = None # initialized in extra_networks.py +last_backup_size: int = 0 # bytes of weight backups the last activate pass held +last_mode: str = '' # how that pass left the weights: backup, fuse or factor diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 2d78b72e0..cb65edddc 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -288,6 +288,7 @@ def finish_pass(ctx, t0): native_active = len(l.loaded_networks) > 0 refused_writes = ctx.refused l.last_backup_size = ctx.backup_size + l.last_mode = 'backup' if ctx.backup_size > 0 else ('fuse' if ctx.fuse else 'factor') l.timer.activate += time.time() - t0 if ctx.refused > 0: log.error(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} weights={ctx.applied_weight} bias={ctx.applied_bias} refused={ctx.refused} network partially applied') @@ -342,12 +343,15 @@ def network_activate(include=None, exclude=None): def effective_mode(): - """Weight-state label for load logs: backup and fuse say how touched weights restore, factor means the whole load rode the svd channel and unload just drops factors.""" - if getattr(l, 'last_backup_size', 0) > 0: - return 'backup' - if lora_overrides.fuse_native(): - return 'fuse' - return 'factor' + """Weight-state label for load logs: backup and fuse say how touched weights restore, factor means the whole load rode the svd channel and unload just drops factors. + + Recorded by the pass rather than derived here, so the unload line + describes the pass being unloaded even when the settings it ran under + have since changed. + """ + if l.last_mode: + return l.last_mode + return 'fuse' if lora_overrides.fuse_native() else 'factor' def network_deactivate(include=None, exclude=None): From ee21c64e6798518d4d37b0cf6699c8030f935cee Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 05:03:11 +0100 Subject: [PATCH 099/270] refactor(lora): walk one component list in both passes Deactivate carried its own shorter copy of the component list, missing text_encoder_4 and transformer_2. Nothing depends on the difference today: layer names are stamped only on text_encoder, text_encoder_2, unet, transformer and llm_adapter, so modules in the other components are skipped by both passes. Sharing the list keeps the two from drifting apart if that stamping ever widens. --- modules/lora/networks.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/lora/networks.py b/modules/lora/networks.py index cb65edddc..b0991c4c9 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -16,7 +16,6 @@ applied_layers: list[str] = [] refused_writes: int = 0 # deltas the modules would not take on the last activate pass; infotext reports the network as partial native_active: bool = False default_components = ['text_encoder', 'text_encoder_2', 'text_encoder_3', 'text_encoder_4', 'unet', 'transformer', 'transformer_2', 'llm_adapter'] -deactivate_components = ['text_encoder', 'text_encoder_2', 'text_encoder_3', 'unet', 'transformer', 'llm_adapter'] class ActivationPass: @@ -369,7 +368,7 @@ def network_deactivate(include=None, exclude=None): sd_model = prepare_model_for_write(getattr(shared.sd_model, "pipe", shared.sd_model)) group_offload = shared.opts.diffusers_offload_mode == "group" group_stripped = {} - modules, _components, active_components, total = collect_components(sd_model, include, exclude, deactivate_components, restore_filtered=False) + modules, _components, active_components, total = collect_components(sd_model, include, exclude, default_components, restore_filtered=False) pbar, task = pass_progress('deactivate', total, len(l.previously_loaded_networks) > 0 and l.debug) refused = 0 with devices.inference_context(), pbar: From 7de65eca166fda1c6db7b5ebd2b0676ef93b7534 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 05:04:49 +0100 Subject: [PATCH 100/270] docs(lora): state the activation contracts where the walk lives The rules the walk depends on were spread across the comments that happened to need them, and the attributes it keeps on the model's modules were written from four files with the ownership recorded nowhere. Both are stated once in the module docstring, including the identity the factor cache keys its pass entry on and the three writers that share the svd tensors. --- modules/lora/lora_sdnq.py | 2 +- modules/lora/networks.py | 41 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index cb257a2f9..7dcac8aaa 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -47,7 +47,7 @@ a low-rank delta hosts exactly however fat it is. import torch from modules import devices, shared -from modules.lora import lora_calib, lora_factor_cache, lora_stack +from modules.lora import lora_calib, lora_factor_cache, lora_stack # lora_calib registers its model-load hook on import, so this one has to stay eager from modules.lora import lora_common as l from modules.logger import log diff --git a/modules/lora/networks.py b/modules/lora/networks.py index b0991c4c9..2a3a4ee43 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -1,3 +1,44 @@ +"""Applies the loaded networks to the model and takes them off again. + +One walk visits every module of every component and offers each layer to +the mechanisms in a fixed order: a selection schedule, exact factors on the +quantized side channel, a truncated host on that channel, and the weight +path, which takes whatever the others declined. Order is semantics, not +preference: each mechanism is more faithful than the one after it, and only +the weight path can take any layer. + +Contracts the walk depends on: + +- The wanted-name tuple is built once per pass and handed to every layer as + the same object. The factor cache memoizes its pass entry on that + identity, so an equal tuple rebuilt per component makes every lookup + reread the entry from disk. +- Mechanism apply functions answer with three states: applied, took the + layer without changing it, or declined. Only a decline falls through. +- A layer is offered to a mechanism on its checkpoint weights, so factors + attach to a clean base and deltas are measured against one. `apply_cached` + can strip factors and still decline, which is why the weight path strips + again before it writes. +- The fuse decision is resolved once per pass and shared by backup, apply + and restore. Backup mode keeps a tensor and restores in the walk itself; + fuse mode keeps a marker and subtracts the delta in network_deactivate. +- Selection registration reads the factors it schedules, so it follows the + attach that produced them. + +State the walk keeps on the model's own modules: + +- network_layer_name: written by lora_convert and native_adapter. +- network_current_names and network_current_stack: written here, always + together, and read together as the skip key. +- network_weights_backup, network_bias_backup and the sdnq_*_backup set: + written by lora_apply, a tensor in backup mode and True as the fuse marker. +- sdnq_lora_svd_stash: written by lora_sdnq, holding the checkpoint's own + factors while a set is attached. +- sdnq_calib_rms: written by lora_calib. +- svd_up and svd_down: owned by sdnq, attached by lora_sdnq, restored by + lora_apply, and written in segments by lora_stack at flip time. +""" + from contextlib import nullcontext import time import rich.progress as rp From 2ae31ce46fad639d6c1f022b660744970dca4e90 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 05:06:01 +0100 Subject: [PATCH 101/270] refactor(lora): name the gate both channel mechanisms share Hosting asked select_candidate whether it could take a layer, and that function reads the host rank, so each mechanism was gated through the other one's name. The shared conditions move into channel_candidate, which says what they actually test: the layer is quantized, a loaded network covers it, and there is a rank budget to spend on it. --- modules/lora/lora_sdnq.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 7dcac8aaa..3c39979db 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -259,8 +259,8 @@ def append_factors(self, ups, downs): return segments, deq.use_quantized_matmul -def select_candidate(self, network_layer_name, wanted_names): - """True when this layer can carry a set on the svd channel; select pairs ride it at any bit width.""" +def channel_candidate(self, network_layer_name, wanted_names): + """True when this layer can carry a set on the svd channel: quantized, covered, and given a rank to spend.""" if not enabled(): return False if int(getattr(shared.opts, 'lora_sdnq_host_rank', 0) or 0) <= 0: @@ -272,9 +272,14 @@ def select_candidate(self, network_layer_name, wanted_names): return any(net.modules.get(network_layer_name, None) is not None for net in l.loaded_networks) +def select_candidate(self, network_layer_name, wanted_names): + """True when a select pair can ride this layer's svd channel; pairs ride it at any bit width.""" + return channel_candidate(self, network_layer_name, wanted_names) + + def host_candidate(self, network_layer_name, wanted_names): """True when this layer's set should ride the svd channel as a truncated svd: non-factorable sets below 8 bits, dense-combined sets at any width.""" - if not select_candidate(self, network_layer_name, wanted_names): + if not channel_candidate(self, network_layer_name, wanted_names): return False if lora_stack.mode() in lora_stack.DENSE_MODES and not network_layer_name.startswith('lora_te'): if sum(1 for net in l.loaded_networks if net.modules.get(network_layer_name, None) is not None) >= 2: From 5538b193909b7cd7501e99f4f2bdc1cd98937c56 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 05:10:34 +0100 Subject: [PATCH 102/270] refactor(lora): extract the lokr operand rebuild The seventeen lines that rebuild w1 and w2 from whatever the file stored were copied into all three lokr variants, character for character. They move to the base class; each variant keeps only the part that differs, which is how it addresses the product. The base class keeps its conv branch, which the two chunk variants deliberately lack: those address 2-d fused weights. --- modules/lora/network_lokr.py | 45 ++++++++---------------------------- 1 file changed, 9 insertions(+), 36 deletions(-) diff --git a/modules/lora/network_lokr.py b/modules/lora/network_lokr.py index 096d7f568..0f2328a9e 100644 --- a/modules/lora/network_lokr.py +++ b/modules/lora/network_lokr.py @@ -32,7 +32,8 @@ class NetworkModuleLokr(network.NetworkModule): # pylint: disable=abstract-metho self.dim = self.w2b.shape[0] if self.w2b is not None else self.dim self.t2 = weights.w.get("lokr_t2") - def calc_updown(self, target): + def rebuild_operands(self, target): + """The two Kronecker operands on the target's device and dtype, each either stored whole or rebuilt from its factors.""" if self.w1 is not None: w1 = self.w1.to(target.device, dtype=target.dtype) else: @@ -50,8 +51,12 @@ class NetworkModuleLokr(network.NetworkModule): # pylint: disable=abstract-metho w2a = self.w2a.to(target.device, dtype=target.dtype) w2b = self.w2b.to(target.device, dtype=target.dtype) w2 = lyco_helpers.make_weight_cp(t2, w2a, w2b) + return w1, w2 + + def calc_updown(self, target): + w1, w2 = self.rebuild_operands(target) output_shape = [w1.size(0) * w2.size(0), w1.size(1) * w2.size(1)] - if len(target.shape) == 4: + if len(target.shape) == 4: # a conv target keeps its own shape; the chunk variants below only ever address 2-d fused weights output_shape = target.shape updown = make_kron(output_shape, w1, w2) return self.finalize_updown(updown, target, output_shape) @@ -70,23 +75,7 @@ class NetworkModuleLokrChunk(NetworkModuleLokr): self.num_chunks = num_chunks def calc_updown(self, target): - if self.w1 is not None: - w1 = self.w1.to(target.device, dtype=target.dtype) - else: - w1a = self.w1a.to(target.device, dtype=target.dtype) - w1b = self.w1b.to(target.device, dtype=target.dtype) - w1 = w1a @ w1b - if self.w2 is not None: - w2 = self.w2.to(target.device, dtype=target.dtype) - elif self.t2 is None: - w2a = self.w2a.to(target.device, dtype=target.dtype) - w2b = self.w2b.to(target.device, dtype=target.dtype) - w2 = w2a @ w2b - else: - t2 = self.t2.to(target.device, dtype=target.dtype) - w2a = self.w2a.to(target.device, dtype=target.dtype) - w2b = self.w2b.to(target.device, dtype=target.dtype) - w2 = lyco_helpers.make_weight_cp(t2, w2a, w2b) + w1, w2 = self.rebuild_operands(target) full_shape = [w1.size(0) * w2.size(0), w1.size(1) * w2.size(1)] updown = make_kron(full_shape, w1, w2) updown = torch.chunk(updown, self.num_chunks, dim=0)[self.chunk_index] @@ -109,23 +98,7 @@ class NetworkModuleLokrSliceChunk(NetworkModuleLokr): self.end_row = end_row def calc_updown(self, target): - if self.w1 is not None: - w1 = self.w1.to(target.device, dtype=target.dtype) - else: - w1a = self.w1a.to(target.device, dtype=target.dtype) - w1b = self.w1b.to(target.device, dtype=target.dtype) - w1 = w1a @ w1b - if self.w2 is not None: - w2 = self.w2.to(target.device, dtype=target.dtype) - elif self.t2 is None: - w2a = self.w2a.to(target.device, dtype=target.dtype) - w2b = self.w2b.to(target.device, dtype=target.dtype) - w2 = w2a @ w2b - else: - t2 = self.t2.to(target.device, dtype=target.dtype) - w2a = self.w2a.to(target.device, dtype=target.dtype) - w2b = self.w2b.to(target.device, dtype=target.dtype) - w2 = lyco_helpers.make_weight_cp(t2, w2a, w2b) + w1, w2 = self.rebuild_operands(target) full_shape = [w1.size(0) * w2.size(0), w1.size(1) * w2.size(1)] updown = make_kron(full_shape, w1, w2) updown = updown[self.start_row:self.end_row] From 35b935204bd3321a0d9bf23376f348a47db9dfd7 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 30 Aug 2026 05:11:53 +0100 Subject: [PATCH 103/270] test(lora): assert every dispatched arch is native eligible Two tables decide the native path: one says which architectures may take it, the other says which loader they get. An entry in the second without one in the first is a loader nothing can reach, and nothing checked that. --- test/test-sdnq-lora-factors.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 7eec5928f..82a125283 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -2515,6 +2515,13 @@ def test_nunchaku_entries_carry_the_network_interface(): return True +def test_native_dispatch_archs_are_native_eligible(): + from modules.lora import lora_load, lora_overrides + missing = sorted(set(lora_load.NATIVE_DISPATCH) - set(lora_overrides.allow_native)) + assert not missing, f'an arch with a native loader that the method choice sends elsewhere never reaches it: {missing}' + return True + + def test_aborted_pass_still_publishes_its_state(): layer = build_layer('uint4') _A, _B, D = make_delta() @@ -3018,7 +3025,8 @@ def run_tests(): run_test(CAT_COMPILE, fn) log.warning('=== Robustness ===') for fn in [test_remove_factors_after_device_move, test_stacked_shape_mismatch_falls_back, test_nunchaku_entries_carry_the_network_interface, - test_four_dim_oft_blocks_load_as_boft, test_aborted_pass_still_publishes_its_state]: + test_four_dim_oft_blocks_load_as_boft, test_aborted_pass_still_publishes_its_state, + test_native_dispatch_archs_are_native_eligible]: run_test(CAT_ROBUST, fn) log.warning('=== Block weights ===') for fn in [test_block_index_sd_unet_layout, test_block_index_sdxl_unet_layout, test_block_index_flux_chains_concatenate, From 34d9d304db0fca7e20e2c332c3f22cad2d679a1c Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 30 Aug 2026 11:51:19 +0200 Subject: [PATCH 104/270] modular guiders and other stuff Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 13 ++- TODO.md | 22 ++--- extensions-builtin/sdnq | 2 +- modules/control/run.py | 21 ++-- modules/img2img.py | 23 ++--- modules/modular.py | 8 +- modules/modular_guiders.py | 166 ++++++++++++++++++-------------- modules/processing.py | 13 ++- modules/processing_args.py | 11 ++- modules/processing_callbacks.py | 6 +- modules/processing_class.py | 31 +++--- modules/processing_diffusers.py | 27 +++--- modules/processing_info.py | 4 +- modules/processing_prompt.py | 10 +- modules/safe.py | 2 +- modules/sd_models.py | 8 +- modules/taesd/taehv.py | 2 + modules/txt2img.py | 12 +-- modules/ui_control.py | 21 ++-- modules/ui_guidance.py | 103 ++++++++------------ modules/ui_img2img.py | 26 +++-- modules/ui_txt2img.py | 26 +++-- modules/vae/sd_vae_taesd.py | 3 +- scripts/xyz/xyz_grid_classes.py | 8 +- ui/autocomplete.ts | 2 +- ui/autocomplete_xn.ts | 2 +- ui/dist/sdnext.mjs | 13 +-- ui/dist/sdnext.mjs.map | 4 +- ui/dynamicUI.ts | 2 +- ui/gallery.ts | 3 +- ui/settings.ts | 2 +- ui/ui.ts | 2 +- 32 files changed, 300 insertions(+), 298 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95107a94f..68ad17ed5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,12 +20,17 @@ *note*: this is a breaking change - if you had custom attention settings in previous releases, you will need to re-apply them in the new settings section - new `sparse-attention` method that can be combined with other attention methods to reduce memory usage and improve performance on large models +- **Modular Pipelines** + - *TODO*: see [Modular Pipelines docs](https://vladmandic.github.io/sdnext-docs/Modular-Pipelines) for details and usage instructions + - implement progress and preview + - intercept and profiling hooks + - full modular guidance + - on-demand convert standard model on-demand - **Internal** - - modular pipelines intercept and profiling hooks - - modular pipelines convert standard model on-demand - - modular pipelines previews - - modular pipelines basic guidance - attention mechanisms decision tree and apply method refactor +- **Fixes** + - unnecessary secondary prompt + - js fetch exception handling ## Update for 2026-08-26 diff --git a/TODO.md b/TODO.md index ffa870508..798cef684 100644 --- a/TODO.md +++ b/TODO.md @@ -3,14 +3,18 @@ ## Short-term - MiniMax LoRA: native loader for MiniMax-H3: fl2va, ref2va, pruned, @CalamitousFelicitousness -- MiniMax TAESD: need to unpack latents, @vladmandic -- MiniMax: Create pre-quant for MiniMax-H3-Turbo +- MiniMax TAESD: unpack latents, @vladmandic +- MiniMax: Create pre-quants for MiniMax-H3-Turbo, MiniMax-H3-Pruned-Turbo - Benchmark tool productize: @CalamitousFelicitousness -- Inpaint: https://discord.com/channels/1101998836328697867/1130536562422186044/1506850651035144322, @vladmandic - Control tab verify overrides handling, @vladmandic - LTX: Create pre-quant for LTX-2.5 -- Modular guiders, @vladmandic - ROCm: v10 +- Modular: cache hooks, @vladmandic +- Modular: disable legacy PAG, etc., @vladmandic + +## Issues + +- Inpaint: https://discord.com/channels/1101998836328697867/1130536562422186044/1506850651035144322, @vladmandic ## Features @@ -27,7 +31,6 @@ - Video upscaling: LTX-Upscaler - Video capabilities to processing tab, add RIFE, upscaling (once available) - Distraction-free UI mode with prompt-only, chat-based interface -- Revisit transformer caching for modular pipelines - Video models: support finetunes - Incorporate [prompting guides](https://github.com/CalamitousFelicitousness/ai-prompting-guides) - Video models: use Networks/Reference instead of custom @@ -49,15 +52,6 @@ - Unify *huggingface* and *diffusers* model folders - JSON image metadata -### Modular - -- Switch to modular pipelines -- Feature: Transformers unified cache handler -- [MagCache](https://github.com/huggingface/diffusers/pull/12744) -- [SmoothCache](https://github.com/huggingface/diffusers/issues/11135) -- [STG](https://github.com/huggingface/diffusers/blob/main/examples/community/README.md#spatiotemporal-skip-guidance) -- [TextKVCache](https://huggingface.co/NucleusAI/Nucleus-Image#quick-start), @vladmandic - ## New models / Pipelines TODO: Investigate which models are diffusers-compatible and prioritize! diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index f18fbf08a..0d0b5d204 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit f18fbf08a5987e9f3f166cd837298e738d2bb881 +Subproject commit 0d0b5d20477caf0b56ea97eaed50e7ac2561b018 diff --git a/modules/control/run.py b/modules/control/run.py index a64fabe60..02c186d55 100644 --- a/modules/control/run.py +++ b/modules/control/run.py @@ -350,9 +350,8 @@ def control_run(state: str = '', # pylint: disable=keyword-arg-before-vararg styles: list[str] | None = None, steps: int = 20, sampler_index: int | None = None, seed: int = -1, subseed: int = -1, subseed_strength: float = 0, seed_resize_from_h: int = -1, seed_resize_from_w: int = -1, - guidance_name: str = 'Default', guidance_scale: float = 6.0, guidance_rescale: float = 0.0, guidance_start: float = 0.0, guidance_stop: float = 1.0, - cfg_scale: float = 6.0, clip_skip: float = 1.0, cfg_image: float = 6.0, cfg_rescale: float = 0.7, cfg_true: float = 0.0, cfg_adaptive: float = 0.5, cfg_end: float = 1.0, - vae_type: str = 'Full', tiling: bool = False, hidiffusion: bool = False, + cfg_name: str = 'Default', cfg_scale: float = 6.0, cfg_image: float = 6.0, cfg_rescale: float = 0.0, cfg_start: float = 0.0, cfg_stop: float = 1.0, cfg_true: float = 0.0, cfg_adaptive: float = 0.5, + clip_skip: float = 1.0, vae_type: str = 'Full', tiling: bool = False, hidiffusion: bool = False, detailer_enabled: bool = False, detailer_prompt: str = '', detailer_negative: str = '', detailer_steps: int = 10, detailer_strength: float = 0.3, detailer_resolution: int = 1024, detailer_classes: str = '', hdr_mode: int = 0, hdr_brightness: float = 0, hdr_color: float = 0, hdr_sharpen: float = 0, hdr_clamp: bool = False, hdr_boundary: float = 4.0, hdr_threshold: float = 0.95, hdr_maximize: bool = False, hdr_max_center: float = 0.6, hdr_max_boundary: float = 1.0, hdr_color_picker: str | None = None, hdr_tint_ratio: float = 0, hdr_apply_hires: bool = True, @@ -465,21 +464,17 @@ def control_run(state: str = '', # pylint: disable=keyword-arg-before-vararg seed_resize_from_w = seed_resize_from_w, denoising_strength = denoising_strength, skip_processing = skip_processing, - # modular guidance - guidance_name = guidance_name, - guidance_scale = guidance_scale, - guidance_rescale = guidance_rescale, - guidance_start = guidance_start, - guidance_stop = guidance_stop, - # legacy guidance + # guidance + cfg_name = cfg_name, cfg_scale = cfg_scale, - cfg_end = cfg_end, - clip_skip = clip_skip, cfg_image = cfg_image, cfg_rescale = cfg_rescale, + cfg_start = cfg_start, + cfg_stop = cfg_stop, cfg_true = cfg_true, cfg_adaptive = cfg_adaptive, # advanced + clip_skip = clip_skip, vae_type = vae_type, tiling = tiling, hidiffusion = hidiffusion, @@ -852,7 +847,7 @@ def control_run(state: str = '', # pylint: disable=keyword-arg-before-vararg debug_log(f'Ready: {image_txt}') html_txt = f'

Ready {image_txt}

' if image_txt != '' else '' - if len(info_txt) > 0: + if (info_txt is not None) and (len(info_txt) > 0): html_txt = html_txt + infotext_to_html(info_txt[0]) result = (output_images, blended_image, html_txt, output_filename) if is_generator: diff --git a/modules/img2img.py b/modules/img2img.py index 70d7e48cc..6c178da85 100644 --- a/modules/img2img.py +++ b/modules/img2img.py @@ -163,8 +163,7 @@ def img2img(id_task: str, state: str, mode: int, vae_type, tiling, hidiffusion, detailer_enabled, detailer_prompt, detailer_negative, detailer_steps, detailer_strength, detailer_resolution, detailer_classes, n_iter, batch_size, - guidance_name, guidance_scale, guidance_rescale, guidance_start, guidance_stop, - cfg_scale, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end, + cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop, cfg_true, cfg_adaptive, refiner_start, clip_skip, denoising_strength, @@ -261,13 +260,6 @@ def img2img(id_task: str, state: str, mode: int, batch_size=batch_size, n_iter=n_iter, steps=steps, - guidance_name=guidance_name, - guidance_scale=guidance_scale, - guidance_rescale=guidance_rescale, - guidance_start=guidance_start, - guidance_stop=guidance_stop, - cfg_scale=cfg_scale, - cfg_end=cfg_end, clip_skip=clip_skip, width=width, height=height, @@ -289,10 +281,6 @@ def img2img(id_task: str, state: str, mode: int, resize_context=resize_context, scale_by=scale_by, denoising_strength=denoising_strength, - cfg_image=cfg_image, - cfg_rescale=cfg_rescale, - cfg_true=cfg_true, - cfg_adaptive=cfg_adaptive, refiner_start=refiner_start, inpaint_full_res=inpaint_full_res != 0, inpaint_full_res_padding=inpaint_full_res_padding, @@ -306,6 +294,15 @@ def img2img(id_task: str, state: str, mode: int, grading_shadows_tint=grading_shadows_tint, grading_highlights_tint=grading_highlights_tint, grading_split_tone_balance=grading_split_tone_balance, grading_vignette=grading_vignette, grading_grain=grading_grain, grading_lut_file=grading_lut_file.name if grading_lut_file is not None else '', grading_lut_strength=grading_lut_strength, + # guidance + cfg_name=cfg_name, + cfg_scale=cfg_scale, + cfg_image=cfg_image, + cfg_rescale=cfg_rescale, + cfg_start=cfg_start, + cfg_stop=cfg_stop, + cfg_true=cfg_true, + cfg_adaptive=cfg_adaptive, # refiner enable_hr=enable_hr, hr_denoising_strength=hr_denoising_strength, diff --git a/modules/modular.py b/modules/modular.py index 3916ca210..f0b4b2d3c 100644 --- a/modules/modular.py +++ b/modules/modular.py @@ -1,15 +1,20 @@ import os import diffusers -from modules import shared, sd_hijack_modular +from modules import shared, sd_hijack_modular, sd_models from modules.logger import log debug = os.environ.get('SD_MODULAR_DEBUG', None) is not None +exclude = ['Krea2'] def get_modular_class(diffusion_pipeline: diffusers.DiffusionPipeline): name = diffusion_pipeline.__class__.__name__ name = name.replace('Pipeline', '').replace('Img2Img', '').replace('Inpaint', '').replace('ImageToVideo', '') + if name in exclude: + if debug: + log.trace(f'Modular lookup: key={name} source={diffusion_pipeline.__class__.__name__} excluded') + return None name = f'{name}AutoBlocks' modular_cls = getattr(diffusers, name, None) if debug: @@ -46,6 +51,7 @@ def convert_to_modular(diffusion_pipeline: diffusers.DiffusionPipeline) -> diffu except Exception as e: log.error(f'Modular: {e}') raise e + sd_models.copy_diffuser_options(modular_pipe, diffusion_pipeline) sd_hijack_modular.install_state_hook(modular_pipe) sd_hijack_modular.register_callbacks(modular_pipe) return modular_pipe diff --git a/modules/modular_guiders.py b/modules/modular_guiders.py index 5ce8442e0..92bb43a97 100644 --- a/modules/modular_guiders.py +++ b/modules/modular_guiders.py @@ -19,91 +19,113 @@ guiders = { } -def set_guider(p: processing.StableDiffusionProcessing): - guidance_name = p.guidance_name or 'Default' +def get_layers(layer_str: str): + if not layer_str: + return [] + try: + # layers can be comma separated, e.g. "7, 8, 9" or range "7-9" or mixed "7, 8-10, 12" + layers = [] + for part in layer_str.split(','): + part = part.strip() + if '-' in part: + start, end = part.split('-') + layers.extend(range(int(start), int(end) + 1)) + elif part.isdigit(): + layers.append(int(part)) + layers = sorted(set(layers)) # remove duplicates and sort + return layers + except Exception as e: + log.error(f'Guiders layers: {e}') + return [] + + +def set_args(guidance_name: str): + args = {} + import modules.ui_guidance + inputs = modules.ui_guidance.get_modular_args() + # for k, v in inputs.items(): + # log.trace(f'Guiders: arg={k} value={v}') + if guidance_name.startswith('Default'): + pass + if guidance_name.startswith('CFG:'): + pass + if guidance_name.startswith('Auto:'): + args['dropout'] = float(inputs.get('autoguidance_dropout', 1.0)) + args['auto_guidance_layers'] = get_layers(inputs.get('autoguidance_layers', [])) + if guidance_name.startswith('Zero:'): + args['zero_init_steps'] = int(inputs.get('zerostar_init_steps', 1)) + if guidance_name.startswith('PAG:'): + args['perturbed_guidance_scale'] = float(inputs.get('pag_scale', 1.0)) + args['perturbed_guidance_start'] = float(inputs.get('pag_start', 0.01)) + args['perturbed_guidance_stop'] = float(inputs.get('pag_stop', 0.2)) + args['perturbed_guidance_layers'] = get_layers(inputs.get('pag_layers', [])) + if guidance_name.startswith('APG:'): + args['adaptive_projected_guidance_momentum'] = float(inputs.get('apg_momentum', None)) if inputs.get('apg_momentum', -1) >= 0 else None + args['adaptive_projected_guidance_rescale'] = float(inputs.get('apg_rescale', 15.0)) + if guidance_name.startswith('SLG:'): + args['skip_layer_guidance_scale'] = float(inputs.get('slg_scale', 1.0)) + args['skip_layer_guidance_start'] = float(inputs.get('slg_start', 0.01)) + args['skip_layer_guidance_stop'] = float(inputs.get('slg_stop', 0.2)) + args['skip_layer_guidance_layers'] = get_layers(inputs.get('slg_layers', [])) + if guidance_name.startswith('SEG:'): + args['seg_guidance_scale'] = float(inputs.get('seg_scale', 3.0)) + args['seg_blur_sigma'] = float(inputs.get('seg_blur_sigma', 9999999.0)) + args['seg_blur_threshold_inf'] = float(inputs.get('seg_blur_threshold_inf', 9999.0)) + args['seg_guidance_start'] = float(inputs.get('seg_start', 0.0)) + args['seg_guidance_stop'] = float(inputs.get('seg_stop', 1.0)) + args['seg_guidance_layers'] = get_layers(inputs.get('seg_layers', [])) + if guidance_name.startswith('TCFG:'): + pass + if guidance_name.startswith('FDG:'): + args['guidance_scales'] = [float(x.strip()) for x in inputs.get('fdg_scales', '5.0').split(',')] + args['parallel_weights'] = float(inputs.get('fdg_weights', 1.0)) + args['guidance_rescale_space'] = inputs.get('fdg_rescale_space', 'data') + log.trace(f'Guiders: args={args}') + return args + + +def set_guider(p: processing.StableDiffusionProcessing, phase: str | None = None): + guidance_name = p.cfg_name or 'Default' if guidance_name not in guiders: return - if guidance_name == 'Default': - if hasattr(shared.sd_model, 'default_guider'): - guider_info = shared.sd_model.default_guider - guider_cls = guider_info.type_hint if hasattr(guider_info, 'type_hint') else type(guider_info) - shared.sd_model.update_components(guider=guider_info) - elif hasattr(shared.sd_model, 'get_component_spec'): - guider_info = shared.sd_model.get_component_spec("guider") - guider_cls = guider_info.type_hint if hasattr(guider_info, 'type_hint') else type(guider_info) - shared.sd_model.default_guider = guider_info - elif hasattr(shared.sd_model, 'guider') and hasattr(shared.sd_model.guider, 'config'): - guider_info = shared.sd_model.guider - guider_cls = type(shared.sd_model.guider) - # shared.sd_model.default_guider = guider_info - else: - guider_info = None - guider_cls = None - if guider_info is not None and guider_cls is not None and guider_info.config is not None: - guider_args = {k: v for k, v in guider_info.config.items() if not k.startswith('_') and v is not None} - else: - guider_args = {} - log.info(f'Guider: name="{guidance_name}" cls={guider_cls.__name__ if guider_cls is not None else None} args={guider_args}') - return + if not hasattr(shared.sd_model, 'default_guider'): # store default guider + guider_info = shared.sd_model.get_component_spec("guider") + guider_cls = guider_info.type_hint if hasattr(guider_info, 'type_hint') else type(guider_info) + shared.sd_model.default_guider = guider_cls + if guidance_name == 'None': shared.sd_model.update_components(guider=None) # breaks the pipeline - log.info(f'Guider: name="{guidance_name}"') + log.info(f'Pipeline: guidance="{guidance_name}"') return + elif guidance_name == 'Default': + guider_cls = shared.sd_model.default_guider + else: + guider_info = guiders[guidance_name] + guider_cls = guider_info['cls'] - guider_info = guiders[guidance_name] - guider_cls = guider_info['cls'] + guider_args = set_args(guidance_name) + possible = inspect.signature(guider_cls.__init__).parameters if guider_cls is not None else [] + if 'guidance_scale' in list(possible): + if (phase == 'hires' or phase == 'refine') and p.cfg_image >= 0.0: + guider_args['guidance_scale'] = float(p.cfg_image) + elif p.cfg_scale >= 0.0: + guider_args['guidance_scale'] = float(p.cfg_scale) + if p.cfg_rescale >= 0.0 and 'guidance_rescale' in list(possible): + guider_args['guidance_rescale'] = float(p.cfg_rescale) + if p.cfg_start >= 0.0 and 'start' in list(possible): + guider_args['start'] = float(p.cfg_start) + if p.cfg_stop >= 0.0 and 'stop' in list(possible): + guider_args['stop'] = float(p.cfg_stop) - guider_args = {} - possible = list(inspect.signature(guider_cls.__init__).parameters) if guider_cls is not None else [] - if p.guidance_scale >= 0.0 and 'guidance_scale' in possible: - guider_args['guidance_scale'] = float(p.guidance_scale) - if p.guidance_rescale >= 0.0 and 'guidance_rescale' in possible: - guider_args['guidance_rescale'] = float(p.guidance_rescale) - if p.guidance_start >= 0.0 and 'start' in possible: - guider_args['start'] = float(p.guidance_start) - if p.guidance_stop >= 0.0 and 'stop' in possible: - guider_args['stop'] = float(p.guidance_stop) - - """ - import modules.ui_guidance - for k, v in modules.ui_guidance.get_modular_args().items(): - log.trace(f'Guiders: arg={k} value={v}') - """ - - log.warning('Guiders: advanced parameters are not yet implemented') # TODO: guiders - """ - for k, v in guider_info['args'].items(): - try: - if k is None: - pass - elif k.endswith('_layers') and isinstance(v, str): - guider_args[k] = [int(x.strip()) for x in v.split(',') if x.strip().isdigit()] - elif k.endswith('_config'): - # if lsc_enabled - # guider_args[k] = diffusers.LayerSkipConfig(...) - pass - elif isinstance(v, list) and len(v) > 0: - guider_args[k] = v - elif isinstance(v, int) and (v >= 0): - guider_args[k] = int(v) - elif isinstance(v, float) and (v >= 0.0): - guider_args[k] = float(v) - elif isinstance(v, str) and (len(v) > 0): - guider_args[k] = v - except Exception as e: - log.error(f'Guiders: arg={k} value={v} error={e}') - errors.display(e, 'Guiders') - # guider_args.update(guider_info['args']) - """ if guider_cls is not None: try: guider_instance: diffusers.BaseGuidance = guider_cls(**guider_args) - log.info(f'Guider: name="{guidance_name}" cls={guider_cls.__name__} args={guider_args}') + log.info(f'Pipeline: guidance="{guidance_name}" cls={guider_cls.__name__} args={guider_args}') shared.sd_model.update_components(guider=guider_instance) except Exception as e: - log.error(f'Guider: name="{guidance_name}" cls={guider_cls.__name__} args={guider_args} {e}') + log.error(f'Pipeline: guidance="{guidance_name}" cls={guider_cls.__name__} args={guider_args} {e}') errors.display(e, 'Guiders') return else: - log.warning(f'Guider: name="{guidance_name}" cls=None args={guider_args}') + log.warning(f'Pipeline: guidance="{guidance_name}" cls=None args={guider_args}') diff --git a/modules/processing.py b/modules/processing.py index fbb2f68a1..7f5eb0557 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -53,9 +53,14 @@ class Processed: self.height = p.height if hasattr(p, 'height') else (self.images[0].height if len(self.images) > 0 else 0) self.sampler_name = p.sampler_name or '' + + self.cfg_name = p.cfg_name if (p.cfg_name is not None and p.cfg_name != 'Default') else None self.cfg_scale = p.cfg_scale if (p.cfg_scale is not None and p.cfg_scale > -1) else None - self.cfg_end = p.cfg_end if p.cfg_end < 1 else None + self.cfg_rescale = p.cfg_rescale if (p.cfg_rescale is not None and p.cfg_rescale > -1) else None self.cfg_image = p.cfg_image if (p.cfg_image is not None and p.cfg_image > -1) else None + self.cfg_start = p.cfg_start if p.cfg_start > 0 else None + self.cfg_stop = p.cfg_stop if p.cfg_stop < 1 else None + self.steps = p.steps or 0 self.batch_size = max(1, p.batch_size) self.denoising_strength = p.denoising_strength @@ -103,8 +108,12 @@ class Processed: "width": self.width, "height": self.height, "sampler_name": self.sampler_name, + "cfg_name": self.cfg_name, "cfg_scale": self.cfg_scale, - "cfg_end": self.cfg_end, + "cfg_rescale": self.cfg_rescale, + "cfg_image": self.cfg_image, + "cfg_start": self.cfg_start, + "cfg_stop": self.cfg_stop, "steps": self.steps, "batch_size": self.batch_size, "detailer": self.detailer, diff --git a/modules/processing_args.py b/modules/processing_args.py index 115bc6c61..52a68cdce 100644 --- a/modules/processing_args.py +++ b/modules/processing_args.py @@ -31,6 +31,9 @@ def task_modular_kwargs(p, model): if len(getattr(p, 'init_images', [])) > 0: task_args['image'] = p.init_images task_args['strength'] = p.denoising_strength + if (shared.sd_model_type == 'sdxl') and hasattr(model, 'register_to_config') and (model_cls not in sd_models.i2i_pipes): + model.register_to_config(requires_aesthetics_score = False) + mask_image = p.task_args.get('image_mask', None) or getattr(p, 'image_mask', None) or getattr(p, 'mask', None) if mask_image is not None: task_args['mask_image'] = mask_image @@ -68,8 +71,8 @@ def task_specific_kwargs(p, model): 'width': width, 'height': height, } - elif (task_type == sd_models.DiffusersTaskType.IMAGE_2_IMAGE or is_img2img_model) and len(getattr(p, 'init_images', [])) > 0: - if shared.sd_model_type == 'sdxl' and hasattr(model, 'register_to_config'): + elif (task_type == sd_models.DiffusersTaskType.IMAGE_2_IMAGE or task_type == sd_models.DiffusersTaskType.MODULAR or is_img2img_model) and (len(getattr(p, 'init_images', [])) > 0): + if (shared.sd_model_type == 'sdxl') and hasattr(model, 'register_to_config'): if model_cls in sd_models.i2i_pipes: pass else: @@ -115,7 +118,7 @@ def task_specific_kwargs(p, model): 'image': p.init_images, 'strength': p.denoising_strength, } - elif (task_type == sd_models.DiffusersTaskType.INPAINTING or is_img2img_model) and len(getattr(p, 'init_images', [])) > 0: + elif (task_type == sd_models.DiffusersTaskType.INPAINTING or task_type == sd_models.DiffusersTaskType.MODULAR or is_img2img_model) and len(getattr(p, 'init_images', [])) > 0: if shared.sd_model_type == 'sdxl' and hasattr(model, 'register_to_config'): if model_cls in [sd_models.i2i_pipes]: pass @@ -255,7 +258,7 @@ def set_pipeline_args(p, model, prompts:list, negative_prompts:list, prompts_2:l possible = get_params(model) - log.debug(f'Pipeline: cls={cls} possible={possible}') + debug_log(f'Pipeline: cls={cls} possible={possible}') steps = kwargs.get("num_inference_steps", None) or len(getattr(p, 'timesteps', ['1'])) clip_skip = kwargs.pop("clip_skip", 1) diff --git a/modules/processing_callbacks.py b/modules/processing_callbacks.py index 1cc11dde5..9c0cefd2b 100644 --- a/modules/processing_callbacks.py +++ b/modules/processing_callbacks.py @@ -120,11 +120,11 @@ def diffusers_callback(pipe, step: int = 0, timestep: int = 0, kwargs: dict | No if step == 0: pipe._cfg_end_applied = False # pylint: disable=protected-access - cfg_end = getattr(p, "cfg_end", 1.0) or 1.0 + cfg_stop = getattr(p, "cfg_stop", None) or getattr(p, "cfg_end", None) or 1.0 total_steps = getattr(pipe, "num_timesteps", 0) - target_step = int(total_steps * cfg_end) if total_steps else 0 + target_step = int(total_steps * cfg_stop) if total_steps else 0 - if (cfg_end < 1.0) and not getattr(pipe, "_cfg_end_applied", False) and (step >= target_step): + if (cfg_stop < 1.0) and not getattr(pipe, "_cfg_end_applied", False) and (step >= target_step): pipe._cfg_end_applied = True # pylint: disable=protected-access if "PAG" in shared.sd_model.__class__.__name__: pipe._guidance_scale = 1.001 if pipe._guidance_scale > 1 else pipe._guidance_scale # pylint: disable=protected-access diff --git a/modules/processing_class.py b/modules/processing_class.py index 624e874b7..9b05182e8 100644 --- a/modules/processing_class.py +++ b/modules/processing_class.py @@ -45,15 +45,11 @@ class StableDiffusionProcessing: sampler_name: str | None = None, hr_sampler_name: str | None = None, eta: float | None = None, - # modular guidance - guidance_name: str = 'Default', - guidance_scale: float = 6.0, - guidance_rescale: float = 0.0, - guidance_start: float = 0.0, - guidance_stop: float = 1.0, - # legacy guidance + # guidance + cfg_name: str = 'Default', cfg_scale: float = 6.0, - cfg_end: float = 1, + cfg_start: float = 0.0, + cfg_stop: float = 1, cfg_rescale: float = 0.0, cfg_true: float = 0.0, cfg_adaptive: float = 0.5, @@ -457,16 +453,6 @@ class StableDiffusionProcessing: self.do_not_save_grid = do_not_save_grid self.override_settings_restore_afterwards = override_settings_restore_afterwards self.eta = eta - self.guidance_name = guidance_name - self.guidance_scale = guidance_scale - self.guidance_rescale = guidance_rescale - self.guidance_start = guidance_start - self.guidance_stop = guidance_stop - self.cfg_scale = cfg_scale - self.cfg_end = cfg_end - self.cfg_rescale = cfg_rescale - self.cfg_true = cfg_true - self.cfg_adaptive = cfg_adaptive self.selected_scale_tab = selected_scale_tab self.mask_for_overlay = mask_for_overlay self.paste_to = paste_to @@ -510,6 +496,15 @@ class StableDiffusionProcessing: log.error(f'Override: {override_settings} {e}') self.override_settings = {} + # guidance + self.cfg_name = cfg_name + self.cfg_scale = cfg_scale + self.cfg_start = cfg_start + self.cfg_stop = cfg_stop + self.cfg_rescale = cfg_rescale + self.cfg_true = cfg_true + self.cfg_adaptive = cfg_adaptive + # scheduler/noise overrides self.schedulers_prediction_type = schedulers_prediction_type self.schedulers_beta_schedule = schedulers_beta_schedule diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index 9ff88d4d1..ec172aea3 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -3,8 +3,9 @@ import os import time import numpy as np import torch +import diffusers from PIL import Image -from modules import shared, processing, sd_models, errors, sd_hijack_hypertile, processing_vae, sd_models_compile, timer, modelstats, extra_networks, attention +from modules import shared, processing, sd_models, errors, sd_hijack_hypertile, processing_vae, sd_models_compile, timer, modelstats, extra_networks, attention, modular from modules.logger import log from modules.processing_helpers import resize_hires, calculate_base_steps, calculate_hires_steps, calculate_refiner_steps, save_intermediate, update_sampler, is_txt2img, is_refiner_enabled, get_job_name from modules.processing_args import set_pipeline_args @@ -14,6 +15,7 @@ from modules.image import convert debug = os.environ.get('SD_DIFFUSERS_DEBUG', None) is not None +modular_debug = os.environ.get('SD_MODULAR_DEBUG', None) is not None output_type = 'np' if os.environ.get('SD_VAE_DEFAULT', None) is not None else 'latent' last_p = None orig_pipeline = shared.sd_model @@ -68,12 +70,12 @@ def restore_state(p: processing.StableDiffusionProcessing): return p -def process_pre(p: processing.StableDiffusionProcessing): +def process_pre(p: processing.StableDiffusionProcessing, phase: str | None = None): from modules import ipadapter, sd_hijack_freeu, para_attention, teacache, hidiffusion, ras, pag, cfgzero, transformer_cache, token_merge, linfusion, cachedit if shared.sd_model is None: log.warning('Processing modifiers: model not loaded') return - log.info('Processing modifiers: apply') + log.info(f'Processing modifiers: phase={phase} apply') try: # apply-with-unapply # sd_hijack_compile.install() @@ -97,19 +99,10 @@ def process_pre(p: processing.StableDiffusionProcessing): errors.display(e, 'apply') shared.sd_model = sd_models.apply_balanced_offload(shared.sd_model) - # if hasattr(shared.sd_model, 'unet'): - # sd_models.move_model(shared.sd_model.unet, devices.device) - # if hasattr(shared.sd_model, 'transformer'): - # sd_models.move_model(shared.sd_model.transformer, devices.device) - from modules import modular - if modular.is_compatible(shared.sd_model): - modular_pipe = modular.convert_to_modular(shared.sd_model) - if modular_pipe is not None: - shared.sd_model = modular_pipe if modular.is_guider(shared.sd_model): from modules import modular_guiders - modular_guiders.set_guider(p) + modular_guiders.set_guider(p, phase) timer.process.record('pre') @@ -143,7 +136,7 @@ def process_base(p: processing.StableDiffusionProcessing): shared.sd_model = update_pipeline(shared.sd_model, p) update_sampler(p, shared.sd_model) timer.process.record('prepare') - process_pre(p) + process_pre(p, 'base') sched_eta = p.scheduler_eta if p.scheduler_eta is not None else shared.opts.scheduler_eta desc = 'Base' if 'detailer' in p.ops: @@ -186,6 +179,8 @@ def process_base(p: processing.StableDiffusionProcessing): taskid = shared.state.begin('Inference') output = shared.sd_model(**base_args) shared.state.end(taskid) + if isinstance(output, diffusers.modular_pipelines.PipelineState) and modular_debug: + log.trace(f'Pipeline: output={output}') if isinstance(output, dict): output = SimpleNamespace(**output) if isinstance(output, list): @@ -194,7 +189,7 @@ def process_base(p: processing.StableDiffusionProcessing): output = SimpleNamespace(images=[output]) if not hasattr(output, 'frames') and hasattr(output, 'videos'): output.frames = output.videos # modular video pipelines emit videos, not frames - if hasattr(output, 'image'): + if hasattr(output, 'image') and getattr(output, 'images', None) is None: # for modular output.image may be input and output.images may be output so we dont want to overwrite output output.images = output.image if hasattr(output, 'images'): shared.history.add(output.images, info=processing.create_infotext(p), ops=p.ops) @@ -303,7 +298,7 @@ def process_hires(p: processing.StableDiffusionProcessing, output): orig_denoise = p.denoising_strength p.denoising_strength = strength orig_image = p.task_args.pop('image', None) # remove image override from hires - process_pre(p) + process_pre(p, 'hires') prompts = p.prompts reset_prompts = False diff --git a/modules/processing_info.py b/modules/processing_info.py index dca52112e..719fec0c6 100644 --- a/modules/processing_info.py +++ b/modules/processing_info.py @@ -59,9 +59,11 @@ def create_infotext(p: StableDiffusionProcessing, all_prompts=None, all_seeds=No "Scheduler": shared.sd_model.scheduler.__class__.__name__ if getattr(shared.sd_model, 'scheduler', None) is not None else None, "Seed": all_seeds[index], "Seed resize from": None if p.seed_resize_from_w <= 0 or p.seed_resize_from_h <= 0 else f"{p.seed_resize_from_w}x{p.seed_resize_from_h}", + "CFG name": p.cfg_name if p.cfg_name != 'Default' else None, "CFG scale": p.cfg_scale if p.cfg_scale > -1 else None, "CFG rescale": p.cfg_rescale if p.cfg_rescale > -1 else None, - "CFG end": p.cfg_end if p.cfg_end < 1.0 else None, + "CFG start": p.cfg_start if p.cfg_start > 0.0 else None, + "CFG stop": p.cfg_stop if p.cfg_stop < 1.0 else None, "CFG true": p.cfg_true if p.cfg_true > 0 else None, "CFG adaptive": p.cfg_adaptive if p.cfg_adaptive != 0.5 else None, "CLiP-skip": p.clip_skip if p.clip_skip > 1 else None, diff --git a/modules/processing_prompt.py b/modules/processing_prompt.py index 6eac4a8bf..6df19a4be 100644 --- a/modules/processing_prompt.py +++ b/modules/processing_prompt.py @@ -68,11 +68,13 @@ def set_fallback_prompt(args: dict, possible: list[str], prompts, negative_promp debug_log(f'Prompt fallback: negative_prompt={negative_prompts}') args['negative_prompt'] = negative_prompts if ('prompt_2' in possible) and ('prompt_2' not in args) and (prompts_2 is not None) and len(prompts_2) > 0: - debug_log(f'Prompt fallback: prompt_2={prompts_2}') - args['prompt_2'] = prompts_2 + if (prompts_2 != prompts) and (prompts_2 != args.get('prompt', None)): + debug_log(f'Prompt fallback: prompt_2={prompts_2}') + args['prompt_2'] = prompts_2 if ('negative_prompt_2' in possible) and ('negative_prompt_2' not in args) and (negative_prompts_2 is not None) and len(negative_prompts_2) > 0: - debug_log(f'Prompt fallback: negative_prompt_2={negative_prompts_2}') - args['negative_prompt_2'] = negative_prompts_2 + if (negative_prompts_2 != negative_prompts) and (negative_prompts_2 != args.get('negative_prompt', None)): + debug_log(f'Prompt fallback: negative_prompt_2={negative_prompts_2}') + args['negative_prompt_2'] = negative_prompts_2 return args diff --git a/modules/safe.py b/modules/safe.py index d97721bf6..89b14ee45 100644 --- a/modules/safe.py +++ b/modules/safe.py @@ -5,9 +5,9 @@ import collections import zipfile import re +import _codecs import torch import numpy as np -import _codecs # PyTorch 1.13 and later have _TypedStorage renamed to TypedStorage TypedStorage = torch.storage.TypedStorage if hasattr(torch.storage, 'TypedStorage') else torch.storage._TypedStorage # pylint: disable=protected-access diff --git a/modules/sd_models.py b/modules/sd_models.py index a21877dc8..327f231a2 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -1034,6 +1034,12 @@ def load_diffuser(checkpoint_info: CheckpointInfo | None = None, op='model', rev if debug_load: log.trace(f'Model components: {list(get_signature(sd_model).values())}') + from modules import modular + if modular.is_compatible(shared.sd_model): + modular_pipe = modular.convert_to_modular(shared.sd_model) + if modular_pipe is not None: + shared.sd_model = modular_pipe + from modules import textual_inversion sd_model.embedding_db = textual_inversion.EmbeddingDatabase() sd_model.embedding_db.add_embedding_dir(shared.opts.embeddings_dir) @@ -1244,7 +1250,7 @@ def switch_pipe(cls: type[diffusers.DiffusionPipeline] | str, pipeline: diffuser def clean_diffuser_pipe(pipe): - if pipe is not None and shared.sd_model_type == 'sdxl' and hasattr(pipe, 'config') and 'requires_aesthetics_score' in pipe.config and hasattr(pipe, '_internal_dict'): + if (pipe is not None) and (shared.sd_model_type == 'sdxl') and hasattr(pipe, 'config') and ('requires_aesthetics_score' in pipe.config) and hasattr(pipe, '_internal_dict'): debug_process(f'Pipeline clean: {pipe.__class__.__name__}') # diffusers adds requires_aesthetics_score with img2img and complains if requires_aesthetics_score exist in txt2img internal_dict = dict(pipe._internal_dict) # pylint: disable=protected-access diff --git a/modules/taesd/taehv.py b/modules/taesd/taehv.py index 9239ac864..8b65e41cd 100644 --- a/modules/taesd/taehv.py +++ b/modules/taesd/taehv.py @@ -337,6 +337,8 @@ class TAEHV(nn.Module): def decode(self, x, parallel=True, show_progress_bar=False, return_dict=False): # pylint: disable=unused-argument """Decode a sequence of frames.""" + if x.ndim == 4: + x = x.unsqueeze(0) return self.decode_video(x, parallel=False, show_progress_bar=False) def encode(self, x, parallel=True, show_progress_bar=False, return_dict=False): # pylint: disable=unused-argument diff --git a/modules/txt2img.py b/modules/txt2img.py index c79433443..af0b814bc 100644 --- a/modules/txt2img.py +++ b/modules/txt2img.py @@ -16,8 +16,7 @@ def txt2img(id_task, state, vae_type, tiling, hidiffusion, detailer_enabled, detailer_prompt, detailer_negative, detailer_steps, detailer_strength, detailer_resolution, detailer_classes, n_iter, batch_size, - guidance_name, guidance_scale, guidance_rescale, guidance_start, guidance_stop, - cfg_scale, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end, + cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop, cfg_true, cfg_adaptive, clip_skip, seed, subseed, subseed_strength, seed_resize_from_h, seed_resize_from_w, height, width, @@ -62,17 +61,14 @@ def txt2img(id_task, state, batch_size=batch_size, n_iter=n_iter, steps=steps, - guidance_name=guidance_name, - guidance_scale=guidance_scale, - guidance_rescale=guidance_rescale, - guidance_start=guidance_start, - guidance_stop=guidance_stop, + cfg_name=cfg_name, cfg_scale=cfg_scale, cfg_image=cfg_image, cfg_rescale=cfg_rescale, + cfg_start=cfg_start, + cfg_stop=cfg_stop, cfg_true=cfg_true, cfg_adaptive=cfg_adaptive, - cfg_end=cfg_end, clip_skip=clip_skip, width=width, height=height, diff --git a/modules/ui_control.py b/modules/ui_control.py index 11bda73bf..269e00aad 100644 --- a/modules/ui_control.py +++ b/modules/ui_control.py @@ -201,7 +201,7 @@ def create_ui(_blocks: gr.Blocks=None): mask_controls = masking.create_segment_ui() - guidance_name, guidance_scale, guidance_rescale, guidance_start, guidance_stop, cfg_scale, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end = ui_guidance.create_guidance_inputs('control') + cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop, cfg_true, cfg_adaptive = ui_guidance.create_guidance_inputs('control') vae_type, tiling, hidiffusion, clip_skip = ui_sections.create_advanced_inputs('control') grading_brightness, grading_contrast, grading_saturation, grading_hue, grading_gamma, grading_sharpness, grading_color_temp, grading_shadows, grading_midtones, grading_highlights, grading_clahe_clip, grading_clahe_grid, grading_shadows_tint, grading_highlights_tint, grading_split_tone_balance, grading_vignette, grading_grain, grading_lut_file, grading_lut_strength = ui_sections.create_color_inputs('control') hdr_mode, hdr_brightness, hdr_color, hdr_sharpen, hdr_clamp, hdr_boundary, hdr_threshold, hdr_maximize, hdr_max_center, hdr_max_boundary, hdr_color_picker, hdr_tint_ratio, hdr_apply_hires = ui_sections.create_latent_inputs('control') @@ -316,8 +316,8 @@ def create_ui(_blocks: gr.Blocks=None): prompt, negative, styles, steps, sampler_index, seed, subseed, subseed_strength, seed_resize_from_h, seed_resize_from_w, - guidance_name, guidance_scale, guidance_rescale, guidance_start, guidance_stop, - cfg_scale, clip_skip, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end, vae_type, tiling, hidiffusion, + cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop, cfg_true, cfg_adaptive, + clip_skip, vae_type, tiling, hidiffusion, detailer_enabled, detailer_prompt, detailer_negative, detailer_steps, detailer_strength, detailer_resolution, detailer_classes, hdr_mode, hdr_brightness, hdr_color, hdr_sharpen, hdr_clamp, hdr_boundary, hdr_threshold, hdr_maximize, hdr_max_center, hdr_max_boundary, hdr_color_picker, hdr_tint_ratio, hdr_apply_hires, grading_brightness, grading_contrast, grading_saturation, grading_hue, grading_gamma, grading_sharpness, grading_color_temp, @@ -411,18 +411,17 @@ def create_ui(_blocks: gr.Blocks=None): (mask_controls[5], "Mask dilate"), (mask_controls[6], "Mask auto"), # guidance - (guidance_name, "Guidance"), - (guidance_scale, "Guidance scale"), - (guidance_rescale, "Guidance rescale"), - (guidance_start, "Guidance start"), - (guidance_stop, "Guidance stop"), - # advanced + (cfg_name, "CFG name"), (cfg_scale, "CFG scale"), - (cfg_end, "CFG end"), - (clip_skip, "CLiP-skip"), + (cfg_start, "CFG start"), + (cfg_stop, "CFG stop"), + (cfg_stop, "CFG end"), + (cfg_image, "CFG image"), (cfg_image, "Image CFG scale"), (cfg_image, "Hires CFG scale"), (cfg_rescale, "CFG rescale"), + # other + (clip_skip, "CLiP-skip"), (vae_type, "VAE type"), (tiling, "Tiling"), (hidiffusion, "HiDiffusion"), diff --git a/modules/ui_guidance.py b/modules/ui_guidance.py index 4fffb1e2a..27bd82545 100644 --- a/modules/ui_guidance.py +++ b/modules/ui_guidance.py @@ -17,74 +17,54 @@ def create_guidance_inputs(tab): with gr.Group(): with gr.Row(elem_id=f"{tab}_guider_row", elem_classes=['flexbox'], visible=shared.opts.model_modular_enable): - guidance_name = gr.Dropdown(choices=guiders.keys(), value='Default', label='Guider', elem_id=f"{tab}_guider") - guidance_btn = ui_components.ToolButton(value=ui_symbols.info, elem_id=f"{tab}_guider_docs") - guidance_btn.click(fn=None, _js='getGuidanceDocs', inputs=[guidance_name], outputs=[]) + cfg_name = gr.Dropdown(choices=guiders.keys(), value='Default', label='Guider', elem_id=f"{tab}_guider") + cfg_name_btn = ui_components.ToolButton(value=ui_symbols.info, elem_id=f"{tab}_guider_docs") + cfg_name_btn.click(fn=None, _js='getGuidanceDocs', inputs=[cfg_name], outputs=[]) - base_group = gr.Group(visible=False) # default inherits from model + base_group = gr.Group() with base_group: - with gr.Row(visible=shared.opts.model_modular_enable): - guidance_scale = gr.Slider(minimum=-1.0, maximum=30.0, step=0.1, label='Guidance scale', value=-1.0, elem_id=f"{tab}_guidance_scale") - guidance_rescale = gr.Slider(minimum=-1.0, maximum=1.0, step=0.05, label='Guidance rescale', value=-1.0, elem_id=f"{tab}_guidance_rescale") - with gr.Row(visible=shared.opts.model_modular_enable): - guidance_start = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='Guidance start', value=0.0, elem_id=f"{tab}_guidance_start") - guidance_stop = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='Guidance stop', value=1.0, elem_id=f"{tab}_guidance_stop") - guidance_args = [guidance_name, guidance_scale, guidance_rescale, guidance_start, guidance_stop] - - lsc_group = gr.Accordion(open=False, label='Layer skip guidance', elem_classes=["small-accordion"], visible=shared.opts.model_modular_enable) - with lsc_group: with gr.Row(): - guidance_lsc_enabled = gr.Checkbox(label='Enable LayerSkipConfig', value=False) - guidance_lsc_label = gr.Label(value='LSC: LayerSkipConfig', elem_id=f"{tab}_lsc_label", visible=False) - guidance_lsc_btn = ui_components.ToolButton(value=ui_symbols.info, elem_id=f"{tab}_lsc_docs", elem_classes=["guidance-docs"]) - guidance_lsc_btn.click(fn=None, _js='getGuidanceDocs', inputs=[guidance_lsc_label], outputs=[]) + cfg_scale = gr.Slider(minimum=-1.0, maximum=30.0, step=0.1, label='Guidance scale', value=-1.0, elem_id=f"{tab}_guidance_scale") + cfg_image = gr.Slider(minimum=-1.0, maximum=30.0, step=0.1, label='Guidance image', value=-1.0, elem_id=f"{tab}_guidance_image") with gr.Row(): - guidance_lsc_indices = gr.Textbox(label='LSC layer indices', value='1, 2, 3', placeholder='Comma-separated layer indices to skip') + cfg_rescale = gr.Slider(minimum=-1.0, maximum=1.0, step=0.05, label='Guidance rescale', value=-1.0, elem_id=f"{tab}_guidance_rescale") with gr.Row(): - guidance_lsc_fqn = gr.Textbox(label='LSC fully qualified name', value='transformer_blocks', placeholder='Fully qualified name of the layer stack') - with gr.Row(): - guidance_lsc_skip_attention = gr.Checkbox(label='LSC skip attention blocks', value=True) - guidance_lsc_skip_ff = gr.Checkbox(label='LSC skip feed-forward blocks', value=True) - guidance_lsc_skip_attention_scores = gr.Checkbox(label='LSC skip attention scores', value=False) - with gr.Row(): - guidance_lsc_dropout = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='LSC dropout rate', value=1.0) - lsc_args = [guidance_lsc_enabled, guidance_lsc_indices, guidance_lsc_fqn, guidance_lsc_skip_attention, guidance_lsc_skip_ff, guidance_lsc_skip_attention_scores, guidance_lsc_dropout] + cfg_start = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='Guidance start', value=0.0, elem_id=f"{tab}_guidance_start") + cfg_stop = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='Guidance stop', value=1.0, elem_id=f"{tab}_guidance_stop") + args_base = [cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop] auto_group = gr.Accordion(open=True, label='Advanced guidance params', elem_classes=["small-accordion"], visible=False) with auto_group: - guidance_auto_dropout = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='AutoGuidance dropout', value=0.1) - guidance_auto_layers = gr.Textbox(label='AutoGuidance layers', value='7, 8, 9', placeholder='Comma-separated layer indices, e.g. 7,8,9') - guidance_auto_config = gr.Dropdown(choices=[None, 'config1', 'config2'], value=None, label='AutoGuidance config') - guidance_auto_args = [guidance_auto_dropout, guidance_auto_layers, guidance_auto_config] + guidance_auto_dropout = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='AutoGuidance dropout', value=1.0) + guidance_auto_layers = gr.Textbox(label='AutoGuidance layers', value='', placeholder='layer indices, e.g. 7,8,9 or ranges, e.g. 7-9') + args_auto = [guidance_auto_dropout, guidance_auto_layers] zero_group = gr.Accordion(open=True, label='Advanced guidance params', elem_classes=["small-accordion"], visible=False) with zero_group: guidance_zero_init_steps = gr.Slider(minimum=0, maximum=10, step=1, label='ZeroStar init steps', value=1) - guidance_zero_args = [guidance_zero_init_steps] + args_zero = [guidance_zero_init_steps] pag_group = gr.Accordion(open=True, label='Advanced guidance params', elem_classes=["small-accordion"], visible=False) with pag_group: - guidance_cfg_true = gr.Slider(minimum=0.0, maximum=30.0, step=0.05, label='PAG scale', value=2.8) + guidance_pag_scale = gr.Slider(minimum=0.0, maximum=30.0, step=0.05, label='PAG scale', value=7.5) guidance_pag_start = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label='PAG start', value=0.01) guidance_pag_stop = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label='PAG stop', value=0.2) - guidance_pag_layers = gr.Textbox(label='PAG layers', value='7, 8, 9', placeholder='Comma-separated layer indices, e.g. 7,8,9') - guidance_pag_config = gr.Dropdown(choices=[None, 'config1', 'config2'], value=None, label='PAG config') - guidance_pag_args = [guidance_cfg_true, guidance_pag_start, guidance_pag_stop, guidance_pag_layers, guidance_pag_config] + guidance_pag_layers = gr.Textbox(label='PAG layers', value='', placeholder='layer indices, e.g. 7,8,9 or ranges, e.g. 7-9') + args_pag = [guidance_pag_scale, guidance_pag_start, guidance_pag_stop, guidance_pag_layers] apg_group = gr.Accordion(open=True, label='Advanced guidance params', elem_classes=["small-accordion"], visible=False) with apg_group: guidance_apg_momentum = gr.Slider(minimum=-1.0, maximum=1.0, step=0.05, label='APG momentum', value=-1.0) guidance_apg_rescale = gr.Slider(minimum=0.0, maximum=30.0, step=0.1, label='APG rescale', value=15.0) - guidance_apg_args = [guidance_apg_momentum, guidance_apg_rescale] + args_apg = [guidance_apg_momentum, guidance_apg_rescale] slg_group = gr.Accordion(open=True, label='Advanced guidance params', elem_classes=["small-accordion"], visible=False) with slg_group: guidance_slg_scale = gr.Slider(minimum=0.0, maximum=30.0, step=0.1, label='SLG scale', value=2.8) guidance_slg_start = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='SLG start', value=0.01) guidance_slg_stop = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='SLG stop', value=0.2) - guidance_slg_layers = gr.Textbox(label='SLG layers', value='7, 8, 9', placeholder='Comma-separated layer indices, e.g. 7,8,9') - guidance_slg_config = gr.Dropdown(choices=[None, 'config1', 'config2'], value=None, label='SLG config') - guidance_slg_args = [guidance_slg_scale, guidance_slg_start, guidance_slg_stop, guidance_slg_layers, guidance_slg_config] + guidance_slg_layers = gr.Textbox(label='SLG layers', value='', placeholder='layer indices, e.g. 7,8,9 or ranges, e.g. 7-9') + args_slg = [guidance_slg_scale, guidance_slg_start, guidance_slg_stop, guidance_slg_layers] seg_group = gr.Accordion(open=True, label='Advanced guidance params', elem_classes=["small-accordion"], visible=False) with seg_group: @@ -93,20 +73,19 @@ def create_guidance_inputs(tab): guidance_seg_blur_threshold_inf = gr.Number(label='SEG blur threshold inf', value=9999.0) guidance_seg_start = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='SEG start', value=0.0) guidance_seg_stop = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='SEG stop', value=1.0) - guidance_seg_layers = gr.Textbox(label='SEG layers', value='7, 8, 9', placeholder='Comma-separated layer indices, e.g. 7,8,9') - guidance_seg_config = gr.Dropdown(choices=[None, 'config1', 'config2'], value=None, label='SEG config') - guidance_seg_args = [guidance_seg_scale, guidance_seg_blur_sigma, guidance_seg_blur_threshold_inf, guidance_seg_start, guidance_seg_stop, guidance_seg_layers, guidance_seg_config] + guidance_seg_layers = gr.Textbox(label='SEG layers', value='', placeholder='layer indices, e.g. 7,8,9 or ranges, e.g. 7-9') + args_seg = [guidance_seg_scale, guidance_seg_blur_sigma, guidance_seg_blur_threshold_inf, guidance_seg_start, guidance_seg_stop, guidance_seg_layers] tcfg_group = gr.Accordion(open=True, label='Advanced guidance params', elem_classes=["small-accordion"], visible=False) with tcfg_group: - pass + args_tcfg = [] fdg_group = gr.Accordion(open=True, label='Advanced guidance params', elem_classes=["small-accordion"], visible=False) with fdg_group: - guidance_fdg_scales = gr.Textbox(label='FDG scales', value='10.0, 5.0', placeholder='Comma-separated scales, e.g. 10.0,5.0') - guidance_fdg_weights = gr.Textbox(label='FDG weights', value='1.0', placeholder='Single float or comma-separated weights, e.g. 1.0 or 1.0,0.5') + guidance_fdg_scales = gr.Textbox(label='FDG scales', value='10.0, 5.0', placeholder='descending scales, e.g. 10.0,5.0') + guidance_fdg_weights = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label='FDG weights', value=1.0) guidance_fdg_rescale_space = gr.Dropdown(choices=['data', 'freq'], value='data', label='FDG rescale space') - guidance_fdg_args = [guidance_fdg_scales, guidance_fdg_weights, guidance_fdg_rescale_space] + args_fdg = [guidance_fdg_scales, guidance_fdg_weights, guidance_fdg_rescale_space] def adv_visibility(guidance_name): return [ @@ -120,26 +99,24 @@ def create_guidance_inputs(tab): gr.update(visible=guidance_name.startswith('TCFG')), gr.update(visible=guidance_name.startswith('FDG')), ] - guidance_name.change(fn=adv_visibility, inputs=[guidance_name], outputs=[base_group, auto_group, zero_group, pag_group, apg_group, slg_group, seg_group, tcfg_group, fdg_group]) + cfg_name.change(fn=adv_visibility, inputs=[cfg_name], outputs=[base_group, auto_group, zero_group, pag_group, apg_group, slg_group, seg_group, tcfg_group, fdg_group]) - with gr.Row(elem_id=f"{tab}_cfg_row", elem_classes=['flexbox'], visible=not shared.opts.model_modular_enable): - cfg_scale = gr.Slider(minimum=-1.0, maximum=30.0, step=0.1, label='Guidance scale', value=-1.0, elem_id=f"{tab}_cfg_scale") - cfg_end = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='Guidance end', value=1.0, elem_id=f"{tab}_cfg_end") - with gr.Row(visible=not shared.opts.model_modular_enable): - cfg_rescale = gr.Slider(minimum=-1.0, maximum=1.0, step=0.05, label='Guidance rescale', value=-1.0, elem_id=f"{tab}_image_cfg_rescale") - cfg_image = gr.Slider(minimum=-1.0, maximum=30.0, step=0.1, label='Refine guidance', value=-1.0, elem_id=f"{tab}_cfg_image") - with gr.Row(visible=not shared.opts.model_modular_enable): + legacy_group = gr.Row(visible=not shared.opts.model_modular_enable) + with legacy_group: cfg_true = gr.Slider(minimum=-1.0, maximum=30.0, step=0.05, label='Attention guidance', value=-1.0, elem_id=f"{tab}_cfg_true") cfg_adaptive = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='Adaptive scaling', value=0.5, elem_id=f"{tab}_cfg_adaptive") + args_legacy = [cfg_true, cfg_adaptive] - _modular_args = guidance_args + lsc_args + guidance_auto_args + guidance_zero_args + guidance_pag_args + guidance_apg_args + guidance_slg_args + guidance_seg_args + guidance_fdg_args # TODO modular: guidance args are not implemented - def update_stored(component, label): - _stored_args[label] = component - for component in _modular_args: + modular_args = args_auto + args_zero + args_pag + args_apg + args_slg + args_seg + args_tcfg + args_fdg + standard_args = args_base + args_legacy + + def update_stored(component, name): + _stored_args[name] = component + for component in modular_args: label = getattr(component, 'label', None) value = getattr(component, 'value', None) - _stored_args[label] = value - component.change(fn=partial(update_stored, label=label), inputs=[component], outputs=[]) + name = label.lower().replace(' ', '_') if label is not None else None + _stored_args[name] = value + component.change(fn=partial(update_stored, name=name), inputs=[component], outputs=[]) - standard_args = [cfg_scale, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end] - return guidance_args + standard_args + return standard_args diff --git a/modules/ui_img2img.py b/modules/ui_img2img.py index 20890ed18..a1dd1d04d 100644 --- a/modules/ui_img2img.py +++ b/modules/ui_img2img.py @@ -137,7 +137,7 @@ def create_ui(): denoising_strength = gr.Slider(minimum=0.00, maximum=0.99, step=0.01, label='Denoising strength', value=0.30, elem_id="img2img_denoising_strength") refiner_start = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='Denoise start', value=0.0, elem_id="img2img_refiner_start") - guidance_name, guidance_scale, guidance_rescale, guidance_start, guidance_stop, cfg_scale, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end = ui_guidance.create_guidance_inputs('img2img') + cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop, cfg_true, cfg_adaptive = ui_guidance.create_guidance_inputs('img2img') vae_type, tiling, hidiffusion, clip_skip = ui_sections.create_advanced_inputs('img2img') grading_brightness, grading_contrast, grading_saturation, grading_hue, grading_gamma, grading_sharpness, grading_color_temp, grading_shadows, grading_midtones, grading_highlights, grading_clahe_clip, grading_clahe_grid, grading_shadows_tint, grading_highlights_tint, grading_split_tone_balance, grading_vignette, grading_grain, grading_lut_file, grading_lut_strength = ui_sections.create_color_inputs('img2img') hdr_mode, hdr_brightness, hdr_color, hdr_sharpen, hdr_clamp, hdr_boundary, hdr_threshold, hdr_maximize, hdr_max_center, hdr_max_boundary, hdr_color_picker, hdr_tint_ratio, hdr_apply_hires = ui_sections.create_latent_inputs('img2img') @@ -183,8 +183,7 @@ def create_ui(): vae_type, tiling, hidiffusion, detailer_enabled, detailer_prompt, detailer_negative, detailer_steps, detailer_strength, detailer_resolution, detailer_classes, batch_count, batch_size, - guidance_name, guidance_scale, guidance_rescale, guidance_start, guidance_stop, - cfg_scale, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end, + cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop, cfg_true, cfg_adaptive, refiner_start, clip_skip, denoising_strength, @@ -266,19 +265,8 @@ def create_ui(): (seed, "Seed"), (subseed, "Variation seed"), (subseed_strength, "Variation strength"), - # guidance - (guidance_name, "Guidance"), - (guidance_scale, "Guidance scale"), - (guidance_rescale, "Guidance rescale"), - (guidance_start, "Guidance start"), - (guidance_stop, "Guidance stop"), # advanced - (cfg_scale, "CFG scale"), - (cfg_end, "CFG end"), - (cfg_image, "Image CFG scale"), - (cfg_image, "Hires CFG scale"), (clip_skip, "CLiP-skip"), - (cfg_rescale, "CFG rescale"), (vae_type, "VAE type"), (tiling, "Tiling"), (hidiffusion, "HiDiffusion"), @@ -309,7 +297,15 @@ def create_ui(): (refiner_steps, "Refiner steps"), (refiner_prompt, "refiner prompt"), (refiner_negative, "Refiner negative"), - # pag + # guidance + (cfg_name, "CFG name"), + (cfg_scale, "CFG scale"), + (cfg_image, "CFG image"), + (cfg_image, "Image CFG scale"), + (cfg_image, "Hires CFG scale"), + (cfg_rescale, "CFG rescale"), + (cfg_start, "CFG start"), + (cfg_stop, "CFG stop"), (cfg_true, "CFG true"), (cfg_adaptive, "CFG adaptive"), # inpaint diff --git a/modules/ui_txt2img.py b/modules/ui_txt2img.py index d639eb356..8988ead64 100644 --- a/modules/ui_txt2img.py +++ b/modules/ui_txt2img.py @@ -33,7 +33,7 @@ def create_ui(): with gr.Accordion(open=False, label="Samplers", elem_classes=["small-accordion"], elem_id="txt2img_sampler_group"): ui_sections.create_sampler_options('txt2img') seed, reuse_seed, subseed, reuse_subseed, subseed_strength, seed_resize_from_h, seed_resize_from_w = ui_sections.create_seed_inputs('txt2img') - guidance_name, guidance_scale, guidance_rescale, guidance_start, guidance_stop, cfg_scale, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end = ui_guidance.create_guidance_inputs('txt2img') + cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop, cfg_true, cfg_adaptive = ui_guidance.create_guidance_inputs('txt2img') vae_type, tiling, hidiffusion, clip_skip = ui_sections.create_advanced_inputs('txt2img') grading_brightness, grading_contrast, grading_saturation, grading_hue, grading_gamma, grading_sharpness, grading_color_temp, grading_shadows, grading_midtones, grading_highlights, grading_clahe_clip, grading_clahe_grid, grading_shadows_tint, grading_highlights_tint, grading_split_tone_balance, grading_vignette, grading_grain, grading_lut_file, grading_lut_strength = ui_sections.create_color_inputs('txt2img') hdr_mode, hdr_brightness, hdr_color, hdr_sharpen, hdr_clamp, hdr_boundary, hdr_threshold, hdr_maximize, hdr_max_center, hdr_max_boundary, hdr_color_picker, hdr_tint_ratio, hdr_apply_hires = ui_sections.create_latent_inputs('txt2img') @@ -58,8 +58,7 @@ def create_ui(): vae_type, tiling, hidiffusion, detailer_enabled, detailer_prompt, detailer_negative, detailer_steps, detailer_strength, detailer_resolution, detailer_classes, batch_count, batch_size, - guidance_name, guidance_scale, guidance_rescale, guidance_start, guidance_stop, - cfg_scale, cfg_image, cfg_rescale, cfg_true, cfg_adaptive, cfg_end, + cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop, cfg_true, cfg_adaptive, clip_skip, seed, subseed, subseed_strength, seed_resize_from_h, seed_resize_from_w, height, width, @@ -114,19 +113,8 @@ def create_ui(): (seed, "Seed"), (subseed, "Variation seed"), (subseed_strength, "Variation strength"), - # guidance - (guidance_name, "Guidance"), - (guidance_scale, "Guidance scale"), - (guidance_rescale, "Guidance rescale"), - (guidance_start, "Guidance start"), - (guidance_stop, "Guidance stop"), # advanced - (cfg_scale, "CFG scale"), - (cfg_end, "CFG end"), (clip_skip, "CLiP-skip"), - (cfg_image, "Image CFG scale"), - (cfg_image, "Hires CFG scale"), - (cfg_rescale, "CFG rescale"), (vae_type, "VAE type"), (tiling, "Tiling"), (hidiffusion, "HiDiffusion"), @@ -156,7 +144,15 @@ def create_ui(): (refiner_steps, "Refiner steps"), (refiner_prompt, "refiner prompt"), (refiner_negative, "Refiner negative"), - # pag + # guidance + (cfg_name, "CFG name"), + (cfg_scale, "CFG scale"), + (cfg_image, "CFG image"), + (cfg_image, "Image CFG scale"), + (cfg_image, "Hires CFG scale"), + (cfg_rescale, "CFG rescale"), + (cfg_start, "CFG start"), + (cfg_stop, "CFG stop"), (cfg_true, "CFG true"), (cfg_adaptive, "CFG adaptive"), # hidden diff --git a/modules/vae/sd_vae_taesd.py b/modules/vae/sd_vae_taesd.py index 0436339af..5bbc6a46e 100644 --- a/modules/vae/sd_vae_taesd.py +++ b/modules/vae/sd_vae_taesd.py @@ -220,7 +220,8 @@ def decode(latents, fast=False): image = image[0] else: image = vae.decode(tensor, return_dict=False)[0] - image = (image / 2.0 + 0.5).clamp(0, 1).detach() + # image = (image / 2.0 + 0.5).clamp(0, 1).detach() + image = image.clamp(0, 1).detach() image = restore_preview_size(image, vae) t1 = time.time() if (t1 - t0) > 5.0 and not first_run: diff --git a/scripts/xyz/xyz_grid_classes.py b/scripts/xyz/xyz_grid_classes.py index 655fc6dfb..c4947b835 100644 --- a/scripts/xyz/xyz_grid_classes.py +++ b/scripts/xyz/xyz_grid_classes.py @@ -47,7 +47,7 @@ from scripts.xyz.xyz_grid_shared import ( # pylint: disable=no-name-in-module, u format_nothing, str_permutations, ) -from modules import shared, shared_items, sd_samplers, ipadapter, sd_models, sd_vae, sd_unet, attention +from modules import shared, shared_items, sd_samplers, ipadapter, sd_models, sd_vae, sd_unet, attention, modular_guiders from modules.control.units import controlnet, t2iadapter from modules.control import processor @@ -260,10 +260,12 @@ axis_options = [ AxisOption("[Sampler] Max shift", float, apply_setting("schedulers_max_shift")), AxisOption("[Sampler] ETA delta", float, apply_setting("eta_noise_seed_delta")), AxisOption("[Sampler] ETA multiplier", float, apply_setting("scheduler_eta")), + AxisOption("[Guidance] Name", str, apply_field("cfg_name"), cost=0.2, choices=lambda: list(modular_guiders.guiders.keys())), AxisOption("[Guidance] Scale", float, apply_field("cfg_scale")), - AxisOption("[Guidance] End", float, apply_field("cfg_end")), - AxisOption("[Guidance] Image scale", float, apply_field("cfg_image")), AxisOption("[Guidance] Rescale", float, apply_field("cfg_rescale")), + AxisOption("[Guidance] Start", float, apply_field("cfg_start")), + AxisOption("[Guidance] Stop", float, apply_field("cfg_stop")), + AxisOption("[Guidance] Image scale", float, apply_field("cfg_image")), AxisOption("[Refine] Upscaler", str, apply_field("hr_upscaler"), cost=0.3, choices=lambda: [x.name for x in shared.sd_upscalers]), AxisOption("[Refine] Sampler", str, apply_hr_sampler_name, fmt=format_value_add_label, confirm=confirm_samplers, choices=lambda: [x.name for x in sd_samplers.visible_samplers()]), AxisOption("[Refine] Denoising strength", float, apply_field("denoising_strength")), diff --git a/ui/autocomplete.ts b/ui/autocomplete.ts index 51f7338e2..e96068e95 100644 --- a/ui/autocomplete.ts +++ b/ui/autocomplete.ts @@ -239,7 +239,7 @@ const engine = { await Promise.all(toLoad.map(async (name) => { try { const resp = await authFetch(`${window.api}/autocomplete/${name}`); - if (!resp.ok) throw new Error(`${resp.status}`); + if (!resp?.ok) throw new Error(`${resp?.status}`); const data = await resp.json(); this.indices.set(name, new TagIndex(data)); // Extract category colors from first loaded file diff --git a/ui/autocomplete_xn.ts b/ui/autocomplete_xn.ts index 78d38fe36..2162fb772 100644 --- a/ui/autocomplete_xn.ts +++ b/ui/autocomplete_xn.ts @@ -88,7 +88,7 @@ export const xnEngine: XnEngine = { try { // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' }); const resp = await authFetch(`${window.api}${path}`); - if (!resp.ok) throw new Error(`${resp.status}`); + if (!resp?.ok) throw new Error(`${resp?.status}`); return await resp.json(); } catch (e) { log('autoComplete', { xnFetchFailed: path, error: String(e) }); diff --git a/ui/dist/sdnext.mjs b/ui/dist/sdnext.mjs index f33d9f5bd..dcfeb96db 100644 --- a/ui/dist/sdnext.mjs +++ b/ui/dist/sdnext.mjs @@ -11231,7 +11231,7 @@ async function updateUI(model) { } async function updateModel() { const req = await authFetch2(`${window.api}/checkpoint`); - if (req.ok) { + if (req && req.ok) { const model = await req.json(); if (model?.type?.length > 0) updateUI(model); } @@ -11348,7 +11348,7 @@ async function setTheme(val, old) { for (const link of links) { const href = link.href.replace(old, val); const res = await authFetch2(href); - if (res.ok) { + if (res?.ok) { log("setTheme", old, val); link.href = link.href.replace(old, val); } else { @@ -12445,7 +12445,7 @@ async function initModels() { const en = gradioApp().getElementById("txt2img_extra_networks"); if (!el2 || !en) return; const req = await authFetch2(`${window.api}/sd-models`); - const res = req.ok ? await req.json() : []; + const res = req && req.ok ? await req.json() : []; log("initModels", res.length); const ready = () => `

Ready

@@ -13493,7 +13493,7 @@ async function delayFetchThumb(fn, signal) { outstanding++; const ts = t0.toString(); const res = await authFetch2(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: "low" }); - if (!res.ok) { + if (!res?.ok) { error(`fetchThumb: ${res.statusText}`); return void 0; } @@ -14260,6 +14260,7 @@ async function observeImageError(img) { img.src = loadingSvg; const { default: heic2any } = await import("https://esm.sh/heic2any@0.0.4"); const res = await authFetch2(origSrc); + if (!res || res.status !== 200) return; const imageBlob = await res.blob(); if (!imageBlob || imageBlob.size <= 1024) { error("imageHEIC", { src: origSrc, res, blob: imageBlob }); @@ -14735,7 +14736,7 @@ var xnEngine = { async fetchJson(path) { try { const resp = await authFetch(`${window.api}${path}`); - if (!resp.ok) throw new Error(`${resp.status}`); + if (!resp?.ok) throw new Error(`${resp?.status}`); return await resp.json(); } catch (e) { log("autoComplete", { xnFetchFailed: path, error: String(e) }); @@ -14984,7 +14985,7 @@ var engine = { await Promise.all(toLoad.map(async (name) => { try { const resp = await authFetch(`${window.api}/autocomplete/${name}`); - if (!resp.ok) throw new Error(`${resp.status}`); + if (!resp?.ok) throw new Error(`${resp?.status}`); const data = await resp.json(); this.indices.set(name, new TagIndex(data)); if (data.categories) { diff --git a/ui/dist/sdnext.mjs.map b/ui/dist/sdnext.mjs.map index 0e5482d30..e8fa350af 100644 --- a/ui/dist/sdnext.mjs.map +++ b/ui/dist/sdnext.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist/jquery.js", "../js/iframeResizer.js", "../../node_modules/.pnpm/exifr@7.1.3/node_modules/exifr/dist/full.umd.js", "../../node_modules/.pnpm/wheel@1.0.0/node_modules/wheel/index.js", "../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js", "../../node_modules/.pnpm/amator@1.1.0/node_modules/amator/index.js", "../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/index.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/kinetic.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeTextSelectionInterceptor.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/transform.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeSvgController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeDomController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/index.js", "../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist-module/wrappers/jquery.node-module-wrapper.js", "../vendor.ts", "../logger.ts", "../authWrap.ts", "../timers.ts", "../script.ts", "../changelog.ts", "../control.ts", "../extraNetworks.ts", "../generationParams.ts", "../imageParams.ts", "../notification.ts", "../progressBar.ts", "../dynamicUI.ts", "../ui.ts", "../inputAccordion.ts", "../indexdb.ts", "../logMonitor.ts", "../settings.ts", "../monitor.ts", "../promptChecker.ts", "../js/sha256.ts", "../gallery.ts", "../imageViewer.ts", "../autocomplete_xn.ts", "../autocomplete.ts", "../setHints.ts", "../contextMenus.ts", "../uiConfig.ts", "../loader.ts", "../legacy.ts", "../startup.ts", "../extensions.ts", "../dragDrop.ts", "../civitai.ts", "../guidance.ts", "../timesheet.ts", "../history.ts", "../storage.ts", "../aspectRatioOverlay.ts", "../resolutionLock.ts", "../editAttention.ts", "../../node_modules/.pnpm/jquery-sparkline@2.4.0/node_modules/jquery-sparkline/jquery.sparkline.js", "../gpu.ts"], - "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

Server shutdown in progress...

';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

Server restart in progress...

';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
\n \n \n
\n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TimeLevelModuleMessageWarnings 0Errors 0
\n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

No models available

\n - Select a model from reference list to download or
\n - Set model path to a folder containing your models
\n Current model path: ${opts.ckpt_dir}
\n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = req.ok ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

Ready

\n ${res.length} models available
\n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
\n Commit: ${this.commit}
\n Branch: ${this.branch}
\n Status: ${this.online ? 'online' : 'offline'}
\n Model: ${this.model}
\n Since: ${this.startup.toLocaleString()}
\n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
File: ${currentImage}
\n
Prompt: ${prompt}
\n
Negative: ${negative}
\n
${paramsFormatted}
\n
Raw:
${raw}
\n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
`;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
`;\n html = html.replace('Negative prompt:', '
Negative');\n html = html.replace('Steps:', '
Params Steps:');\n html = html.replaceAll('\\n', '
');\n html = html.replaceAll('

', '
');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp.ok) throw new Error(`${resp.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp.ok) throw new Error(`${resp.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
\n \n \n \n \n
\n `;\n // set up the complete content structure from the start\n let content = `\n
\n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
\n
\n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
${e.target.dataset.longHint}
`; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
\n
\n ${reloadText}\n
\n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
${logEntry.ts}   ${joinArgs(logEntry.msg)}
`;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
\n
\n
\n
\n
`;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
`;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet ok = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 120000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n ok = window.opts.theme_type === 'Modern' ? 'uiux_separator_appearance' in window.opts : true;\n if (ok) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nasync function initStartup() {\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
\n \"model\n \n \n \n \n \n \n \n \n \n \n \n
Name{name}
Type{type}
Tags
{tags}
NSFW{nsfw} | {level}
Availability{availability}
Downloads{downloads}
Author{creator}
Description
{desc}
Download
All variants
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
VersionTypeBaseFileUpdatedSizeAvailabilityDescription
\n
\n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
{desc}
\n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
\\udb80\\uddda
`,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
`);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
${html.join('')}
`;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], - "mappings": "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", + "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet ok = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 120000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n ok = window.opts.theme_type === 'Modern' ? 'uiux_separator_appearance' in window.opts : true;\n if (ok) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nasync function initStartup() {\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], + "mappings": "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", "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "ok", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "ok", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] } diff --git a/ui/dynamicUI.ts b/ui/dynamicUI.ts index eca71832c..e20fc56ba 100644 --- a/ui/dynamicUI.ts +++ b/ui/dynamicUI.ts @@ -18,7 +18,7 @@ async function updateUI(model: Model) { export async function updateModel() { const req = await authFetch(`${window.api}/checkpoint`); - if (req.ok) { + if (req && req.ok) { const model = await req.json() as Model; if (model?.type?.length > 0) updateUI(model); } diff --git a/ui/gallery.ts b/ui/gallery.ts index f7139f412..5c588a897 100644 --- a/ui/gallery.ts +++ b/ui/gallery.ts @@ -503,7 +503,7 @@ async function delayFetchThumb(fn, signal) { outstanding++; const ts = t0.toString(); const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' }); - if (!res.ok) { + if (!res?.ok) { error(`fetchThumb: ${res.statusText}`); return undefined; } @@ -1466,6 +1466,7 @@ async function observeImageError(img: HTMLImageElement) { // eslint-disable-next-line import-x/no-unresolved const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4'); const res = await authFetch(origSrc); + if (!res || res.status !== 200) return; const imageBlob = await res.blob(); if (!imageBlob || imageBlob.size <= 1024) { error('imageHEIC', { src: origSrc, res, blob: imageBlob }); diff --git a/ui/settings.ts b/ui/settings.ts index 0ab055c75..7f220b65c 100644 --- a/ui/settings.ts +++ b/ui/settings.ts @@ -201,7 +201,7 @@ export async function initModels() { const en = gradioApp().getElementById('txt2img_extra_networks'); if (!el || !en) return; const req = await authFetch(`${window.api}/sd-models`); - const res = req.ok ? await req.json() : []; + const res = (req && req.ok) ? await req.json() : []; log('initModels', res.length); const ready = () => `

    Ready

    diff --git a/ui/ui.ts b/ui/ui.ts index da4177712..88e9a6804 100644 --- a/ui/ui.ts +++ b/ui/ui.ts @@ -130,7 +130,7 @@ export async function setTheme(val, old) { for (const link of links) { const href = link.href.replace(old, val); const res = await authFetch(href); - if (res.ok) { + if (res?.ok) { log('setTheme', old, val); link.href = link.href.replace(old, val); } else { From f90bb1823bed3128b1173c373bc18b7766c3d912 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 30 Aug 2026 20:41:59 +0200 Subject: [PATCH 105/270] modular cache framework Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 17 +++-- TODO.md | 3 +- extensions-builtin/sdnq | 2 +- modules/modular_cache.py | 12 ++++ modules/processing_diffusers.py | 98 ++++++++++++++--------------- modules/processing_helpers.py | 12 ++-- modules/ui_cache.py | 106 ++++++++++++++++++++++++++++++++ modules/ui_control.py | 3 +- modules/ui_guidance.py | 3 +- wiki | 2 +- 10 files changed, 194 insertions(+), 64 deletions(-) create mode 100644 modules/modular_cache.py create mode 100644 modules/ui_cache.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 68ad17ed5..5af3c0fb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2026-08-29 +## Update for 2026-08-30 - **LoRA** - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions @@ -20,16 +20,21 @@ *note*: this is a breaking change - if you had custom attention settings in previous releases, you will need to re-apply them in the new settings section - new `sparse-attention` method that can be combined with other attention methods to reduce memory usage and improve performance on large models + - new attention mechanisms decision tree and apply method refactor - **Modular Pipelines** - - *TODO*: see [Modular Pipelines docs](https://vladmandic.github.io/sdnext-docs/Modular-Pipelines) for details and usage instructions + - *TODO*: short note... + see [Modular Pipelines docs](https://vladmandic.github.io/sdnext-docs/Modular-Pipelines) for details and usage instructions + - new model **Guidance** stack for modular pipelines + includes: *CFG, PAG, Auto, Zero, APG, SLG, SEG, TCFG, FDG* + *TODO*: see [Guidance docs](https://vladmandic.github.io/sdnext-docs/Guidance) for details and usage instructions + - new model **Caching** stack for modular pipelines + includes: *FasterCache, FirstBlockCache, LayerSkip, MagCache, PyramidAttentionBroadcast, TaylorSeerCache, TextKVCache* + *TODO*: see [Caching docs](https://vladmandic.github.io/sdnext-docs/Caching) for details and usage instructions - implement progress and preview - intercept and profiling hooks - - full modular guidance - on-demand convert standard model on-demand -- **Internal** - - attention mechanisms decision tree and apply method refactor - **Fixes** - - unnecessary secondary prompt + - unnecessary secondary prompt if same - js fetch exception handling ## Update for 2026-08-26 diff --git a/TODO.md b/TODO.md index 798cef684..532410bc5 100644 --- a/TODO.md +++ b/TODO.md @@ -14,7 +14,8 @@ ## Issues -- Inpaint: https://discord.com/channels/1101998836328697867/1130536562422186044/1506850651035144322, @vladmandic +- [Inpaint](https://discord.com/channels/1101998836328697867/1130536562422186044/1506850651035144322), @vladmandic +- [OpenVINO](https://github.com/vladmandic/sdnext/issues/4939), @vladmandic ## Features diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index 0d0b5d204..06c83b387 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit 0d0b5d20477caf0b56ea97eaed50e7ac2561b018 +Subproject commit 06c83b3878d7240da5d8b8c94ae798af9a047e6b diff --git a/modules/modular_cache.py b/modules/modular_cache.py new file mode 100644 index 000000000..f19cb2e45 --- /dev/null +++ b/modules/modular_cache.py @@ -0,0 +1,12 @@ +from modules import processing +from modules.logger import log + + +def set_cache(p: processing.StableDiffusionProcessing, phase: str | None = None): # pylint: disable=unused-argument + import modules.ui_cache + inputs = modules.ui_cache.get_modular_args() + method = inputs.get('cache_method', 'None') + if method == 'None': + return + args = {} + log.debug(f'Pipeline: cache={method} args={args}') diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index ec172aea3..fd5387d44 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -7,7 +7,7 @@ import diffusers from PIL import Image from modules import shared, processing, sd_models, errors, sd_hijack_hypertile, processing_vae, sd_models_compile, timer, modelstats, extra_networks, attention, modular from modules.logger import log -from modules.processing_helpers import resize_hires, calculate_base_steps, calculate_hires_steps, calculate_refiner_steps, save_intermediate, update_sampler, is_txt2img, is_refiner_enabled, get_job_name +from modules.processing_helpers import resize_hires, calculate_base_steps, calculate_hires_steps, calculate_refiner_steps, save_intermediate, update_sampler, is_txt2img, is_refiner_enabled, get_job_name, is_modular from modules.processing_args import set_pipeline_args from modules.onnx_impl import preprocess_pipeline as preprocess_onnx_pipeline, check_parameters_changed as olive_check_parameters_changed from modules.lora import lora_common @@ -71,59 +71,61 @@ def restore_state(p: processing.StableDiffusionProcessing): def process_pre(p: processing.StableDiffusionProcessing, phase: str | None = None): - from modules import ipadapter, sd_hijack_freeu, para_attention, teacache, hidiffusion, ras, pag, cfgzero, transformer_cache, token_merge, linfusion, cachedit - if shared.sd_model is None: - log.warning('Processing modifiers: model not loaded') + if not shared.sd_loaded: return - log.info(f'Processing modifiers: phase={phase} apply') - try: - # apply-with-unapply - # sd_hijack_compile.install() - sd_models_compile.check_deepcache(enable=True) - ipadapter.apply(shared.sd_model, p) - token_merge.apply_token_merging(shared.sd_model) - hidiffusion.apply(p, shared.sd_model_type) - ras.apply(shared.sd_model, p) - pag.apply(p) - cfgzero.apply(p) - linfusion.apply(shared.sd_model) - cachedit.apply_cache_dit(shared.sd_model) - # apply-only - sd_hijack_freeu.apply_freeu(p) - transformer_cache.set_cache() - para_attention.apply_first_block_cache() - teacache.apply_teacache(p) - - except Exception as e: - log.error(f'Processing apply: {e}') - errors.display(e, 'apply') - + if is_modular(shared.sd_model): + if modular.is_guider(shared.sd_model): + from modules import modular_guiders, modular_cache + modular_guiders.set_guider(p, phase) + modular_cache.set_cache(p, phase) + else: + try: + log.info(f'Processing modifiers: phase={phase} apply') + from modules import ipadapter, sd_hijack_freeu, para_attention, teacache, hidiffusion, ras, pag, cfgzero, transformer_cache, token_merge, linfusion, cachedit + # apply-with-unapply + # sd_hijack_compile.install() + sd_models_compile.check_deepcache(enable=True) + token_merge.apply_token_merging(shared.sd_model) + hidiffusion.apply(p, shared.sd_model_type) + ras.apply(shared.sd_model, p) + pag.apply(p) + cfgzero.apply(p) + linfusion.apply(shared.sd_model) + cachedit.apply_cache_dit(shared.sd_model) + ipadapter.apply(shared.sd_model, p) + # apply-only + sd_hijack_freeu.apply_freeu(p) + transformer_cache.set_cache() + para_attention.apply_first_block_cache() + teacache.apply_teacache(p) + except Exception as e: + log.error(f'Processing apply: {e}') + errors.display(e, 'apply') shared.sd_model = sd_models.apply_balanced_offload(shared.sd_model) - - if modular.is_guider(shared.sd_model): - from modules import modular_guiders - modular_guiders.set_guider(p, phase) - timer.process.record('pre') def process_post(p: processing.StableDiffusionProcessing): - from modules import ipadapter, hidiffusion, ras, pag, cfgzero, token_merge, linfusion, cachedit - log.info('Processing modifiers: unapply') - - try: - sd_models_compile.check_deepcache(enable=False) - ipadapter.unapply(shared.sd_model, unload=getattr(p, 'ip_adapter_unload', False)) - token_merge.remove_token_merging(shared.sd_model) - hidiffusion.unapply() - ras.unapply(shared.sd_model) - pag.unapply() - cfgzero.unapply() - linfusion.unapply(shared.sd_model) - cachedit.unapply_cache_dir(shared.sd_model) - except Exception as e: - log.error(f'Processing unapply: {e}') - errors.display(e, 'unapply') + if not shared.sd_loaded: + return + if is_modular(shared.sd_model): + pass + else: + try: + from modules import ipadapter, hidiffusion, ras, pag, cfgzero, token_merge, linfusion, cachedit + log.info('Processing modifiers: unapply') + sd_models_compile.check_deepcache(enable=False) + ipadapter.unapply(shared.sd_model, unload=getattr(p, 'ip_adapter_unload', False)) + token_merge.remove_token_merging(shared.sd_model) + hidiffusion.unapply() + ras.unapply(shared.sd_model) + pag.unapply() + cfgzero.unapply() + linfusion.unapply(shared.sd_model) + cachedit.unapply_cache_dir(shared.sd_model) + except Exception as e: + log.error(f'Processing unapply: {e}') + errors.display(e, 'unapply') timer.process.record('post') diff --git a/modules/processing_helpers.py b/modules/processing_helpers.py index c31adc4c3..dfaabc65d 100644 --- a/modules/processing_helpers.py +++ b/modules/processing_helpers.py @@ -17,12 +17,16 @@ debug_steps = log.trace if os.environ.get('SD_STEPS_DEBUG', None) is not None el debug_steps('Trace: STEPS') -def is_modular(): - return sd_models.get_diffusers_task(shared.sd_model) == sd_models.DiffusersTaskType.MODULAR +def is_modular(pipe = None): + if not shared.sd_loaded: + return False + pipe = pipe or shared.sd_model + return sd_models.get_diffusers_task(pipe) == sd_models.DiffusersTaskType.MODULAR -def is_txt2img(): - return sd_models.get_diffusers_task(shared.sd_model) == sd_models.DiffusersTaskType.TEXT_2_IMAGE +def is_txt2img(pipe = None): + pipe = pipe or shared.sd_model + return sd_models.get_diffusers_task(pipe) == sd_models.DiffusersTaskType.TEXT_2_IMAGE def is_refiner_enabled(p): diff --git a/modules/ui_cache.py b/modules/ui_cache.py new file mode 100644 index 000000000..149348f90 --- /dev/null +++ b/modules/ui_cache.py @@ -0,0 +1,106 @@ +from functools import partial +import gradio as gr +import diffusers.hooks # pylint: disable=unused-import +from modules import ui_common + + +_stored_args = {} +methods = { + 'None': {}, + 'Context Parallel': {}, + 'Faster Cache': {}, + 'First Block Cache': {}, + 'Layer Skip': {}, + 'Mag Cache': {}, + 'Pyramid Attention Broadcast': {}, + 'TaylorSeer Cache': {}, + 'Text KV Cache': {}, +} + + +def get_modular_args(): + return _stored_args + + +def get_cache_methods(): + from modules.processing_helpers import is_modular + if is_modular(): + return list(methods.keys()) + return ['None'] + + +def create_cache_inputs(tab): + with gr.Accordion(open=False, label='Cache', elem_id=f"{tab}_cache", elem_classes=["small-accordion"]): + with gr.Group(): + with gr.Row(elem_id=f"{tab}_cache_row", elem_classes=['flexbox']): + cache_name = gr.Dropdown(choices=get_cache_methods(), value='None', label='Method', elem_id=f"{tab}_cache") + _cache_check = ui_common.create_refresh_button(cache_name, get_cache_methods) + + acc_context_parallel = gr.Accordion(open=True, label='Context Parallel', elem_classes=["small-accordion"], visible=False) + with acc_context_parallel: + gr.HTML(value="

    TODO: Context Parallel

    ") + args_context_parallel = [] + + acc_faster_cache = gr.Accordion(open=True, label='Faster Cache', elem_classes=["small-accordion"], visible=False) + with acc_faster_cache: + gr.HTML(value="

    TODO: Faster Cache

    ") + args_faster_cache = [] + + acc_first_block_cache = gr.Accordion(open=True, label='First Block Cache', elem_classes=["small-accordion"], visible=False) + with acc_first_block_cache: + gr.HTML(value="

    TODO: First Block Cache

    ") + args_first_block_cache = [] + + acc_layer_skip = gr.Accordion(open=True, label='Layer Skip', elem_classes=["small-accordion"], visible=False) + with acc_layer_skip: + gr.HTML(value="

    TODO: Layer Skip

    ") + args_layer_skip = [] + + acc_mag_cache = gr.Accordion(open=True, label='Mag Cache', elem_classes=["small-accordion"], visible=False) + with acc_mag_cache: + gr.HTML(value="

    TODO: Mag Cache

    ") + args_mag_cache = [] + + acc_pyramid_attention_broadcast = gr.Accordion(open=True, label='Pyramid Attention Broadcast', elem_classes=["small-accordion"], visible=False) + with acc_pyramid_attention_broadcast: + gr.HTML(value="

    TODO: Pyramid Attention Broadcast

    ") + args_pyramid_attention_broadcast = [] + + acc_taylorseer_cache = gr.Accordion(open=True, label='TaylorSeer Cache', elem_classes=["small-accordion"], visible=False) + with acc_taylorseer_cache: + gr.HTML(value="

    TODO: TaylorSeer Cache

    ") + args_taylorseer_cache = [] + + acc_text_kv_cache = gr.Accordion(open=True, label='Text KV Cache', elem_classes=["small-accordion"], visible=False) + with acc_text_kv_cache: + gr.HTML(value="

    TODO: Text KV Cache

    ") + args_text_kv_cache = [] + + def adv_visibility(guidance_name): + _stored_args['cache_name'] = guidance_name + return [ + gr.update(visible=guidance_name == 'Context Parallel'), + gr.update(visible=guidance_name == 'Faster Cache'), + gr.update(visible=guidance_name == 'First Block Cache'), + gr.update(visible=guidance_name == 'Layer Skip'), + gr.update(visible=guidance_name == 'Mag Cache'), + gr.update(visible=guidance_name == 'Pyramid Attention Broadcast'), + gr.update(visible=guidance_name == 'TaylorSeer Cache'), + gr.update(visible=guidance_name == 'Text KV Cache') + ] + cache_name.change(fn=adv_visibility, + inputs=[cache_name], + outputs=[acc_context_parallel, acc_faster_cache, acc_first_block_cache, acc_layer_skip, acc_mag_cache, acc_pyramid_attention_broadcast, acc_taylorseer_cache, acc_text_kv_cache], + ) + + modular_args = args_context_parallel + args_faster_cache + args_first_block_cache + args_layer_skip + args_mag_cache + args_pyramid_attention_broadcast + args_taylorseer_cache + args_text_kv_cache + def update_stored(component, name): + _stored_args[name] = component + for component in modular_args: + label = getattr(component, 'label', None) + value = getattr(component, 'value', None) + name = label.lower().replace(' ', '_') if label is not None else None + _stored_args[name] = value + component.change(fn=partial(update_stored, name=name), inputs=[component], outputs=[]) + + return [cache_name] diff --git a/modules/ui_control.py b/modules/ui_control.py index 269e00aad..404db40e7 100644 --- a/modules/ui_control.py +++ b/modules/ui_control.py @@ -4,7 +4,7 @@ import asyncio import gradio as gr from modules.control import unit from modules import errors, shared, progress, generation_parameters_copypaste, call_queue, scripts_manager, masking, images, processing_vae, timer # pylint: disable=ungrouped-imports -from modules import ui_common, ui_sections, ui_guidance +from modules import ui_common, ui_sections, ui_guidance, ui_cache from modules import ui_control_helpers as helpers from modules.logger import log from modules.memstats import ram_stats @@ -202,6 +202,7 @@ def create_ui(_blocks: gr.Blocks=None): mask_controls = masking.create_segment_ui() cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop, cfg_true, cfg_adaptive = ui_guidance.create_guidance_inputs('control') + _cache_name = ui_cache.create_cache_inputs('control') vae_type, tiling, hidiffusion, clip_skip = ui_sections.create_advanced_inputs('control') grading_brightness, grading_contrast, grading_saturation, grading_hue, grading_gamma, grading_sharpness, grading_color_temp, grading_shadows, grading_midtones, grading_highlights, grading_clahe_clip, grading_clahe_grid, grading_shadows_tint, grading_highlights_tint, grading_split_tone_balance, grading_vignette, grading_grain, grading_lut_file, grading_lut_strength = ui_sections.create_color_inputs('control') hdr_mode, hdr_brightness, hdr_color, hdr_sharpen, hdr_clamp, hdr_boundary, hdr_threshold, hdr_maximize, hdr_max_center, hdr_max_boundary, hdr_color_picker, hdr_tint_ratio, hdr_apply_hires = ui_sections.create_latent_inputs('control') diff --git a/modules/ui_guidance.py b/modules/ui_guidance.py index 27bd82545..820080cf1 100644 --- a/modules/ui_guidance.py +++ b/modules/ui_guidance.py @@ -15,7 +15,6 @@ def get_modular_args(): def create_guidance_inputs(tab): with gr.Accordion(open=False, label='Guidance', elem_id=f"{tab}_guidance", elem_classes=["small-accordion"]): with gr.Group(): - with gr.Row(elem_id=f"{tab}_guider_row", elem_classes=['flexbox'], visible=shared.opts.model_modular_enable): cfg_name = gr.Dropdown(choices=guiders.keys(), value='Default', label='Guider', elem_id=f"{tab}_guider") cfg_name_btn = ui_components.ToolButton(value=ui_symbols.info, elem_id=f"{tab}_guider_docs") @@ -89,7 +88,7 @@ def create_guidance_inputs(tab): def adv_visibility(guidance_name): return [ - gr.update(visible=guidance_name != 'Default' and guidance_name != 'None'), + gr.update(visible=True), gr.update(visible=guidance_name.startswith('Auto')), gr.update(visible=guidance_name.startswith('Zero')), gr.update(visible=guidance_name.startswith('PAG')), diff --git a/wiki b/wiki index 47f645c59..1f45008c0 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 47f645c59c21c5042f88bbe4c9ca550fe2b9300b +Subproject commit 1f45008c0de4e929211f182febe9666d3390a34e From 9f8e45c69b45f0444067f0eab1b0194a20f61097 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 30 Aug 2026 20:42:33 +0200 Subject: [PATCH 106/270] update modernui Signed-off-by: Vladimir Mandic --- extensions-builtin/sdnext-modernui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 70d6dcae3..7597a81c6 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 70d6dcae3ef80a543173930a77ad5525d6ef1d9a +Subproject commit 7597a81c631b9fcdd519d4fa7c9c2d658b365d98 From 14669b59a963aea3df3eae276acd4295626efe27 Mon Sep 17 00:00:00 2001 From: Anai-Guo Date: Sun, 30 Aug 2026 18:17:13 -0700 Subject: [PATCH 107/270] chore(rife): drop the two vendored v3 modules the v4.25 upgrade orphaned dc4c58d0 replaced the vendored RIFE with Practical-RIFE v4.25 and gave warp() an explicit (tenFlow_div, backwarp_tenGrid) signature, but left refine.py behind: its four warp(x, flow) calls no longer match, and nothing imports the module. loss.py holds the EPE/SOBEL training scaffolding the same commit says it dropped, and is likewise unused. --- modules/rife/loss.py | 121 ----------------------------------------- modules/rife/refine.py | 90 ------------------------------ 2 files changed, 211 deletions(-) delete mode 100644 modules/rife/loss.py delete mode 100644 modules/rife/refine.py diff --git a/modules/rife/loss.py b/modules/rife/loss.py deleted file mode 100644 index f525ff443..000000000 --- a/modules/rife/loss.py +++ /dev/null @@ -1,121 +0,0 @@ -import numpy as np -import torch -import torch.nn as nn -import torch.nn.functional as F -import torchvision.models as models -from modules import devices - - -class EPE(nn.Module): - def __init__(self): - super().__init__() - - def forward(self, flow, gt, loss_mask): - loss_map = (flow - gt.detach()) ** 2 - loss_map = (loss_map.sum(1, True) + 1e-6) ** 0.5 - return loss_map * loss_mask - - -class Ternary(nn.Module): - def __init__(self): - super().__init__() - patch_size = 7 - out_channels = patch_size * patch_size - self.w = np.eye(out_channels).reshape( - (patch_size, patch_size, 1, out_channels)) - self.w = np.transpose(self.w, (3, 2, 0, 1)) - self.w = torch.tensor(self.w).float().to(devices.device) - - def transform(self, img): - patches = F.conv2d(img, self.w, padding=3, bias=None) - transf = patches - img - transf_norm = transf / torch.sqrt(0.81 + transf**2) - return transf_norm - - def rgb2gray(self, rgb): - r, g, b = rgb[:, 0:1, :, :], rgb[:, 1:2, :, :], rgb[:, 2:3, :, :] - gray = 0.2989 * r + 0.5870 * g + 0.1140 * b - return gray - - def hamming(self, t1, t2): - dist = (t1 - t2) ** 2 - dist_norm = torch.mean(dist / (0.1 + dist), 1, True) - return dist_norm - - def valid_mask(self, t, padding): - n, _, h, w = t.size() - inner = torch.ones(n, 1, h - 2 * padding, w - 2 * padding).type_as(t) - mask = F.pad(inner, [padding] * 4) - return mask - - def forward(self, img0, img1): - img0 = self.transform(self.rgb2gray(img0)) - img1 = self.transform(self.rgb2gray(img1)) - return self.hamming(img0, img1) * self.valid_mask(img0, 1) - - -class SOBEL(nn.Module): - def __init__(self): - super().__init__() - self.kernelX = torch.tensor([ - [1, 0, -1], - [2, 0, -2], - [1, 0, -1], - ]).float() - self.kernelY = self.kernelX.clone().T - self.kernelX = self.kernelX.unsqueeze(0).unsqueeze(0).to(devices.device) - self.kernelY = self.kernelY.unsqueeze(0).unsqueeze(0).to(devices.device) - - def forward(self, pred, gt): - N, C, H, W = pred.shape[0], pred.shape[1], pred.shape[2], pred.shape[3] - img_stack = torch.cat( - [pred.reshape(N*C, 1, H, W), gt.reshape(N*C, 1, H, W)], 0) - sobel_stack_x = F.conv2d(img_stack, self.kernelX, padding=1) - sobel_stack_y = F.conv2d(img_stack, self.kernelY, padding=1) - pred_X, gt_X = sobel_stack_x[:N*C], sobel_stack_x[N*C:] - pred_Y, gt_Y = sobel_stack_y[:N*C], sobel_stack_y[N*C:] - L1X, L1Y = torch.abs(pred_X-gt_X), torch.abs(pred_Y-gt_Y) - loss = L1X+L1Y - return loss - - -class MeanShift(nn.Conv2d): - def __init__(self, data_mean, data_std, data_range=1, norm=True): - c = len(data_mean) - super().__init__(c, c, kernel_size=1) - std = torch.Tensor(data_std) - self.weight.data = torch.eye(c).view(c, c, 1, 1) - if norm: - self.weight.data.div_(std.view(c, 1, 1, 1)) - self.bias.data = -1 * data_range * torch.Tensor(data_mean) - self.bias.data.div_(std) - else: - self.weight.data.mul_(std.view(c, 1, 1, 1)) - self.bias.data = data_range * torch.Tensor(data_mean) - self.requires_grad = False - - -class VGGPerceptualLoss(torch.nn.Module): - def __init__(self, rank=0): # pylint: disable=unused-argument - super().__init__() - pretrained = True - self.vgg_pretrained_features = models.vgg19( - pretrained=pretrained).features - self.normalize = MeanShift([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], norm=True).to(device=devices.device) - for param in self.parameters(): - param.requires_grad = False - - def forward(self, X, Y, indices=None): - X = self.normalize(X) - Y = self.normalize(Y) - indices = [2, 7, 12, 21, 30] - weights = [1.0/2.6, 1.0/4.8, 1.0/3.7, 1.0/5.6, 10/1.5] - k = 0 - loss = 0 - for i in range(indices[-1]): - X = self.vgg_pretrained_features[i](X) - Y = self.vgg_pretrained_features[i](Y) - if i+1 in indices: - loss += weights[k] * (X - Y.detach()).abs().mean() * 0.1 - k += 1 - return loss diff --git a/modules/rife/refine.py b/modules/rife/refine.py deleted file mode 100644 index 9ea076d1f..000000000 --- a/modules/rife/refine.py +++ /dev/null @@ -1,90 +0,0 @@ -import torch -import torch.nn as nn -import torch.nn.functional as F -from modules.rife.warplayer import warp - - -c = 16 - - -def conv(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): - return nn.Sequential( - nn.Conv2d(in_planes, out_planes, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, bias=True), - nn.LeakyReLU(0.2, True) - ) - - -def conv_woact(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): - return nn.Sequential( - nn.Conv2d(in_planes, out_planes, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, bias=True), - ) - - -def deconv(in_planes, out_planes, kernel_size=4, stride=2, padding=1): # pylint: disable=unused-argument - return nn.Sequential( - torch.nn.ConvTranspose2d(in_channels=in_planes, out_channels=out_planes, kernel_size=4, stride=2, padding=1, bias=True), - nn.LeakyReLU(0.2, True) - ) - - -class Conv2(nn.Module): - def __init__(self, in_planes, out_planes, stride=2): - super().__init__() - self.conv1 = conv(in_planes, out_planes, 3, stride, 1) - self.conv2 = conv(out_planes, out_planes, 3, 1, 1) - - def forward(self, x): - x = self.conv1(x) - x = self.conv2(x) - return x - - -class Contextnet(nn.Module): - def __init__(self): - super().__init__() - self.conv1 = Conv2(3, c) - self.conv2 = Conv2(c, 2*c) - self.conv3 = Conv2(2*c, 4*c) - self.conv4 = Conv2(4*c, 8*c) - - def forward(self, x, flow): - x = self.conv1(x) - flow = F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5 - f1 = warp(x, flow) - x = self.conv2(x) - flow = F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5 - f2 = warp(x, flow) - x = self.conv3(x) - flow = F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5 - f3 = warp(x, flow) - x = self.conv4(x) - flow = F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5 - f4 = warp(x, flow) - return [f1, f2, f3, f4] - - -class Unet(nn.Module): - def __init__(self): - super().__init__() - self.down0 = Conv2(17, 2*c) - self.down1 = Conv2(4*c, 4*c) - self.down2 = Conv2(8*c, 8*c) - self.down3 = Conv2(16*c, 16*c) - self.up0 = deconv(32*c, 8*c) - self.up1 = deconv(16*c, 4*c) - self.up2 = deconv(8*c, 2*c) - self.up3 = deconv(4*c, c) - self.conv = nn.Conv2d(c, 3, 3, 1, 1) - - def forward(self, img0, img1, warped_img0, warped_img1, mask, flow, c0, c1): - s0 = self.down0( - torch.cat((img0, img1, warped_img0, warped_img1, mask, flow), 1)) - s1 = self.down1(torch.cat((s0, c0[0], c1[0]), 1)) - s2 = self.down2(torch.cat((s1, c0[1], c1[1]), 1)) - s3 = self.down3(torch.cat((s2, c0[2], c1[2]), 1)) - x = self.up0(torch.cat((s3, c0[3], c1[3]), 1)) - x = self.up1(torch.cat((x, s2), 1)) - x = self.up2(torch.cat((x, s1), 1)) - x = self.up3(torch.cat((x, s0), 1)) - x = self.conv(x) - return torch.sigmoid(x) From d556544b30ddf03a6b686a6cdad545dc4b932f16 Mon Sep 17 00:00:00 2001 From: Anai-Guo Date: Sun, 30 Aug 2026 18:20:30 -0700 Subject: [PATCH 108/270] fix(lumina): pass to_compute_mask, not use_cache, to LLaDABlock.attention attention() takes (q, k, v, attention_bias, layer_past, to_compute_mask) and has no use_cache parameter. Three of the four call sites still pass use_cache=, which raises TypeError; only LLaDALlamaBlock's non-checkpointed branch -- the path the shipped block_type=llama config takes -- is correct. --- pipelines/lumina_dimmo/lumina_dimoo.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pipelines/lumina_dimmo/lumina_dimoo.py b/pipelines/lumina_dimmo/lumina_dimoo.py index d16ca17ef..9a4b90898 100644 --- a/pipelines/lumina_dimmo/lumina_dimoo.py +++ b/pipelines/lumina_dimmo/lumina_dimoo.py @@ -874,10 +874,10 @@ class LLaDASequentialBlock(LLaDABlock): if self._activation_checkpoint_fn is not None: att, cache = self._activation_checkpoint_fn( # type: ignore - self.attention, q, k, v, attention_bias, layer_past=layer_past, use_cache=use_cache + self.attention, q, k, v, attention_bias, layer_past=layer_past ) else: - att, cache = self.attention(q, k, v, attention_bias, layer_past=layer_past, use_cache=use_cache) + att, cache = self.attention(q, k, v, attention_bias, layer_past=layer_past) x = x + self.dropout(att) @@ -967,7 +967,7 @@ class LLaDALlamaBlock(LLaDABlock): if self._activation_checkpoint_fn is not None: att, cache = self._activation_checkpoint_fn( # type: ignore - self.attention, q, k, v, attention_bias, layer_past=layer_past, use_cache=use_cache + self.attention, q, k, v, attention_bias, layer_past=layer_past, to_compute_mask=to_compute_mask ) else: att, cache = self.attention(q, k, v, attention_bias, layer_past=layer_past, to_compute_mask=to_compute_mask) From 8012991a8b33e404505f889972f6ad717f7cf2b0 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 31 Aug 2026 09:43:06 +0200 Subject: [PATCH 109/270] detailer handling of stop/skip/pause Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 3 ++- modules/detailer/detailer.py | 29 ++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5af3c0fb9..61c0d562b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2026-08-30 +## Update for 2026-08-31 - **LoRA** - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions @@ -36,6 +36,7 @@ - **Fixes** - unnecessary secondary prompt if same - js fetch exception handling + - detailer handling of stop/skip/pause ## Update for 2026-08-26 diff --git a/modules/detailer/detailer.py b/modules/detailer/detailer.py index 73bdd32f0..4556e242b 100644 --- a/modules/detailer/detailer.py +++ b/modules/detailer/detailer.py @@ -1,4 +1,5 @@ import re +import time from copy import copy import numpy as np import gradio as gr @@ -220,6 +221,19 @@ class Detailer(): matched_negative_classes = set() for i, model_val in enumerate(models): + if shared.state.skipped: + shared.state.skipped = False + continue + if shared.state.interrupted: + break + while shared.state.paused: + log.debug('Detail paused') + if shared.state.interrupted: + break + if shared.state.skipped: + continue + time.sleep(0.1) + if ':' in model_val: model_name, model_args = model_val.split(':', 1) else: @@ -309,10 +323,23 @@ class Detailer(): resolved_prompts = assign_prompts(prompt, items) resolved_negatives = assign_prompts(negative, items) for j, item in enumerate(items): + if shared.state.skipped: + shared.state.skipped = False + continue + if shared.state.interrupted: + break + while shared.state.paused: + log.debug('Detail paused') + if shared.state.interrupted: + break + if shared.state.skipped: + continue + time.sleep(0.1) if item.mask is None: continue - pc.keep_prompts = True + shared.sd_model.fail_on_switch_error = True + pc.keep_prompts = True pc.prompt = resolved_prompts[j] pc.negative_prompt = resolved_negatives[j] pc.prompts = [pc.prompt] From db4ffcd8ef4b28bd394f4aa6a30708758effb4bf Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 31 Aug 2026 09:55:02 +0200 Subject: [PATCH 110/270] cleanup todo Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 2 ++ TODO.md | 1 + installer.py | 2 +- modules/lora/lora_load.py | 1 - modules/masking.py | 10 ---------- modules/postprocess/seedvr_model.py | 6 +++--- modules/sd_models.py | 1 - modules/shared_defaults.py | 2 +- modules/ui_definitions.py | 2 +- 9 files changed, 9 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61c0d562b..188a023fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,8 @@ - unnecessary secondary prompt if same - js fetch exception handling - detailer handling of stop/skip/pause + - cleanup dead rife code, thanks @Anai-Guo + - lumina-dimoo attention-kwargs, thanks @Anai-Guo ## Update for 2026-08-26 diff --git a/TODO.md b/TODO.md index 532410bc5..b2534621d 100644 --- a/TODO.md +++ b/TODO.md @@ -8,6 +8,7 @@ - Benchmark tool productize: @CalamitousFelicitousness - Control tab verify overrides handling, @vladmandic - LTX: Create pre-quant for LTX-2.5 +- LTX: Implement LTX2DFRPipeline - ROCm: v10 - Modular: cache hooks, @vladmandic - Modular: disable legacy PAG, etc., @vladmandic diff --git a/installer.py b/installer.py index 0a5521d38..e21e5dcbb 100644 --- a/installer.py +++ b/installer.py @@ -719,7 +719,7 @@ def install_rocm_zluda(): zluda_installer.load() except Exception as e: log.error(f'Load ZLUDA: {e}') - else: # TODO rocm: switch to pytorch source when it becomes available + else: if device is None: log.error('ROCm: no agent found - make sure that graphics driver is installed and up to date') if device is not None and device.therock is not None: diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index f9a885cf2..d0241761c 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -107,7 +107,6 @@ def load_safetensors(name, network_on_disk: network.NetworkOnDisk) -> network.Ne if key_network_without_network_parts.startswith("unet") or key_network_without_network_parts.startswith("transformer"): key_network_without_network_parts = "lora_" + key_network_without_network_parts key_network_without_network_parts = key_network_without_network_parts.replace("clip_g","lora_te2").replace("clip_l","lora_te") - # TODO lora: add t5 key support for sd35/f1 elif len(parts) > 5: # messy handler for diffusers peft lora key_network_without_network_parts = '_'.join(parts[:-2]) diff --git a/modules/masking.py b/modules/masking.py index eafafe311..4f2689758 100644 --- a/modules/masking.py +++ b/modules/masking.py @@ -117,16 +117,6 @@ def fill(image, mask): return image_mod.convert("RGB") -""" -[docs](https://huggingface.co/docs/transformers/v4.36.1/en/model_doc/sam#overview) -TODO: additional masking algorithms -- PerSAM -- REMBG -- https://huggingface.co/docs/transformers/tasks/semantic_segmentation -- transformers.pipeline.MaskGenerationPipeline: https://huggingface.co/models?pipeline_tag=mask-generation -- transformers.pipeline.ImageSegmentationPipeline: https://huggingface.co/models?pipeline_tag=image-segmentation -""" - MODELS = { 'None': None, 'Facebook SAM ViT Base': 'facebook/sam-vit-base', diff --git a/modules/postprocess/seedvr_model.py b/modules/postprocess/seedvr_model.py index 6fc51531c..eef97df10 100644 --- a/modules/postprocess/seedvr_model.py +++ b/modules/postprocess/seedvr_model.py @@ -340,9 +340,9 @@ class UpscalerSeedVR(Upscaler): images=tensor, cfg_scale=cfg_scale, cfg_rescale=cfg_rescale, - steps=steps, # TODO SeedVR steps - batch_size=batch_size, # TODO SeedVR batch size - temporal_overlap=batch_overlap, # TODO SeedVR temporal overlap + steps=steps, + batch_size=batch_size, + temporal_overlap=batch_overlap, seed=seed, res_w=width, device=devices.device, diff --git a/modules/sd_models.py b/modules/sd_models.py index 327f231a2..53cc42347 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -1558,7 +1558,6 @@ def reload_model_weights(sd_model=None, info: CheckpointInfo | None = None, op=' unload_model_weights(op=op) sd_model = None timer.load = timer.Timer() - # TODO model load: implement model in-memory caching timer.load.record("config") if sd_model is None or force: sd_model = None diff --git a/modules/shared_defaults.py b/modules/shared_defaults.py index 46ee0af83..e9b0d980f 100644 --- a/modules/shared_defaults.py +++ b/modules/shared_defaults.py @@ -55,7 +55,7 @@ def get_default_modes(cmd_opts, mem_stat): default_cross_attention = ['Dynamic attention'] if devices.get_optimal_device_name() != "cpu": - os.environ.setdefault('SDNQ_USE_OPENVINO_MM', '0') # TODO sdnq openvino: this is too late as sdnq already initialized it + os.environ.setdefault('SDNQ_USE_OPENVINO_MM', '0') return ( default_offload_mode, diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 0ea9bd9db..991e46385 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -90,6 +90,7 @@ def create_settings(cmd_opts): "advanced_sep": OptionInfo("

    Advanced Options

    ", "", gr.HTML), "sd_checkpoint_autoload": OptionInfo(True, "Model auto-load on start"), + "model_modular_enable": OptionInfo(False, "Model convert to modular pipelines"), "sd_parallel_load": OptionInfo(True, "Model load using multiple threads"), "sd_checkpoint_autodownload": OptionInfo(True, "Model auto-download on demand"), "stream_load": OptionInfo(False, "Model load using streams", gr.Checkbox), @@ -107,7 +108,6 @@ def create_settings(cmd_opts): # --- Model Options --- options_templates.update(options_section(('model_options', "Model Options"), { "model_modular_sep": OptionInfo("

    Modular Pipelines

    ", "", gr.HTML), - "model_modular_enable": OptionInfo(False, "Enable modular pipelines (experimental)"), "model_google_sep": OptionInfo("

    Google GenAI

    ", "", gr.HTML), "google_use_vertexai": OptionInfo(False, "Google cloud use VertexAI endpoints"), "google_api_key": OptionInfo("", "Google cloud API key", gr.Textbox, secret=True, env_var='GOOGLE_API_KEY'), From dbd243fe063578644d919c99061140053a0161f1 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 31 Aug 2026 13:06:02 +0200 Subject: [PATCH 111/270] refactor transformers hooks Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 4 + extensions-builtin/sdnext-modernui | 2 +- modules/modular.py | 10 +- modules/modular_cache.py | 12 --- modules/modular_guiders.py | 1 - modules/processing_diffusers.py | 8 +- modules/processing_vae.py | 2 + modules/sd_hijack_modular.py | 2 +- modules/transformer_cache.py | 164 +++++++++++++++++++++-------- modules/ui_cache.py | 106 ------------------- modules/ui_control.py | 3 +- modules/ui_definitions.py | 49 +++++++-- 12 files changed, 182 insertions(+), 181 deletions(-) delete mode 100644 modules/modular_cache.py delete mode 100644 modules/ui_cache.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 188a023fc..47a7d77eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,10 @@ - implement progress and preview - intercept and profiling hooks - on-demand convert standard model on-demand +- **Other** + - new optional transformer hooks: *settings -> compute add-ons* + *PAG: Perturbed attention guidance, PAB: Pyramid attention broadcast, FBC: First Block Cache, FC: Faster Cache, LS: Layer Skip, MC: Mag Cache, TS: TaylorSeer* + *note*: compatibility of different methods varies across different models - **Fixes** - unnecessary secondary prompt if same - js fetch exception handling diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 7597a81c6..8dec87411 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 7597a81c631b9fcdd519d4fa7c9c2d658b365d98 +Subproject commit 8dec87411813d6cb413efb4f114c4d96388223ae diff --git a/modules/modular.py b/modules/modular.py index f0b4b2d3c..d17f6aba8 100644 --- a/modules/modular.py +++ b/modules/modular.py @@ -31,12 +31,20 @@ def is_compatible(diffusion_pipeline: diffusers.DiffusionPipeline) -> bool: return compatible +def is_modular(diffusion_pipeline: diffusers.DiffusionPipeline) -> bool: + if diffusion_pipeline is None: + return False + return isinstance(diffusion_pipeline, diffusers.ModularPipeline) or 'Modular' in diffusion_pipeline.__class__.__name__ + + def is_guider(diffusion_pipeline: diffusers.DiffusionPipeline) -> bool: guider = getattr(diffusion_pipeline, 'guider', None) return guider is not None def convert_to_modular(diffusion_pipeline: diffusers.DiffusionPipeline) -> diffusers.ModularPipeline: + if is_modular(diffusion_pipeline): + return diffusion_pipeline modular_pipe = None try: modular_cls = get_modular_class(diffusion_pipeline) @@ -47,7 +55,7 @@ def convert_to_modular(diffusion_pipeline: diffusers.DiffusionPipeline) -> diffu components_dct = {k: v for k, v in diffusion_pipeline.components.items() if v is not None} modular_pipe.update_components(**components_dct, **diffusion_pipeline.parameters) modular_pipe.original_pipe = diffusion_pipeline - log.debug(f'Modular convert: source={diffusion_pipeline.__class__.__name__} target={modular_pipe.__class__.__name__}') + log.debug(f'Modular: convert={diffusion_pipeline.__class__.__name__} target={modular_pipe.__class__.__name__}') except Exception as e: log.error(f'Modular: {e}') raise e diff --git a/modules/modular_cache.py b/modules/modular_cache.py deleted file mode 100644 index f19cb2e45..000000000 --- a/modules/modular_cache.py +++ /dev/null @@ -1,12 +0,0 @@ -from modules import processing -from modules.logger import log - - -def set_cache(p: processing.StableDiffusionProcessing, phase: str | None = None): # pylint: disable=unused-argument - import modules.ui_cache - inputs = modules.ui_cache.get_modular_args() - method = inputs.get('cache_method', 'None') - if method == 'None': - return - args = {} - log.debug(f'Pipeline: cache={method} args={args}') diff --git a/modules/modular_guiders.py b/modules/modular_guiders.py index 92bb43a97..3228bcabd 100644 --- a/modules/modular_guiders.py +++ b/modules/modular_guiders.py @@ -80,7 +80,6 @@ def set_args(guidance_name: str): args['guidance_scales'] = [float(x.strip()) for x in inputs.get('fdg_scales', '5.0').split(',')] args['parallel_weights'] = float(inputs.get('fdg_weights', 1.0)) args['guidance_rescale_space'] = inputs.get('fdg_rescale_space', 'data') - log.trace(f'Guiders: args={args}') return args diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index fd5387d44..e46aa785c 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -75,9 +75,8 @@ def process_pre(p: processing.StableDiffusionProcessing, phase: str | None = Non return if is_modular(shared.sd_model): if modular.is_guider(shared.sd_model): - from modules import modular_guiders, modular_cache + from modules import modular_guiders modular_guiders.set_guider(p, phase) - modular_cache.set_cache(p, phase) else: try: log.info(f'Processing modifiers: phase={phase} apply') @@ -95,7 +94,7 @@ def process_pre(p: processing.StableDiffusionProcessing, phase: str | None = Non ipadapter.apply(shared.sd_model, p) # apply-only sd_hijack_freeu.apply_freeu(p) - transformer_cache.set_cache() + transformer_cache.set_cache(p) para_attention.apply_first_block_cache() teacache.apply_teacache(p) except Exception as e: @@ -221,7 +220,8 @@ def process_base(p: processing.StableDiffusionProcessing): for k, v in base_args.items(): if isinstance(v, torch.Tensor): err_args[k] = f'{v.device}:{v.dtype}:{v.shape}' - log.error(f'Processing: step=base args={err_args} {e}') + log.error(f'Processing: step=base args={err_args}') + log.error(f'Processing: {e}') errors.display(e, 'Processing') modelstats.analyze() finally: diff --git a/modules/processing_vae.py b/modules/processing_vae.py index 778407fd6..4b36e4788 100644 --- a/modules/processing_vae.py +++ b/modules/processing_vae.py @@ -82,6 +82,8 @@ def full_vqgan_decode(latents, model): def full_vae_decode(latents, model): t0 = time.time() + if latents.ndim == 4 and latents.shape[1] == 3: # already decoded + return latents if not hasattr(model, 'vae') and hasattr(model, 'pipe'): model = model.pipe if model is None or not hasattr(model, 'vae'): diff --git a/modules/sd_hijack_modular.py b/modules/sd_hijack_modular.py index 2aa77fcdf..fa751f33d 100644 --- a/modules/sd_hijack_modular.py +++ b/modules/sd_hijack_modular.py @@ -162,7 +162,7 @@ def install_state_hook(pipe): if shared.state.interrupted or shared.state.skipped: # fires per tile, so tiled encodes abort promptly raise AssertionError('Interrupted...') - for name in ('unet', 'transformer', 'transformer_ref'): + for name in ('unet', 'transformer', 'transformer_2', 'transformer_ref'): module = getattr(pipe, name, None) if module is not None: target = getattr(module, 'model', module) # conditioning calls the inner model directly diff --git a/modules/transformer_cache.py b/modules/transformer_cache.py index 0c204ff9f..6b6b9842f 100644 --- a/modules/transformer_cache.py +++ b/modules/transformer_cache.py @@ -1,52 +1,130 @@ import os import diffusers -from modules import shared, errors +from modules import shared, errors, processing, devices +from modules.sd_offload_utils import get_module_names from modules.logger import log debug = log.trace if os.environ.get('SD_PROCESS_DEBUG', None) is not None else lambda *args, **kwargs: None -def set_cache(faster_cache=None, pyramid_attention_broadcast=None): - if not shared.sd_loaded or not hasattr(shared.sd_model, 'transformer'): +def get_transformers(): + if not shared.sd_loaded: + return None + for module_name in get_module_names(shared.sd_model): + module = getattr(shared.sd_model, module_name, None) + if (module is not None) and ('transformer' in module_name or 'Transformer' in module.__class__.__name__): + yield module + + +def set_cache(p: processing.StableDiffusionProcessing): + if not shared.sd_loaded: return - faster_cache = faster_cache if faster_cache is not None else shared.opts.faster_cache_enabled - pyramid_attention_broadcast = pyramid_attention_broadcast if pyramid_attention_broadcast is not None else shared.opts.pab_enabled - if (not faster_cache) and (not pyramid_attention_broadcast): - return - if (not hasattr(shared.sd_model.transformer, 'enable_cache')) or (not hasattr(shared.sd_model.transformer, 'disable_cache')): - log.debug(f'Transformer cache: cls={shared.sd_model.transformer.__class__.__name__} fc={faster_cache} pab={pyramid_attention_broadcast} not supported') - return - try: - if faster_cache: # https://github.com/huggingface/diffusers/pull/10163 - distilled = shared.opts.fc_guidance_distilled - config = diffusers.FasterCacheConfig( - spatial_attention_block_skip_range=shared.opts.fc_spacial_skip_range, - spatial_attention_timestep_skip_range=(int(shared.opts.fc_spacial_skip_start), int(shared.opts.fc_spacial_skip_end)), - unconditional_batch_skip_range=shared.opts.fc_uncond_skip_range, - unconditional_batch_timestep_skip_range=(int(shared.opts.fc_uncond_skip_start), int(shared.opts.fc_uncond_skip_end)), - attention_weight_callback=lambda _: shared.opts.fc_attention_weight, - tensor_format=shared.opts.fc_tensor_format, - is_guidance_distilled=distilled, - current_timestep_callback=lambda: shared.sd_model.current_timestep, - ) - shared.sd_model.transformer.disable_cache() - shared.sd_model.transformer.enable_cache(config) - log.debug(f'Transformer cache: type={config.__class__.__name__}') - debug(f'Transformer cache: {vars(config)}') - elif pyramid_attention_broadcast: # https://github.com/huggingface/diffusers/pull/9562 - config = diffusers.PyramidAttentionBroadcastConfig( - spatial_attention_block_skip_range=shared.opts.pab_spacial_skip_range, - spatial_attention_timestep_skip_range=(int(shared.opts.pab_spacial_skip_start), int(shared.opts.pab_spacial_skip_end)), - current_timestep_callback=lambda: shared.sd_model.current_timestep, - ) - shared.sd_model.transformer.disable_cache() - shared.sd_model.transformer.enable_cache(config) - log.debug(f'Transformer cache: type={config.__class__.__name__}') - debug(f'Transformer cache: {vars(config)}') - else: - debug('Transformer cache: not enabled') - shared.sd_model.transformer.disable_cache() - except Exception as e: - log.error(f'Transformer cache: {e}') - errors.display(e, 'Transformer cache') + for module in get_transformers(): + try: + + if shared.opts.fc_enabled: + config = diffusers.hooks.FasterCacheConfig( + spatial_attention_block_skip_range=int(shared.opts.fc_spacial_skip_range), + spatial_attention_timestep_skip_range=(int(shared.opts.fc_spacial_skip_start), int(shared.opts.fc_spacial_skip_end)), + unconditional_batch_skip_range=int(shared.opts.fc_uncond_skip_range), + unconditional_batch_timestep_skip_range=(int(shared.opts.fc_uncond_skip_start), int(shared.opts.fc_uncond_skip_end)), + attention_weight_callback=lambda _: float(shared.opts.fc_attention_weight), + tensor_format=str(shared.opts.fc_tensor_format), + is_guidance_distilled=bool(shared.opts.fc_guidance_distilled), + current_timestep_callback=lambda: shared.sd_model.current_timestep, + ) + if getattr(shared.sd_model, 'cache_applied', None) == config: + return + if hasattr(module, 'disable_cache'): + module.disable_cache() + shared.sd_model.cache_applied = config + if not hasattr(shared.sd_model, 'current_timestep'): + log.warning(f'Transformer cache: method=FasterCache cls={shared.sd_model.__class__.__name__} not compatible') + else: + diffusers.hooks.apply_faster_cache(module, config) + log.debug(f'Transformer cache: method=FasterCache module={module.__class__.__name__} config={config}') + + if shared.opts.pab_enabled: + config = diffusers.hooks.PyramidAttentionBroadcastConfig( + spatial_attention_block_skip_range=int(shared.opts.pab_spacial_skip_range) if shared.opts.pab_spacial_skip_range > 0 else None, + spatial_attention_timestep_skip_range=(int(shared.opts.pab_spacial_skip_start), int(shared.opts.pab_spacial_skip_end)), + current_timestep_callback=lambda: shared.sd_model.current_timestep, + ) + if getattr(shared.sd_model, 'cache_applied', None) == config: + return + if hasattr(module, 'disable_cache'): + module.disable_cache() + shared.sd_model.cache_applied = config + if not hasattr(shared.sd_model, 'current_timestep'): + log.warning(f'Transformer cache: method=PyramidAttentionBroadcast cls={shared.sd_model.__class__.__name__} not compatible') + else: + diffusers.hooks.apply_pyramid_attention_broadcast(module, config) + log.debug(f'Transformer cache: method=PyramidAttentionBroadcast module={module.__class__.__name__} config={config}') + + if shared.opts.ls_enabled: + config = diffusers.hooks.LayerSkipConfig( + indices=[int(i.strip()) for i in shared.opts.ls_indices.split(',') if i.strip().isnumeric()], + fqn=str(shared.opts.ls_fqn), + skip_attention=bool(shared.opts.ls_skip_attention), + skip_attention_scores=bool(shared.opts.ls_skip_attention_scores), + skip_ff=bool(shared.opts.ls_skip_ff), + dropout=float(shared.opts.ls_dropout), + ) + if getattr(shared.sd_model, 'cache_applied', None) == config: + return + if hasattr(module, 'disable_cache'): + module.disable_cache() + shared.sd_model.cache_applied = config + diffusers.hooks.apply_layer_skip(module, config) + log.debug(f'Transformer cache: method=LayerSkip module={module.__class__.__name__} config={config}') + + if shared.opts.mc_enabled: + config = diffusers.hooks.MagCacheConfig( + threshold=float(shared.opts.mc_threshold), + max_skip_steps=int(shared.opts.mc_max_skip_steps), + retention_ratio=float(shared.opts.mc_retention_ratio), + num_inference_steps=int(p.steps) + ) + if getattr(shared.sd_model, 'cache_applied', None) == config: + return + if hasattr(module, 'disable_cache'): + module.disable_cache() + shared.sd_model.cache_applied = config + diffusers.hooks.apply_mag_cache(module, config) + log.debug(f'Transformer cache: method=MagCache module={module.__class__.__name__} config={config}') + + if shared.opts.ts_enabled: + config = diffusers.hooks.TaylorSeerCacheConfig( + cache_interval=int(shared.opts.ts_cache_interval), + disable_cache_before_step=int(shared.opts.ts_disable_cache_before_step), + disable_cache_after_step=int(shared.opts.ts_disable_cache_after_step), + max_order=int(shared.opts.ts_max_order), + taylor_factors_dtype=devices.dtype, + skip_predict_identifiers=[i.strip() for i in shared.opts.ts_skip_predict_identifiers.split(',') if i.strip()], + cache_identifiers=[i.strip() for i in shared.opts.ts_cache_identifiers.split(',') if i.strip()], + use_lite_mode=bool(shared.opts.ts_use_lite_mode), + ) + if getattr(shared.sd_model, 'cache_applied', None) == config: + return + if hasattr(module, 'disable_cache'): + module.disable_cache() + shared.sd_model.cache_applied = config + diffusers.hooks.apply_taylorseer_cache(module, config) + log.debug(f'Transformer cache: method=TaylorSeerCache module={module.__class__.__name__} config={config}') + + if shared.opts.fb_enabled: + config = diffusers.hooks.FirstBlockCacheConfig( + threshold=float(shared.opts.fb_threshold), + ) + if getattr(shared.sd_model, 'cache_applied', None) == config: + return + if hasattr(module, 'disable_cache'): + module.disable_cache() + shared.sd_model.cache_applied = config + diffusers.hooks.apply_first_block_cache(module, config) + log.debug(f'Transformer cache: method=FirstBlockCache module={module.__class__.__name__} config={config}') + + except Exception as e: + log.error(f'Transformer cache: {e}') + errors.display(e, 'Transformer cache') diff --git a/modules/ui_cache.py b/modules/ui_cache.py deleted file mode 100644 index 149348f90..000000000 --- a/modules/ui_cache.py +++ /dev/null @@ -1,106 +0,0 @@ -from functools import partial -import gradio as gr -import diffusers.hooks # pylint: disable=unused-import -from modules import ui_common - - -_stored_args = {} -methods = { - 'None': {}, - 'Context Parallel': {}, - 'Faster Cache': {}, - 'First Block Cache': {}, - 'Layer Skip': {}, - 'Mag Cache': {}, - 'Pyramid Attention Broadcast': {}, - 'TaylorSeer Cache': {}, - 'Text KV Cache': {}, -} - - -def get_modular_args(): - return _stored_args - - -def get_cache_methods(): - from modules.processing_helpers import is_modular - if is_modular(): - return list(methods.keys()) - return ['None'] - - -def create_cache_inputs(tab): - with gr.Accordion(open=False, label='Cache', elem_id=f"{tab}_cache", elem_classes=["small-accordion"]): - with gr.Group(): - with gr.Row(elem_id=f"{tab}_cache_row", elem_classes=['flexbox']): - cache_name = gr.Dropdown(choices=get_cache_methods(), value='None', label='Method', elem_id=f"{tab}_cache") - _cache_check = ui_common.create_refresh_button(cache_name, get_cache_methods) - - acc_context_parallel = gr.Accordion(open=True, label='Context Parallel', elem_classes=["small-accordion"], visible=False) - with acc_context_parallel: - gr.HTML(value="

    TODO: Context Parallel

    ") - args_context_parallel = [] - - acc_faster_cache = gr.Accordion(open=True, label='Faster Cache', elem_classes=["small-accordion"], visible=False) - with acc_faster_cache: - gr.HTML(value="

    TODO: Faster Cache

    ") - args_faster_cache = [] - - acc_first_block_cache = gr.Accordion(open=True, label='First Block Cache', elem_classes=["small-accordion"], visible=False) - with acc_first_block_cache: - gr.HTML(value="

    TODO: First Block Cache

    ") - args_first_block_cache = [] - - acc_layer_skip = gr.Accordion(open=True, label='Layer Skip', elem_classes=["small-accordion"], visible=False) - with acc_layer_skip: - gr.HTML(value="

    TODO: Layer Skip

    ") - args_layer_skip = [] - - acc_mag_cache = gr.Accordion(open=True, label='Mag Cache', elem_classes=["small-accordion"], visible=False) - with acc_mag_cache: - gr.HTML(value="

    TODO: Mag Cache

    ") - args_mag_cache = [] - - acc_pyramid_attention_broadcast = gr.Accordion(open=True, label='Pyramid Attention Broadcast', elem_classes=["small-accordion"], visible=False) - with acc_pyramid_attention_broadcast: - gr.HTML(value="

    TODO: Pyramid Attention Broadcast

    ") - args_pyramid_attention_broadcast = [] - - acc_taylorseer_cache = gr.Accordion(open=True, label='TaylorSeer Cache', elem_classes=["small-accordion"], visible=False) - with acc_taylorseer_cache: - gr.HTML(value="

    TODO: TaylorSeer Cache

    ") - args_taylorseer_cache = [] - - acc_text_kv_cache = gr.Accordion(open=True, label='Text KV Cache', elem_classes=["small-accordion"], visible=False) - with acc_text_kv_cache: - gr.HTML(value="

    TODO: Text KV Cache

    ") - args_text_kv_cache = [] - - def adv_visibility(guidance_name): - _stored_args['cache_name'] = guidance_name - return [ - gr.update(visible=guidance_name == 'Context Parallel'), - gr.update(visible=guidance_name == 'Faster Cache'), - gr.update(visible=guidance_name == 'First Block Cache'), - gr.update(visible=guidance_name == 'Layer Skip'), - gr.update(visible=guidance_name == 'Mag Cache'), - gr.update(visible=guidance_name == 'Pyramid Attention Broadcast'), - gr.update(visible=guidance_name == 'TaylorSeer Cache'), - gr.update(visible=guidance_name == 'Text KV Cache') - ] - cache_name.change(fn=adv_visibility, - inputs=[cache_name], - outputs=[acc_context_parallel, acc_faster_cache, acc_first_block_cache, acc_layer_skip, acc_mag_cache, acc_pyramid_attention_broadcast, acc_taylorseer_cache, acc_text_kv_cache], - ) - - modular_args = args_context_parallel + args_faster_cache + args_first_block_cache + args_layer_skip + args_mag_cache + args_pyramid_attention_broadcast + args_taylorseer_cache + args_text_kv_cache - def update_stored(component, name): - _stored_args[name] = component - for component in modular_args: - label = getattr(component, 'label', None) - value = getattr(component, 'value', None) - name = label.lower().replace(' ', '_') if label is not None else None - _stored_args[name] = value - component.change(fn=partial(update_stored, name=name), inputs=[component], outputs=[]) - - return [cache_name] diff --git a/modules/ui_control.py b/modules/ui_control.py index 404db40e7..269e00aad 100644 --- a/modules/ui_control.py +++ b/modules/ui_control.py @@ -4,7 +4,7 @@ import asyncio import gradio as gr from modules.control import unit from modules import errors, shared, progress, generation_parameters_copypaste, call_queue, scripts_manager, masking, images, processing_vae, timer # pylint: disable=ungrouped-imports -from modules import ui_common, ui_sections, ui_guidance, ui_cache +from modules import ui_common, ui_sections, ui_guidance from modules import ui_control_helpers as helpers from modules.logger import log from modules.memstats import ram_stats @@ -202,7 +202,6 @@ def create_ui(_blocks: gr.Blocks=None): mask_controls = masking.create_segment_ui() cfg_name, cfg_scale, cfg_image, cfg_rescale, cfg_start, cfg_stop, cfg_true, cfg_adaptive = ui_guidance.create_guidance_inputs('control') - _cache_name = ui_cache.create_cache_inputs('control') vae_type, tiling, hidiffusion, clip_skip = ui_sections.create_advanced_inputs('control') grading_brightness, grading_contrast, grading_saturation, grading_hue, grading_gamma, grading_sharpness, grading_color_temp, grading_shadows, grading_midtones, grading_highlights, grading_clahe_clip, grading_clahe_grid, grading_shadows_tint, grading_highlights_tint, grading_split_tone_balance, grading_vignette, grading_grain, grading_lut_file, grading_lut_strength = ui_sections.create_color_inputs('control') hdr_mode, hdr_brightness, hdr_color, hdr_sharpen, hdr_clamp, hdr_boundary, hdr_threshold, hdr_maximize, hdr_max_center, hdr_max_boundary, hdr_color_picker, hdr_tint_ratio, hdr_apply_hires = ui_sections.create_latent_inputs('control') diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 991e46385..cad753838 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -342,20 +342,16 @@ def create_settings(cmd_opts): "pab_sep": OptionInfo("

    PAB: Pyramid attention broadcast

    ", "", gr.HTML), "pab_enabled": OptionInfo(False, "PAB cache enabled"), - "pab_spacial_skip_range": OptionInfo(2, "PAB spacial skip range", gr.Slider, {"minimum": 1, "maximum": 4, "step": 1}), + "pab_spacial_skip_range": OptionInfo(0, "PAB spacial skip range", gr.Slider, {"minimum": 0, "maximum": 4, "step": 1}), "pab_spacial_skip_start": OptionInfo(100, "PAB spacial skip start", gr.Slider, {"minimum": 0, "maximum": 1000, "step": 1}), "pab_spacial_skip_end": OptionInfo(800, "PAB spacial skip end", gr.Slider, {"minimum": 0, "maximum": 1000, "step": 1}), - "cache_dit_sep": OptionInfo("

    Cache-DiT

    ", "", gr.HTML), - "cache_dit_enabled": OptionInfo(False, "Cache-DiT enabled"), - "cache_dit_calibrator": OptionInfo("None", "Cache-DiT calibrator", gr.Radio, {"choices": ["None", "TaylorSeer", "FoCa"]}), - "cache_dit_fcompute": OptionInfo(-1, "Cache-DiT F-compute blocks", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1}), - "cache_dit_bcompute": OptionInfo(-1, "Cache-DiT B-compute blocks", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1}), - "cache_dit_threshold": OptionInfo(-1, "Cache-DiT residual diff threshold", gr.Slider, {"minimum": -1.0, "maximum": 1.0, "step": 0.01}), - "cache_dit_warmup": OptionInfo(-1, "Cache-DiT warmup steps", gr.Slider, {"minimum": -1, "maximum": 50, "step": 1}), + "fb_sep": OptionInfo("

    FBC: First Block Cache

    ", "", gr.HTML), + "fb_enabled": OptionInfo(False, "First Block cache enabled"), + "fb_threshold": OptionInfo(0.05, "First Block cache threshold", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), - "faster_cache__sep": OptionInfo("

    Faster Cache

    ", "", gr.HTML), - "faster_cache_enabled": OptionInfo(False, "FasterCache cache enabled"), + "fc_sep": OptionInfo("

    FC: Faster Cache

    ", "", gr.HTML), + "fc_enabled": OptionInfo(False, "FasterCache cache enabled"), "fc_spacial_skip_range": OptionInfo(2, "FasterCache spacial skip range", gr.Slider, {"minimum": 1, "maximum": 4, "step": 1}), "fc_spacial_skip_start": OptionInfo(0, "FasterCache spacial skip start", gr.Slider, {"minimum": 0, "maximum": 1000, "step": 1}), "fc_spacial_skip_end": OptionInfo(681, "FasterCache spacial skip end", gr.Slider, {"minimum": 0, "maximum": 1.0, "step": 0.01}), @@ -366,6 +362,39 @@ def create_settings(cmd_opts): "fc_tensor_format": OptionInfo("BCFHW", "FasterCache tensor format", gr.Radio, {"choices": ["BCFHW", "BFCHW", "BCHW"]}), "fc_guidance_distilled": OptionInfo(False, "FasterCache guidance distilled", gr.Checkbox), + "ls_sep": OptionInfo("

    LS: Layer Skip

    ", "", gr.HTML), + "ls_enabled": OptionInfo(False, "Layer Skip enabled"), + "ls_indices": OptionInfo('', "Layer Skip indices", gr.Textbox, {"placeholder": "e.g. 0,1,2-5"}), + "ls_fqn": OptionInfo("auto", "Layer Skip FQN", gr.Textbox, {"placeholder": "e.g. model.diffusion_model.input_blocks.0"}), + "ls_skip_attention": OptionInfo(True, "Layer Skip skip attention", gr.Checkbox), + "ls_skip_attention_scores": OptionInfo(False, "Layer Skip skip attention scores", gr.Checkbox), + "ls_skip_ff": OptionInfo(True, "Layer Skip skip feedforward", gr.Checkbox), + "ls_dropout": OptionInfo(1.0, "Layer Skip dropout", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), + + "mc_sep": OptionInfo("

    MC: Mag Cache

    ", "", gr.HTML), + "mc_enabled": OptionInfo(False, "Mag Cache enabled"), + "mc_threshold": OptionInfo(0.06, "Mag Cache threshold", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), + "mc_max_skip_steps": OptionInfo(3, "Mag Cache max skip steps", gr.Slider, {"minimum": 1, "maximum": 10, "step": 1}), + "mc_retention_ratio": OptionInfo(0.2, "Mag Cache retention ratio", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), + + "ts_sep": OptionInfo("

    TS: TaylorSeer

    ", "", gr.HTML), + "ts_enabled": OptionInfo(False, "TaylorSeer enabled"), + "ts_cache_interval": OptionInfo(5, "TaylorSeer cache interval", gr.Slider, {"minimum": 1, "maximum": 20, "step": 1}), + "ts_disable_cache_before_step": OptionInfo(3, "TaylorSeer disable cache before step", gr.Slider, {"minimum": 0, "maximum": 20, "step": 1}), + "ts_disable_cache_after_step": OptionInfo(-1, "TaylorSeer disable cache after step", gr.Slider, {"minimum": -1, "maximum": 20, "step": 1}), + "ts_max_order": OptionInfo(1, "TaylorSeer max order", gr.Slider, {"minimum": 1, "maximum": 5, "step": 1}), + "ts_skip_predict_identifiers": OptionInfo("", "TaylorSeer skip predict identifiers", gr.Textbox, {"placeholder": "e.g. model.diffusion_model.input_blocks.0,model.diffusion_model.middle_block"}), + "ts_cache_identifiers": OptionInfo("", "TaylorSeer cache identifiers", gr.Textbox, {"placeholder": "e.g. model.diffusion_model.input_blocks.0,model.diffusion_model.middle_block"}), + "ts_use_lite_mode": OptionInfo(False, "TaylorSeer use lite mode", gr.Checkbox), + + "cache_dit_sep": OptionInfo("

    Cache-DiT

    ", "", gr.HTML), + "cache_dit_enabled": OptionInfo(False, "Cache-DiT enabled"), + "cache_dit_calibrator": OptionInfo("None", "Cache-DiT calibrator", gr.Radio, {"choices": ["None", "TaylorSeer", "FoCa"]}), + "cache_dit_fcompute": OptionInfo(-1, "Cache-DiT F-compute blocks", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1}), + "cache_dit_bcompute": OptionInfo(-1, "Cache-DiT B-compute blocks", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1}), + "cache_dit_threshold": OptionInfo(-1, "Cache-DiT residual diff threshold", gr.Slider, {"minimum": -1.0, "maximum": 1.0, "step": 0.01}), + "cache_dit_warmup": OptionInfo(-1, "Cache-DiT warmup steps", gr.Slider, {"minimum": -1, "maximum": 50, "step": 1}), + "para_sep": OptionInfo("

    Para-attention

    ", "", gr.HTML), "para_cache_enabled": OptionInfo(False, "ParaAttention first-block cache enabled"), "para_diff_threshold": OptionInfo(0.1, "ParaAttention residual diff threshold", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), From b8ba831a565cdfacd95ceb2f78821a1eab24985d Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 31 Aug 2026 14:40:40 +0200 Subject: [PATCH 112/270] minimax vae preview Signed-off-by: Vladimir Mandic --- TODO.md | 2 -- modules/modular.py | 4 +-- modules/sd_hijack_modular.py | 12 ++++---- modules/ui_extra_networks_checkpoints.py | 1 + modules/vae/sd_vae_taesd.py | 4 +++ pipelines/model_minimax.py | 35 ++++++++++++++++++++++++ 6 files changed, 49 insertions(+), 9 deletions(-) diff --git a/TODO.md b/TODO.md index b2534621d..ce8e2af6b 100644 --- a/TODO.md +++ b/TODO.md @@ -10,8 +10,6 @@ - LTX: Create pre-quant for LTX-2.5 - LTX: Implement LTX2DFRPipeline - ROCm: v10 -- Modular: cache hooks, @vladmandic -- Modular: disable legacy PAG, etc., @vladmandic ## Issues diff --git a/modules/modular.py b/modules/modular.py index d17f6aba8..34fd7d75b 100644 --- a/modules/modular.py +++ b/modules/modular.py @@ -42,7 +42,7 @@ def is_guider(diffusion_pipeline: diffusers.DiffusionPipeline) -> bool: return guider is not None -def convert_to_modular(diffusion_pipeline: diffusers.DiffusionPipeline) -> diffusers.ModularPipeline: +def convert_to_modular(diffusion_pipeline: diffusers.DiffusionPipeline | diffusers.ModularPipeline): if is_modular(diffusion_pipeline): return diffusion_pipeline modular_pipe = None @@ -51,7 +51,7 @@ def convert_to_modular(diffusion_pipeline: diffusers.DiffusionPipeline) -> diffu if modular_cls is None: raise ValueError(f'unknown: cls={diffusion_pipeline.__class__.__name__}') modular_blocks = modular_cls() - modular_pipe = modular_blocks.init_pipeline() + modular_pipe: diffusers.ModularPipeline = modular_blocks.init_pipeline() components_dct = {k: v for k, v in diffusion_pipeline.components.items() if v is not None} modular_pipe.update_components(**components_dct, **diffusion_pipeline.parameters) modular_pipe.original_pipe = diffusion_pipeline diff --git a/modules/sd_hijack_modular.py b/modules/sd_hijack_modular.py index fa751f33d..cefeb436c 100644 --- a/modules/sd_hijack_modular.py +++ b/modules/sd_hijack_modular.py @@ -13,14 +13,16 @@ debug = os.environ.get('SD_MODULAR_DEBUG', None) is not None intercepted = set() -def modular_step(state: diffusers.modular_pipelines.modular_pipeline.BlockState): +def modular_step(components: diffusers.modular_pipelines.ModularPipeline, state: diffusers.modular_pipelines.BlockState): keys = state if isinstance(state, list) else list(state.__dict__.keys()) if 'num_inference_steps' in keys: shared.state.sampling_steps = state.num_inference_steps - if 'latents' in keys: + if 'latents' in keys and state.latents.ndim > 1: shared.state.step() - # TODO: MiniMax runs AfterDenoise only at the end of the loop and it does latents unpacking - shared.state.current_latent = state.latents + if hasattr(components, 'custom_unpack_latents'): + shared.state.current_latent = components.custom_unpack_latents(state.latents, components, state) + else: + shared.state.current_latent = state.latents lora_stack.on_step(shared.state.sampling_step) if debug: log.trace(f'Modular step: step={shared.state.sampling_step} latent={state.latents.shape}') @@ -43,7 +45,7 @@ def modular_intercept(self, components, state: diffusers.modular_pipelines.modul timer.blocks.add(block, t1 - t0) # run code after block call if 'LoopDenoiser' in block: # BeforeDenoiser/AfterDenoiser are not used by all pipelines - modular_step(state) + modular_step(components, state) t2 = time.time() timer.blocks.add('callback', t2 - t1) if debug: diff --git a/modules/ui_extra_networks_checkpoints.py b/modules/ui_extra_networks_checkpoints.py index d90cbcfbb..b03e0b700 100644 --- a/modules/ui_extra_networks_checkpoints.py +++ b/modules/ui_extra_networks_checkpoints.py @@ -29,6 +29,7 @@ version_map = { "Flux2": "Flux 2", "Flux2Klein": "Flux 2 Klein", "Flux2KleinKV": "Flux 2 Klein", + "MiniMaxH3": "MiniMax H3", } class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): diff --git a/modules/vae/sd_vae_taesd.py b/modules/vae/sd_vae_taesd.py index 5bbc6a46e..77cce288c 100644 --- a/modules/vae/sd_vae_taesd.py +++ b/modules/vae/sd_vae_taesd.py @@ -221,6 +221,10 @@ def decode(latents, fast=False): else: image = vae.decode(tensor, return_dict=False)[0] # image = (image / 2.0 + 0.5).clamp(0, 1).detach() + if image.ndim == 4 and image.shape[0] > 1 and image.shape[1] == 3: + # likely a video latent, just take the first frame + # TODO video preview: tiled frames + image = image[0] image = image.clamp(0, 1).detach() image = restore_preview_size(image, vae) t1 = time.time() diff --git a/pipelines/model_minimax.py b/pipelines/model_minimax.py index 8a60a774f..ffa10e680 100644 --- a/pipelines/model_minimax.py +++ b/pipelines/model_minimax.py @@ -3,6 +3,40 @@ from modules import shared, devices, sd_models from modules.logger import log +def unpack_latents(latents, components: diffusers.modular_pipelines.ModularPipeline, state: diffusers.modular_pipelines.BlockState): + from diffusers.modular_pipelines.minimax_h3.modular_pipeline import align_num_frames, video_latent_num_frames + from modules import processing_callbacks + frames = processing_callbacks.p.num_frames + width = processing_callbacks.p.width + height = processing_callbacks.p.height + num_frames = align_num_frames(frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) + num_latent_frames = video_latent_num_frames(num_frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) + latent_height = height // components.vae_spatial_compression_ratio + latent_width = width // components.vae_spatial_compression_ratio + patch_t, patch_h, patch_w = components.patch_size + channels = components.vae_latent_channels + rows = state.latents[state.num_condition_video_rows :] + rows = rows.reshape( + -1, + num_latent_frames // patch_t, + latent_height // patch_h, + latent_width // patch_w, + channels, + patch_t, + patch_h, + patch_w, + ) + rows = rows.permute(0, 4, 1, 5, 2, 6, 3, 7) + latents = rows.reshape( + -1, + channels, + num_latent_frames, + latent_height, + latent_width, + ).contiguous() + return latents + + def load_minimax(checkpoint_info, diffusers_load_config = None, workflow: str | None = None): from modules.video_models import video_load from modules.modular_load import load_modular_pipe @@ -39,5 +73,6 @@ def load_minimax(checkpoint_info, diffusers_load_config = None, workflow: str | if hasattr(pipe, 'vae') and hasattr(pipe.vae, 'enable_tiling'): pipe.vae.enable_tiling() + pipe.custom_unpack_latents = unpack_latents # add a helper to unpack the video latents from the block state devices.torch_gc() return pipe From bed6bfc530bb9bddb57ce3f82a02e83c73f6d3b8 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 31 Aug 2026 17:13:11 +0200 Subject: [PATCH 113/270] minimax preview Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/processing_callbacks.py | 17 ++++++++++------- modules/progress.py | 2 ++ modules/sd_hijack_modular.py | 2 ++ modules/shared_state.py | 3 +-- modules/ui_definitions.py | 1 + modules/vae/sd_vae_taesd.py | 24 ++++++++++++++++++++---- pipelines/model_minimax.py | 8 +++++--- ui/dist/sdnext.mjs | 7 ++++--- ui/dist/sdnext.mjs.map | 4 ++-- ui/progressBar.ts | 3 ++- ui/ui.ts | 4 ++-- 12 files changed, 52 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47a7d77eb..3352b50c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ - intercept and profiling hooks - on-demand convert standard model on-demand - **Other** + - Video Preview: TAESD support for MiniMax - new optional transformer hooks: *settings -> compute add-ons* *PAG: Perturbed attention guidance, PAB: Pyramid attention broadcast, FBC: First Block Cache, FC: Faster Cache, LS: Layer Skip, MC: Mag Cache, TS: TaylorSeer* *note*: compatibility of different methods varies across different models diff --git a/modules/processing_callbacks.py b/modules/processing_callbacks.py index 9c0cefd2b..919e089c5 100644 --- a/modules/processing_callbacks.py +++ b/modules/processing_callbacks.py @@ -56,13 +56,7 @@ def diffusers_callback_legacy(step: int, timestep: int, latents: torch.FloatTens time.sleep(0.1) -def diffusers_callback(pipe, step: int = 0, timestep: int = 0, kwargs: dict | None = None): - if kwargs is None: - kwargs = {} - t0 = time.time() - from modules.lora import lora_stack - lora_stack.on_step(step) - +def torch_sync(): if shared.opts.torch_sync: if devices.backend == "ipex": torch.xpu.synchronize(devices.device) @@ -70,6 +64,15 @@ def diffusers_callback(pipe, step: int = 0, timestep: int = 0, kwargs: dict | No torch.cuda.synchronize(devices.device) time.sleep(0.001) # 1ms yield frees GIL for the preview thread + +def diffusers_callback(pipe, step: int = 0, timestep: int = 0, kwargs: dict | None = None): + if kwargs is None: + kwargs = {} + t0 = time.time() + from modules.lora import lora_stack + lora_stack.on_step(step) + torch_sync() + t1 = time.time() if shared.state.paused: diff --git a/modules/progress.py b/modules/progress.py index cd6a52d4f..263bc6342 100644 --- a/modules/progress.py +++ b/modules/progress.py @@ -116,6 +116,8 @@ def api_progress(req: ProgressRequest): try: buffered = io.BytesIO() shared.state.current_image.save(buffered, format='jpeg', quality=60) + fn = f'/tmp/preview-{shared.state.preview_job}-{shared.state.current_image_sampling_step}.jpg' + shared.state.current_image.save(fn, quality=90) b64 = base64.b64encode(buffered.getvalue()) live_preview = f'data:image/jpeg;base64,{b64.decode("ascii")}' except Exception: diff --git a/modules/sd_hijack_modular.py b/modules/sd_hijack_modular.py index cefeb436c..cba1cf993 100644 --- a/modules/sd_hijack_modular.py +++ b/modules/sd_hijack_modular.py @@ -5,6 +5,7 @@ import torch import diffusers from modules.logger import log from modules import shared, sd_offload, timer +from modules.processing_callbacks import torch_sync from modules.attention import context as attention_context from modules.lora import lora_stack @@ -18,6 +19,7 @@ def modular_step(components: diffusers.modular_pipelines.ModularPipeline, state: if 'num_inference_steps' in keys: shared.state.sampling_steps = state.num_inference_steps if 'latents' in keys and state.latents.ndim > 1: + torch_sync() shared.state.step() if hasattr(components, 'custom_unpack_latents'): shared.state.current_latent = components.custom_unpack_latents(state.latents, components, state) diff --git a/modules/shared_state.py b/modules/shared_state.py index 34fd0172f..4c0a31e07 100644 --- a/modules/shared_state.py +++ b/modules/shared_state.py @@ -63,7 +63,7 @@ class State: status += 'oom ' if self.oom else '' status += 'api ' if self.api else '' fn = f'{sys._getframe(3).f_code.co_name}:{sys._getframe(2).f_code.co_name}' # pylint: disable=protected-access - return f'State: ts={self.job_timestamp} job={self.job} jobs={self.job_no+1}/{self.job_count}/{self.total_jobs} step={self.sampling_step}/{self.sampling_steps} preview={self.preview_job}/{self.id_live_preview}/{self.current_image_sampling_step} status="{status.strip()}" fn={fn}' + return f'State: ts={self.job_timestamp} job={self.job} jobs={self.job_no+1}/{self.job_count}/{self.total_jobs} step={self.sampling_step}/{self.sampling_steps} preview={self.preview_job}/{self.id_live_preview}/{self.current_image_sampling_step} status="{status.strip()}" image={self.current_image} latent={self.current_latent.shape if self.current_latent is not None else None} fn={fn}' @property def sampling_step(self): @@ -293,7 +293,6 @@ class State: elif self.prediction_type == "v_prediction": sample = self.current_noise_pred * (-self.current_sigma / (self.current_sigma**2 + 1) ** 0.5) + (original_sample / (self.current_sigma**2 + 1)) # pylint: disable=invalid-unary-operand-type except Exception: - # log.error(f'State image sigma: last={self.id_live_preview} step={self.sampling_step} {e}') pass # ignore sigma errors image = sd_samplers_common.samples_to_image_grid(sample, fast=self.sampling_step > 1) self.assign_current_image(image) diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index cad753838..1751b3a65 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -643,6 +643,7 @@ def create_settings(cmd_opts): "live_preview_refresh_period": OptionInfo(500, "Progress update period", gr.Slider, {"minimum": 0, "maximum": 5000, "step": 25}), "taesd_variant": OptionInfo(shared_items.sd_taesd_items()[0], "TAESD variant", gr.Dropdown, {"choices": shared_items.sd_taesd_items()}), "taesd_layers": OptionInfo(3, "TAESD decode layers", gr.Slider, {"minimum": 1, "maximum": 3, "step": 1}), + "taesd_frames": OptionInfo(4, "TAESD video frames", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1, "visible": False}), "live_preview_require_focus": OptionInfo(True, "Pause live previews when tab is not focused"), "live_preview_downscale": OptionInfo(True, "Downscale high resolution live previews"), diff --git a/modules/vae/sd_vae_taesd.py b/modules/vae/sd_vae_taesd.py index 77cce288c..a898c3410 100644 --- a/modules/vae/sd_vae_taesd.py +++ b/modules/vae/sd_vae_taesd.py @@ -185,6 +185,23 @@ def restore_preview_size(image, vae): return image +def tile_video_frames(tensor): + frame_count = tensor.shape[0] + requested = shared.opts.taesd_frames + if (frame_count <= 1) or (requested == 1): + return tensor[0] + if (requested == -1) or (requested >= frame_count): + indices = list(range(frame_count)) + else: + indices = [round(i * (frame_count - 1) / (requested - 1)) for i in range(requested)] + selected = tensor[indices] + try: + tiled = torch.cat([selected[i] for i in range(selected.shape[0])], dim=-1) + return tiled + except Exception: + return tensor[0] + + def decode(latents, fast=False): global first_run, prev_model, prev_variant # pylint: disable=global-statement with lock: @@ -221,11 +238,10 @@ def decode(latents, fast=False): else: image = vae.decode(tensor, return_dict=False)[0] # image = (image / 2.0 + 0.5).clamp(0, 1).detach() - if image.ndim == 4 and image.shape[0] > 1 and image.shape[1] == 3: - # likely a video latent, just take the first frame - # TODO video preview: tiled frames - image = image[0] image = image.clamp(0, 1).detach() + if image.ndim == 4 and image.shape[0] > 1 and image.shape[1] == 3: # likely a video latent + # image = tile_video_frames(image) + image = image[0] # just take the first frame for now image = restore_preview_size(image, vae) t1 = time.time() if (t1 - t0) > 5.0 and not first_run: diff --git a/pipelines/model_minimax.py b/pipelines/model_minimax.py index ffa10e680..53ae78930 100644 --- a/pipelines/model_minimax.py +++ b/pipelines/model_minimax.py @@ -6,9 +6,11 @@ from modules.logger import log def unpack_latents(latents, components: diffusers.modular_pipelines.ModularPipeline, state: diffusers.modular_pipelines.BlockState): from diffusers.modular_pipelines.minimax_h3.modular_pipeline import align_num_frames, video_latent_num_frames from modules import processing_callbacks - frames = processing_callbacks.p.num_frames - width = processing_callbacks.p.width - height = processing_callbacks.p.height + frames = getattr(processing_callbacks.p, 'frames', 1) + width = getattr(processing_callbacks.p, 'width', 1024) + height = getattr(processing_callbacks.p, 'height', 1024) + if frames <= 0 or width <= 0 or height <= 0: + return latents num_frames = align_num_frames(frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) num_latent_frames = video_latent_num_frames(num_frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) latent_height = height // components.vae_spatial_compression_ratio diff --git a/ui/dist/sdnext.mjs b/ui/dist/sdnext.mjs index dcfeb96db..4a64811df 100644 --- a/ui/dist/sdnext.mjs +++ b/ui/dist/sdnext.mjs @@ -11102,6 +11102,7 @@ function requestProgress(id_task = "undefined", progressEl = null, galleryEl = n let img; const initLivePreview = () => { if (!parentGallery) return; + debug("initLivePreview", { el: galleryEl, parent: parentGallery }); const footers = Array.from(gradioApp().querySelectorAll(".gallery_footer")); for (const footer of footers) { if (footer.id !== "gallery_footer") footer.style.display = "none"; @@ -11152,7 +11153,7 @@ function requestProgress(id_task = "undefined", progressEl = null, galleryEl = n }; const previewVisible = () => { try { - return !galleryEl?.closest(".section")?.classList.contains("minimize"); + return galleryEl ? !galleryEl.closest(".section")?.classList.contains("minimize") : true; } catch { return true; } @@ -11528,7 +11529,7 @@ function submit_framepack(...args) { function submit_ltx(...args) { const id = randomId(); log("submitFramepack", id); - requestProgress(id, null, null); + requestProgress(id, null, gradioApp().getElementById("ltx_output_video")); window.submit_state = ""; args[0] = id; return args; @@ -11536,7 +11537,7 @@ function submit_ltx(...args) { function submit_minimax(...args) { const id = randomId(); log("submitMiniMax", id); - requestProgress(id, null, null); + requestProgress(id, null, gradioApp().getElementById("minimax_output_video")); window.submit_state = ""; args[0] = id; return args; diff --git a/ui/dist/sdnext.mjs.map b/ui/dist/sdnext.mjs.map index e8fa350af..66ac639cc 100644 --- a/ui/dist/sdnext.mjs.map +++ b/ui/dist/sdnext.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist/jquery.js", "../js/iframeResizer.js", "../../node_modules/.pnpm/exifr@7.1.3/node_modules/exifr/dist/full.umd.js", "../../node_modules/.pnpm/wheel@1.0.0/node_modules/wheel/index.js", "../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js", "../../node_modules/.pnpm/amator@1.1.0/node_modules/amator/index.js", "../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/index.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/kinetic.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeTextSelectionInterceptor.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/transform.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeSvgController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeDomController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/index.js", "../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist-module/wrappers/jquery.node-module-wrapper.js", "../vendor.ts", "../logger.ts", "../authWrap.ts", "../timers.ts", "../script.ts", "../changelog.ts", "../control.ts", "../extraNetworks.ts", "../generationParams.ts", "../imageParams.ts", "../notification.ts", "../progressBar.ts", "../dynamicUI.ts", "../ui.ts", "../inputAccordion.ts", "../indexdb.ts", "../logMonitor.ts", "../settings.ts", "../monitor.ts", "../promptChecker.ts", "../js/sha256.ts", "../gallery.ts", "../imageViewer.ts", "../autocomplete_xn.ts", "../autocomplete.ts", "../setHints.ts", "../contextMenus.ts", "../uiConfig.ts", "../loader.ts", "../legacy.ts", "../startup.ts", "../extensions.ts", "../dragDrop.ts", "../civitai.ts", "../guidance.ts", "../timesheet.ts", "../history.ts", "../storage.ts", "../aspectRatioOverlay.ts", "../resolutionLock.ts", "../editAttention.ts", "../../node_modules/.pnpm/jquery-sparkline@2.4.0/node_modules/jquery-sparkline/jquery.sparkline.js", "../gpu.ts"], - "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet ok = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 120000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n ok = window.opts.theme_type === 'Modern' ? 'uiux_separator_appearance' in window.opts : true;\n if (ok) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nasync function initStartup() {\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAUA,KAAE,SAAUA,SAAQ,SAAU;AAE7B;AAEA,UAAK,OAAO,WAAW,YAAY,OAAO,OAAO,YAAY,UAAW;AAIvE,eAAO,UAAU,QAASA,SAAQ,IAAK;AAAA,MACxC,OAAO;AACN,gBAASA,OAAO;AAAA,MACjB;AAAA,IAGD,GAAK,OAAO,WAAW,cAAc,SAAS,SAAM,SAAUC,SAAQ,UAAW;AAEjF;AAEA,UAAK,CAACA,QAAO,UAAW;AACvB,cAAM,IAAI,MAAO,0CAA2C;AAAA,MAC7D;AAEA,UAAI,MAAM,CAAC;AAEX,UAAI,WAAW,OAAO;AAEtB,UAAI,QAAQ,IAAI;AAIhB,UAAI,OAAO,IAAI,OAAO,SAAU,OAAQ;AACvC,eAAO,IAAI,KAAK,KAAM,KAAM;AAAA,MAC7B,IAAI,SAAU,OAAQ;AACrB,eAAO,IAAI,OAAO,MAAO,CAAC,GAAG,KAAM;AAAA,MACpC;AAEA,UAAI,OAAO,IAAI;AAEf,UAAI,UAAU,IAAI;AAGlB,UAAI,aAAa,CAAC;AAElB,UAAI,WAAW,WAAW;AAE1B,UAAI,SAAS,WAAW;AAExB,UAAI,aAAa,OAAO;AAExB,UAAI,uBAAuB,WAAW,KAAM,MAAO;AAGnD,UAAI,UAAU,CAAC;AAEf,eAAS,OAAQ,KAAM;AACtB,YAAK,OAAO,MAAO;AAClB,iBAAO,MAAM;AAAA,QACd;AAEA,eAAO,OAAO,QAAQ,WACrB,WAAY,SAAS,KAAM,GAAI,CAAE,KAAK,WACtC,OAAO;AAAA,MACT;AAEA,eAAS,SAAU,KAAM;AACxB,eAAO,OAAO,QAAQ,QAAQ,IAAI;AAAA,MACnC;AAEA,eAAS,YAAa,KAAM;AAE3B,YAAI,SAAS,CAAC,CAAC,OAAO,IAAI,QACzB,OAAO,OAAQ,GAAI;AAEpB,YAAK,OAAO,QAAQ,cAAc,SAAU,GAAI,GAAI;AACnD,iBAAO;AAAA,QACR;AAEA,eAAO,SAAS,WAAW,WAAW,KACrC,OAAO,WAAW,YAAY,SAAS,KAAO,SAAS,KAAO;AAAA,MAChE;AAEA,UAAI,aAAaA,QAAO;AAExB,UAAI,4BAA4B;AAAA,QAC/B,MAAM;AAAA,QACN,KAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,MACX;AAEA,eAAS,QAAS,MAAM,MAAM,KAAM;AACnC,cAAM,OAAO;AAEb,YAAIC,IACH,SAAS,IAAI,cAAe,QAAS;AAEtC,eAAO,OAAO;AACd,aAAMA,MAAK,2BAA4B;AACtC,cAAK,QAAQ,KAAMA,EAAE,GAAI;AACxB,mBAAQA,EAAE,IAAI,KAAMA,EAAE;AAAA,UACvB;AAAA,QACD;AAEA,YAAK,IAAI,KAAK,YAAa,MAAO,EAAE,YAAa;AAChD,iBAAO,WAAW,YAAa,MAAO;AAAA,QACvC;AAAA,MACD;AAEA,UAAI,UAAU,SAEb,cAAc,UAGdC,UAAS,SAAU,UAAU,SAAU;AAItC,eAAO,IAAIA,QAAO,GAAG,KAAM,UAAU,OAAQ;AAAA,MAC9C;AAED,MAAAA,QAAO,KAAKA,QAAO,YAAY;AAAA;AAAA,QAG9B,QAAQ;AAAA,QAER,aAAaA;AAAA;AAAA,QAGb,QAAQ;AAAA,QAER,SAAS,WAAW;AACnB,iBAAO,MAAM,KAAM,IAAK;AAAA,QACzB;AAAA;AAAA;AAAA,QAIA,KAAK,SAAU,KAAM;AAGpB,cAAK,OAAO,MAAO;AAClB,mBAAO,MAAM,KAAM,IAAK;AAAA,UACzB;AAGA,iBAAO,MAAM,IAAI,KAAM,MAAM,KAAK,MAAO,IAAI,KAAM,GAAI;AAAA,QACxD;AAAA;AAAA;AAAA,QAIA,WAAW,SAAU,OAAQ;AAG5B,cAAI,MAAMA,QAAO,MAAO,KAAK,YAAY,GAAG,KAAM;AAGlD,cAAI,aAAa;AAGjB,iBAAO;AAAA,QACR;AAAA;AAAA,QAGA,MAAM,SAAU,UAAW;AAC1B,iBAAOA,QAAO,KAAM,MAAM,QAAS;AAAA,QACpC;AAAA,QAEA,KAAK,SAAU,UAAW;AACzB,iBAAO,KAAK,UAAWA,QAAO,IAAK,MAAM,SAAU,MAAMD,IAAI;AAC5D,mBAAO,SAAS,KAAM,MAAMA,IAAG,IAAK;AAAA,UACrC,CAAE,CAAE;AAAA,QACL;AAAA,QAEA,OAAO,WAAW;AACjB,iBAAO,KAAK,UAAW,MAAM,MAAO,MAAM,SAAU,CAAE;AAAA,QACvD;AAAA,QAEA,OAAO,WAAW;AACjB,iBAAO,KAAK,GAAI,CAAE;AAAA,QACnB;AAAA,QAEA,MAAM,WAAW;AAChB,iBAAO,KAAK,GAAI,EAAG;AAAA,QACpB;AAAA,QAEA,MAAM,WAAW;AAChB,iBAAO,KAAK,UAAWC,QAAO,KAAM,MAAM,SAAU,OAAOD,IAAI;AAC9D,oBAASA,KAAI,KAAM;AAAA,UACpB,CAAE,CAAE;AAAA,QACL;AAAA,QAEA,KAAK,WAAW;AACf,iBAAO,KAAK,UAAWC,QAAO,KAAM,MAAM,SAAU,OAAOD,IAAI;AAC9D,mBAAOA,KAAI;AAAA,UACZ,CAAE,CAAE;AAAA,QACL;AAAA,QAEA,IAAI,SAAUA,IAAI;AACjB,cAAI,MAAM,KAAK,QACd,IAAI,CAACA,MAAMA,KAAI,IAAI,MAAM;AAC1B,iBAAO,KAAK,UAAW,KAAK,KAAK,IAAI,MAAM,CAAE,KAAM,CAAE,CAAE,IAAI,CAAC,CAAE;AAAA,QAC/D;AAAA,QAEA,KAAK,WAAW;AACf,iBAAO,KAAK,cAAc,KAAK,YAAY;AAAA,QAC5C;AAAA,MACD;AAEA,MAAAC,QAAO,SAASA,QAAO,GAAG,SAAS,WAAW;AAC7C,YAAI,SAAS,MAAM,KAAK,MAAM,aAAa,OAC1C,SAAS,UAAW,CAAE,KAAK,CAAC,GAC5BD,KAAI,GACJ,SAAS,UAAU,QACnB,OAAO;AAGR,YAAK,OAAO,WAAW,WAAY;AAClC,iBAAO;AAGP,mBAAS,UAAWA,EAAE,KAAK,CAAC;AAC5B,UAAAA;AAAA,QACD;AAGA,YAAK,OAAO,WAAW,YAAY,OAAO,WAAW,YAAa;AACjE,mBAAS,CAAC;AAAA,QACX;AAGA,YAAKA,OAAM,QAAS;AACnB,mBAAS;AACT,UAAAA;AAAA,QACD;AAEA,eAAQA,KAAI,QAAQA,MAAM;AAGzB,eAAO,UAAU,UAAWA,EAAE,MAAO,MAAO;AAG3C,iBAAM,QAAQ,SAAU;AACvB,qBAAO,QAAS,IAAK;AAIrB,kBAAK,SAAS,eAAe,WAAW,MAAO;AAC9C;AAAA,cACD;AAGA,kBAAK,QAAQ,SAAUC,QAAO,cAAe,IAAK,MAC/C,cAAc,MAAM,QAAS,IAAK,KAAQ;AAC5C,sBAAM,OAAQ,IAAK;AAGnB,oBAAK,eAAe,CAAC,MAAM,QAAS,GAAI,GAAI;AAC3C,0BAAQ,CAAC;AAAA,gBACV,WAAY,CAAC,eAAe,CAACA,QAAO,cAAe,GAAI,GAAI;AAC1D,0BAAQ,CAAC;AAAA,gBACV,OAAO;AACN,0BAAQ;AAAA,gBACT;AACA,8BAAc;AAGd,uBAAQ,IAAK,IAAIA,QAAO,OAAQ,MAAM,OAAO,IAAK;AAAA,cAGnD,WAAY,SAAS,QAAY;AAChC,uBAAQ,IAAK,IAAI;AAAA,cAClB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAGA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,OAAQ;AAAA;AAAA,QAGd,SAAS,YAAa,UAAU,KAAK,OAAO,GAAI,QAAS,OAAO,EAAG;AAAA;AAAA,QAGnE,SAAS;AAAA,QAET,OAAO,SAAU,KAAM;AACtB,gBAAM,IAAI,MAAO,GAAI;AAAA,QACtB;AAAA,QAEA,MAAM,WAAW;AAAA,QAAC;AAAA,QAElB,eAAe,SAAU,KAAM;AAC9B,cAAI,OAAO;AAIX,cAAK,CAAC,OAAO,SAAS,KAAM,GAAI,MAAM,mBAAoB;AACzD,mBAAO;AAAA,UACR;AAEA,kBAAQ,SAAU,GAAI;AAGtB,cAAK,CAAC,OAAQ;AACb,mBAAO;AAAA,UACR;AAGA,iBAAO,OAAO,KAAM,OAAO,aAAc,KAAK,MAAM;AACpD,iBAAO,OAAO,SAAS,cAAc,WAAW,KAAM,IAAK,MAAM;AAAA,QAClE;AAAA,QAEA,eAAe,SAAU,KAAM;AAC9B,cAAI;AAEJ,eAAM,QAAQ,KAAM;AACnB,mBAAO;AAAA,UACR;AACA,iBAAO;AAAA,QACR;AAAA;AAAA;AAAA,QAIA,YAAY,SAAU,MAAM,SAAS,KAAM;AAC1C,kBAAS,MAAM,EAAE,OAAO,WAAW,QAAQ,MAAM,GAAG,GAAI;AAAA,QACzD;AAAA,QAEA,MAAM,SAAU,KAAK,UAAW;AAC/B,cAAI,QAAQD,KAAI;AAEhB,cAAK,YAAa,GAAI,GAAI;AACzB,qBAAS,IAAI;AACb,mBAAQA,KAAI,QAAQA,MAAM;AACzB,kBAAK,SAAS,KAAM,IAAKA,EAAE,GAAGA,IAAG,IAAKA,EAAE,CAAE,MAAM,OAAQ;AACvD;AAAA,cACD;AAAA,YACD;AAAA,UACD,OAAO;AACN,iBAAMA,MAAK,KAAM;AAChB,kBAAK,SAAS,KAAM,IAAKA,EAAE,GAAGA,IAAG,IAAKA,EAAE,CAAE,MAAM,OAAQ;AACvD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA;AAAA,QAIA,MAAM,SAAU,MAAO;AACtB,cAAI,MACH,MAAM,IACNA,KAAI,GACJ,WAAW,KAAK;AAEjB,cAAK,CAAC,UAAW;AAGhB,mBAAU,OAAO,KAAMA,IAAI,GAAM;AAGhC,qBAAOC,QAAO,KAAM,IAAK;AAAA,YAC1B;AAAA,UACD;AACA,cAAK,aAAa,KAAK,aAAa,IAAK;AACxC,mBAAO,KAAK;AAAA,UACb;AACA,cAAK,aAAa,GAAI;AACrB,mBAAO,KAAK,gBAAgB;AAAA,UAC7B;AACA,cAAK,aAAa,KAAK,aAAa,GAAI;AACvC,mBAAO,KAAK;AAAA,UACb;AAIA,iBAAO;AAAA,QACR;AAAA;AAAA,QAIA,WAAW,SAAUC,MAAK,SAAU;AACnC,cAAI,MAAM,WAAW,CAAC;AAEtB,cAAKA,QAAO,MAAO;AAClB,gBAAK,YAAa,OAAQA,IAAI,CAAE,GAAI;AACnC,cAAAD,QAAO;AAAA,gBAAO;AAAA,gBACb,OAAOC,SAAQ,WACd,CAAEA,IAAI,IAAIA;AAAA,cACZ;AAAA,YACD,OAAO;AACN,mBAAK,KAAM,KAAKA,IAAI;AAAA,YACrB;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,SAAS,SAAU,MAAMA,MAAKF,IAAI;AACjC,iBAAOE,QAAO,OAAO,KAAK,QAAQ,KAAMA,MAAK,MAAMF,EAAE;AAAA,QACtD;AAAA,QAEA,UAAU,SAAU,MAAO;AAC1B,cAAI,YAAY,QAAQ,KAAK,cAC5B,UAAU,SAAU,KAAK,iBAAiB,MAAO;AAIlD,iBAAO,CAAC,YAAY,KAAM,aAAa,WAAW,QAAQ,YAAY,MAAO;AAAA,QAC9E;AAAA;AAAA,QAGA,UAAU,SAAU,GAAG,GAAI;AAC1B,cAAI,MAAM,KAAK,EAAE;AAEjB,iBAAO,MAAM,OAAO,CAAC,EAAG,OAAO,IAAI,aAAa;AAAA;AAAA,WAI/C,EAAE,WACD,EAAE,SAAU,GAAI,IAChB,EAAE,2BAA2B,EAAE,wBAAyB,GAAI,IAAI;AAAA,QAEnE;AAAA,QAEA,OAAO,SAAU,OAAO,QAAS;AAChC,cAAI,MAAM,CAAC,OAAO,QACjB,IAAI,GACJA,KAAI,MAAM;AAEX,iBAAQ,IAAI,KAAK,KAAM;AACtB,kBAAOA,IAAI,IAAI,OAAQ,CAAE;AAAA,UAC1B;AAEA,gBAAM,SAASA;AAEf,iBAAO;AAAA,QACR;AAAA,QAEA,MAAM,SAAU,OAAO,UAAU,QAAS;AACzC,cAAI,iBACHG,WAAU,CAAC,GACXH,KAAI,GACJ,SAAS,MAAM,QACf,iBAAiB,CAAC;AAInB,iBAAQA,KAAI,QAAQA,MAAM;AACzB,8BAAkB,CAAC,SAAU,MAAOA,EAAE,GAAGA,EAAE;AAC3C,gBAAK,oBAAoB,gBAAiB;AACzC,cAAAG,SAAQ,KAAM,MAAOH,EAAE,CAAE;AAAA,YAC1B;AAAA,UACD;AAEA,iBAAOG;AAAA,QACR;AAAA;AAAA,QAGA,KAAK,SAAU,OAAO,UAAU,KAAM;AACrC,cAAI,QAAQ,OACXH,KAAI,GACJ,MAAM,CAAC;AAGR,cAAK,YAAa,KAAM,GAAI;AAC3B,qBAAS,MAAM;AACf,mBAAQA,KAAI,QAAQA,MAAM;AACzB,sBAAQ,SAAU,MAAOA,EAAE,GAAGA,IAAG,GAAI;AAErC,kBAAK,SAAS,MAAO;AACpB,oBAAI,KAAM,KAAM;AAAA,cACjB;AAAA,YACD;AAAA,UAGD,OAAO;AACN,iBAAMA,MAAK,OAAQ;AAClB,sBAAQ,SAAU,MAAOA,EAAE,GAAGA,IAAG,GAAI;AAErC,kBAAK,SAAS,MAAO;AACpB,oBAAI,KAAM,KAAM;AAAA,cACjB;AAAA,YACD;AAAA,UACD;AAGA,iBAAO,KAAM,GAAI;AAAA,QAClB;AAAA;AAAA,QAGA,MAAM;AAAA;AAAA;AAAA,QAIN;AAAA,MACD,CAAE;AAEF,UAAK,OAAO,WAAW,YAAa;AACnC,QAAAC,QAAO,GAAI,OAAO,QAAS,IAAI,IAAK,OAAO,QAAS;AAAA,MACrD;AAGA,MAAAA,QAAO;AAAA,QAAM,uEAAuE,MAAO,GAAI;AAAA,QAC9F,SAAU,IAAI,MAAO;AACpB,qBAAY,aAAa,OAAO,GAAI,IAAI,KAAK,YAAY;AAAA,QAC1D;AAAA,MAAE;AAEH,eAAS,SAAU,MAAM,MAAO;AAC/B,eAAO,KAAK,YAAY,KAAK,SAAS,YAAY,MAAM,KAAK,YAAY;AAAA,MAC1E;AAEA,UAAI,MAAM,IAAI;AAGd,UAAI,aAAa;AAEjB,UAAI,OAAO,WAAW;AAEtB,UAAI,YAAY,QAAQ,IAAI;AAAA;AAAA;AAAA,QAI3B,2BAMQ,aAAa,UAAU,aAAa,OAC5C,aAAa;AAAA,MAEd;AAEA,UAAI,WAAW,IAAI;AAAA,QAClB,MAAM,aAAa,gCAAgC,aAAa;AAAA,QAChE;AAAA,MACD;AAGA,UAAI,aAAa,4BAA4B,aAC5C;AAED,UAAI,qBAAqB,IAAI,OAAQ,MAAM,aAAa,aACvD,aAAa,MAAM,aAAa,GAAI;AAErC,UAAI,WAAW,IAAI,OAAQ,aAAa,IAAK;AAE7C,UAAI,WAAW;AAEf,UAAI,oBAAoB,WAAW;AAInC,UAAI,UAAU,kBAAkB,WAAW,kBAAkB;AAQ7D,eAAS,cAAc;AACtB,YAAI,OAAO,CAAC;AAEZ,iBAAS,MAAO,KAAK,OAAQ;AAI5B,cAAK,KAAK,KAAM,MAAM,GAAI,IAAIA,QAAO,KAAK,aAAc;AAGvD,mBAAO,MAAO,KAAK,MAAM,CAAE;AAAA,UAC5B;AACA,iBAAS,MAAO,MAAM,GAAI,IAAI;AAAA,QAC/B;AACA,eAAO;AAAA,MACR;AAOA,eAAS,YAAa,SAAU;AAC/B,eAAO,WAAW,OAAO,QAAQ,yBAAyB,eAAe;AAAA,MAC1E;AAGA,UAAI,aAAa,QAAQ,aAAa,OAAO,aAAa,SAAS;AAAA,MAGlE,kBAAkB;AAAA,MAGlB,0DAA6D,aAAa,SAC1E,aAAa;AAEd,UAAI,UAAU,OAAO,aAAa,uFAOJ,aAAa;AAM3C,UAAI,kBAAkB;AAAA,QACrB,IAAI,IAAI,OAAQ,QAAQ,aAAa,GAAI;AAAA,QACzC,OAAO,IAAI,OAAQ,UAAU,aAAa,GAAI;AAAA,QAC9C,KAAK,IAAI,OAAQ,OAAO,aAAa,OAAQ;AAAA,QAC7C,MAAM,IAAI,OAAQ,MAAM,UAAW;AAAA,QACnC,QAAQ,IAAI,OAAQ,MAAM,OAAQ;AAAA,QAClC,OAAO,IAAI;AAAA,UACV,2DACA,aAAa,iCAAiC,aAAa,gBAC3D,aAAa,eAAe,aAAa;AAAA,UAAU;AAAA,QAAI;AAAA,MACzD;AAEA,UAAI,UAAU,IAAI,OAAQ,OAAQ;AAKlC,UAAI,YAAY,IAAI,OAAQ,yBAAyB,aACpD,wBAAwB,GAAI,GAC5B,YAAY,SAAUG,SAAQ,QAAS;AACtC,YAAI,OAAO,OAAOA,QAAO,MAAO,CAAE,IAAI;AAEtC,YAAK,QAAS;AAGb,iBAAO;AAAA,QACR;AAMA,eAAO,OAAO,IACb,OAAO,aAAc,OAAO,KAAQ,IACpC,OAAO,aAAc,QAAQ,KAAK,OAAQ,OAAO,OAAQ,KAAO;AAAA,MAClE;AAED,eAAS,iBAAkB,KAAM;AAChC,eAAO,IAAI,QAAS,WAAW,SAAU;AAAA,MAC1C;AAEA,eAAS,cAAe,KAAM;AAC7B,QAAAH,QAAO,MAAO,4CAA4C,GAAI;AAAA,MAC/D;AAEA,UAAI,SAAS,IAAI,OAAQ,MAAM,aAAa,OAAO,aAAa,GAAI;AAEpE,UAAI,aAAa,YAAY;AAE7B,eAAS,SAAU,UAAU,WAAY;AACxC,YAAI,SAAS,OAAO,QAAQ,MAC3B,OAAO,QAAQ,YACf,SAAS,WAAY,WAAW,GAAI;AAErC,YAAK,QAAS;AACb,iBAAO,YAAY,IAAI,OAAO,MAAO,CAAE;AAAA,QACxC;AAEA,gBAAQ;AACR,iBAAS,CAAC;AACV,qBAAaA,QAAO,KAAK;AAEzB,eAAQ,OAAQ;AAGf,cAAK,CAAC,YAAa,QAAQ,OAAO,KAAM,KAAM,IAAM;AACnD,gBAAK,OAAQ;AAGZ,sBAAQ,MAAM,MAAO,MAAO,CAAE,EAAE,MAAO,KAAK;AAAA,YAC7C;AACA,mBAAO,KAAQ,SAAS,CAAC,CAAI;AAAA,UAC9B;AAEA,oBAAU;AAGV,cAAO,QAAQ,mBAAmB,KAAM,KAAM,GAAM;AACnD,sBAAU,MAAM,MAAM;AACtB,mBAAO,KAAM;AAAA,cACZ,OAAO;AAAA;AAAA,cAGP,MAAM,MAAO,CAAE,EAAE,QAAS,UAAU,GAAI;AAAA,YACzC,CAAE;AACF,oBAAQ,MAAM,MAAO,QAAQ,MAAO;AAAA,UACrC;AAGA,eAAM,QAAQ,iBAAkB;AAC/B,iBAAO,QAAQA,QAAO,KAAK,MAAO,IAAK,EAAE,KAAM,KAAM,OAAS,CAAC,WAAY,IAAK,MAC7E,QAAQ,WAAY,IAAK,EAAG,KAAM,KAAQ;AAC5C,wBAAU,MAAM,MAAM;AACtB,qBAAO,KAAM;AAAA,gBACZ,OAAO;AAAA,gBACP;AAAA,gBACA,SAAS;AAAA,cACV,CAAE;AACF,sBAAQ,MAAM,MAAO,QAAQ,MAAO;AAAA,YACrC;AAAA,UACD;AAEA,cAAK,CAAC,SAAU;AACf;AAAA,UACD;AAAA,QACD;AAKA,YAAK,WAAY;AAChB,iBAAO,MAAM;AAAA,QACd;AAEA,eAAO,QACN,cAAe,QAAS;AAAA;AAAA,UAGxB,WAAY,UAAU,MAAO,EAAE,MAAO,CAAE;AAAA;AAAA,MAC1C;AAEA,UAAI,YAAY;AAAA,QACf,MAAM,SAAU,OAAQ;AACvB,gBAAO,CAAE,IAAI,iBAAkB,MAAO,CAAE,CAAE;AAG1C,gBAAO,CAAE,IAAI,iBAAkB,MAAO,CAAE,KAAK,MAAO,CAAE,KAAK,MAAO,CAAE,KAAK,EAAG;AAE5E,cAAK,MAAO,CAAE,MAAM,MAAO;AAC1B,kBAAO,CAAE,IAAI,MAAM,MAAO,CAAE,IAAI;AAAA,UACjC;AAEA,iBAAO,MAAM,MAAO,GAAG,CAAE;AAAA,QAC1B;AAAA,QAEA,OAAO,SAAU,OAAQ;AAYxB,gBAAO,CAAE,IAAI,MAAO,CAAE,EAAE,YAAY;AAEpC,cAAK,MAAO,CAAE,EAAE,MAAO,GAAG,CAAE,MAAM,OAAQ;AAGzC,gBAAK,CAAC,MAAO,CAAE,GAAI;AAClB,4BAAe,MAAO,CAAE,CAAE;AAAA,YAC3B;AAIA,kBAAO,CAAE,IAAI,EAAG,MAAO,CAAE,IACxB,MAAO,CAAE,KAAM,MAAO,CAAE,KAAK,KAC7B,KAAM,MAAO,CAAE,MAAM,UAAU,MAAO,CAAE,MAAM;AAE/C,kBAAO,CAAE,IAAI,EAAK,MAAO,CAAE,IAAI,MAAO,CAAE,KAAO,MAAO,CAAE,MAAM;AAAA,UAG/D,WAAY,MAAO,CAAE,GAAI;AACxB,0BAAe,MAAO,CAAE,CAAE;AAAA,UAC3B;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,QAAQ,SAAU,OAAQ;AACzB,cAAI,QACH,WAAW,CAAC,MAAO,CAAE,KAAK,MAAO,CAAE;AAEpC,cAAK,gBAAgB,MAAM,KAAM,MAAO,CAAE,CAAE,GAAI;AAC/C,mBAAO;AAAA,UACR;AAGA,cAAK,MAAO,CAAE,GAAI;AACjB,kBAAO,CAAE,IAAI,MAAO,CAAE,KAAK,MAAO,CAAE,KAAK;AAAA,UAG1C,WAAY,YAAY,QAAQ,KAAM,QAAS;AAAA,WAG5C,SAAS,SAAU,UAAU,IAAK;AAAA,WAGlC,SAAS,SAAS,QAAS,KAAK,SAAS,SAAS,MAAO,IAC1D,SAAS,SAAW;AAGrB,kBAAO,CAAE,IAAI,MAAO,CAAE,EAAE,MAAO,GAAG,MAAO;AACzC,kBAAO,CAAE,IAAI,SAAS,MAAO,GAAG,MAAO;AAAA,UACxC;AAGA,iBAAO,MAAM,MAAO,GAAG,CAAE;AAAA,QAC1B;AAAA,MACD;AAEA,eAAS,WAAY,QAAS;AAC7B,YAAID,KAAI,GACP,MAAM,OAAO,QACb,WAAW;AACZ,eAAQA,KAAI,KAAKA,MAAM;AACtB,sBAAY,OAAQA,EAAE,EAAE;AAAA,QACzB;AACA,eAAO;AAAA,MACR;AAIA,eAAS,OAAQ,OAAO,IAAI,KAAK,OAAO,WAAW,UAAU,KAAM;AAClE,YAAIA,KAAI,GACP,MAAM,MAAM,QACZ,OAAO,OAAO;AAGf,YAAK,OAAQ,GAAI,MAAM,UAAW;AACjC,sBAAY;AACZ,eAAMA,MAAK,KAAM;AAChB,mBAAQ,OAAO,IAAIA,IAAG,IAAKA,EAAE,GAAG,MAAM,UAAU,GAAI;AAAA,UACrD;AAAA,QAGD,WAAY,UAAU,QAAY;AACjC,sBAAY;AAEZ,cAAK,OAAO,UAAU,YAAa;AAClC,kBAAM;AAAA,UACP;AAEA,cAAK,MAAO;AAGX,gBAAK,KAAM;AACV,iBAAG,KAAM,OAAO,KAAM;AACtB,mBAAK;AAAA,YAGN,OAAO;AACN,qBAAO;AACP,mBAAK,SAAU,MAAM,MAAMK,QAAQ;AAClC,uBAAO,KAAK,KAAMJ,QAAQ,IAAK,GAAGI,MAAM;AAAA,cACzC;AAAA,YACD;AAAA,UACD;AAEA,cAAK,IAAK;AACT,mBAAQL,KAAI,KAAKA,MAAM;AACtB;AAAA,gBACC,MAAOA,EAAE;AAAA,gBAAG;AAAA,gBAAK,MAChB,QACA,MAAM,KAAM,MAAOA,EAAE,GAAGA,IAAG,GAAI,MAAOA,EAAE,GAAG,GAAI,CAAE;AAAA,cACnD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,YAAK,WAAY;AAChB,iBAAO;AAAA,QACR;AAGA,YAAK,MAAO;AACX,iBAAO,GAAG,KAAM,KAAM;AAAA,QACvB;AAEA,eAAO,MAAM,GAAI,MAAO,CAAE,GAAG,GAAI,IAAI;AAAA,MACtC;AAKA,UAAI,gBAAgB;AAEpB,MAAAC,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,MAAM,OAAQ;AAC7B,iBAAO,OAAQ,MAAMA,QAAO,MAAM,MAAM,OAAO,UAAU,SAAS,CAAE;AAAA,QACrE;AAAA,QAEA,YAAY,SAAU,MAAO;AAC5B,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAAA,QAAO,WAAY,MAAM,IAAK;AAAA,UAC/B,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,OAAQ;AAAA,QACd,MAAM,SAAU,MAAM,MAAM,OAAQ;AACnC,cAAI,KAAK,OACR,QAAQ,KAAK;AAGd,cAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAI;AAChD;AAAA,UACD;AAGA,cAAK,OAAO,KAAK,iBAAiB,aAAc;AAC/C,mBAAOA,QAAO,KAAM,MAAM,MAAM,KAAM;AAAA,UACvC;AAIA,cAAK,UAAU,KAAK,CAACA,QAAO,SAAU,IAAK,GAAI;AAC9C,oBAAQA,QAAO,UAAW,KAAK,YAAY,CAAE;AAAA,UAC9C;AAEA,cAAK,UAAU,QAAY;AAC1B,gBAAK,UAAU;AAAA;AAAA;AAAA;AAAA,YAMZ,UAAU,SAAS,KAAK,YAAY,EAAE,QAAS,OAAQ,MAAM,GAAM;AAErE,cAAAA,QAAO,WAAY,MAAM,IAAK;AAC9B;AAAA,YACD;AAEA,gBAAK,SAAS,SAAS,UACpB,MAAM,MAAM,IAAK,MAAM,OAAO,IAAK,OAAQ,QAAY;AACzD,qBAAO;AAAA,YACR;AAEA,iBAAK,aAAc,MAAM,KAAM;AAC/B,mBAAO;AAAA,UACR;AAEA,cAAK,SAAS,SAAS,UAAW,MAAM,MAAM,IAAK,MAAM,IAAK,OAAQ,MAAO;AAC5E,mBAAO;AAAA,UACR;AAEA,gBAAM,KAAK,aAAc,IAAK;AAG9B,iBAAO,OAAO,OAAO,SAAY;AAAA,QAClC;AAAA,QAEA,WAAW,CAAC;AAAA,QAEZ,YAAY,SAAU,MAAM,OAAQ;AACnC,cAAI,MACHD,KAAI,GAIJ,YAAY,SAAS,MAAM,MAAO,aAAc;AAEjD,cAAK,aAAa,KAAK,aAAa,GAAI;AACvC,mBAAU,OAAO,UAAWA,IAAI,GAAM;AACrC,mBAAK,gBAAiB,IAAK;AAAA,YAC5B;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAIF,UAAK,MAAO;AACX,QAAAC,QAAO,UAAU,OAAO;AAAA,UACvB,KAAK,SAAU,MAAM,OAAQ;AAC5B,gBAAK,UAAU,WAAW,SAAU,MAAM,OAAQ,GAAI;AACrD,kBAAI,MAAM,KAAK;AACf,mBAAK,aAAc,QAAQ,KAAM;AACjC,kBAAK,KAAM;AACV,qBAAK,QAAQ;AAAA,cACd;AACA,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAIA,UAAI,aAAa;AAEjB,eAAS,WAAY,IAAI,aAAc;AACtC,YAAK,aAAc;AAGlB,cAAK,OAAO,MAAO;AAClB,mBAAO;AAAA,UACR;AAGA,iBAAO,GAAG,MAAO,GAAG,EAAG,IAAI,OAAO,GAAG,WAAY,GAAG,SAAS,CAAE,EAAE,SAAU,EAAG,IAAI;AAAA,QACnF;AAGA,eAAO,OAAO;AAAA,MACf;AAEA,MAAAA,QAAO,iBAAiB,SAAU,KAAM;AACvC,gBAAS,MAAM,IAAK,QAAS,YAAY,UAAW;AAAA,MACrD;AAEA,UAAI,OAAO,IAAI;AAEf,UAAI,SAAS,IAAI;AAEjB,UAAI;AAGJ,eAAS,UAAW,GAAG,GAAI;AAG1B,YAAK,MAAM,GAAI;AACd,yBAAe;AACf,iBAAO;AAAA,QACR;AAGA,YAAI,UAAU,CAAC,EAAE,0BAA0B,CAAC,EAAE;AAC9C,YAAK,SAAU;AACd,iBAAO;AAAA,QACR;AAOA,mBAAY,EAAE,iBAAiB,OAAS,EAAE,iBAAiB,KAC1D,EAAE,wBAAyB,CAAE;AAAA;AAAA,UAG7B;AAAA;AAGD,YAAK,UAAU,GAAI;AAOlB,cAAK,KAAK,cAAc,EAAE,iBAAiB,cAC1CA,QAAO,SAAU,YAAY,CAAE,GAAI;AACnC,mBAAO;AAAA,UACR;AAMA,cAAK,KAAK,cAAc,EAAE,iBAAiB,cAC1CA,QAAO,SAAU,YAAY,CAAE,GAAI;AACnC,mBAAO;AAAA,UACR;AAGA,iBAAO;AAAA,QACR;AAEA,eAAO,UAAU,IAAI,KAAK;AAAA,MAC3B;AAMA,MAAAA,QAAO,aAAa,SAAU,SAAU;AACvC,YAAI,MACH,aAAa,CAAC,GACd,IAAI,GACJD,KAAI;AAEL,uBAAe;AAEf,aAAK,KAAM,SAAS,SAAU;AAE9B,YAAK,cAAe;AACnB,iBAAU,OAAO,QAASA,IAAI,GAAM;AACnC,gBAAK,SAAS,QAASA,EAAE,GAAI;AAC5B,kBAAI,WAAW,KAAMA,EAAE;AAAA,YACxB;AAAA,UACD;AACA,iBAAQ,KAAM;AACb,mBAAO,KAAM,SAAS,WAAY,CAAE,GAAG,CAAE;AAAA,UAC1C;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAAC,QAAO,GAAG,aAAa,WAAW;AACjC,eAAO,KAAK,UAAWA,QAAO,WAAY,MAAM,MAAO,IAAK,CAAE,CAAE;AAAA,MACjE;AAEA,UAAI,GACH,kBAGAK,WACA,iBACA,gBAGA,UAAU,GACV,OAAO,GACP,aAAa,YAAY,GACzB,gBAAgB,YAAY,GAC5B,yBAAyB,YAAY,GAKrC,cAAc,IAAI,OAAQ,aAAa,KAAK,GAAI,GAEhD,cAAc,IAAI,OAAQ,MAAM,aAAa,GAAI,GAEjD,YAAYL,QAAO,OAAQ;AAAA;AAAA;AAAA,QAI1B,cAAc,IAAI,OAAQ,MAAM,aAC/B,qDAAqD,aACrD,qBAAqB,aAAa,oBAAoB,GAAI;AAAA,MAC5D,GAAG,eAAgB,GAEnB,UAAU,uCACV,UAAU,UAGV,eAAe,oCAMf,gBAAgB,WAAW;AAC1B,oBAAY;AAAA,MACb,GAEA,qBAAqB;AAAA,QACpB,SAAU,MAAO;AAChB,iBAAO,KAAK,aAAa,QAAQ,SAAU,MAAM,UAAW;AAAA,QAC7D;AAAA,QACA,EAAE,KAAK,cAAc,MAAM,SAAS;AAAA,MACrC;AAED,eAAS,KAAM,UAAU,SAAS,SAAS,MAAO;AACjD,YAAI,GAAGD,IAAG,MAAM,KAAK,OAAO,QAAQ,aACnC,aAAa,WAAW,QAAQ,eAGhC,WAAW,UAAU,QAAQ,WAAW;AAEzC,kBAAU,WAAW,CAAC;AAGtB,YAAK,OAAO,aAAa,YAAY,CAAC,YACrC,aAAa,KAAK,aAAa,KAAK,aAAa,IAAK;AAEtD,iBAAO;AAAA,QACR;AAGA,YAAK,CAAC,MAAO;AACZ,sBAAa,OAAQ;AACrB,oBAAU,WAAWM;AAErB,cAAK,gBAAiB;AAIrB,gBAAK,aAAa,OAAQ,QAAQ,aAAa,KAAM,QAAS,IAAM;AAGnE,kBAAO,IAAI,MAAO,CAAE,GAAM;AAGzB,oBAAK,aAAa,GAAI;AACrB,sBAAO,OAAO,QAAQ,eAAgB,CAAE,GAAM;AAC7C,yBAAK,KAAM,SAAS,IAAK;AAAA,kBAC1B;AACA,yBAAO;AAAA,gBAGR,OAAO;AACN,sBAAK,eAAgB,OAAO,WAAW,eAAgB,CAAE,MACxDL,QAAO,SAAU,SAAS,IAAK,GAAI;AAEnC,yBAAK,KAAM,SAAS,IAAK;AACzB,2BAAO;AAAA,kBACR;AAAA,gBACD;AAAA,cAGD,WAAY,MAAO,CAAE,GAAI;AACxB,qBAAK,MAAO,SAAS,QAAQ,qBAAsB,QAAS,CAAE;AAC9D,uBAAO;AAAA,cAGR,YAAc,IAAI,MAAO,CAAE,MAAO,QAAQ,wBAAyB;AAClE,qBAAK,MAAO,SAAS,QAAQ,uBAAwB,CAAE,CAAE;AACzD,uBAAO;AAAA,cACR;AAAA,YACD;AAGA,gBAAK,CAAC,uBAAwB,WAAW,GAAI,MAC1C,CAAC,aAAa,CAAC,UAAU,KAAM,QAAS,IAAM;AAEhD,4BAAc;AACd,2BAAa;AASb,kBAAK,aAAa,MACf,SAAS,KAAM,QAAS,KAAK,mBAAmB,KAAM,QAAS,IAAM;AAGvE,6BAAa,SAAS,KAAM,QAAS,KACpC,YAAa,QAAQ,UAAW,KAChC;AAQD,oBAAK,cAAc,WAAW,MAAO;AAGpC,sBAAO,MAAM,QAAQ,aAAc,IAAK,GAAM;AAC7C,0BAAMA,QAAO,eAAgB,GAAI;AAAA,kBAClC,OAAO;AACN,4BAAQ,aAAc,MAAQ,MAAMA,QAAO,OAAU;AAAA,kBACtD;AAAA,gBACD;AAGA,yBAAS,SAAU,QAAS;AAC5B,gBAAAD,KAAI,OAAO;AACX,uBAAQA,MAAM;AACb,yBAAQA,EAAE,KAAM,MAAM,MAAM,MAAM,YAAa,MAC9C,WAAY,OAAQA,EAAE,CAAE;AAAA,gBAC1B;AACA,8BAAc,OAAO,KAAM,GAAI;AAAA,cAChC;AAEA,kBAAI;AACH,qBAAK;AAAA,kBAAO;AAAA,kBACX,WAAW,iBAAkB,WAAY;AAAA,gBAC1C;AACA,uBAAO;AAAA,cACR,SAAU,UAAW;AACpB,uCAAwB,UAAU,IAAK;AAAA,cACxC,UAAE;AACD,oBAAK,QAAQC,QAAO,SAAU;AAC7B,0BAAQ,gBAAiB,IAAK;AAAA,gBAC/B;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAGA,eAAO,OAAQ,SAAS,QAAS,UAAU,IAAK,GAAG,SAAS,SAAS,IAAK;AAAA,MAC3E;AAMA,eAAS,aAAc,IAAK;AAC3B,WAAIA,QAAO,OAAQ,IAAI;AACvB,eAAO;AAAA,MACR;AAMA,eAAS,kBAAmB,MAAO;AAClC,eAAO,SAAU,MAAO;AACvB,iBAAO,SAAU,MAAM,OAAQ,KAAK,KAAK,SAAS;AAAA,QACnD;AAAA,MACD;AAMA,eAAS,mBAAoB,MAAO;AACnC,eAAO,SAAU,MAAO;AACvB,kBAAS,SAAU,MAAM,OAAQ,KAAK,SAAU,MAAM,QAAS,MAC9D,KAAK,SAAS;AAAA,QAChB;AAAA,MACD;AAMA,eAAS,qBAAsB,UAAW;AAGzC,eAAO,SAAU,MAAO;AAKvB,cAAK,UAAU,MAAO;AASrB,gBAAK,KAAK,cAAc,KAAK,aAAa,OAAQ;AAGjD,kBAAK,WAAW,MAAO;AACtB,oBAAK,WAAW,KAAK,YAAa;AACjC,yBAAO,KAAK,WAAW,aAAa;AAAA,gBACrC,OAAO;AACN,yBAAO,KAAK,aAAa;AAAA,gBAC1B;AAAA,cACD;AAIA,qBAAO,KAAK,eAAe;AAAA,cAG1B,KAAK,eAAe,CAAC,YACpB,mBAAoB,IAAK,MAAM;AAAA,YAClC;AAEA,mBAAO,KAAK,aAAa;AAAA,UAK1B,WAAY,WAAW,MAAO;AAC7B,mBAAO,KAAK,aAAa;AAAA,UAC1B;AAGA,iBAAO;AAAA,QACR;AAAA,MACD;AAMA,eAAS,uBAAwB,IAAK;AACrC,eAAO,aAAc,SAAU,UAAW;AACzC,qBAAW,CAAC;AACZ,iBAAO,aAAc,SAAU,MAAME,UAAU;AAC9C,gBAAI,GACH,eAAe,GAAI,CAAC,GAAG,KAAK,QAAQ,QAAS,GAC7CH,KAAI,aAAa;AAGlB,mBAAQA,MAAM;AACb,kBAAK,KAAQ,IAAI,aAAcA,EAAE,CAAI,GAAI;AACxC,qBAAM,CAAE,IAAI,EAAGG,SAAS,CAAE,IAAI,KAAM,CAAE;AAAA,cACvC;AAAA,YACD;AAAA,UACD,CAAE;AAAA,QACH,CAAE;AAAA,MACH;AAMA,eAAS,YAAa,MAAO;AAC5B,YAAI,WACH,MAAM,OAAO,KAAK,iBAAiB,OAAO;AAO3C,YAAK,OAAOG,aAAY,IAAI,aAAa,GAAI;AAC5C;AAAA,QACD;AAGA,QAAAA,YAAW;AACX,0BAAkBA,UAAS;AAC3B,yBAAiB,CAACL,QAAO,SAAUK,SAAS;AAQ5C,YAAK,QAAQ,cAAcA,cACxB,YAAYA,UAAS,gBAAiB,UAAU,QAAQ,WAAY;AACtE,oBAAU,iBAAkB,UAAU,aAAc;AAAA,QACrD;AAAA,MACD;AAEA,WAAK,UAAU,SAAU,MAAM,UAAW;AACzC,eAAO,KAAM,MAAM,MAAM,MAAM,QAAS;AAAA,MACzC;AAEA,WAAK,kBAAkB,SAAU,MAAM,MAAO;AAC7C,oBAAa,IAAK;AAElB,YAAK,kBACJ,CAAC,uBAAwB,OAAO,GAAI,MAClC,CAAC,aAAa,CAAC,UAAU,KAAM,IAAK,IAAM;AAE5C,cAAI;AACH,mBAAO,QAAQ,KAAM,MAAM,IAAK;AAAA,UACjC,SAAU,GAAI;AACb,mCAAwB,MAAM,IAAK;AAAA,UACpC;AAAA,QACD;AAEA,eAAO,KAAM,MAAMA,WAAU,MAAM,CAAE,IAAK,CAAE,EAAE,SAAS;AAAA,MACxD;AAEA,MAAAL,QAAO,OAAO;AAAA;AAAA,QAGb,aAAa;AAAA,QAEb,cAAc;AAAA,QAEd,OAAO;AAAA,QAEP,MAAM;AAAA,UACL,IAAI,SAAU,IAAI,SAAU;AAC3B,gBAAK,OAAO,QAAQ,mBAAmB,eAAe,gBAAiB;AACtE,kBAAI,OAAO,QAAQ,eAAgB,EAAG;AACtC,qBAAO,OAAO,CAAE,IAAK,IAAI,CAAC;AAAA,YAC3B;AAAA,UACD;AAAA,UAEA,KAAK,SAAU,KAAK,SAAU;AAC7B,gBAAK,OAAO,QAAQ,yBAAyB,aAAc;AAC1D,qBAAO,QAAQ,qBAAsB,GAAI;AAAA,YAG1C,OAAO;AACN,qBAAO,QAAQ,iBAAkB,GAAI;AAAA,YACtC;AAAA,UACD;AAAA,UAEA,OAAO,SAAU,WAAW,SAAU;AACrC,gBAAK,OAAO,QAAQ,2BAA2B,eAAe,gBAAiB;AAC9E,qBAAO,QAAQ,uBAAwB,SAAU;AAAA,YAClD;AAAA,UACD;AAAA,QACD;AAAA,QAEA,UAAU;AAAA,UACT,KAAK,EAAE,KAAK,cAAc,OAAO,KAAK;AAAA,UACtC,KAAK,EAAE,KAAK,aAAa;AAAA,UACzB,KAAK,EAAE,KAAK,mBAAmB,OAAO,KAAK;AAAA,UAC3C,KAAK,EAAE,KAAK,kBAAkB;AAAA,QAC/B;AAAA,QAEA;AAAA,QAEA,QAAQ;AAAA,UACP,IAAI,SAAU,IAAK;AAClB,gBAAI,SAAS,iBAAkB,EAAG;AAClC,mBAAO,SAAU,MAAO;AACvB,qBAAO,KAAK,aAAc,IAAK,MAAM;AAAA,YACtC;AAAA,UACD;AAAA,UAEA,KAAK,SAAU,kBAAmB;AACjC,gBAAI,mBAAmB,iBAAkB,gBAAiB,EAAE,YAAY;AACxE,mBAAO,qBAAqB,MAE3B,WAAW;AACV,qBAAO;AAAA,YACR,IAEA,SAAU,MAAO;AAChB,qBAAO,SAAU,MAAM,gBAAiB;AAAA,YACzC;AAAA,UACF;AAAA,UAEA,OAAO,SAAU,WAAY;AAC5B,gBAAI,UAAU,WAAY,YAAY,GAAI;AAE1C,mBAAO,YACJ,UAAU,IAAI,OAAQ,QAAQ,aAAa,MAAM,YAClD,MAAM,aAAa,KAAM,MAC1B,WAAY,WAAW,SAAU,MAAO;AACvC,qBAAO,QAAQ;AAAA,gBACd,OAAO,KAAK,cAAc,YAAY,KAAK,aAC1C,OAAO,KAAK,iBAAiB,eAC5B,KAAK,aAAc,OAAQ,KAC5B;AAAA,cACF;AAAA,YACD,CAAE;AAAA,UACJ;AAAA,UAEA,MAAM,SAAU,MAAM,UAAU,OAAQ;AACvC,mBAAO,SAAU,MAAO;AACvB,kBAAI,SAASA,QAAO,KAAM,MAAM,IAAK;AAErC,kBAAK,UAAU,MAAO;AACrB,uBAAO,aAAa;AAAA,cACrB;AACA,kBAAK,CAAC,UAAW;AAChB,uBAAO;AAAA,cACR;AAEA,wBAAU;AAEV,kBAAK,aAAa,KAAM;AACvB,uBAAO,WAAW;AAAA,cACnB;AACA,kBAAK,aAAa,MAAO;AACxB,uBAAO,WAAW;AAAA,cACnB;AACA,kBAAK,aAAa,MAAO;AACxB,uBAAO,SAAS,OAAO,QAAS,KAAM,MAAM;AAAA,cAC7C;AACA,kBAAK,aAAa,MAAO;AACxB,uBAAO,SAAS,OAAO,QAAS,KAAM,IAAI;AAAA,cAC3C;AACA,kBAAK,aAAa,MAAO;AACxB,uBAAO,SAAS,OAAO,MAAO,CAAC,MAAM,MAAO,MAAM;AAAA,cACnD;AACA,kBAAK,aAAa,MAAO;AACxB,wBAAS,MAAM,OAAO,QAAS,aAAa,GAAI,IAAI,KAClD,QAAS,KAAM,IAAI;AAAA,cACtB;AACA,kBAAK,aAAa,MAAO;AACxB,uBAAO,WAAW,SAAS,OAAO,MAAO,GAAG,MAAM,SAAS,CAAE,MAAM,QAAQ;AAAA,cAC5E;AAEA,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,UAEA,OAAO,SAAU,MAAM,MAAM,WAAW,OAAO,MAAO;AACrD,gBAAI,SAAS,KAAK,MAAO,GAAG,CAAE,MAAM,OACnC,UAAU,KAAK,MAAO,EAAG,MAAM,QAC/B,SAAS,SAAS;AAEnB,mBAAO,UAAU,KAAK,SAAS;AAAA;AAAA,cAG9B,SAAU,MAAO;AAChB,uBAAO,CAAC,CAAC,KAAK;AAAA,cACf;AAAA,gBAEA,SAAU,MAAM,UAAU,KAAM;AAC/B,kBAAI,OAAO,YAAY,MAAM,WAAW,OACvCM,OAAM,WAAW,UAAU,gBAAgB,mBAC3CC,UAAS,KAAK,YACd,OAAO,UAAU,KAAK,SAAS,YAAY,GAC3C,WAAW,CAAC,OAAO,CAAC,QACpB,OAAO;AAER,kBAAKA,SAAS;AAGb,oBAAK,QAAS;AACb,yBAAQD,MAAM;AACb,2BAAO;AACP,2BAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,0BAAK,SACJ,SAAU,MAAM,IAAK,IACrB,KAAK,aAAa,GAAI;AAEtB,+BAAO;AAAA,sBACR;AAAA,oBACD;AAGA,4BAAQA,OAAM,SAAS,UAAU,CAAC,SAAS;AAAA,kBAC5C;AACA,yBAAO;AAAA,gBACR;AAEA,wBAAQ,CAAE,UAAUC,QAAO,aAAaA,QAAO,SAAU;AAGzD,oBAAK,WAAW,UAAW;AAG1B,+BAAaA,QAAQP,QAAO,OAAQ,MACjCO,QAAQP,QAAO,OAAQ,IAAI,CAAC;AAC/B,0BAAQ,WAAY,IAAK,KAAK,CAAC;AAC/B,8BAAY,MAAO,CAAE,MAAM,WAAW,MAAO,CAAE;AAC/C,yBAAO,aAAa,MAAO,CAAE;AAC7B,yBAAO,aAAaO,QAAO,WAAY,SAAU;AAEjD,yBAAU,OAAO,EAAE,aAAa,QAAQ,KAAMD,IAAI;AAAA,mBAG/C,OAAO,YAAY,MAAO,MAAM,IAAI,GAAM;AAG5C,wBAAK,KAAK,aAAa,KAAK,EAAE,QAAQ,SAAS,MAAO;AACrD,iCAAY,IAAK,IAAI,CAAE,SAAS,WAAW,IAAK;AAChD;AAAA,oBACD;AAAA,kBACD;AAAA,gBAED,OAAO;AAGN,sBAAK,UAAW;AACf,iCAAa,KAAMN,QAAO,OAAQ,MAC/B,KAAMA,QAAO,OAAQ,IAAI,CAAC;AAC7B,4BAAQ,WAAY,IAAK,KAAK,CAAC;AAC/B,gCAAY,MAAO,CAAE,MAAM,WAAW,MAAO,CAAE;AAC/C,2BAAO;AAAA,kBACR;AAIA,sBAAK,SAAS,OAAQ;AAGrB,2BAAU,OAAO,EAAE,aAAa,QAAQ,KAAMM,IAAI,MAC/C,OAAO,YAAY,MAAO,MAAM,IAAI,GAAM;AAE5C,2BAAO,SACN,SAAU,MAAM,IAAK,IACrB,KAAK,aAAa,MAClB,EAAE,MAAO;AAGT,4BAAK,UAAW;AACf,uCAAa,KAAMN,QAAO,OAAQ,MAC/B,KAAMA,QAAO,OAAQ,IAAI,CAAC;AAC7B,qCAAY,IAAK,IAAI,CAAE,SAAS,IAAK;AAAA,wBACtC;AAEA,4BAAK,SAAS,MAAO;AACpB;AAAA,wBACD;AAAA,sBACD;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AAGA,wBAAQ;AACR,uBAAO,SAAS,SAAW,OAAO,UAAU,KAAK,OAAO,SAAS;AAAA,cAClE;AAAA,YACD;AAAA,UACF;AAAA,UAEA,QAAQ,SAAU,QAAQ,UAAW;AAMpC,gBAAI,KAAKA,QAAO,KAAK,QAAS,MAAO,KACpCA,QAAO,KAAK,WAAY,OAAO,YAAY,CAAE,KAC7C,cAAe,yBAAyB,MAAO;AAKhD,gBAAK,GAAIA,QAAO,OAAQ,GAAI;AAC3B,qBAAO,GAAI,QAAS;AAAA,YACrB;AAEA,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,QAEA,SAAS;AAAA;AAAA,UAGR,KAAK,aAAc,SAAU,UAAW;AAKvC,gBAAI,QAAQ,CAAC,GACZ,UAAU,CAAC,GACX,UAAU,QAAS,SAAS,QAAS,UAAU,IAAK,CAAE;AAEvD,mBAAO,QAASA,QAAO,OAAQ,IAC9B,aAAc,SAAU,MAAME,UAAS,UAAU,KAAM;AACtD,kBAAI,MACH,YAAY,QAAS,MAAM,MAAM,KAAK,CAAC,CAAE,GACzCH,KAAI,KAAK;AAGV,qBAAQA,MAAM;AACb,oBAAO,OAAO,UAAWA,EAAE,GAAM;AAChC,uBAAMA,EAAE,IAAI,EAAGG,SAASH,EAAE,IAAI;AAAA,gBAC/B;AAAA,cACD;AAAA,YACD,CAAE,IACF,SAAU,MAAM,UAAU,KAAM;AAC/B,oBAAO,CAAE,IAAI;AACb,sBAAS,OAAO,MAAM,KAAK,OAAQ;AAInC,oBAAO,CAAE,IAAI;AACb,qBAAO,CAAC,QAAQ,IAAI;AAAA,YACrB;AAAA,UACF,CAAE;AAAA,UAEF,KAAK,aAAc,SAAU,UAAW;AACvC,mBAAO,SAAU,MAAO;AACvB,qBAAO,KAAM,UAAU,IAAK,EAAE,SAAS;AAAA,YACxC;AAAA,UACD,CAAE;AAAA,UAEF,UAAU,aAAc,SAAU,MAAO;AACxC,mBAAO,iBAAkB,IAAK;AAC9B,mBAAO,SAAU,MAAO;AACvB,sBAAS,KAAK,eAAeC,QAAO,KAAM,IAAK,GAAI,QAAS,IAAK,IAAI;AAAA,YACtE;AAAA,UACD,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASF,MAAM,aAAc,SAAU,MAAO;AAGpC,gBAAK,CAAC,YAAY,KAAM,QAAQ,EAAG,GAAI;AACtC,4BAAe,uBAAuB,IAAK;AAAA,YAC5C;AACA,mBAAO,iBAAkB,IAAK,EAAE,YAAY;AAC5C,mBAAO,SAAU,MAAO;AACvB,kBAAI;AACJ,iBAAG;AACF,oBAAO,WAAW,iBACjB,KAAK,OACL,KAAK,aAAc,UAAW,KAAK,KAAK,aAAc,MAAO,GAAM;AAEnE,6BAAW,SAAS,YAAY;AAChC,yBAAO,aAAa,QAAQ,SAAS,QAAS,OAAO,GAAI,MAAM;AAAA,gBAChE;AAAA,cACD,UAAY,OAAO,KAAK,eAAgB,KAAK,aAAa;AAC1D,qBAAO;AAAA,YACR;AAAA,UACD,CAAE;AAAA;AAAA,UAGF,QAAQ,SAAU,MAAO;AACxB,gBAAIQ,QAAOV,QAAO,YAAYA,QAAO,SAAS;AAC9C,mBAAOU,SAAQA,MAAK,MAAO,CAAE,MAAM,KAAK;AAAA,UACzC;AAAA,UAEA,MAAM,SAAU,MAAO;AACtB,mBAAO,SAAS;AAAA,UACjB;AAAA,UAEA,OAAO,SAAU,MAAO;AACvB,mBAAO,SAASH,UAAS,iBACxBA,UAAS,SAAS,KAClB,CAAC,EAAG,KAAK,QAAQ,KAAK,QAAQ,CAAC,KAAK;AAAA,UACtC;AAAA;AAAA,UAGA,SAAS,qBAAsB,KAAM;AAAA,UACrC,UAAU,qBAAsB,IAAK;AAAA,UAErC,SAAS,SAAU,MAAO;AAIzB,mBAAS,SAAU,MAAM,OAAQ,KAAK,CAAC,CAAC,KAAK,WAC1C,SAAU,MAAM,QAAS,KAAK,CAAC,CAAC,KAAK;AAAA,UACzC;AAAA,UAEA,UAAU,SAAU,MAAO;AAM1B,gBAAK,QAAQ,KAAK,YAAa;AAE9B,mBAAK,WAAW;AAAA,YACjB;AAEA,mBAAO,KAAK,aAAa;AAAA,UAC1B;AAAA;AAAA,UAGA,OAAO,SAAU,MAAO;AAMvB,iBAAM,OAAO,KAAK,YAAY,MAAM,OAAO,KAAK,aAAc;AAC7D,kBAAK,KAAK,WAAW,GAAI;AACxB,uBAAO;AAAA,cACR;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA,UAEA,QAAQ,SAAU,MAAO;AACxB,mBAAO,CAACL,QAAO,KAAK,QAAQ,MAAO,IAAK;AAAA,UACzC;AAAA;AAAA,UAGA,QAAQ,SAAU,MAAO;AACxB,mBAAO,QAAQ,KAAM,KAAK,QAAS;AAAA,UACpC;AAAA,UAEA,OAAO,SAAU,MAAO;AACvB,mBAAO,QAAQ,KAAM,KAAK,QAAS;AAAA,UACpC;AAAA,UAEA,QAAQ,SAAU,MAAO;AACxB,mBAAO,SAAU,MAAM,OAAQ,KAAK,KAAK,SAAS,YACjD,SAAU,MAAM,QAAS;AAAA,UAC3B;AAAA,UAEA,MAAM,SAAU,MAAO;AACtB,mBAAO,SAAU,MAAM,OAAQ,KAAK,KAAK,SAAS;AAAA,UACnD;AAAA;AAAA,UAGA,OAAO,uBAAwB,WAAW;AACzC,mBAAO,CAAE,CAAE;AAAA,UACZ,CAAE;AAAA,UAEF,MAAM,uBAAwB,SAAU,eAAe,QAAS;AAC/D,mBAAO,CAAE,SAAS,CAAE;AAAA,UACrB,CAAE;AAAA,UAEF,IAAI,uBAAwB,SAAU,eAAe,QAAQ,UAAW;AACvE,mBAAO,CAAE,WAAW,IAAI,WAAW,SAAS,QAAS;AAAA,UACtD,CAAE;AAAA,UAEF,MAAM,uBAAwB,SAAU,cAAc,QAAS;AAC9D,gBAAID,KAAI;AACR,mBAAQA,KAAI,QAAQA,MAAK,GAAI;AAC5B,2BAAa,KAAMA,EAAE;AAAA,YACtB;AACA,mBAAO;AAAA,UACR,CAAE;AAAA,UAEF,KAAK,uBAAwB,SAAU,cAAc,QAAS;AAC7D,gBAAIA,KAAI;AACR,mBAAQA,KAAI,QAAQA,MAAK,GAAI;AAC5B,2BAAa,KAAMA,EAAE;AAAA,YACtB;AACA,mBAAO;AAAA,UACR,CAAE;AAAA,UAEF,IAAI,uBAAwB,SAAU,cAAc,QAAQ,UAAW;AACtE,gBAAIA;AAEJ,gBAAK,WAAW,GAAI;AACnB,cAAAA,KAAI,WAAW;AAAA,YAChB,WAAY,WAAW,QAAS;AAC/B,cAAAA,KAAI;AAAA,YACL,OAAO;AACN,cAAAA,KAAI;AAAA,YACL;AAEA,mBAAQ,EAAEA,MAAK,KAAK;AACnB,2BAAa,KAAMA,EAAE;AAAA,YACtB;AACA,mBAAO;AAAA,UACR,CAAE;AAAA,UAEF,IAAI,uBAAwB,SAAU,cAAc,QAAQ,UAAW;AACtE,gBAAIA,KAAI,WAAW,IAAI,WAAW,SAAS;AAC3C,mBAAQ,EAAEA,KAAI,UAAU;AACvB,2BAAa,KAAMA,EAAE;AAAA,YACtB;AACA,mBAAO;AAAA,UACR,CAAE;AAAA,QACH;AAAA,MACD;AAEA,MAAAC,QAAO,KAAK,QAAQ,MAAMA,QAAO,KAAK,QAAQ;AAG9C,WAAM,KAAK,EAAE,OAAO,MAAM,UAAU,MAAM,MAAM,MAAM,UAAU,MAAM,OAAO,KAAK,GAAI;AACrF,QAAAA,QAAO,KAAK,QAAS,CAAE,IAAI,kBAAmB,CAAE;AAAA,MACjD;AACA,WAAM,KAAK,EAAE,QAAQ,MAAM,OAAO,KAAK,GAAI;AAC1C,QAAAA,QAAO,KAAK,QAAS,CAAE,IAAI,mBAAoB,CAAE;AAAA,MAClD;AAGA,eAAS,aAAa;AAAA,MAAC;AACvB,iBAAW,YAAYA,QAAO,KAAK;AACnC,MAAAA,QAAO,KAAK,aAAa,IAAI,WAAW;AAExC,eAAS,cAAe,SAAS,YAAY,MAAO;AACnD,YAAIM,OAAM,WAAW,KACpB,OAAO,WAAW,MAClB,MAAM,QAAQA,MACd,mBAAmB,QAAQ,QAAQ,cACnC,WAAW;AAEZ,eAAO,WAAW;AAAA;AAAA,UAGjB,SAAU,MAAM,SAAS,KAAM;AAC9B,mBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,kBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,uBAAO,QAAS,MAAM,SAAS,GAAI;AAAA,cACpC;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA;AAAA;AAAA,UAGA,SAAU,MAAM,SAAS,KAAM;AAC9B,gBAAI,UAAU,YACb,WAAW,CAAE,SAAS,QAAS;AAGhC,gBAAK,KAAM;AACV,qBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,oBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,sBAAK,QAAS,MAAM,SAAS,GAAI,GAAI;AACpC,2BAAO;AAAA,kBACR;AAAA,gBACD;AAAA,cACD;AAAA,YACD,OAAO;AACN,qBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,oBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,+BAAa,KAAMN,QAAO,OAAQ,MAAO,KAAMA,QAAO,OAAQ,IAAI,CAAC;AAEnE,sBAAK,QAAQ,SAAU,MAAM,IAAK,GAAI;AACrC,2BAAO,KAAMM,IAAI,KAAK;AAAA,kBACvB,YAAc,WAAW,WAAY,GAAI,MACxC,SAAU,CAAE,MAAM,WAAW,SAAU,CAAE,MAAM,UAAW;AAG1D,2BAAS,SAAU,CAAE,IAAI,SAAU,CAAE;AAAA,kBACtC,OAAO;AAGN,+BAAY,GAAI,IAAI;AAGpB,wBAAO,SAAU,CAAE,IAAI,QAAS,MAAM,SAAS,GAAI,GAAM;AACxD,6BAAO;AAAA,oBACR;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA;AAAA,MACF;AAEA,eAAS,eAAgB,UAAW;AACnC,eAAO,SAAS,SAAS,IACxB,SAAU,MAAM,SAAS,KAAM;AAC9B,cAAIP,KAAI,SAAS;AACjB,iBAAQA,MAAM;AACb,gBAAK,CAAC,SAAUA,EAAE,EAAG,MAAM,SAAS,GAAI,GAAI;AAC3C,qBAAO;AAAA,YACR;AAAA,UACD;AACA,iBAAO;AAAA,QACR,IACA,SAAU,CAAE;AAAA,MACd;AAEA,eAAS,iBAAkB,UAAU,UAAU,SAAU;AACxD,YAAIA,KAAI,GACP,MAAM,SAAS;AAChB,eAAQA,KAAI,KAAKA,MAAM;AACtB,eAAM,UAAU,SAAUA,EAAE,GAAG,OAAQ;AAAA,QACxC;AACA,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,WAAW,KAAK,QAAQ,SAAS,KAAM;AACzD,YAAI,MACH,eAAe,CAAC,GAChBA,KAAI,GACJ,MAAM,UAAU,QAChB,SAAS,OAAO;AAEjB,eAAQA,KAAI,KAAKA,MAAM;AACtB,cAAO,OAAO,UAAWA,EAAE,GAAM;AAChC,gBAAK,CAAC,UAAU,OAAQ,MAAM,SAAS,GAAI,GAAI;AAC9C,2BAAa,KAAM,IAAK;AACxB,kBAAK,QAAS;AACb,oBAAI,KAAMA,EAAE;AAAA,cACb;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,WAAYU,YAAW,UAAU,SAAS,YAAY,YAAY,cAAe;AACzF,YAAK,cAAc,CAAC,WAAYT,QAAO,OAAQ,GAAI;AAClD,uBAAa,WAAY,UAAW;AAAA,QACrC;AACA,YAAK,cAAc,CAAC,WAAYA,QAAO,OAAQ,GAAI;AAClD,uBAAa,WAAY,YAAY,YAAa;AAAA,QACnD;AACA,eAAO,aAAc,SAAU,MAAM,SAAS,SAAS,KAAM;AAC5D,cAAI,MAAMD,IAAG,MAAM,YAClB,SAAS,CAAC,GACV,UAAU,CAAC,GACX,cAAc,QAAQ,QAGtB,QAAQ,QACP;AAAA,YAAkB,YAAY;AAAA,YAC7B,QAAQ,WAAW,CAAE,OAAQ,IAAI;AAAA,YAAS,CAAC;AAAA,UAAE,GAG/C,YAAYU,eAAe,QAAQ,CAAC,YACnC,SAAU,OAAO,QAAQA,YAAW,SAAS,GAAI,IACjD;AAEF,cAAK,SAAU;AAId,yBAAa,eAAgB,OAAOA,aAAY,eAAe;AAAA;AAAA,cAG9D,CAAC;AAAA;AAAA;AAAA,cAGD;AAAA;AAGD,oBAAS,WAAW,YAAY,SAAS,GAAI;AAAA,UAC9C,OAAO;AACN,yBAAa;AAAA,UACd;AAGA,cAAK,YAAa;AACjB,mBAAO,SAAU,YAAY,OAAQ;AACrC,uBAAY,MAAM,CAAC,GAAG,SAAS,GAAI;AAGnC,YAAAV,KAAI,KAAK;AACT,mBAAQA,MAAM;AACb,kBAAO,OAAO,KAAMA,EAAE,GAAM;AAC3B,2BAAY,QAASA,EAAE,CAAE,IAAI,EAAG,UAAW,QAASA,EAAE,CAAE,IAAI;AAAA,cAC7D;AAAA,YACD;AAAA,UACD;AAEA,cAAK,MAAO;AACX,gBAAK,cAAcU,YAAY;AAC9B,kBAAK,YAAa;AAGjB,uBAAO,CAAC;AACR,gBAAAV,KAAI,WAAW;AACf,uBAAQA,MAAM;AACb,sBAAO,OAAO,WAAYA,EAAE,GAAM;AAGjC,yBAAK,KAAQ,UAAWA,EAAE,IAAI,IAAO;AAAA,kBACtC;AAAA,gBACD;AACA,2BAAY,MAAQ,aAAa,CAAC,GAAK,MAAM,GAAI;AAAA,cAClD;AAGA,cAAAA,KAAI,WAAW;AACf,qBAAQA,MAAM;AACb,qBAAO,OAAO,WAAYA,EAAE,OACzB,OAAO,aAAa,QAAQ,KAAM,MAAM,IAAK,IAAI,OAAQA,EAAE,KAAM,IAAK;AAExE,uBAAM,IAAK,IAAI,EAAG,QAAS,IAAK,IAAI;AAAA,gBACrC;AAAA,cACD;AAAA,YACD;AAAA,UAGD,OAAO;AACN,yBAAa;AAAA,cACZ,eAAe,UACd,WAAW,OAAQ,aAAa,WAAW,MAAO,IAClD;AAAA,YACF;AACA,gBAAK,YAAa;AACjB,yBAAY,MAAM,SAAS,YAAY,GAAI;AAAA,YAC5C,OAAO;AACN,mBAAK,MAAO,SAAS,UAAW;AAAA,YACjC;AAAA,UACD;AAAA,QACD,CAAE;AAAA,MACH;AAEA,eAAS,kBAAmB,QAAS;AACpC,YAAI,cAAc,SAAS,GAC1B,MAAM,OAAO,QACb,kBAAkBC,QAAO,KAAK,SAAU,OAAQ,CAAE,EAAE,IAAK,GACzD,mBAAmB,mBAAmBA,QAAO,KAAK,SAAU,GAAI,GAChED,KAAI,kBAAkB,IAAI,GAG1B,eAAe,cAAe,SAAU,MAAO;AAC9C,iBAAO,SAAS;AAAA,QACjB,GAAG,kBAAkB,IAAK,GAC1B,kBAAkB,cAAe,SAAU,MAAO;AACjD,iBAAO,QAAQ,KAAM,cAAc,IAAK,IAAI;AAAA,QAC7C,GAAG,kBAAkB,IAAK,GAC1B,WAAW,CAAE,SAAU,MAAM,SAAS,KAAM;AAM3C,cAAI,MAAQ,CAAC,oBAAqB,OAAO,WAAW,uBACjD,eAAe,SAAU,WAC1B,aAAc,MAAM,SAAS,GAAI,IACjC,gBAAiB,MAAM,SAAS,GAAI;AAItC,yBAAe;AACf,iBAAO;AAAA,QACR,CAAE;AAEH,eAAQA,KAAI,KAAKA,MAAM;AACtB,cAAO,UAAUC,QAAO,KAAK,SAAU,OAAQD,EAAE,EAAE,IAAK,GAAM;AAC7D,uBAAW,CAAE,cAAe,eAAgB,QAAS,GAAG,OAAQ,CAAE;AAAA,UACnE,OAAO;AACN,sBAAUC,QAAO,KAAK,OAAQ,OAAQD,EAAE,EAAE,IAAK,EAAE,MAAO,MAAM,OAAQA,EAAE,EAAE,OAAQ;AAGlF,gBAAK,QAASC,QAAO,OAAQ,GAAI;AAGhC,kBAAI,EAAED;AACN,qBAAQ,IAAI,KAAK,KAAM;AACtB,oBAAKC,QAAO,KAAK,SAAU,OAAQ,CAAE,EAAE,IAAK,GAAI;AAC/C;AAAA,gBACD;AAAA,cACD;AACA,qBAAO;AAAA,gBACND,KAAI,KAAK,eAAgB,QAAS;AAAA,gBAClCA,KAAI,KAAK;AAAA;AAAA,kBAGR,OAAO,MAAO,GAAGA,KAAI,CAAE,EACrB,OAAQ,EAAE,OAAO,OAAQA,KAAI,CAAE,EAAE,SAAS,MAAM,MAAM,GAAG,CAAE;AAAA,gBAC9D,EAAE,QAAS,UAAU,IAAK;AAAA,gBAC1B;AAAA,gBACAA,KAAI,KAAK,kBAAmB,OAAO,MAAOA,IAAG,CAAE,CAAE;AAAA,gBACjD,IAAI,OAAO,kBAAqB,SAAS,OAAO,MAAO,CAAE,CAAI;AAAA,gBAC7D,IAAI,OAAO,WAAY,MAAO;AAAA,cAC/B;AAAA,YACD;AACA,qBAAS,KAAM,OAAQ;AAAA,UACxB;AAAA,QACD;AAEA,eAAO,eAAgB,QAAS;AAAA,MACjC;AAEA,eAAS,yBAA0B,iBAAiB,aAAc;AACjE,YAAI,QAAQ,YAAY,SAAS,GAChC,YAAY,gBAAgB,SAAS,GACrC,eAAe,SAAU,MAAM,SAAS,KAAK,SAAS,WAAY;AACjE,cAAI,MAAM,GAAG,SACZ,eAAe,GACfA,KAAI,KACJ,YAAY,QAAQ,CAAC,GACrB,aAAa,CAAC,GACd,gBAAgB,kBAGhB,QAAQ,QAAQ,aAAaC,QAAO,KAAK,KAAK,IAAK,KAAK,SAAU,GAGlE,gBAAkB,WAAW,iBAAiB,OAAO,IAAI,KAAK,OAAO,KAAK;AAE3E,cAAK,WAAY;AAMhB,+BAAmB,WAAWK,aAAY,WAAW;AAAA,UACtD;AAGA,kBAAU,OAAO,MAAON,EAAE,MAAO,MAAMA,MAAM;AAC5C,gBAAK,aAAa,MAAO;AACxB,kBAAI;AAMJ,kBAAK,CAAC,WAAW,KAAK,iBAAiBM,WAAW;AACjD,4BAAa,IAAK;AAClB,sBAAM,CAAC;AAAA,cACR;AACA,qBAAU,UAAU,gBAAiB,GAAI,GAAM;AAC9C,oBAAK,QAAS,MAAM,WAAWA,WAAU,GAAI,GAAI;AAChD,uBAAK,KAAM,SAAS,IAAK;AACzB;AAAA,gBACD;AAAA,cACD;AACA,kBAAK,WAAY;AAChB,0BAAU;AAAA,cACX;AAAA,YACD;AAGA,gBAAK,OAAQ;AAGZ,kBAAO,OAAO,CAAC,WAAW,MAAS;AAClC;AAAA,cACD;AAGA,kBAAK,MAAO;AACX,0BAAU,KAAM,IAAK;AAAA,cACtB;AAAA,YACD;AAAA,UACD;AAIA,0BAAgBN;AAShB,cAAK,SAASA,OAAM,cAAe;AAClC,gBAAI;AACJ,mBAAU,UAAU,YAAa,GAAI,GAAM;AAC1C,sBAAS,WAAW,YAAY,SAAS,GAAI;AAAA,YAC9C;AAEA,gBAAK,MAAO;AAGX,kBAAK,eAAe,GAAI;AACvB,uBAAQA,MAAM;AACb,sBAAK,EAAG,UAAWA,EAAE,KAAK,WAAYA,EAAE,IAAM;AAC7C,+BAAYA,EAAE,IAAI,IAAI,KAAM,OAAQ;AAAA,kBACrC;AAAA,gBACD;AAAA,cACD;AAGA,2BAAa,SAAU,UAAW;AAAA,YACnC;AAGA,iBAAK,MAAO,SAAS,UAAW;AAGhC,gBAAK,aAAa,CAAC,QAAQ,WAAW,SAAS,KAC5C,eAAe,YAAY,SAAW,GAAI;AAE5C,cAAAC,QAAO,WAAY,OAAQ;AAAA,YAC5B;AAAA,UACD;AAGA,cAAK,WAAY;AAChB,sBAAU;AACV,+BAAmB;AAAA,UACpB;AAEA,iBAAO;AAAA,QACR;AAED,eAAO,QACN,aAAc,YAAa,IAC3B;AAAA,MACF;AAEA,eAAS,QAAS,UAAU,OAAgC;AAC3D,YAAID,IACH,cAAc,CAAC,GACf,kBAAkB,CAAC,GACnB,SAAS,cAAe,WAAW,GAAI;AAExC,YAAK,CAAC,QAAS;AAGd,cAAK,CAAC,OAAQ;AACb,oBAAQ,SAAU,QAAS;AAAA,UAC5B;AACA,UAAAA,KAAI,MAAM;AACV,iBAAQA,MAAM;AACb,qBAAS,kBAAmB,MAAOA,EAAE,CAAE;AACvC,gBAAK,OAAQC,QAAO,OAAQ,GAAI;AAC/B,0BAAY,KAAM,MAAO;AAAA,YAC1B,OAAO;AACN,8BAAgB,KAAM,MAAO;AAAA,YAC9B;AAAA,UACD;AAGA,mBAAS;AAAA,YAAe;AAAA,YACvB,yBAA0B,iBAAiB,WAAY;AAAA,UAAE;AAG1D,iBAAO,WAAW;AAAA,QACnB;AACA,eAAO;AAAA,MACR;AAWA,eAAS,OAAQ,UAAU,SAAS,SAAS,MAAO;AACnD,YAAID,IAAG,QAAQW,QAAO,MAAMC,OAC3B,WAAW,OAAO,aAAa,cAAc,UAC7C,QAAQ,CAAC,QAAQ,SAAY,WAAW,SAAS,YAAY,QAAW;AAEzE,kBAAU,WAAW,CAAC;AAItB,YAAK,MAAM,WAAW,GAAI;AAGzB,mBAAS,MAAO,CAAE,IAAI,MAAO,CAAE,EAAE,MAAO,CAAE;AAC1C,cAAK,OAAO,SAAS,MAAOD,SAAQ,OAAQ,CAAE,GAAI,SAAS,QACzD,QAAQ,aAAa,KAAK,kBAC1BV,QAAO,KAAK,SAAU,OAAQ,CAAE,EAAE,IAAK,GAAI;AAE5C,uBAAYA,QAAO,KAAK,KAAK;AAAA,cAC5B,iBAAkBU,OAAM,QAAS,CAAE,CAAE;AAAA,cACrC;AAAA,YACD,KAAK,CAAC,GAAK,CAAE;AACb,gBAAK,CAAC,SAAU;AACf,qBAAO;AAAA,YAGR,WAAY,UAAW;AACtB,wBAAU,QAAQ;AAAA,YACnB;AAEA,uBAAW,SAAS,MAAO,OAAO,MAAM,EAAE,MAAM,MAAO;AAAA,UACxD;AAGA,UAAAX,KAAI,UAAU,aAAa,KAAM,QAAS,IAAI,IAAI,OAAO;AACzD,iBAAQA,MAAM;AACb,YAAAW,SAAQ,OAAQX,EAAE;AAGlB,gBAAKC,QAAO,KAAK,SAAY,OAAOU,OAAM,IAAO,GAAI;AACpD;AAAA,YACD;AACA,gBAAOC,QAAOX,QAAO,KAAK,KAAM,IAAK,GAAM;AAG1C,kBAAO,OAAOW;AAAA,gBACb,iBAAkBD,OAAM,QAAS,CAAE,CAAE;AAAA,gBACrC,SAAS,KAAM,OAAQ,CAAE,EAAE,IAAK,KAC/B,YAAa,QAAQ,UAAW,KAAK;AAAA,cACvC,GAAM;AAGL,uBAAO,OAAQX,IAAG,CAAE;AACpB,2BAAW,KAAK,UAAU,WAAY,MAAO;AAC7C,oBAAK,CAAC,UAAW;AAChB,uBAAK,MAAO,SAAS,IAAK;AAC1B,yBAAO;AAAA,gBACR;AAEA;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAIA,SAAE,YAAY,QAAS,UAAU,KAAM;AAAA,UACtC;AAAA,UACA;AAAA,UACA,CAAC;AAAA,UACD;AAAA,UACA,CAAC,WAAW,SAAS,KAAM,QAAS,KAAK,YAAa,QAAQ,UAAW,KAAK;AAAA,QAC/E;AACA,eAAO;AAAA,MACR;AAGA,kBAAY;AAEZ,MAAAC,QAAO,OAAO;AAId,WAAK,UAAU;AACf,WAAK,SAAS;AACd,WAAK,cAAc;AACnB,WAAK,WAAW;AAEhB,eAAS,IAAK,MAAMM,MAAK,OAAQ;AAChC,YAAI,UAAU,CAAC,GACd,WAAW,UAAU;AAEtB,gBAAU,OAAO,KAAMA,IAAI,MAAO,KAAK,aAAa,GAAI;AACvD,cAAK,KAAK,aAAa,GAAI;AAC1B,gBAAK,YAAYN,QAAQ,IAAK,EAAE,GAAI,KAAM,GAAI;AAC7C;AAAA,YACD;AACA,oBAAQ,KAAM,IAAK;AAAA,UACpB;AAAA,QACD;AACA,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,GAAG,MAAO;AAC5B,YAAI,UAAU,CAAC;AAEf,eAAQ,GAAG,IAAI,EAAE,aAAc;AAC9B,cAAK,EAAE,aAAa,KAAK,MAAM,MAAO;AACrC,oBAAQ,KAAM,CAAE;AAAA,UACjB;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,UAAI,gBAAgBA,QAAO,KAAK,MAAM;AAItC,UAAI,aAAa;AAEjB,eAAS,cAAe,OAAQ;AAC/B,eAAO,MAAO,CAAE,MAAM,OACrB,MAAO,MAAM,SAAS,CAAE,MAAM,OAC9B,MAAM,UAAU;AAAA,MAClB;AAGA,eAAS,OAAQ,UAAU,WAAW,KAAM;AAC3C,YAAK,OAAO,cAAc,YAAa;AACtC,iBAAOA,QAAO,KAAM,UAAU,SAAU,MAAMD,IAAI;AACjD,mBAAO,CAAC,CAAC,UAAU,KAAM,MAAMA,IAAG,IAAK,MAAM;AAAA,UAC9C,CAAE;AAAA,QACH;AAGA,YAAK,UAAU,UAAW;AACzB,iBAAOC,QAAO,KAAM,UAAU,SAAU,MAAO;AAC9C,mBAAS,SAAS,cAAgB;AAAA,UACnC,CAAE;AAAA,QACH;AAGA,YAAK,OAAO,cAAc,UAAW;AACpC,iBAAOA,QAAO,KAAM,UAAU,SAAU,MAAO;AAC9C,mBAAS,QAAQ,KAAM,WAAW,IAAK,IAAI,OAAS;AAAA,UACrD,CAAE;AAAA,QACH;AAGA,eAAOA,QAAO,OAAQ,WAAW,UAAU,GAAI;AAAA,MAChD;AAEA,MAAAA,QAAO,SAAS,SAAU,MAAM,OAAO,KAAM;AAC5C,YAAI,OAAO,MAAO,CAAE;AAEpB,YAAK,KAAM;AACV,iBAAO,UAAU,OAAO;AAAA,QACzB;AAEA,YAAK,MAAM,WAAW,KAAK,KAAK,aAAa,GAAI;AAChD,iBAAOA,QAAO,KAAK,gBAAiB,MAAM,IAAK,IAAI,CAAE,IAAK,IAAI,CAAC;AAAA,QAChE;AAEA,eAAOA,QAAO,KAAK,QAAS,MAAMA,QAAO,KAAM,OAAO,SAAUY,OAAO;AACtE,iBAAOA,MAAK,aAAa;AAAA,QAC1B,CAAE,CAAE;AAAA,MACL;AAEA,MAAAZ,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,UAAW;AAC1B,cAAID,IAAG,KACN,MAAM,KAAK,QACXc,QAAO;AAER,cAAK,OAAO,aAAa,UAAW;AACnC,mBAAO,KAAK,UAAWb,QAAQ,QAAS,EAAE,OAAQ,WAAW;AAC5D,mBAAMD,KAAI,GAAGA,KAAI,KAAKA,MAAM;AAC3B,oBAAKC,QAAO,SAAUa,MAAMd,EAAE,GAAG,IAAK,GAAI;AACzC,yBAAO;AAAA,gBACR;AAAA,cACD;AAAA,YACD,CAAE,CAAE;AAAA,UACL;AAEA,gBAAM,KAAK,UAAW,CAAC,CAAE;AAEzB,eAAMA,KAAI,GAAGA,KAAI,KAAKA,MAAM;AAC3B,YAAAC,QAAO,KAAM,UAAUa,MAAMd,EAAE,GAAG,GAAI;AAAA,UACvC;AAEA,iBAAO,MAAM,IAAIC,QAAO,WAAY,GAAI,IAAI;AAAA,QAC7C;AAAA,QACA,QAAQ,SAAU,UAAW;AAC5B,iBAAO,KAAK,UAAW,OAAQ,MAAM,YAAY,CAAC,GAAG,KAAM,CAAE;AAAA,QAC9D;AAAA,QACA,KAAK,SAAU,UAAW;AACzB,iBAAO,KAAK,UAAW,OAAQ,MAAM,YAAY,CAAC,GAAG,IAAK,CAAE;AAAA,QAC7D;AAAA,QACA,IAAI,SAAU,UAAW;AACxB,iBAAO,CAAC,CAAC;AAAA,YACR;AAAA;AAAA;AAAA,YAIA,OAAO,aAAa,YAAY,cAAc,KAAM,QAAS,IAC5DA,QAAQ,QAAS,IACjB,YAAY,CAAC;AAAA,YACd;AAAA,UACD,EAAE;AAAA,QACH;AAAA,MACD,CAAE;AAKF,UAAI,YAMH,aAAa,uCAEb,OAAOA,QAAO,GAAG,OAAO,SAAU,UAAU,SAAU;AACrD,YAAI,OAAO;AAGX,YAAK,CAAC,UAAW;AAChB,iBAAO;AAAA,QACR;AAGA,YAAK,SAAS,UAAW;AACxB,eAAM,CAAE,IAAI;AACZ,eAAK,SAAS;AACd,iBAAO;AAAA,QAIR,WAAY,OAAO,aAAa,YAAa;AAC5C,iBAAO,WAAW,UAAU,SAC3B,WAAW,MAAO,QAAS;AAAA;AAAA,YAG3B,SAAUA,OAAO;AAAA;AAAA,QAEnB,OAAO;AAGN,kBAAQ,WAAW;AACnB,cAAK,cAAe,KAAM,GAAI;AAK7B,oBAAQ,CAAE,MAAM,UAAU,IAAK;AAAA,UAGhC,WAAY,OAAO,aAAa,UAAW;AAC1C,oBAAQ,WAAW,KAAM,QAAS;AAAA,UACnC,OAAO;AACN,mBAAOA,QAAO,UAAW,UAAU,IAAK;AAAA,UACzC;AAIA,cAAK,UAAW,MAAO,CAAE,KAAK,CAAC,UAAY;AAG1C,gBAAK,MAAO,CAAE,GAAI;AACjB,wBAAU,mBAAmBA,UAAS,QAAS,CAAE,IAAI;AAIrD,cAAAA,QAAO,MAAO,MAAMA,QAAO;AAAA,gBAC1B,MAAO,CAAE;AAAA,gBACT,WAAW,QAAQ,WAAW,QAAQ,iBAAiB,UAAU;AAAA,gBACjE;AAAA,cACD,CAAE;AAGF,kBAAK,WAAW,KAAM,MAAO,CAAE,CAAE,KAAKA,QAAO,cAAe,OAAQ,GAAI;AACvE,qBAAM,SAAS,SAAU;AAGxB,sBAAK,OAAO,KAAM,KAAM,MAAM,YAAa;AAC1C,yBAAM,KAAM,EAAG,QAAS,KAAM,CAAE;AAAA,kBAGjC,OAAO;AACN,yBAAK,KAAM,OAAO,QAAS,KAAM,CAAE;AAAA,kBACpC;AAAA,gBACD;AAAA,cACD;AAEA,qBAAO;AAAA,YAGR,OAAO;AACN,qBAAO,WAAW,eAAgB,MAAO,CAAE,CAAE;AAE7C,kBAAK,MAAO;AAGX,qBAAM,CAAE,IAAI;AACZ,qBAAK,SAAS;AAAA,cACf;AACA,qBAAO;AAAA,YACR;AAAA,UAGD,WAAY,CAAC,WAAW,QAAQ,QAAS;AACxC,oBAAS,WAAW,YAAa,KAAM,QAAS;AAAA,UAIjD,OAAO;AACN,mBAAO,KAAK,YAAa,OAAQ,EAAE,KAAM,QAAS;AAAA,UACnD;AAAA,QACD;AAAA,MAED;AAGD,WAAK,YAAYA,QAAO;AAGxB,mBAAaA,QAAQ,UAAW;AAEhC,UAAI,eAAe,kCAGlB,mBAAmB;AAAA,QAClB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,MAAM;AAAA,QACN,MAAM;AAAA,MACP;AAED,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,KAAK,SAAU,QAAS;AACvB,cAAI,UAAUA,QAAQ,QAAQ,IAAK,GAClC,IAAI,QAAQ;AAEb,iBAAO,KAAK,OAAQ,WAAW;AAC9B,gBAAID,KAAI;AACR,mBAAQA,KAAI,GAAGA,MAAM;AACpB,kBAAKC,QAAO,SAAU,MAAM,QAASD,EAAE,CAAE,GAAI;AAC5C,uBAAO;AAAA,cACR;AAAA,YACD;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,SAAS,SAAU,WAAW,SAAU;AACvC,cAAI,KACHA,KAAI,GACJ,IAAI,KAAK,QACT,UAAU,CAAC,GACX,UAAU,OAAO,cAAc,YAAYC,QAAQ,SAAU;AAG9D,cAAK,CAAC,cAAc,KAAM,SAAU,GAAI;AACvC,mBAAQD,KAAI,GAAGA,MAAM;AACpB,mBAAM,MAAM,KAAMA,EAAE,GAAG,OAAO,QAAQ,SAAS,MAAM,IAAI,YAAa;AAGrE,oBAAK,IAAI,WAAW,OAAQ,UAC3B,QAAQ,MAAO,GAAI,IAAI;AAAA;AAAA,kBAGvB,IAAI,aAAa,KAChBC,QAAO,KAAK,gBAAiB,KAAK,SAAU;AAAA,oBAAM;AAEnD,0BAAQ,KAAM,GAAI;AAClB;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAO,KAAK,UAAW,QAAQ,SAAS,IAAIA,QAAO,WAAY,OAAQ,IAAI,OAAQ;AAAA,QACpF;AAAA;AAAA,QAGA,OAAO,SAAU,MAAO;AAGvB,cAAK,CAAC,MAAO;AACZ,mBAAS,KAAM,CAAE,KAAK,KAAM,CAAE,EAAE,aAAe,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS;AAAA,UAChF;AAGA,cAAK,OAAO,SAAS,UAAW;AAC/B,mBAAO,QAAQ,KAAMA,QAAQ,IAAK,GAAG,KAAM,CAAE,CAAE;AAAA,UAChD;AAGA,iBAAO,QAAQ;AAAA,YAAM;AAAA;AAAA,YAGpB,KAAK,SAAS,KAAM,CAAE,IAAI;AAAA,UAC3B;AAAA,QACD;AAAA,QAEA,KAAK,SAAU,UAAU,SAAU;AAClC,iBAAO,KAAK;AAAA,YACXA,QAAO;AAAA,cACNA,QAAO,MAAO,KAAK,IAAI,GAAGA,QAAQ,UAAU,OAAQ,CAAE;AAAA,YACvD;AAAA,UACD;AAAA,QACD;AAAA,QAEA,SAAS,SAAU,UAAW;AAC7B,iBAAO,KAAK;AAAA,YAAK,YAAY,OAC5B,KAAK,aAAa,KAAK,WAAW,OAAQ,QAAS;AAAA,UACpD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,eAAS,QAAS,KAAKM,MAAM;AAC5B,gBAAU,MAAM,IAAKA,IAAI,MAAO,IAAI,aAAa,GAAI;AAAA,QAAC;AACtD,eAAO;AAAA,MACR;AAEA,MAAAN,QAAO,KAAM;AAAA,QACZ,QAAQ,SAAU,MAAO;AACxB,cAAIO,UAAS,KAAK;AAClB,iBAAOA,WAAUA,QAAO,aAAa,KAAKA,UAAS;AAAA,QACpD;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,IAAK,MAAM,YAAa;AAAA,QAChC;AAAA,QACA,cAAc,SAAU,MAAM,IAAI,OAAQ;AACzC,iBAAO,IAAK,MAAM,cAAc,KAAM;AAAA,QACvC;AAAA,QACA,MAAM,SAAU,MAAO;AACtB,iBAAO,QAAS,MAAM,aAAc;AAAA,QACrC;AAAA,QACA,MAAM,SAAU,MAAO;AACtB,iBAAO,QAAS,MAAM,iBAAkB;AAAA,QACzC;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,IAAK,MAAM,aAAc;AAAA,QACjC;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,IAAK,MAAM,iBAAkB;AAAA,QACrC;AAAA,QACA,WAAW,SAAU,MAAM,IAAI,OAAQ;AACtC,iBAAO,IAAK,MAAM,eAAe,KAAM;AAAA,QACxC;AAAA,QACA,WAAW,SAAU,MAAM,IAAI,OAAQ;AACtC,iBAAO,IAAK,MAAM,mBAAmB,KAAM;AAAA,QAC5C;AAAA,QACA,UAAU,SAAU,MAAO;AAC1B,iBAAO,UAAY,KAAK,cAAc,CAAC,GAAI,YAAY,IAAK;AAAA,QAC7D;AAAA,QACA,UAAU,SAAU,MAAO;AAC1B,iBAAO,SAAU,KAAK,UAAW;AAAA,QAClC;AAAA,QACA,UAAU,SAAU,MAAO;AAC1B,cAAK,KAAK,mBAAmB;AAAA;AAAA;AAAA,UAK5B,SAAU,KAAK,eAAgB,GAAI;AAEnC,mBAAO,KAAK;AAAA,UACb;AAKA,cAAK,SAAU,MAAM,UAAW,GAAI;AACnC,mBAAO,KAAK,WAAW;AAAA,UACxB;AAEA,iBAAOP,QAAO,MAAO,CAAC,GAAG,KAAK,UAAW;AAAA,QAC1C;AAAA,MACD,GAAG,SAAU,MAAM,IAAK;AACvB,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,OAAO,UAAW;AAC/C,cAAI,UAAUA,QAAO,IAAK,MAAM,IAAI,KAAM;AAE1C,cAAK,KAAK,MAAO,EAAG,MAAM,SAAU;AACnC,uBAAW;AAAA,UACZ;AAEA,cAAK,YAAY,OAAO,aAAa,UAAW;AAC/C,sBAAUA,QAAO,OAAQ,UAAU,OAAQ;AAAA,UAC5C;AAEA,cAAK,KAAK,SAAS,GAAI;AAGtB,gBAAK,CAAC,iBAAkB,IAAK,GAAI;AAChC,cAAAA,QAAO,WAAY,OAAQ;AAAA,YAC5B;AAGA,gBAAK,aAAa,KAAM,IAAK,GAAI;AAChC,sBAAQ,QAAQ;AAAA,YACjB;AAAA,UACD;AAEA,iBAAO,KAAK,UAAW,OAAQ;AAAA,QAChC;AAAA,MACD,CAAE;AAGF,eAAS,cAAe,SAAU;AACjC,YAAI,SAAS,CAAC;AACd,QAAAA,QAAO,KAAM,QAAQ,MAAO,aAAc,KAAK,CAAC,GAAG,SAAU,GAAG,MAAO;AACtE,iBAAQ,IAAK,IAAI;AAAA,QAClB,CAAE;AACF,eAAO;AAAA,MACR;AAwBA,MAAAA,QAAO,YAAY,SAAU,SAAU;AAItC,kBAAU,OAAO,YAAY,WAC5B,cAAe,OAAQ,IACvBA,QAAO,OAAQ,CAAC,GAAG,OAAQ;AAE5B,YACC,QAGA,QAGA,OAGA,QAGA,OAAO,CAAC,GAGR,QAAQ,CAAC,GAGT,cAAc,IAGd,OAAO,WAAW;AAGjB,mBAAS,UAAU,QAAQ;AAI3B,kBAAQ,SAAS;AACjB,iBAAQ,MAAM,QAAQ,cAAc,IAAK;AACxC,qBAAS,MAAM,MAAM;AACrB,mBAAQ,EAAE,cAAc,KAAK,QAAS;AAGrC,kBAAK,KAAM,WAAY,EAAE,MAAO,OAAQ,CAAE,GAAG,OAAQ,CAAE,CAAE,MAAM,SAC9D,QAAQ,aAAc;AAGtB,8BAAc,KAAK;AACnB,yBAAS;AAAA,cACV;AAAA,YACD;AAAA,UACD;AAGA,cAAK,CAAC,QAAQ,QAAS;AACtB,qBAAS;AAAA,UACV;AAEA,mBAAS;AAGT,cAAK,QAAS;AAGb,gBAAK,QAAS;AACb,qBAAO,CAAC;AAAA,YAGT,OAAO;AACN,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD,GAGAa,QAAO;AAAA;AAAA,UAGN,KAAK,WAAW;AACf,gBAAK,MAAO;AAGX,kBAAK,UAAU,CAAC,QAAS;AACxB,8BAAc,KAAK,SAAS;AAC5B,sBAAM,KAAM,MAAO;AAAA,cACpB;AAEA,eAAE,SAASC,KAAK,MAAO;AACtB,gBAAAd,QAAO,KAAM,MAAM,SAAU,GAAG,KAAM;AACrC,sBAAK,OAAO,QAAQ,YAAa;AAChC,wBAAK,CAAC,QAAQ,UAAU,CAACa,MAAK,IAAK,GAAI,GAAI;AAC1C,2BAAK,KAAM,GAAI;AAAA,oBAChB;AAAA,kBACD,WAAY,OAAO,IAAI,UAAU,OAAQ,GAAI,MAAM,UAAW;AAG7D,oBAAAC,KAAK,GAAI;AAAA,kBACV;AAAA,gBACD,CAAE;AAAA,cACH,GAAK,SAAU;AAEf,kBAAK,UAAU,CAAC,QAAS;AACxB,qBAAK;AAAA,cACN;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA;AAAA,UAGA,QAAQ,WAAW;AAClB,YAAAd,QAAO,KAAM,WAAW,SAAU,GAAG,KAAM;AAC1C,kBAAI;AACJ,sBAAU,QAAQA,QAAO,QAAS,KAAK,MAAM,KAAM,KAAM,IAAK;AAC7D,qBAAK,OAAQ,OAAO,CAAE;AAGtB,oBAAK,SAAS,aAAc;AAC3B;AAAA,gBACD;AAAA,cACD;AAAA,YACD,CAAE;AACF,mBAAO;AAAA,UACR;AAAA;AAAA;AAAA,UAIA,KAAK,SAAU,IAAK;AACnB,mBAAO,KACNA,QAAO,QAAS,IAAI,IAAK,IAAI,KAC7B,KAAK,SAAS;AAAA,UAChB;AAAA;AAAA,UAGA,OAAO,WAAW;AACjB,gBAAK,MAAO;AACX,qBAAO,CAAC;AAAA,YACT;AACA,mBAAO;AAAA,UACR;AAAA;AAAA;AAAA;AAAA,UAKA,SAAS,WAAW;AACnB,qBAAS,QAAQ,CAAC;AAClB,mBAAO,SAAS;AAChB,mBAAO;AAAA,UACR;AAAA,UACA,UAAU,WAAW;AACpB,mBAAO,CAAC;AAAA,UACT;AAAA;AAAA;AAAA;AAAA,UAKA,MAAM,WAAW;AAChB,qBAAS,QAAQ,CAAC;AAClB,gBAAK,CAAC,UAAU,CAAC,QAAS;AACzB,qBAAO,SAAS;AAAA,YACjB;AACA,mBAAO;AAAA,UACR;AAAA,UACA,QAAQ,WAAW;AAClB,mBAAO,CAAC,CAAC;AAAA,UACV;AAAA;AAAA,UAGA,UAAU,SAAU,SAAS,MAAO;AACnC,gBAAK,CAAC,QAAS;AACd,qBAAO,QAAQ,CAAC;AAChB,qBAAO,CAAE,SAAS,KAAK,QAAQ,KAAK,MAAM,IAAI,IAAK;AACnD,oBAAM,KAAM,IAAK;AACjB,kBAAK,CAAC,QAAS;AACd,qBAAK;AAAA,cACN;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA;AAAA,UAGA,MAAM,WAAW;AAChB,YAAAa,MAAK,SAAU,MAAM,SAAU;AAC/B,mBAAO;AAAA,UACR;AAAA;AAAA,UAGA,OAAO,WAAW;AACjB,mBAAO,CAAC,CAAC;AAAA,UACV;AAAA,QACD;AAED,eAAOA;AAAA,MACR;AAEA,eAAS,SAAU,GAAI;AACtB,eAAO;AAAA,MACR;AACA,eAAS,QAAS,IAAK;AACtB,cAAM;AAAA,MACP;AAEA,eAAS,WAAY,OAAO,SAAS,QAAQ,SAAU;AACtD,YAAI;AAEJ,YAAI;AAGH,cAAK,SAAS,QAAQ,SAAS,MAAM,aAAc,YAAa;AAC/D,mBAAO,KAAM,KAAM,EAAE,KAAM,OAAQ,EAAE,KAAM,MAAO;AAAA,UAGnD,WAAY,SAAS,QAAQ,SAAS,MAAM,UAAW,YAAa;AACnE,mBAAO,KAAM,OAAO,SAAS,MAAO;AAAA,UAGrC,OAAO;AAKN,oBAAQ,MAAO,QAAW,CAAE,KAAM,EAAE,MAAO,OAAQ,CAAE;AAAA,UACtD;AAAA,QAKD,SAAUT,QAAQ;AACjB,iBAAQA,MAAM;AAAA,QACf;AAAA,MACD;AAEA,MAAAJ,QAAO,OAAQ;AAAA,QAEd,UAAU,SAAU,MAAO;AAC1B,cAAI,SAAS;AAAA;AAAA;AAAA,YAIX;AAAA,cAAE;AAAA,cAAU;AAAA,cAAYA,QAAO,UAAW,QAAS;AAAA,cAClDA,QAAO,UAAW,QAAS;AAAA,cAAG;AAAA,YAAE;AAAA,YACjC;AAAA,cAAE;AAAA,cAAW;AAAA,cAAQA,QAAO,UAAW,aAAc;AAAA,cACpDA,QAAO,UAAW,aAAc;AAAA,cAAG;AAAA,cAAG;AAAA,YAAW;AAAA,YAClD;AAAA,cAAE;AAAA,cAAU;AAAA,cAAQA,QAAO,UAAW,aAAc;AAAA,cACnDA,QAAO,UAAW,aAAc;AAAA,cAAG;AAAA,cAAG;AAAA,YAAW;AAAA,UACnD,GACA,QAAQ,WACR,UAAU;AAAA,YACT,OAAO,WAAW;AACjB,qBAAO;AAAA,YACR;AAAA,YACA,QAAQ,WAAW;AAClB,uBAAS,KAAM,SAAU,EAAE,KAAM,SAAU;AAC3C,qBAAO;AAAA,YACR;AAAA,YACA,OAAO,SAAU,IAAK;AACrB,qBAAO,QAAQ,KAAM,MAAM,EAAG;AAAA,YAC/B;AAAA;AAAA,YAGA,MAAM,WAA6C;AAClD,kBAAI,MAAM;AAEV,qBAAOA,QAAO,SAAU,SAAU,UAAW;AAC5C,gBAAAA,QAAO,KAAM,QAAQ,SAAU,IAAI,OAAQ;AAG1C,sBAAI,KAAK,OAAO,IAAK,MAAO,CAAE,CAAE,MAAM,cACrC,IAAK,MAAO,CAAE,CAAE;AAKjB,2BAAU,MAAO,CAAE,CAAE,EAAG,WAAW;AAClC,wBAAI,WAAW,MAAM,GAAG,MAAO,MAAM,SAAU;AAC/C,wBAAK,YAAY,OAAO,SAAS,YAAY,YAAa;AACzD,+BAAS,QAAQ,EACf,SAAU,SAAS,MAAO,EAC1B,KAAM,SAAS,OAAQ,EACvB,KAAM,SAAS,MAAO;AAAA,oBACzB,OAAO;AACN,+BAAU,MAAO,CAAE,IAAI,MAAO;AAAA,wBAC7B;AAAA,wBACA,KAAK,CAAE,QAAS,IAAI;AAAA,sBACrB;AAAA,oBACD;AAAA,kBACD,CAAE;AAAA,gBACH,CAAE;AACF,sBAAM;AAAA,cACP,CAAE,EAAE,QAAQ;AAAA,YACb;AAAA,YACA,MAAM,SAAU,aAAa,YAAY,YAAa;AACrD,kBAAI,WAAW;AACf,uBAAS,QAAS,OAAOe,WAAU,SAAS,SAAU;AACrD,uBAAO,WAAW;AACjB,sBAAI,OAAO,MACV,OAAO,WACP,aAAa,WAAW;AACvB,wBAAI,UAAU;AAKd,wBAAK,QAAQ,UAAW;AACvB;AAAA,oBACD;AAEA,+BAAW,QAAQ,MAAO,MAAM,IAAK;AAIrC,wBAAK,aAAaA,UAAS,QAAQ,GAAI;AACtC,4BAAM,IAAI,UAAW,0BAA2B;AAAA,oBACjD;AAMA,2BAAO;AAAA;AAAA;AAAA,qBAKJ,OAAO,aAAa,YACrB,OAAO,aAAa,eACrB,SAAS;AAGV,wBAAK,OAAO,SAAS,YAAa;AAGjC,0BAAK,SAAU;AACd,6BAAK;AAAA,0BACJ;AAAA,0BACA,QAAS,UAAUA,WAAU,UAAU,OAAQ;AAAA,0BAC/C,QAAS,UAAUA,WAAU,SAAS,OAAQ;AAAA,wBAC/C;AAAA,sBAGD,OAAO;AAGN;AAEA,6BAAK;AAAA,0BACJ;AAAA,0BACA,QAAS,UAAUA,WAAU,UAAU,OAAQ;AAAA,0BAC/C,QAAS,UAAUA,WAAU,SAAS,OAAQ;AAAA,0BAC9C;AAAA,4BAAS;AAAA,4BAAUA;AAAA,4BAAU;AAAA,4BAC5BA,UAAS;AAAA,0BAAW;AAAA,wBACtB;AAAA,sBACD;AAAA,oBAGD,OAAO;AAIN,0BAAK,YAAY,UAAW;AAC3B,+BAAO;AACP,+BAAO,CAAE,QAAS;AAAA,sBACnB;AAIA,uBAAE,WAAWA,UAAS,aAAe,MAAM,IAAK;AAAA,oBACjD;AAAA,kBACD,GAGAC,WAAU,UACT,aACA,WAAW;AACV,wBAAI;AACH,iCAAW;AAAA,oBACZ,SAAU,GAAI;AAEb,0BAAKhB,QAAO,SAAS,eAAgB;AACpC,wBAAAA,QAAO,SAAS;AAAA,0BAAe;AAAA,0BAC9BgB,SAAQ;AAAA,wBAAM;AAAA,sBAChB;AAKA,0BAAK,QAAQ,KAAK,UAAW;AAI5B,4BAAK,YAAY,SAAU;AAC1B,iCAAO;AACP,iCAAO,CAAE,CAAE;AAAA,wBACZ;AAEA,wBAAAD,UAAS,WAAY,MAAM,IAAK;AAAA,sBACjC;AAAA,oBACD;AAAA,kBACD;AAMF,sBAAK,OAAQ;AACZ,oBAAAC,SAAQ;AAAA,kBACT,OAAO;AAIN,wBAAKhB,QAAO,SAAS,cAAe;AACnC,sBAAAgB,SAAQ,QAAQhB,QAAO,SAAS,aAAa;AAAA,oBAC9C;AACA,oBAAAF,QAAO,WAAYkB,QAAQ;AAAA,kBAC5B;AAAA,gBACD;AAAA,cACD;AAEA,qBAAOhB,QAAO,SAAU,SAAU,UAAW;AAG5C,uBAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,kBAChB;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA,OAAO,eAAe,aACrB,aACA;AAAA,oBACD,SAAS;AAAA,kBACV;AAAA,gBACD;AAGA,uBAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,kBAChB;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA,OAAO,gBAAgB,aACtB,cACA;AAAA,kBACF;AAAA,gBACD;AAGA,uBAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,kBAChB;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA,OAAO,eAAe,aACrB,aACA;AAAA,kBACF;AAAA,gBACD;AAAA,cACD,CAAE,EAAE,QAAQ;AAAA,YACb;AAAA;AAAA;AAAA,YAIA,SAAS,SAAU,KAAM;AACxB,qBAAO,OAAO,OAAOA,QAAO,OAAQ,KAAK,OAAQ,IAAI;AAAA,YACtD;AAAA,UACD,GACA,WAAW,CAAC;AAGb,UAAAA,QAAO,KAAM,QAAQ,SAAUD,IAAG,OAAQ;AACzC,gBAAI,OAAO,MAAO,CAAE,GACnB,cAAc,MAAO,CAAE;AAKxB,oBAAS,MAAO,CAAE,CAAE,IAAI,KAAK;AAG7B,gBAAK,aAAc;AAClB,mBAAK;AAAA,gBACJ,WAAW;AAIV,0BAAQ;AAAA,gBACT;AAAA;AAAA;AAAA,gBAIA,OAAQ,IAAIA,EAAE,EAAG,CAAE,EAAE;AAAA;AAAA;AAAA,gBAIrB,OAAQ,IAAIA,EAAE,EAAG,CAAE,EAAE;AAAA;AAAA,gBAGrB,OAAQ,CAAE,EAAG,CAAE,EAAE;AAAA;AAAA,gBAGjB,OAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,cAClB;AAAA,YACD;AAKA,iBAAK,IAAK,MAAO,CAAE,EAAE,IAAK;AAK1B,qBAAU,MAAO,CAAE,CAAE,IAAI,WAAW;AACnC,uBAAU,MAAO,CAAE,IAAI,MAAO,EAAG,SAAS,WAAW,SAAY,MAAM,SAAU;AACjF,qBAAO;AAAA,YACR;AAKA,qBAAU,MAAO,CAAE,IAAI,MAAO,IAAI,KAAK;AAAA,UACxC,CAAE;AAGF,kBAAQ,QAAS,QAAS;AAG1B,cAAK,MAAO;AACX,iBAAK,KAAM,UAAU,QAAS;AAAA,UAC/B;AAGA,iBAAO;AAAA,QACR;AAAA;AAAA,QAGA,MAAM,SAAU,aAAc;AAC7B,cAGC,YAAY,UAAU,QAGtBA,KAAI,WAGJ,kBAAkB,MAAOA,EAAE,GAC3B,gBAAgB,MAAM,KAAM,SAAU,GAGtC,UAAUC,QAAO,SAAS,GAG1B,aAAa,SAAUD,IAAI;AAC1B,mBAAO,SAAU,OAAQ;AACxB,8BAAiBA,EAAE,IAAI;AACvB,4BAAeA,EAAE,IAAI,UAAU,SAAS,IAAI,MAAM,KAAM,SAAU,IAAI;AACtE,kBAAK,CAAG,EAAE,WAAc;AACvB,wBAAQ,YAAa,iBAAiB,aAAc;AAAA,cACrD;AAAA,YACD;AAAA,UACD;AAGD,cAAK,aAAa,GAAI;AACrB;AAAA,cAAY;AAAA,cAAa,QAAQ,KAAM,WAAYA,EAAE,CAAE,EAAE;AAAA,cAAS,QAAQ;AAAA,cACzE,CAAC;AAAA,YAAU;AAGZ,gBAAK,QAAQ,MAAM,MAAM,aACxB,QAAQ,cAAeA,EAAE,KAAK,cAAeA,EAAE,EAAE,UAAW,YAAa;AAEzE,qBAAO,QAAQ,KAAK;AAAA,YACrB;AAAA,UACD;AAGA,iBAAQA,MAAM;AACb,uBAAY,cAAeA,EAAE,GAAG,WAAYA,EAAE,GAAG,QAAQ,MAAO;AAAA,UACjE;AAEA,iBAAO,QAAQ,QAAQ;AAAA,QACxB;AAAA,MACD,CAAE;AAIF,UAAI,cAAc;AAKlB,MAAAC,QAAO,SAAS,gBAAgB,SAAUiB,QAAO,YAAa;AAE7D,YAAKA,UAAS,YAAY,KAAMA,OAAM,IAAK,GAAI;AAC9C,UAAAnB,QAAO,QAAQ;AAAA,YACd;AAAA,YACAmB;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,MAAAjB,QAAO,iBAAiB,SAAUiB,QAAQ;AACzC,QAAAnB,QAAO,WAAY,WAAW;AAC7B,gBAAMmB;AAAA,QACP,CAAE;AAAA,MACH;AAGA,UAAI,YAAYjB,QAAO,SAAS;AAEhC,MAAAA,QAAO,GAAG,QAAQ,SAAU,IAAK;AAEhC,kBACE,KAAM,EAAG,EAKT,MAAO,SAAUiB,QAAQ;AACzB,UAAAjB,QAAO,eAAgBiB,MAAM;AAAA,QAC9B,CAAE;AAEH,eAAO;AAAA,MACR;AAEA,MAAAjB,QAAO,OAAQ;AAAA;AAAA,QAGd,SAAS;AAAA;AAAA;AAAA,QAIT,WAAW;AAAA;AAAA,QAGX,OAAO,SAAU,MAAO;AAGvB,cAAK,SAAS,OAAO,EAAEA,QAAO,YAAYA,QAAO,SAAU;AAC1D;AAAA,UACD;AAGA,UAAAA,QAAO,UAAU;AAGjB,cAAK,SAAS,QAAQ,EAAEA,QAAO,YAAY,GAAI;AAC9C;AAAA,UACD;AAGA,oBAAU,YAAa,YAAY,CAAEA,OAAO,CAAE;AAAA,QAC/C;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,MAAM,OAAO,UAAU;AAG9B,eAAS,YAAY;AACpB,mBAAW,oBAAqB,oBAAoB,SAAU;AAC9D,QAAAF,QAAO,oBAAqB,QAAQ,SAAU;AAC9C,QAAAE,QAAO,MAAM;AAAA,MACd;AAIA,UAAK,WAAW,eAAe,WAAY;AAG1C,QAAAF,QAAO,WAAYE,QAAO,KAAM;AAAA,MAEjC,OAAO;AAGN,mBAAW,iBAAkB,oBAAoB,SAAU;AAG3D,QAAAF,QAAO,iBAAkB,QAAQ,SAAU;AAAA,MAC5C;AAGA,UAAI,aAAa;AAGjB,eAAS,WAAY,MAAM,QAAS;AACnC,eAAO,OAAO,YAAY;AAAA,MAC3B;AAGA,eAAS,UAAW,QAAS;AAC5B,eAAO,OAAO,QAAS,YAAY,UAAW;AAAA,MAC/C;AAKA,eAAS,WAAY,OAAQ;AAQ5B,eAAO,MAAM,aAAa,KAAK,MAAM,aAAa,KAAK,CAAG,CAAC,MAAM;AAAA,MAClE;AAEA,eAAS,OAAO;AACf,aAAK,UAAUE,QAAO,UAAU,KAAK;AAAA,MACtC;AAEA,WAAK,MAAM;AAEX,WAAK,YAAY;AAAA,QAEhB,OAAO,SAAU,OAAQ;AAGxB,cAAI,QAAQ,MAAO,KAAK,OAAQ;AAGhC,cAAK,CAAC,OAAQ;AACb,oBAAQ,uBAAO,OAAQ,IAAK;AAK5B,gBAAK,WAAY,KAAM,GAAI;AAI1B,kBAAK,MAAM,UAAW;AACrB,sBAAO,KAAK,OAAQ,IAAI;AAAA,cAKzB,OAAO;AACN,uBAAO,eAAgB,OAAO,KAAK,SAAS;AAAA,kBAC3C;AAAA,kBACA,cAAc;AAAA,gBACf,CAAE;AAAA,cACH;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QACA,KAAK,SAAU,OAAO,MAAM,OAAQ;AACnC,cAAI,MACH,QAAQ,KAAK,MAAO,KAAM;AAI3B,cAAK,OAAO,SAAS,UAAW;AAC/B,kBAAO,UAAW,IAAK,CAAE,IAAI;AAAA,UAG9B,OAAO;AAGN,iBAAM,QAAQ,MAAO;AACpB,oBAAO,UAAW,IAAK,CAAE,IAAI,KAAM,IAAK;AAAA,YACzC;AAAA,UACD;AACA,iBAAO;AAAA,QACR;AAAA,QACA,KAAK,SAAU,OAAO,KAAM;AAC3B,iBAAO,QAAQ,SACd,KAAK,MAAO,KAAM;AAAA;AAAA,YAGlB,MAAO,KAAK,OAAQ,KAAK,MAAO,KAAK,OAAQ,EAAG,UAAW,GAAI,CAAE;AAAA;AAAA,QACnE;AAAA,QACA,QAAQ,SAAU,OAAO,KAAK,OAAQ;AAarC,cAAK,QAAQ,UACP,OAAO,OAAO,QAAQ,YAAc,UAAU,QAAc;AAEjE,mBAAO,KAAK,IAAK,OAAO,GAAI;AAAA,UAC7B;AAQA,eAAK,IAAK,OAAO,KAAK,KAAM;AAI5B,iBAAO,UAAU,SAAY,QAAQ;AAAA,QACtC;AAAA,QACA,QAAQ,SAAU,OAAO,KAAM;AAC9B,cAAID,IACH,QAAQ,MAAO,KAAK,OAAQ;AAE7B,cAAK,UAAU,QAAY;AAC1B;AAAA,UACD;AAEA,cAAK,QAAQ,QAAY;AAGxB,gBAAK,MAAM,QAAS,GAAI,GAAI;AAI3B,oBAAM,IAAI,IAAK,SAAU;AAAA,YAC1B,OAAO;AACN,oBAAM,UAAW,GAAI;AAIrB,oBAAM,OAAO,QACZ,CAAE,GAAI,IACJ,IAAI,MAAO,aAAc,KAAK,CAAC;AAAA,YACnC;AAEA,YAAAA,KAAI,IAAI;AAER,mBAAQA,MAAM;AACb,qBAAO,MAAO,IAAKA,EAAE,CAAE;AAAA,YACxB;AAAA,UACD;AAGA,cAAK,QAAQ,UAAaC,QAAO,cAAe,KAAM,GAAI;AAMzD,gBAAK,MAAM,UAAW;AACrB,oBAAO,KAAK,OAAQ,IAAI;AAAA,YACzB,OAAO;AACN,qBAAO,MAAO,KAAK,OAAQ;AAAA,YAC5B;AAAA,UACD;AAAA,QACD;AAAA,QACA,SAAS,SAAU,OAAQ;AAC1B,cAAI,QAAQ,MAAO,KAAK,OAAQ;AAChC,iBAAO,UAAU,UAAa,CAACA,QAAO,cAAe,KAAM;AAAA,QAC5D;AAAA,MACD;AAEA,UAAI,WAAW,IAAI,KAAK;AAExB,UAAI,WAAW,IAAI,KAAK;AAYxB,UAAI,SAAS,iCACZ,aAAa;AAEd,eAAS,QAAS,MAAO;AACxB,YAAK,SAAS,QAAS;AACtB,iBAAO;AAAA,QACR;AAEA,YAAK,SAAS,SAAU;AACvB,iBAAO;AAAA,QACR;AAEA,YAAK,SAAS,QAAS;AACtB,iBAAO;AAAA,QACR;AAGA,YAAK,SAAS,CAAC,OAAO,IAAK;AAC1B,iBAAO,CAAC;AAAA,QACT;AAEA,YAAK,OAAO,KAAM,IAAK,GAAI;AAC1B,iBAAO,KAAK,MAAO,IAAK;AAAA,QACzB;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,MAAM,KAAK,MAAO;AACpC,YAAI;AAIJ,YAAK,SAAS,UAAa,KAAK,aAAa,GAAI;AAChD,iBAAO,UAAU,IAAI,QAAS,YAAY,KAAM,EAAE,YAAY;AAC9D,iBAAO,KAAK,aAAc,IAAK;AAE/B,cAAK,OAAO,SAAS,UAAW;AAC/B,gBAAI;AACH,qBAAO,QAAS,IAAK;AAAA,YACtB,SAAU,GAAI;AAAA,YAAC;AAGf,qBAAS,IAAK,MAAM,KAAK,IAAK;AAAA,UAC/B,OAAO;AACN,mBAAO;AAAA,UACR;AAAA,QACD;AACA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,OAAQ;AAAA,QACd,SAAS,SAAU,MAAO;AACzB,iBAAO,SAAS,QAAS,IAAK,KAAK,SAAS,QAAS,IAAK;AAAA,QAC3D;AAAA,QAEA,MAAM,SAAU,MAAM,MAAM,MAAO;AAClC,iBAAO,SAAS,OAAQ,MAAM,MAAM,IAAK;AAAA,QAC1C;AAAA,QAEA,YAAY,SAAU,MAAM,MAAO;AAClC,mBAAS,OAAQ,MAAM,IAAK;AAAA,QAC7B;AAAA;AAAA;AAAA,QAIA,OAAO,SAAU,MAAM,MAAM,MAAO;AACnC,iBAAO,SAAS,OAAQ,MAAM,MAAM,IAAK;AAAA,QAC1C;AAAA,QAEA,aAAa,SAAU,MAAM,MAAO;AACnC,mBAAS,OAAQ,MAAM,IAAK;AAAA,QAC7B;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,KAAK,OAAQ;AAC5B,cAAID,IAAG,MAAM,MACZ,OAAO,KAAM,CAAE,GACf,QAAQ,QAAQ,KAAK;AAGtB,cAAK,QAAQ,QAAY;AACxB,gBAAK,KAAK,QAAS;AAClB,qBAAO,SAAS,IAAK,IAAK;AAE1B,kBAAK,KAAK,aAAa,KAAK,CAAC,SAAS,IAAK,MAAM,cAAe,GAAI;AACnE,gBAAAA,KAAI,MAAM;AACV,uBAAQA,MAAM;AAIb,sBAAK,MAAOA,EAAE,GAAI;AACjB,2BAAO,MAAOA,EAAE,EAAE;AAClB,wBAAK,KAAK,QAAS,OAAQ,MAAM,GAAI;AACpC,6BAAO,UAAW,KAAK,MAAO,CAAE,CAAE;AAClC,+BAAU,MAAM,MAAM,KAAM,IAAK,CAAE;AAAA,oBACpC;AAAA,kBACD;AAAA,gBACD;AACA,yBAAS,IAAK,MAAM,gBAAgB,IAAK;AAAA,cAC1C;AAAA,YACD;AAEA,mBAAO;AAAA,UACR;AAGA,cAAK,OAAO,QAAQ,UAAW;AAC9B,mBAAO,KAAK,KAAM,WAAW;AAC5B,uBAAS,IAAK,MAAM,GAAI;AAAA,YACzB,CAAE;AAAA,UACH;AAEA,iBAAO,OAAQ,MAAM,SAAUK,QAAQ;AACtC,gBAAIc;AAOJ,gBAAK,QAAQd,WAAU,QAAY;AAIlC,cAAAc,QAAO,SAAS,IAAK,MAAM,GAAI;AAC/B,kBAAKA,UAAS,QAAY;AACzB,uBAAOA;AAAA,cACR;AAIA,cAAAA,QAAO,SAAU,MAAM,GAAI;AAC3B,kBAAKA,UAAS,QAAY;AACzB,uBAAOA;AAAA,cACR;AAGA;AAAA,YACD;AAGA,iBAAK,KAAM,WAAW;AAGrB,uBAAS,IAAK,MAAM,KAAKd,MAAM;AAAA,YAChC,CAAE;AAAA,UACH,GAAG,MAAM,OAAO,UAAU,SAAS,GAAG,MAAM,IAAK;AAAA,QAClD;AAAA,QAEA,YAAY,SAAU,KAAM;AAC3B,iBAAO,KAAK,KAAM,WAAW;AAC5B,qBAAS,OAAQ,MAAM,GAAI;AAAA,UAC5B,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAJ,QAAO,OAAQ;AAAA,QACd,OAAO,SAAU,MAAM,MAAM,MAAO;AACnC,cAAI;AAEJ,cAAK,MAAO;AACX,oBAAS,QAAQ,QAAS;AAC1B,oBAAQ,SAAS,IAAK,MAAM,IAAK;AAGjC,gBAAK,MAAO;AACX,kBAAK,CAAC,SAAS,MAAM,QAAS,IAAK,GAAI;AACtC,wBAAQ,SAAS,IAAK,MAAM,MAAMA,QAAO,UAAW,IAAK,CAAE;AAAA,cAC5D,OAAO;AACN,sBAAM,KAAM,IAAK;AAAA,cAClB;AAAA,YACD;AACA,mBAAO,SAAS,CAAC;AAAA,UAClB;AAAA,QACD;AAAA,QAEA,SAAS,SAAU,MAAM,MAAO;AAC/B,iBAAO,QAAQ;AAEf,cAAI,QAAQA,QAAO,MAAO,MAAM,IAAK,GACpC,cAAc,MAAM,QACpB,KAAK,MAAM,MAAM,GACjB,QAAQA,QAAO,YAAa,MAAM,IAAK,GACvC,OAAO,WAAW;AACjB,YAAAA,QAAO,QAAS,MAAM,IAAK;AAAA,UAC5B;AAGD,cAAK,OAAO,cAAe;AAC1B,iBAAK,MAAM,MAAM;AACjB;AAAA,UACD;AAEA,cAAK,IAAK;AAIT,gBAAK,SAAS,MAAO;AACpB,oBAAM,QAAS,YAAa;AAAA,YAC7B;AAGA,mBAAO,MAAM;AACb,eAAG,KAAM,MAAM,MAAM,KAAM;AAAA,UAC5B;AAEA,cAAK,CAAC,eAAe,OAAQ;AAC5B,kBAAM,MAAM,KAAK;AAAA,UAClB;AAAA,QACD;AAAA;AAAA,QAGA,aAAa,SAAU,MAAM,MAAO;AACnC,cAAI,MAAM,OAAO;AACjB,iBAAO,SAAS,IAAK,MAAM,GAAI,KAAK,SAAS,IAAK,MAAM,KAAK;AAAA,YAC5D,OAAOA,QAAO,UAAW,aAAc,EAAE,IAAK,WAAW;AACxD,uBAAS,OAAQ,MAAM,CAAE,OAAO,SAAS,GAAI,CAAE;AAAA,YAChD,CAAE;AAAA,UACH,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,OAAO,SAAU,MAAM,MAAO;AAC7B,cAAI,SAAS;AAEb,cAAK,OAAO,SAAS,UAAW;AAC/B,mBAAO;AACP,mBAAO;AACP;AAAA,UACD;AAEA,cAAK,UAAU,SAAS,QAAS;AAChC,mBAAOA,QAAO,MAAO,KAAM,CAAE,GAAG,IAAK;AAAA,UACtC;AAEA,iBAAO,SAAS,SACf,OACA,KAAK,KAAM,WAAW;AACrB,gBAAI,QAAQA,QAAO,MAAO,MAAM,MAAM,IAAK;AAG3C,YAAAA,QAAO,YAAa,MAAM,IAAK;AAE/B,gBAAK,SAAS,QAAQ,MAAO,CAAE,MAAM,cAAe;AACnD,cAAAA,QAAO,QAAS,MAAM,IAAK;AAAA,YAC5B;AAAA,UACD,CAAE;AAAA,QACJ;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAAA,QAAO,QAAS,MAAM,IAAK;AAAA,UAC5B,CAAE;AAAA,QACH;AAAA,QACA,YAAY,SAAU,MAAO;AAC5B,iBAAO,KAAK,MAAO,QAAQ,MAAM,CAAC,CAAE;AAAA,QACrC;AAAA;AAAA;AAAA,QAIA,SAAS,SAAU,MAAM,KAAM;AAC9B,cAAI,KACH,QAAQ,GACR,QAAQA,QAAO,SAAS,GACxB,WAAW,MACXD,KAAI,KAAK,QACT,UAAU,WAAW;AACpB,gBAAK,CAAG,EAAE,OAAU;AACnB,oBAAM,YAAa,UAAU,CAAE,QAAS,CAAE;AAAA,YAC3C;AAAA,UACD;AAED,cAAK,OAAO,SAAS,UAAW;AAC/B,kBAAM;AACN,mBAAO;AAAA,UACR;AACA,iBAAO,QAAQ;AAEf,iBAAQA,MAAM;AACb,kBAAM,SAAS,IAAK,SAAUA,EAAE,GAAG,OAAO,YAAa;AACvD,gBAAK,OAAO,IAAI,OAAQ;AACvB;AACA,kBAAI,MAAM,IAAK,OAAQ;AAAA,YACxB;AAAA,UACD;AACA,kBAAQ;AACR,iBAAO,MAAM,QAAS,GAAI;AAAA,QAC3B;AAAA,MACD,CAAE;AAEF,UAAI,OAAO,sCAAsC;AAEjD,UAAI,UAAU,IAAI,OAAQ,mBAAmB,OAAO,eAAe,GAAI;AAEvE,UAAI,YAAY,CAAE,OAAO,SAAS,UAAU,MAAO;AASnD,eAAS,mBAAoB,MAAMoB,KAAK;AAIvC,eAAOA,OAAM;AAGb,eAAO,KAAK,MAAM,YAAY,UAC7B,KAAK,MAAM,YAAY,MACvBnB,QAAO,IAAK,MAAM,SAAU,MAAM;AAAA,MACpC;AAEA,UAAI,cAAc,UAuBjB,UAAU;AAEX,eAAS,SAAU,MAAO;AAKzB,eAAO,YAAY,KAAM,IAAK,KAC7B,QAAQ,KAAM,KAAM,CAAE,EAAE,YAAY,IAAI,KAAK,MAAO,CAAE,CAAE;AAAA,MAC1D;AAEA,eAAS,UAAW,MAAM,MAAM,YAAY,OAAQ;AACnD,YAAI,UAAU,OACb,gBAAgB,IAChB,eAAe,QACd,WAAW;AACV,iBAAO,MAAM,IAAI;AAAA,QAClB,IACA,WAAW;AACV,iBAAOA,QAAO,IAAK,MAAM,MAAM,EAAG;AAAA,QACnC,GACD,UAAU,aAAa,GACvB,OAAO,cAAc,WAAY,CAAE,MAAO,SAAU,IAAK,IAAI,OAAO,KAGpE,gBAAgB,KAAK,aAClB,CAAC,SAAU,IAAK,KAAK,SAAS,QAAQ,CAAC,YACzC,QAAQ,KAAMA,QAAO,IAAK,MAAM,IAAK,CAAE;AAEzC,YAAK,iBAAiB,cAAe,CAAE,MAAM,MAAO;AAInD,oBAAU,UAAU;AAGpB,iBAAO,QAAQ,cAAe,CAAE;AAGhC,0BAAgB,CAAC,WAAW;AAE5B,iBAAQ,iBAAkB;AAIzB,YAAAA,QAAO,MAAO,MAAM,MAAM,gBAAgB,IAAK;AAC/C,iBAAO,IAAI,UAAY,KAAM,QAAQ,aAAa,IAAI,WAAW,SAAW,GAAI;AAC/E,8BAAgB;AAAA,YACjB;AACA,4BAAgB,gBAAgB;AAAA,UAEjC;AAEA,0BAAgB,gBAAgB;AAChC,UAAAA,QAAO,MAAO,MAAM,MAAM,gBAAgB,IAAK;AAG/C,uBAAa,cAAc,CAAC;AAAA,QAC7B;AAEA,YAAK,YAAa;AACjB,0BAAgB,CAAC,iBAAiB,CAAC,WAAW;AAG9C,qBAAW,WAAY,CAAE,IACxB,iBAAkB,WAAY,CAAE,IAAI,KAAM,WAAY,CAAE,IACxD,CAAC,WAAY,CAAE;AAChB,cAAK,OAAQ;AACZ,kBAAM,OAAO;AACb,kBAAM,QAAQ;AACd,kBAAM,MAAM;AAAA,UACb;AAAA,QACD;AACA,eAAO;AAAA,MACR;AAGA,UAAI,YAAY;AAMhB,eAAS,aAAc,QAAS;AAC/B,eAAO,UAAW,OAAO,QAAS,WAAW,KAAM,CAAE;AAAA,MACtD;AAEA,UAAI,oBAAoB,CAAC;AAEzB,eAAS,kBAAmB,MAAO;AAClC,YAAI,MACH,MAAM,KAAK,eACXoB,YAAW,KAAK,UAChB,UAAU,kBAAmBA,SAAS;AAEvC,YAAK,SAAU;AACd,iBAAO;AAAA,QACR;AAEA,eAAO,IAAI,KAAK,YAAa,IAAI,cAAeA,SAAS,CAAE;AAC3D,kBAAUpB,QAAO,IAAK,MAAM,SAAU;AAEtC,aAAK,WAAW,YAAa,IAAK;AAElC,YAAK,YAAY,QAAS;AACzB,oBAAU;AAAA,QACX;AACA,0BAAmBoB,SAAS,IAAI;AAEhC,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,UAAU,MAAO;AACnC,YAAI,SAAS,MACZ,SAAS,CAAC,GACV,QAAQ,GACR,SAAS,SAAS;AAGnB,eAAQ,QAAQ,QAAQ,SAAU;AACjC,iBAAO,SAAU,KAAM;AACvB,cAAK,CAAC,KAAK,OAAQ;AAClB;AAAA,UACD;AAEA,oBAAU,KAAK,MAAM;AACrB,cAAK,MAAO;AAKX,gBAAK,YAAY,QAAS;AACzB,qBAAQ,KAAM,IAAI,SAAS,IAAK,MAAM,SAAU,KAAK;AACrD,kBAAK,CAAC,OAAQ,KAAM,GAAI;AACvB,qBAAK,MAAM,UAAU;AAAA,cACtB;AAAA,YACD;AACA,gBAAK,KAAK,MAAM,YAAY,MAAM,mBAAoB,IAAK,GAAI;AAC9D,qBAAQ,KAAM,IAAI,kBAAmB,IAAK;AAAA,YAC3C;AAAA,UACD,OAAO;AACN,gBAAK,YAAY,QAAS;AACzB,qBAAQ,KAAM,IAAI;AAGlB,uBAAS,IAAK,MAAM,WAAW,OAAQ;AAAA,YACxC;AAAA,UACD;AAAA,QACD;AAGA,aAAM,QAAQ,GAAG,QAAQ,QAAQ,SAAU;AAC1C,cAAK,OAAQ,KAAM,KAAK,MAAO;AAC9B,qBAAU,KAAM,EAAE,MAAM,UAAU,OAAQ,KAAM;AAAA,UACjD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAApB,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,WAAW;AAChB,iBAAO,SAAU,MAAM,IAAK;AAAA,QAC7B;AAAA,QACA,MAAM,WAAW;AAChB,iBAAO,SAAU,IAAK;AAAA,QACvB;AAAA,QACA,QAAQ,SAAU,OAAQ;AACzB,cAAK,OAAO,UAAU,WAAY;AACjC,mBAAO,QAAQ,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA,UACxC;AAEA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAK,mBAAoB,IAAK,GAAI;AACjC,cAAAA,QAAQ,IAAK,EAAE,KAAK;AAAA,YACrB,OAAO;AACN,cAAAA,QAAQ,IAAK,EAAE,KAAK;AAAA,YACrB;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,UAAI,aAAa,SAAU,MAAO;AAChC,eAAOA,QAAO,SAAU,KAAK,eAAe,IAAK,KAChD,KAAK,YAAa,QAAS,MAAM,KAAK;AAAA,MACxC,GACA,WAAW,EAAE,UAAU,KAAK;AAK7B,UAAK,CAAC,kBAAkB,aAAc;AACrC,qBAAa,SAAU,MAAO;AAC7B,iBAAOA,QAAO,SAAU,KAAK,eAAe,IAAK;AAAA,QAClD;AAAA,MACD;AAKA,UAAI,WAAW;AAEf,UAAI,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOb,OAAO,CAAE,OAAQ;AAAA,QACjB,KAAK,CAAE,YAAY,OAAQ;AAAA,QAC3B,IAAI,CAAE,SAAS,OAAQ;AAAA,QACvB,IAAI,CAAE,MAAM,SAAS,OAAQ;AAAA,MAC9B;AAEA,cAAQ,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,UAAU,QAAQ;AAC7E,cAAQ,KAAK,QAAQ;AAErB,eAAS,OAAQ,SAAS,KAAM;AAI/B,YAAI;AAEJ,YAAK,OAAO,QAAQ,yBAAyB,aAAc;AAG1D,gBAAM,IAAI,MAAM,KAAM,QAAQ,qBAAsB,OAAO,GAAI,CAAE;AAAA,QAElE,WAAY,OAAO,QAAQ,qBAAqB,aAAc;AAC7D,gBAAM,QAAQ,iBAAkB,OAAO,GAAI;AAAA,QAE5C,OAAO;AACN,gBAAM,CAAC;AAAA,QACR;AAEA,YAAK,QAAQ,UAAa,OAAO,SAAU,SAAS,GAAI,GAAI;AAC3D,iBAAOA,QAAO,MAAO,CAAE,OAAQ,GAAG,GAAI;AAAA,QACvC;AAEA,eAAO;AAAA,MACR;AAEA,UAAI,cAAc;AAGlB,eAAS,cAAe,OAAO,aAAc;AAC5C,YAAID,KAAI,GACP,IAAI,MAAM;AAEX,eAAQA,KAAI,GAAGA,MAAM;AACpB,mBAAS;AAAA,YACR,MAAOA,EAAE;AAAA,YACT;AAAA,YACA,CAAC,eAAe,SAAS,IAAK,YAAaA,EAAE,GAAG,YAAa;AAAA,UAC9D;AAAA,QACD;AAAA,MACD;AAEA,UAAI,QAAQ;AAEZ,eAAS,cAAe,OAAO,SAAS,SAAS,WAAW,SAAU;AACrE,YAAI,MAAM,KAAK,KAAK,MAAM,UAAU,GACnC,WAAW,QAAQ,uBAAuB,GAC1C,QAAQ,CAAC,GACTA,KAAI,GACJ,IAAI,MAAM;AAEX,eAAQA,KAAI,GAAGA,MAAM;AACpB,iBAAO,MAAOA,EAAE;AAEhB,cAAK,QAAQ,SAAS,GAAI;AAGzB,gBAAK,OAAQ,IAAK,MAAM,aAAc,KAAK,YAAY,YAAa,IAAK,IAAM;AAC9E,cAAAC,QAAO,MAAO,OAAO,KAAK,WAAW,CAAE,IAAK,IAAI,IAAK;AAAA,YAGtD,WAAY,CAAC,MAAM,KAAM,IAAK,GAAI;AACjC,oBAAM,KAAM,QAAQ,eAAgB,IAAK,CAAE;AAAA,YAG5C,OAAO;AACN,oBAAM,OAAO,SAAS,YAAa,QAAQ,cAAe,KAAM,CAAE;AAGlE,qBAAQ,SAAS,KAAM,IAAK,KAAK,CAAE,IAAI,EAAG,GAAK,CAAE,EAAE,YAAY;AAC/D,qBAAO,QAAS,GAAI,KAAK;AAGzB,kBAAI,KAAK;AACT,qBAAQ,EAAE,IAAI,IAAK;AAClB,sBAAM,IAAI,YAAa,QAAQ,cAAe,KAAM,CAAE,CAAE,CAAE;AAAA,cAC3D;AAEA,kBAAI,YAAYA,QAAO,cAAe,IAAK;AAE3C,cAAAA,QAAO,MAAO,OAAO,IAAI,UAAW;AAGpC,oBAAM,SAAS;AAGf,kBAAI,cAAc;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AAGA,iBAAS,cAAc;AAEvB,QAAAD,KAAI;AACJ,eAAU,OAAO,MAAOA,IAAI,GAAM;AAGjC,cAAK,aAAaC,QAAO,QAAS,MAAM,SAAU,IAAI,IAAK;AAC1D,gBAAK,SAAU;AACd,sBAAQ,KAAM,IAAK;AAAA,YACpB;AACA;AAAA,UACD;AAEA,qBAAW,WAAY,IAAK;AAG5B,gBAAM,OAAQ,SAAS,YAAa,IAAK,GAAG,QAAS;AAGrD,cAAK,UAAW;AACf,0BAAe,GAAI;AAAA,UACpB;AAGA,cAAK,SAAU;AACd,gBAAI;AACJ,mBAAU,OAAO,IAAK,GAAI,GAAM;AAC/B,kBAAK,YAAY,KAAM,KAAK,QAAQ,EAAG,GAAI;AAC1C,wBAAQ,KAAM,IAAK;AAAA,cACpB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAGA,eAAS,cAAe,MAAO;AAC9B,aAAK,QAAS,KAAK,aAAc,MAAO,MAAM,QAAS,MAAM,KAAK;AAClE,eAAO;AAAA,MACR;AACA,eAAS,cAAe,MAAO;AAC9B,aAAO,KAAK,QAAQ,IAAK,MAAO,GAAG,CAAE,MAAM,SAAU;AACpD,eAAK,OAAO,KAAK,KAAK,MAAO,CAAE;AAAA,QAChC,OAAO;AACN,eAAK,gBAAiB,MAAO;AAAA,QAC9B;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,YAAY,MAAM,UAAU,SAAU;AAGxD,eAAO,KAAM,IAAK;AAElB,YAAI,UAAU,OAAO,SAAS,YAAY,MAAM,KAC/CD,KAAI,GACJ,IAAI,WAAW,QACf,WAAW,IAAI,GACf,QAAQ,KAAM,CAAE,GAChB,kBAAkB,OAAO,UAAU;AAEpC,YAAK,iBAAkB;AACtB,iBAAO,WAAW,KAAM,SAAU,OAAQ;AACzC,gBAAIc,QAAO,WAAW,GAAI,KAAM;AAChC,iBAAM,CAAE,IAAI,MAAM,KAAM,MAAM,OAAOA,MAAK,KAAK,CAAE;AACjD,qBAAUA,OAAM,MAAM,UAAU,OAAQ;AAAA,UACzC,CAAE;AAAA,QACH;AAEA,YAAK,GAAI;AACR,qBAAW,cAAe,MAAM,WAAY,CAAE,EAAE,eAAe,OAAO,YAAY,OAAQ;AAC1F,kBAAQ,SAAS;AAEjB,cAAK,SAAS,WAAW,WAAW,GAAI;AACvC,uBAAW;AAAA,UACZ;AAGA,cAAK,SAAS,SAAU;AACvB,sBAAUb,QAAO,IAAK,OAAQ,UAAU,QAAS,GAAG,aAAc;AAClE,yBAAa,QAAQ;AAKrB,mBAAQD,KAAI,GAAGA,MAAM;AACpB,qBAAO;AAEP,kBAAKA,OAAM,UAAW;AACrB,uBAAOC,QAAO,MAAO,MAAM,MAAM,IAAK;AAGtC,oBAAK,YAAa;AACjB,kBAAAA,QAAO,MAAO,SAAS,OAAQ,MAAM,QAAS,CAAE;AAAA,gBACjD;AAAA,cACD;AAEA,uBAAS,KAAM,WAAYD,EAAE,GAAG,MAAMA,EAAE;AAAA,YACzC;AAEA,gBAAK,YAAa;AACjB,oBAAM,QAAS,QAAQ,SAAS,CAAE,EAAE;AAGpC,cAAAC,QAAO,IAAK,SAAS,aAAc;AAGnC,mBAAMD,KAAI,GAAGA,KAAI,YAAYA,MAAM;AAClC,uBAAO,QAASA,EAAE;AAClB,oBAAK,YAAY,KAAM,KAAK,QAAQ,EAAG,KACtC,CAAC,SAAS,IAAK,MAAM,YAAa,KAClCC,QAAO,SAAU,KAAK,IAAK,GAAI;AAE/B,sBAAK,KAAK,QAAS,KAAK,QAAQ,IAAK,YAAY,MAAO,UAAW;AAGlE,wBAAKA,QAAO,YAAY,CAAC,KAAK,UAAW;AACxC,sBAAAA,QAAO,SAAU,KAAK,KAAK;AAAA,wBAC1B,OAAO,KAAK;AAAA,wBACZ,aAAa,KAAK;AAAA,sBACnB,GAAG,GAAI;AAAA,oBACR;AAAA,kBACD,OAAO;AACN,4BAAS,KAAK,aAAa,MAAM,GAAI;AAAA,kBACtC;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,UAAI,iBAAiB;AAErB,UAAI,iBAAiB;AAErB,eAAS,aAAa;AACrB,eAAO;AAAA,MACR;AAEA,eAAS,cAAc;AACtB,eAAO;AAAA,MACR;AAEA,eAAS,GAAI,MAAMqB,QAAO,UAAU,MAAM,IAAI,KAAM;AACnD,YAAI,QAAQ;AAGZ,YAAK,OAAOA,WAAU,UAAW;AAGhC,cAAK,OAAO,aAAa,UAAW;AAGnC,mBAAO,QAAQ;AACf,uBAAW;AAAA,UACZ;AACA,eAAM,QAAQA,QAAQ;AACrB,eAAI,MAAM,MAAM,UAAU,MAAMA,OAAO,IAAK,GAAG,GAAI;AAAA,UACpD;AACA,iBAAO;AAAA,QACR;AAEA,YAAK,QAAQ,QAAQ,MAAM,MAAO;AAGjC,eAAK;AACL,iBAAO,WAAW;AAAA,QACnB,WAAY,MAAM,MAAO;AACxB,cAAK,OAAO,aAAa,UAAW;AAGnC,iBAAK;AACL,mBAAO;AAAA,UACR,OAAO;AAGN,iBAAK;AACL,mBAAO;AACP,uBAAW;AAAA,UACZ;AAAA,QACD;AACA,YAAK,OAAO,OAAQ;AACnB,eAAK;AAAA,QACN,WAAY,CAAC,IAAK;AACjB,iBAAO;AAAA,QACR;AAEA,YAAK,QAAQ,GAAI;AAChB,mBAAS;AACT,eAAK,SAAUC,QAAQ;AAGtB,YAAAtB,QAAO,EAAE,IAAKsB,MAAM;AACpB,mBAAO,OAAO,MAAO,MAAM,SAAU;AAAA,UACtC;AAGA,aAAG,OAAO,OAAO,SAAU,OAAO,OAAOtB,QAAO;AAAA,QACjD;AACA,eAAO,KAAK,KAAM,WAAW;AAC5B,UAAAA,QAAO,MAAM,IAAK,MAAMqB,QAAO,IAAI,MAAM,QAAS;AAAA,QACnD,CAAE;AAAA,MACH;AAMA,MAAArB,QAAO,QAAQ;AAAA,QAEd,KAAK,SAAU,MAAMqB,QAAO,SAAS,MAAM,UAAW;AAErD,cAAI,aAAa,aAAa,KAC7B,QAAQ,GAAG,WACX,SAAS,UAAU,MAAM,YAAY,UACrC,WAAW,SAAS,IAAK,IAAK;AAG/B,cAAK,CAAC,WAAY,IAAK,GAAI;AAC1B;AAAA,UACD;AAGA,cAAK,QAAQ,SAAU;AACtB,0BAAc;AACd,sBAAU,YAAY;AACtB,uBAAW,YAAY;AAAA,UACxB;AAIA,cAAK,UAAW;AACf,YAAArB,QAAO,KAAK,gBAAiB,mBAAmB,QAAS;AAAA,UAC1D;AAGA,cAAK,CAAC,QAAQ,MAAO;AACpB,oBAAQ,OAAOA,QAAO;AAAA,UACvB;AAGA,cAAK,EAAG,SAAS,SAAS,SAAW;AACpC,qBAAS,SAAS,SAAS,uBAAO,OAAQ,IAAK;AAAA,UAChD;AACA,cAAK,EAAG,cAAc,SAAS,SAAW;AACzC,0BAAc,SAAS,SAAS,SAAU,GAAI;AAI7C,qBAAO,OAAOA,YAAW,eAAeA,QAAO,MAAM,cAAc,EAAE,OACpEA,QAAO,MAAM,SAAS,MAAO,MAAM,SAAU,IAAI;AAAA,YACnD;AAAA,UACD;AAGA,UAAAqB,UAAUA,UAAS,IAAK,MAAO,aAAc,KAAK,CAAE,EAAG;AACvD,cAAIA,OAAM;AACV,iBAAQ,KAAM;AACb,kBAAM,eAAe,KAAMA,OAAO,CAAE,CAAE,KAAK,CAAC;AAC5C,mBAAO,WAAW,IAAK,CAAE;AACzB,0BAAe,IAAK,CAAE,KAAK,IAAK,MAAO,GAAI,EAAE,KAAK;AAGlD,gBAAK,CAAC,MAAO;AACZ;AAAA,YACD;AAGA,sBAAUrB,QAAO,MAAM,QAAS,IAAK,KAAK,CAAC;AAG3C,oBAAS,WAAW,QAAQ,eAAe,QAAQ,aAAc;AAGjE,sBAAUA,QAAO,MAAM,QAAS,IAAK,KAAK,CAAC;AAG3C,wBAAYA,QAAO,OAAQ;AAAA,cAC1B;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM,QAAQ;AAAA,cACd;AAAA,cACA,cAAc,YAAYA,QAAO,KAAK,MAAM,aAAa,KAAM,QAAS;AAAA,cACxE,WAAW,WAAW,KAAM,GAAI;AAAA,YACjC,GAAG,WAAY;AAGf,gBAAK,EAAG,WAAW,OAAQ,IAAK,IAAM;AACrC,yBAAW,OAAQ,IAAK,IAAI,CAAC;AAC7B,uBAAS,gBAAgB;AAGzB,kBAAK,CAAC,QAAQ,SACb,QAAQ,MAAM,KAAM,MAAM,MAAM,YAAY,WAAY,MAAM,OAAQ;AAEtE,oBAAK,KAAK,kBAAmB;AAC5B,uBAAK,iBAAkB,MAAM,WAAY;AAAA,gBAC1C;AAAA,cACD;AAAA,YACD;AAEA,gBAAK,QAAQ,KAAM;AAClB,sBAAQ,IAAI,KAAM,MAAM,SAAU;AAElC,kBAAK,CAAC,UAAU,QAAQ,MAAO;AAC9B,0BAAU,QAAQ,OAAO,QAAQ;AAAA,cAClC;AAAA,YACD;AAGA,gBAAK,UAAW;AACf,uBAAS,OAAQ,SAAS,iBAAiB,GAAG,SAAU;AAAA,YACzD,OAAO;AACN,uBAAS,KAAM,SAAU;AAAA,YAC1B;AAAA,UACD;AAAA,QAED;AAAA;AAAA,QAGA,QAAQ,SAAU,MAAMqB,QAAO,SAAS,UAAU,aAAc;AAE/D,cAAI,GAAG,WAAW,KACjB,QAAQ,GAAG,WACX,SAAS,UAAU,MAAM,YAAY,UACrC,WAAW,SAAS,QAAS,IAAK,KAAK,SAAS,IAAK,IAAK;AAE3D,cAAK,CAAC,YAAY,EAAG,SAAS,SAAS,SAAW;AACjD;AAAA,UACD;AAGA,UAAAA,UAAUA,UAAS,IAAK,MAAO,aAAc,KAAK,CAAE,EAAG;AACvD,cAAIA,OAAM;AACV,iBAAQ,KAAM;AACb,kBAAM,eAAe,KAAMA,OAAO,CAAE,CAAE,KAAK,CAAC;AAC5C,mBAAO,WAAW,IAAK,CAAE;AACzB,0BAAe,IAAK,CAAE,KAAK,IAAK,MAAO,GAAI,EAAE,KAAK;AAGlD,gBAAK,CAAC,MAAO;AACZ,mBAAM,QAAQ,QAAS;AACtB,gBAAArB,QAAO,MAAM,OAAQ,MAAM,OAAOqB,OAAO,CAAE,GAAG,SAAS,UAAU,IAAK;AAAA,cACvE;AACA;AAAA,YACD;AAEA,sBAAUrB,QAAO,MAAM,QAAS,IAAK,KAAK,CAAC;AAC3C,oBAAS,WAAW,QAAQ,eAAe,QAAQ,aAAc;AACjE,uBAAW,OAAQ,IAAK,KAAK,CAAC;AAC9B,kBAAM,IAAK,CAAE,KACZ,IAAI,OAAQ,YAAY,WAAW,KAAM,eAAgB,IAAI,SAAU;AAGxE,wBAAY,IAAI,SAAS;AACzB,mBAAQ,KAAM;AACb,0BAAY,SAAU,CAAE;AAExB,mBAAO,eAAe,aAAa,UAAU,cAC1C,CAAC,WAAW,QAAQ,SAAS,UAAU,UACvC,CAAC,OAAO,IAAI,KAAM,UAAU,SAAU,OACtC,CAAC,YAAY,aAAa,UAAU,YACrC,aAAa,QAAQ,UAAU,WAAa;AAC7C,yBAAS,OAAQ,GAAG,CAAE;AAEtB,oBAAK,UAAU,UAAW;AACzB,2BAAS;AAAA,gBACV;AACA,oBAAK,QAAQ,QAAS;AACrB,0BAAQ,OAAO,KAAM,MAAM,SAAU;AAAA,gBACtC;AAAA,cACD;AAAA,YACD;AAIA,gBAAK,aAAa,CAAC,SAAS,QAAS;AACpC,kBAAK,CAAC,QAAQ,YACb,QAAQ,SAAS,KAAM,MAAM,YAAY,SAAS,MAAO,MAAM,OAAQ;AAEvE,gBAAAA,QAAO,YAAa,MAAM,MAAM,SAAS,MAAO;AAAA,cACjD;AAEA,qBAAO,OAAQ,IAAK;AAAA,YACrB;AAAA,UACD;AAGA,cAAKA,QAAO,cAAe,MAAO,GAAI;AACrC,qBAAS,OAAQ,MAAM,eAAgB;AAAA,UACxC;AAAA,QACD;AAAA,QAEA,UAAU,SAAU,aAAc;AAEjC,cAAID,IAAG,GAAG,KAAK,SAAS,WAAW,cAClC,OAAO,IAAI,MAAO,UAAU,MAAO,GAGnCuB,SAAQtB,QAAO,MAAM,IAAK,WAAY,GAEtC,YACC,SAAS,IAAK,MAAM,QAAS,KAAK,uBAAO,OAAQ,IAAK,GACpDsB,OAAM,IAAK,KAAK,CAAC,GACpB,UAAUtB,QAAO,MAAM,QAASsB,OAAM,IAAK,KAAK,CAAC;AAGlD,eAAM,CAAE,IAAIA;AAEZ,eAAMvB,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAM;AACxC,iBAAMA,EAAE,IAAI,UAAWA,EAAE;AAAA,UAC1B;AAEA,UAAAuB,OAAM,iBAAiB;AAGvB,cAAK,QAAQ,eAAe,QAAQ,YAAY,KAAM,MAAMA,MAAM,MAAM,OAAQ;AAC/E;AAAA,UACD;AAGA,yBAAetB,QAAO,MAAM,SAAS,KAAM,MAAMsB,QAAO,QAAS;AAGjE,UAAAvB,KAAI;AACJ,kBAAU,UAAU,aAAcA,IAAI,MAAO,CAACuB,OAAM,qBAAqB,GAAI;AAC5E,YAAAA,OAAM,gBAAgB,QAAQ;AAE9B,gBAAI;AACJ,oBAAU,YAAY,QAAQ,SAAU,GAAI,MAC3C,CAACA,OAAM,8BAA8B,GAAI;AAIzC,kBAAK,CAACA,OAAM,cAAc,UAAU,cAAc,SACjDA,OAAM,WAAW,KAAM,UAAU,SAAU,GAAI;AAE/C,gBAAAA,OAAM,YAAY;AAClB,gBAAAA,OAAM,OAAO,UAAU;AAEvB,wBAAUtB,QAAO,MAAM,QAAS,UAAU,QAAS,KAAK,CAAC,GAAI,UAC5D,UAAU,SAAU,MAAO,QAAQ,MAAM,IAAK;AAE/C,oBAAK,QAAQ,QAAY;AACxB,uBAAOsB,OAAM,SAAS,SAAU,OAAQ;AACvC,oBAAAA,OAAM,eAAe;AACrB,oBAAAA,OAAM,gBAAgB;AAAA,kBACvB;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAGA,cAAK,QAAQ,cAAe;AAC3B,oBAAQ,aAAa,KAAM,MAAMA,MAAM;AAAA,UACxC;AAEA,iBAAOA,OAAM;AAAA,QACd;AAAA,QAEA,UAAU,SAAUA,QAAO,UAAW;AACrC,cAAIvB,IAAG,WAAW,KAAK,iBAAiB,kBACvC,eAAe,CAAC,GAChB,gBAAgB,SAAS,eACzB,MAAMuB,OAAM;AAGb,cAAK;AAAA;AAAA;AAAA;AAAA;AAAA,UAOJ,EAAGA,OAAM,SAAS,WAAWA,OAAM,UAAU,IAAM;AAEnD,mBAAQ,QAAQ,MAAM,MAAM,IAAI,cAAc,MAAO;AAIpD,kBAAK,IAAI,aAAa,KAAK,EAAGA,OAAM,SAAS,WAAW,IAAI,aAAa,OAAS;AACjF,kCAAkB,CAAC;AACnB,mCAAmB,CAAC;AACpB,qBAAMvB,KAAI,GAAGA,KAAI,eAAeA,MAAM;AACrC,8BAAY,SAAUA,EAAE;AAGxB,wBAAM,UAAU,WAAW;AAE3B,sBAAK,iBAAkB,GAAI,MAAM,QAAY;AAC5C,qCAAkB,GAAI,IAAI,UAAU,eACnCC,QAAQ,KAAK,IAAK,EAAE,MAAO,GAAI,IAAI,KACnCA,QAAO,KAAM,KAAK,MAAM,MAAM,CAAE,GAAI,CAAE,EAAE;AAAA,kBAC1C;AACA,sBAAK,iBAAkB,GAAI,GAAI;AAC9B,oCAAgB,KAAM,SAAU;AAAA,kBACjC;AAAA,gBACD;AACA,oBAAK,gBAAgB,QAAS;AAC7B,+BAAa,KAAM,EAAE,MAAM,KAAK,UAAU,gBAAgB,CAAE;AAAA,gBAC7D;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAGA,gBAAM;AACN,cAAK,gBAAgB,SAAS,QAAS;AACtC,yBAAa,KAAM,EAAE,MAAM,KAAK,UAAU,SAAS,MAAO,aAAc,EAAE,CAAE;AAAA,UAC7E;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,SAAS,SAAU,MAAM,MAAO;AAC/B,iBAAO,eAAgBA,QAAO,MAAM,WAAW,MAAM;AAAA,YACpD,YAAY;AAAA,YACZ,cAAc;AAAA,YAEd,KAAK,OAAO,SAAS,aACpB,WAAW;AACV,kBAAK,KAAK,eAAgB;AACzB,uBAAO,KAAM,KAAK,aAAc;AAAA,cACjC;AAAA,YACD,IACA,WAAW;AACV,kBAAK,KAAK,eAAgB;AACzB,uBAAO,KAAK,cAAe,IAAK;AAAA,cACjC;AAAA,YACD;AAAA,YAED,KAAK,SAAU,OAAQ;AACtB,qBAAO,eAAgB,MAAM,MAAM;AAAA,gBAClC,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,UAAU;AAAA,gBACV;AAAA,cACD,CAAE;AAAA,YACH;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,KAAK,SAAU,eAAgB;AAC9B,iBAAO,cAAeA,QAAO,OAAQ,IACpC,gBACA,IAAIA,QAAO,MAAO,aAAc;AAAA,QAClC;AAAA,QAEA,SAASA,QAAO,OAAQ,uBAAO,OAAQ,IAAK,GAAG;AAAA,UAC9C,MAAM;AAAA;AAAA,YAGL,UAAU;AAAA,UACX;AAAA,UACA,OAAO;AAAA;AAAA,YAGN,OAAO,SAAU,MAAO;AAIvB,kBAAImB,MAAK,QAAQ;AAGjB,kBAAK,eAAe,KAAMA,IAAG,IAAK,KACjCA,IAAG,SAAS,SAAUA,KAAI,OAAQ,GAAI;AAGtC,+BAAgBA,KAAI,SAAS,IAAK;AAAA,cACnC;AAGA,qBAAO;AAAA,YACR;AAAA,YACA,SAAS,SAAU,MAAO;AAIzB,kBAAIA,MAAK,QAAQ;AAGjB,kBAAK,eAAe,KAAMA,IAAG,IAAK,KACjCA,IAAG,SAAS,SAAUA,KAAI,OAAQ,GAAI;AAEtC,+BAAgBA,KAAI,OAAQ;AAAA,cAC7B;AAGA,qBAAO;AAAA,YACR;AAAA;AAAA;AAAA,YAIA,UAAU,SAAUG,QAAQ;AAC3B,kBAAI,SAASA,OAAM;AACnB,qBAAO,eAAe,KAAM,OAAO,IAAK,KACvC,OAAO,SAAS,SAAU,QAAQ,OAAQ,KAC1C,SAAS,IAAK,QAAQ,OAAQ,KAC9B,SAAU,QAAQ,GAAI;AAAA,YACxB;AAAA,UACD;AAAA,UAEA,cAAc;AAAA,YACb,cAAc,SAAUA,QAAQ;AAC/B,kBAAKA,OAAM,WAAW,QAAY;AAUjC,gBAAAA,OAAM,eAAe;AAAA,cACtB;AAAA,YACD;AAAA,UACD;AAAA,QACD,CAAE;AAAA,MACH;AAMA,eAAS,eAAgBH,KAAI,MAAM,SAAU;AAG5C,YAAK,CAAC,SAAU;AACf,cAAK,SAAS,IAAKA,KAAI,IAAK,MAAM,QAAY;AAC7C,YAAAnB,QAAO,MAAM,IAAKmB,KAAI,MAAM,UAAW;AAAA,UACxC;AACA;AAAA,QACD;AAGA,iBAAS,IAAKA,KAAI,MAAM,KAAM;AAC9B,QAAAnB,QAAO,MAAM,IAAKmB,KAAI,MAAM;AAAA,UAC3B,WAAW;AAAA,UACX,SAAS,SAAUG,QAAQ;AAC1B,gBAAI,QACH,QAAQ,SAAS,IAAK,MAAM,IAAK;AAiBlC,gBAAOA,OAAM,YAAY,KAAO,KAAM,IAAK,GAAI;AAG9C,kBAAK,CAAC,MAAM,QAAS;AAKpB,wBAAQ,MAAM,KAAM,SAAU;AAC9B,yBAAS,IAAK,MAAM,MAAM,KAAM;AAGhC,qBAAM,IAAK,EAAE;AACb,yBAAS,SAAS,IAAK,MAAM,IAAK;AAClC,yBAAS,IAAK,MAAM,MAAM,KAAM;AAEhC,oBAAK,UAAU,QAAS;AAGvB,kBAAAA,OAAM,yBAAyB;AAC/B,kBAAAA,OAAM,eAAe;AAQrB,yBAAO,UAAU,OAAO;AAAA,gBACzB;AAAA,cAMD,YAActB,QAAO,MAAM,QAAS,IAAK,KAAK,CAAC,GAAI,cAAe;AACjE,gBAAAsB,OAAM,gBAAgB;AAAA,cACvB;AAAA,YAID,WAAY,MAAM,QAAS;AAG1B,uBAAS,IAAK,MAAM,MAAM;AAAA,gBACzB,OAAOtB,QAAO,MAAM;AAAA,kBACnB,MAAO,CAAE;AAAA,kBACT,MAAM,MAAO,CAAE;AAAA,kBACf;AAAA,gBACD;AAAA,cACD,CAAE;AAUF,cAAAsB,OAAM,gBAAgB;AACtB,cAAAA,OAAM,gCAAgC;AAAA,YACvC;AAAA,UACD;AAAA,QACD,CAAE;AAAA,MACH;AAEA,MAAAtB,QAAO,cAAc,SAAU,MAAM,MAAM,QAAS;AAGnD,YAAK,KAAK,qBAAsB;AAC/B,eAAK,oBAAqB,MAAM,MAAO;AAAA,QACxC;AAAA,MACD;AAEA,MAAAA,QAAO,QAAQ,SAAU,KAAK,OAAQ;AAGrC,YAAK,EAAG,gBAAgBA,QAAO,QAAU;AACxC,iBAAO,IAAIA,QAAO,MAAO,KAAK,KAAM;AAAA,QACrC;AAGA,YAAK,OAAO,IAAI,MAAO;AACtB,eAAK,gBAAgB;AACrB,eAAK,OAAO,IAAI;AAIhB,eAAK,qBAAqB,IAAI,mBAC7B,aACA;AAGD,eAAK,SAAS,IAAI;AAClB,eAAK,gBAAgB,IAAI;AACzB,eAAK,gBAAgB,IAAI;AAAA,QAG1B,OAAO;AACN,eAAK,OAAO;AAAA,QACb;AAGA,YAAK,OAAQ;AACZ,UAAAA,QAAO,OAAQ,MAAM,KAAM;AAAA,QAC5B;AAGA,aAAK,YAAY,OAAO,IAAI,aAAa,KAAK,IAAI;AAGlD,aAAMA,QAAO,OAAQ,IAAI;AAAA,MAC1B;AAIA,MAAAA,QAAO,MAAM,YAAY;AAAA,QACxB,aAAaA,QAAO;AAAA,QACpB,oBAAoB;AAAA,QACpB,sBAAsB;AAAA,QACtB,+BAA+B;AAAA,QAC/B,aAAa;AAAA,QAEb,gBAAgB,WAAW;AAC1B,cAAI,IAAI,KAAK;AAEb,eAAK,qBAAqB;AAE1B,cAAK,KAAK,CAAC,KAAK,aAAc;AAC7B,cAAE,eAAe;AAAA,UAClB;AAAA,QACD;AAAA,QACA,iBAAiB,WAAW;AAC3B,cAAI,IAAI,KAAK;AAEb,eAAK,uBAAuB;AAE5B,cAAK,KAAK,CAAC,KAAK,aAAc;AAC7B,cAAE,gBAAgB;AAAA,UACnB;AAAA,QACD;AAAA,QACA,0BAA0B,WAAW;AACpC,cAAI,IAAI,KAAK;AAEb,eAAK,gCAAgC;AAErC,cAAK,KAAK,CAAC,KAAK,aAAc;AAC7B,cAAE,yBAAyB;AAAA,UAC5B;AAEA,eAAK,gBAAgB;AAAA,QACtB;AAAA,MACD;AAGA,MAAAA,QAAO,KAAM;AAAA,QACZ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,UAAU;AAAA,QACV,KAAK;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,QACX,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,eAAe;AAAA,QACf,WAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,MACR,GAAGA,QAAO,MAAM,OAAQ;AAExB,MAAAA,QAAO,KAAM,EAAE,OAAO,WAAW,MAAM,WAAW,GAAG,SAAU,MAAM,cAAe;AAMnF,iBAAS,mBAAoB,aAAc;AAG1C,cAAIsB,SAAQtB,QAAO,MAAM,IAAK,WAAY;AAC1C,UAAAsB,OAAM,OAAO,YAAY,SAAS,YAAY,UAAU;AACxD,UAAAA,OAAM,cAAc;AAIpB,cAAKA,OAAM,WAAWA,OAAM,eAAgB;AAK3C,qBAAS,IAAK,MAAM,QAAS,EAAGA,MAAM;AAAA,UACvC;AAAA,QACD;AAEA,QAAAtB,QAAO,MAAM,QAAS,IAAK,IAAI;AAAA;AAAA,UAG9B,OAAO,WAAW;AAKjB,2BAAgB,MAAM,MAAM,IAAK;AAEjC,gBAAK,MAAO;AACX,mBAAK,iBAAkB,cAAc,kBAAmB;AAAA,YACzD,OAAO;AAGN,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,UACA,SAAS,WAAW;AAGnB,2BAAgB,MAAM,IAAK;AAG3B,mBAAO;AAAA,UACR;AAAA,UAEA,UAAU,WAAW;AACpB,gBAAK,MAAO;AACX,mBAAK,oBAAqB,cAAc,kBAAmB;AAAA,YAC5D,OAAO;AAGN,qBAAO;AAAA,YACR;AAAA,UACD;AAAA;AAAA;AAAA,UAIA,UAAU,SAAUsB,QAAQ;AAC3B,mBAAO,SAAS,IAAKA,OAAM,QAAQ,IAAK;AAAA,UACzC;AAAA,UAEA;AAAA,QACD;AAAA,MACD,CAAE;AAKF,MAAAtB,QAAO,KAAM;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,cAAc;AAAA,MACf,GAAG,SAAU,MAAM,KAAM;AACxB,QAAAA,QAAO,MAAM,QAAS,IAAK,IAAI;AAAA,UAC9B,cAAc;AAAA,UACd,UAAU;AAAA,UAEV,QAAQ,SAAUsB,QAAQ;AACzB,gBAAI,KACH,SAAS,MACT,UAAUA,OAAM,eAChB,YAAYA,OAAM;AAInB,gBAAK,CAAC,WAAa,YAAY,UAAU,CAACtB,QAAO,SAAU,QAAQ,OAAQ,GAAM;AAChF,cAAAsB,OAAM,OAAO,UAAU;AACvB,oBAAM,UAAU,QAAQ,MAAO,MAAM,SAAU;AAC/C,cAAAA,OAAM,OAAO;AAAA,YACd;AACA,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAAtB,QAAO,GAAG,OAAQ;AAAA,QAEjB,IAAI,SAAUqB,QAAO,UAAU,MAAM,IAAK;AACzC,iBAAO,GAAI,MAAMA,QAAO,UAAU,MAAM,EAAG;AAAA,QAC5C;AAAA,QACA,KAAK,SAAUA,QAAO,UAAU,MAAM,IAAK;AAC1C,iBAAO,GAAI,MAAMA,QAAO,UAAU,MAAM,IAAI,CAAE;AAAA,QAC/C;AAAA,QACA,KAAK,SAAUA,QAAO,UAAU,IAAK;AACpC,cAAI,WAAW;AACf,cAAKA,UAASA,OAAM,kBAAkBA,OAAM,WAAY;AAGvD,wBAAYA,OAAM;AAClB,YAAArB,QAAQqB,OAAM,cAAe,EAAE;AAAA,cAC9B,UAAU,YACT,UAAU,WAAW,MAAM,UAAU,YACrC,UAAU;AAAA,cACX,UAAU;AAAA,cACV,UAAU;AAAA,YACX;AACA,mBAAO;AAAA,UACR;AACA,cAAK,OAAOA,WAAU,UAAW;AAGhC,iBAAM,QAAQA,QAAQ;AACrB,mBAAK,IAAK,MAAM,UAAUA,OAAO,IAAK,CAAE;AAAA,YACzC;AACA,mBAAO;AAAA,UACR;AACA,cAAK,aAAa,SAAS,OAAO,aAAa,YAAa;AAG3D,iBAAK;AACL,uBAAW;AAAA,UACZ;AACA,cAAK,OAAO,OAAQ;AACnB,iBAAK;AAAA,UACN;AACA,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAArB,QAAO,MAAM,OAAQ,MAAMqB,QAAO,IAAI,QAAS;AAAA,UAChD,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,UAIC,eAAe;AAGhB,eAAS,mBAAoB,MAAM,SAAU;AAC5C,YAAK,SAAU,MAAM,OAAQ,KAC5B,SAAU,QAAQ,aAAa,KAAK,UAAU,QAAQ,YAAY,IAAK,GAAI;AAE3E,iBAAOrB,QAAQ,IAAK,EAAE,SAAU,OAAQ,EAAG,CAAE,KAAK;AAAA,QACnD;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,eAAgB,KAAK,MAAO;AACpC,YAAI,MAAMD,IAAG,GACZ,SAAS,SAAS,IAAK,KAAK,QAAS;AAEtC,YAAK,KAAK,aAAa,GAAI;AAC1B;AAAA,QACD;AAGA,YAAK,QAAS;AACb,mBAAS,OAAQ,MAAM,eAAgB;AACvC,eAAM,QAAQ,QAAS;AACtB,iBAAMA,KAAI,GAAG,IAAI,OAAQ,IAAK,EAAE,QAAQA,KAAI,GAAGA,MAAM;AACpD,cAAAC,QAAO,MAAM,IAAK,MAAM,MAAM,OAAQ,IAAK,EAAGD,EAAE,CAAE;AAAA,YACnD;AAAA,UACD;AAAA,QACD;AAGA,YAAK,SAAS,QAAS,GAAI,GAAI;AAC9B,mBAAS,IAAK,MAAMC,QAAO,OAAQ,CAAC,GAAG,SAAS,IAAK,GAAI,CAAE,CAAE;AAAA,QAC9D;AAAA,MACD;AAEA,eAAS,OAAQ,MAAM,UAAU,UAAW;AAC3C,YAAI,MACH,QAAQ,WAAWA,QAAO,OAAQ,UAAU,IAAK,IAAI,MACrDD,KAAI;AAEL,gBAAU,OAAO,MAAOA,EAAE,MAAO,MAAMA,MAAM;AAC5C,cAAK,CAAC,YAAY,KAAK,aAAa,GAAI;AACvC,YAAAC,QAAO,UAAW,OAAQ,IAAK,CAAE;AAAA,UAClC;AAEA,cAAK,KAAK,YAAa;AACtB,gBAAK,YAAY,WAAY,IAAK,GAAI;AACrC,4BAAe,OAAQ,MAAM,QAAS,CAAE;AAAA,YACzC;AACA,iBAAK,WAAW,YAAa,IAAK;AAAA,UACnC;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,OAAQ;AAAA,QACd,eAAe,SAAU,MAAO;AAC/B,iBAAO;AAAA,QACR;AAAA,QAEA,OAAO,SAAU,MAAM,eAAe,mBAAoB;AACzD,cAAID,IAAG,GAAG,aAAa,cACtB,QAAQ,KAAK,UAAW,IAAK,GAC7B,SAAS,WAAY,IAAK;AAG3B,cAAK,SAAU,KAAK,aAAa,KAAK,KAAK,aAAa,OACtD,CAACC,QAAO,SAAU,IAAK,GAAI;AAI5B,2BAAe,OAAQ,KAAM;AAC7B,0BAAc,OAAQ,IAAK;AAE3B,iBAAMD,KAAI,GAAG,IAAI,YAAY,QAAQA,KAAI,GAAGA,MAAM;AAKjD,kBAAK,SAAU,aAAcA,EAAE,GAAG,UAAW,GAAI;AAChD,6BAAcA,EAAE,EAAE,eAAe,YAAaA,EAAE,EAAE;AAAA,cACnD;AAAA,YACD;AAAA,UACD;AAGA,cAAK,eAAgB;AACpB,gBAAK,mBAAoB;AACxB,4BAAc,eAAe,OAAQ,IAAK;AAC1C,6BAAe,gBAAgB,OAAQ,KAAM;AAE7C,mBAAMA,KAAI,GAAG,IAAI,YAAY,QAAQA,KAAI,GAAGA,MAAM;AACjD,+BAAgB,YAAaA,EAAE,GAAG,aAAcA,EAAE,CAAE;AAAA,cACrD;AAAA,YACD,OAAO;AACN,6BAAgB,MAAM,KAAM;AAAA,YAC7B;AAAA,UACD;AAGA,yBAAe,OAAQ,OAAO,QAAS;AACvC,cAAK,aAAa,SAAS,GAAI;AAC9B,0BAAe,cAAc,CAAC,UAAU,OAAQ,MAAM,QAAS,CAAE;AAAA,UAClE;AAGA,iBAAO;AAAA,QACR;AAAA,QAEA,WAAW,SAAU,OAAQ;AAC5B,cAAI,MAAM,MAAM,MACf,UAAUC,QAAO,MAAM,SACvBD,KAAI;AAEL,kBAAU,OAAO,MAAOA,EAAE,OAAQ,QAAWA,MAAM;AAClD,gBAAK,WAAY,IAAK,GAAI;AACzB,kBAAO,OAAO,KAAM,SAAS,OAAQ,GAAM;AAC1C,oBAAK,KAAK,QAAS;AAClB,uBAAM,QAAQ,KAAK,QAAS;AAC3B,wBAAK,QAAS,IAAK,GAAI;AACtB,sBAAAC,QAAO,MAAM,OAAQ,MAAM,IAAK;AAAA,oBAGjC,OAAO;AACN,sBAAAA,QAAO,YAAa,MAAM,MAAM,KAAK,MAAO;AAAA,oBAC7C;AAAA,kBACD;AAAA,gBACD;AAIA,qBAAM,SAAS,OAAQ,IAAI;AAAA,cAC5B;AACA,kBAAK,KAAM,SAAS,OAAQ,GAAI;AAI/B,qBAAM,SAAS,OAAQ,IAAI;AAAA,cAC5B;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,QAAQ,SAAU,UAAW;AAC5B,iBAAO,OAAQ,MAAM,UAAU,IAAK;AAAA,QACrC;AAAA,QAEA,QAAQ,SAAU,UAAW;AAC5B,iBAAO,OAAQ,MAAM,QAAS;AAAA,QAC/B;AAAA,QAEA,MAAM,SAAU,OAAQ;AACvB,iBAAO,OAAQ,MAAM,SAAUI,QAAQ;AACtC,mBAAOA,WAAU,SAChBJ,QAAO,KAAM,IAAK,IAClB,KAAK,MAAM,EAAE,KAAM,WAAW;AAC7B,kBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,qBAAK,cAAcI;AAAA,cACpB;AAAA,YACD,CAAE;AAAA,UACJ,GAAG,MAAM,OAAO,UAAU,MAAO;AAAA,QAClC;AAAA,QAEA,QAAQ,WAAW;AAClB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,kBAAI,SAAS,mBAAoB,MAAM,IAAK;AAC5C,qBAAO,YAAa,IAAK;AAAA,YAC1B;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,SAAS,WAAW;AACnB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,kBAAI,SAAS,mBAAoB,MAAM,IAAK;AAC5C,qBAAO,aAAc,MAAM,OAAO,UAAW;AAAA,YAC9C;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,QAAQ,WAAW;AAClB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,YAAa;AACtB,mBAAK,WAAW,aAAc,MAAM,IAAK;AAAA,YAC1C;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,OAAO,WAAW;AACjB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,YAAa;AACtB,mBAAK,WAAW,aAAc,MAAM,KAAK,WAAY;AAAA,YACtD;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,OAAO,WAAW;AACjB,cAAI,MACHL,KAAI;AAEL,kBAAU,OAAO,KAAMA,EAAE,MAAO,MAAMA,MAAM;AAC3C,gBAAK,KAAK,aAAa,GAAI;AAG1B,cAAAC,QAAO,UAAW,OAAQ,MAAM,KAAM,CAAE;AAGxC,mBAAK,cAAc;AAAA,YACpB;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,OAAO,SAAU,eAAe,mBAAoB;AACnD,0BAAgB,iBAAiB,OAAO,QAAQ;AAChD,8BAAoB,qBAAqB,OAAO,gBAAgB;AAEhE,iBAAO,KAAK,IAAK,WAAW;AAC3B,mBAAOA,QAAO,MAAO,MAAM,eAAe,iBAAkB;AAAA,UAC7D,CAAE;AAAA,QACH;AAAA,QAEA,MAAM,SAAU,OAAQ;AACvB,iBAAO,OAAQ,MAAM,SAAUI,QAAQ;AACtC,gBAAI,OAAO,KAAM,CAAE,KAAK,CAAC,GACxBL,KAAI,GACJ,IAAI,KAAK;AAEV,gBAAKK,WAAU,UAAa,KAAK,aAAa,GAAI;AACjD,qBAAO,KAAK;AAAA,YACb;AAGA,gBAAK,OAAOA,WAAU,YAAY,CAAC,aAAa,KAAMA,MAAM,KAC3D,CAAC,SAAW,SAAS,KAAMA,MAAM,KAAK,CAAE,IAAI,EAAG,GAAK,CAAE,EAAE,YAAY,CAAE,GAAI;AAE1E,cAAAA,SAAQJ,QAAO,cAAeI,MAAM;AAEpC,kBAAI;AACH,uBAAQL,KAAI,GAAGA,MAAM;AACpB,yBAAO,KAAMA,EAAE,KAAK,CAAC;AAGrB,sBAAK,KAAK,aAAa,GAAI;AAC1B,oBAAAC,QAAO,UAAW,OAAQ,MAAM,KAAM,CAAE;AACxC,yBAAK,YAAYI;AAAA,kBAClB;AAAA,gBACD;AAEA,uBAAO;AAAA,cAGR,SAAU,GAAI;AAAA,cAAC;AAAA,YAChB;AAEA,gBAAK,MAAO;AACX,mBAAK,MAAM,EAAE,OAAQA,MAAM;AAAA,YAC5B;AAAA,UACD,GAAG,MAAM,OAAO,UAAU,MAAO;AAAA,QAClC;AAAA,QAEA,aAAa,WAAW;AACvB,cAAI,UAAU,CAAC;AAGf,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAIG,UAAS,KAAK;AAElB,gBAAKP,QAAO,QAAS,MAAM,OAAQ,IAAI,GAAI;AAC1C,cAAAA,QAAO,UAAW,OAAQ,IAAK,CAAE;AACjC,kBAAKO,SAAS;AACb,gBAAAA,QAAO,aAAc,MAAM,IAAK;AAAA,cACjC;AAAA,YACD;AAAA,UAGD,GAAG,OAAQ;AAAA,QACZ;AAAA,MACD,CAAE;AAEF,MAAAP,QAAO,KAAM;AAAA,QACZ,UAAU;AAAA,QACV,WAAW;AAAA,QACX,cAAc;AAAA,QACd,aAAa;AAAA,QACb,YAAY;AAAA,MACb,GAAG,SAAU,MAAM,UAAW;AAC7B,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,UAAW;AACxC,cAAI,OACH,MAAM,CAAC,GACP,SAASA,QAAQ,QAAS,GAC1B,OAAO,OAAO,SAAS,GACvBD,KAAI;AAEL,iBAAQA,MAAK,MAAMA,MAAM;AACxB,oBAAQA,OAAM,OAAO,OAAO,KAAK,MAAO,IAAK;AAC7C,YAAAC,QAAQ,OAAQD,EAAE,CAAE,EAAG,QAAS,EAAG,KAAM;AACzC,iBAAK,MAAO,KAAK,KAAM;AAAA,UACxB;AAEA,iBAAO,KAAK,UAAW,GAAI;AAAA,QAC5B;AAAA,MACD,CAAE;AAEF,UAAI,YAAY,IAAI,OAAQ,OAAO,OAAO,mBAAmB,GAAI;AAEjE,UAAI,cAAc;AAElB,eAAS,UAAW,MAAO;AAK1B,YAAI,OAAO,KAAK,cAAc;AAI9B,YAAK,CAAC,MAAO;AACZ,iBAAOD;AAAA,QACR;AAEA,eAAO,KAAK,iBAAkB,IAAK;AAAA,MACpC;AAGA,eAAS,KAAM,MAAM,SAAS,UAAW;AACxC,YAAI,KAAK,MACR,MAAM,CAAC;AAGR,aAAM,QAAQ,SAAU;AACvB,cAAK,IAAK,IAAI,KAAK,MAAO,IAAK;AAC/B,eAAK,MAAO,IAAK,IAAI,QAAS,IAAK;AAAA,QACpC;AAEA,cAAM,SAAS,KAAM,IAAK;AAG1B,aAAM,QAAQ,SAAU;AACvB,eAAK,MAAO,IAAK,IAAI,IAAK,IAAK;AAAA,QAChC;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,OAAQ,MAAM,MAAM,UAAW;AACvC,YAAI,KACH,eAAe,YAAY,KAAM,IAAK;AAEvC,mBAAW,YAAY,UAAW,IAAK;AAGvC,YAAK,UAAW;AAef,gBAAM,SAAS,iBAAkB,IAAK,KAAK,SAAU,IAAK;AAE1D,cAAK,gBAAgB,KAAM;AAiB1B,kBAAM,IAAI,QAAS,UAAU,IAAK,KAAK;AAAA,UACxC;AAEA,cAAK,QAAQ,MAAM,CAAC,WAAY,IAAK,GAAI;AACxC,kBAAME,QAAO,MAAO,MAAM,IAAK;AAAA,UAChC;AAAA,QACD;AAEA,eAAO,QAAQ;AAAA;AAAA;AAAA,UAId,MAAM;AAAA,YACN;AAAA,MACF;AAEA,UAAI,cAAc,CAAE,UAAU,OAAO,IAAK,GACzC,aAAa,WAAW,cAAe,KAAM,EAAE;AAGhD,eAAS,eAAgB,MAAO;AAG/B,YAAI,UAAU,KAAM,CAAE,EAAE,YAAY,IAAI,KAAK,MAAO,CAAE,GACrDD,KAAI,YAAY;AAEjB,eAAQA,MAAM;AACb,iBAAO,YAAaA,EAAE,IAAI;AAC1B,cAAK,QAAQ,YAAa;AACzB,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAGA,eAAS,cAAe,MAAO;AAC9B,YAAK,QAAQ,YAAa;AACzB,iBAAO;AAAA,QACR;AACA,eAAO,eAAgB,IAAK,KAAK;AAAA,MAClC;AAEA,UAAI,yBAAyB,0BAC5B,QAAQ,WAAW,cAAe,OAAQ;AAI3C,eAAS,yBAAyB;AACjC;AAAA;AAAA,UAGC,CAAC;AAAA,UAGD,CAAC,MAAM;AAAA,UACN;AACD;AAAA,QACD;AAEA,YAAI,SACH,MAAM,WAAW,cAAe,KAAM,GACtC,KAAK,WAAW,cAAe,IAAK,GACpC,KAAK,WAAW,cAAe,IAAK;AAErC,cAAM,MAAM,UAAU;AAEtB,WAAG,MAAM,UAAU;AACnB,WAAG,MAAM,UAAU;AAEnB,YAAI,OAAO;AAEX,0BACE,YAAa,KAAM,EACnB,YAAa,GAAI,EACjB,WACA,YAAa,EAAG,EAChB,YAAa,EAAG,EAChB,WACA,YAAa,GAAG,UAAW,IAAK,CAAE;AAGpC,YAAK,MAAM,gBAAgB,GAAI;AAC9B,4BAAkB,YAAa,KAAM;AACrC;AAAA,QACD;AAEA,kBAAUD,QAAO,iBAAkB,EAAG;AAYtC,mCAA2B,QAAQ,KAAK;AAAA,UAAO;AAAA,YAC9CA,QAAO,iBAAkB,GAAI,EAAE;AAAA,UAAM;AAAA,QACtC,MAAM;AAQN,kCAA0B,KAAK,MAAO,WAAY,QAAQ,MAAO,IAChE,WAAY,QAAQ,cAAe,IACnC,WAAY,QAAQ,iBAAkB,CAAE,MAAM,GAAG;AAElD,0BAAkB,YAAa,KAAM;AAIrC,gBAAQ;AAAA,MACT;AAEA,MAAAE,QAAO,OAAQ,SAAS;AAAA,QACvB,sBAAsB,WAAW;AAChC,iCAAuB;AACvB,iBAAO;AAAA,QACR;AAAA,QAEA,uBAAuB,WAAW;AACjC,iCAAuB;AACvB,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAEF,UAAI,UAAU,EAAE,UAAU,YAAY,YAAY,UAAU,SAAS,QAAQ,GAC5E,qBAAqB;AAAA,QACpB,eAAe;AAAA,QACf,YAAY;AAAA,MACb;AAED,eAAS,kBAAmB,OAAO,OAAO,UAAW;AAIpD,YAAIE,WAAU,QAAQ,KAAM,KAAM;AAClC,eAAOA;AAAA;AAAA,UAGN,KAAK,IAAK,GAAGA,SAAS,CAAE,KAAM,YAAY,EAAI,KAAMA,SAAS,CAAE,KAAK;AAAA,YACpE;AAAA,MACF;AAEA,eAAS,mBAAoB,MAAM,WAAW,KAAK,aAAa,QAAQ,aAAc;AACrF,YAAIH,KAAI,cAAc,UAAU,IAAI,GACnC,QAAQ,GACR,QAAQ,GACR,cAAc;AAGf,YAAK,SAAU,cAAc,WAAW,YAAc;AACrD,iBAAO;AAAA,QACR;AAEA,eAAQA,KAAI,GAAGA,MAAK,GAAI;AAKvB,cAAK,QAAQ,UAAW;AACvB,2BAAeC,QAAO,IAAK,MAAM,MAAM,UAAWD,EAAE,GAAG,MAAM,MAAO;AAAA,UACrE;AAGA,cAAK,CAAC,aAAc;AAGnB,qBAASC,QAAO,IAAK,MAAM,YAAY,UAAWD,EAAE,GAAG,MAAM,MAAO;AAGpE,gBAAK,QAAQ,WAAY;AACxB,uBAASC,QAAO,IAAK,MAAM,WAAW,UAAWD,EAAE,IAAI,SAAS,MAAM,MAAO;AAAA,YAG9E,OAAO;AACN,uBAASC,QAAO,IAAK,MAAM,WAAW,UAAWD,EAAE,IAAI,SAAS,MAAM,MAAO;AAAA,YAC9E;AAAA,UAID,OAAO;AAGN,gBAAK,QAAQ,WAAY;AACxB,uBAASC,QAAO,IAAK,MAAM,YAAY,UAAWD,EAAE,GAAG,MAAM,MAAO;AAAA,YACrE;AAGA,gBAAK,QAAQ,UAAW;AACvB,uBAASC,QAAO,IAAK,MAAM,WAAW,UAAWD,EAAE,IAAI,SAAS,MAAM,MAAO;AAAA,YAC9E;AAAA,UACD;AAAA,QACD;AAGA,YAAK,CAAC,eAAe,eAAe,GAAI;AAIvC,mBAAS,KAAK,IAAK,GAAG,KAAK;AAAA,YAC1B,KAAM,WAAW,UAAW,CAAE,EAAE,YAAY,IAAI,UAAU,MAAO,CAAE,CAAE,IACrE,cACA,QACA,QACA;AAAA;AAAA;AAAA,UAID,CAAE,KAAK;AAAA,QACR;AAEA,eAAO,QAAQ;AAAA,MAChB;AAEA,eAAS,iBAAkB,MAAM,WAAW,OAAQ;AAGnD,YAAI,SAAS,UAAW,IAAK,GAI5B,kBAAkB,QAAQ,OAC1B,cAAc,mBACbC,QAAO,IAAK,MAAM,aAAa,OAAO,MAAO,MAAM,cACpD,mBAAmB,aAEnB,MAAM,OAAQ,MAAM,WAAW,MAAO,GACtC,aAAa,WAAW,UAAW,CAAE,EAAE,YAAY,IAAI,UAAU,MAAO,CAAE;AAG3E,YAAK,UAAU,KAAM,GAAI,GAAI;AAC5B,cAAK,CAAC,OAAQ;AACb,mBAAO;AAAA,UACR;AACA,gBAAM;AAAA,QACP;AAGA;AAAA;AAAA;AAAA,WAKE,QAAQ;AAAA;AAAA;AAAA,UAKN,QAAQ,eAER,CAAC,QAAQ,sBAAsB,KAAK,SAAU,MAAM,KAAM,KAE1D,CAAC,QAAQ,qBAAqB,KAAK,SAAU,MAAM,IAAK;AAAA,UAI3D,KAAK,eAAe,EAAE;AAAA,UAAS;AAE/B,wBAAcA,QAAO,IAAK,MAAM,aAAa,OAAO,MAAO,MAAM;AAKjE,6BAAmB,cAAc;AACjC,cAAK,kBAAmB;AACvB,kBAAM,KAAM,UAAW;AAAA,UACxB;AAAA,QACD;AAGA,cAAM,WAAY,GAAI,KAAK;AAG3B,eAAS,MACR;AAAA,UACC;AAAA,UACA;AAAA,UACA,UAAW,cAAc,WAAW;AAAA,UACpC;AAAA,UACA;AAAA;AAAA,UAGA;AAAA,QACD,IACG;AAAA,MACL;AAEA,MAAAA,QAAO,OAAQ;AAAA;AAAA;AAAA,QAId,UAAU,CAAC;AAAA;AAAA,QAGX,OAAO,SAAU,MAAM,MAAM,OAAO,OAAQ;AAG3C,cAAK,CAAC,QAAQ,KAAK,aAAa,KAAK,KAAK,aAAa,KAAK,CAAC,KAAK,OAAQ;AACzE;AAAA,UACD;AAGA,cAAI,KAAK,MAAM,OACd,WAAW,aAAc,IAAK,GAC9B,eAAe,YAAY,KAAM,IAAK,GACtC,QAAQ,KAAK;AAKd,cAAK,CAAC,cAAe;AACpB,mBAAO,cAAe,QAAS;AAAA,UAChC;AAGA,kBAAQA,QAAO,SAAU,IAAK,KAAKA,QAAO,SAAU,QAAS;AAG7D,cAAK,UAAU,QAAY;AAC1B,mBAAO,OAAO;AAGd,gBAAK,SAAS,aAAc,MAAM,QAAQ,KAAM,KAAM,MAAO,IAAK,CAAE,GAAI;AACvE,sBAAQ,UAAW,MAAM,MAAM,GAAI;AAGnC,qBAAO;AAAA,YACR;AAGA,gBAAK,SAAS,QAAQ,UAAU,OAAQ;AACvC;AAAA,YACD;AAGA,gBAAK,SAAS,UAAW;AACxB,uBAAS,OAAO,IAAK,CAAE,MAAO,SAAU,QAAS,IAAI,OAAO;AAAA,YAC7D;AAIA,gBAAK,QAAQ,UAAU,MAAM,KAAK,QAAS,YAAa,MAAM,GAAI;AACjE,oBAAO,IAAK,IAAI;AAAA,YACjB;AAGA,gBAAK,CAAC,SAAS,EAAG,SAAS,WACxB,QAAQ,MAAM,IAAK,MAAM,OAAO,KAAM,OAAQ,QAAY;AAE5D,kBAAK,cAAe;AACnB,sBAAM,YAAa,MAAM,KAAM;AAAA,cAChC,OAAO;AACN,sBAAO,IAAK,IAAI;AAAA,cACjB;AAAA,YACD;AAAA,UAED,OAAO;AAGN,gBAAK,SAAS,SAAS,UACpB,MAAM,MAAM,IAAK,MAAM,OAAO,KAAM,OAAQ,QAAY;AAE1D,qBAAO;AAAA,YACR;AAGA,mBAAO,MAAO,IAAK;AAAA,UACpB;AAAA,QACD;AAAA,QAEA,KAAK,SAAU,MAAM,MAAM,OAAO,QAAS;AAC1C,cAAI,KAAK,KAAK,OACb,WAAW,aAAc,IAAK,GAC9B,eAAe,YAAY,KAAM,IAAK;AAKvC,cAAK,CAAC,cAAe;AACpB,mBAAO,cAAe,QAAS;AAAA,UAChC;AAGA,kBAAQA,QAAO,SAAU,IAAK,KAAKA,QAAO,SAAU,QAAS;AAG7D,cAAK,SAAS,SAAS,OAAQ;AAC9B,kBAAM,MAAM,IAAK,MAAM,MAAM,KAAM;AAAA,UACpC;AAGA,cAAK,QAAQ,QAAY;AACxB,kBAAM,OAAQ,MAAM,MAAM,MAAO;AAAA,UAClC;AAGA,cAAK,QAAQ,YAAY,QAAQ,oBAAqB;AACrD,kBAAM,mBAAoB,IAAK;AAAA,UAChC;AAGA,cAAK,UAAU,MAAM,OAAQ;AAC5B,kBAAM,WAAY,GAAI;AACtB,mBAAO,UAAU,QAAQ,SAAU,GAAI,IAAI,OAAO,IAAI;AAAA,UACvD;AAEA,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,KAAM,CAAE,UAAU,OAAQ,GAAG,SAAU,IAAI,WAAY;AAC7D,QAAAA,QAAO,SAAU,SAAU,IAAI;AAAA,UAC9B,KAAK,SAAU,MAAM,UAAU,OAAQ;AACtC,gBAAK,UAAW;AAIf,qBAAOA,QAAO,IAAK,MAAM,SAAU,MAAM,SACxC,KAAM,MAAM,SAAS,WAAW;AAC/B,uBAAO,iBAAkB,MAAM,WAAW,KAAM;AAAA,cACjD,CAAE,IACF,iBAAkB,MAAM,WAAW,KAAM;AAAA,YAC3C;AAAA,UACD;AAAA,UAEA,KAAK,SAAU,MAAM,OAAO,OAAQ;AACnC,gBAAIE,UACH,SAAS,UAAW,IAAK,GAGzB,cAAc,SACbF,QAAO,IAAK,MAAM,aAAa,OAAO,MAAO,MAAM,cACpD,WAAW,QACV;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACD,IACA;AAGF,gBAAK,aAAcE,WAAU,QAAQ,KAAM,KAAM,OAC9CA,SAAS,CAAE,KAAK,UAAW,MAAO;AAEpC,mBAAK,MAAO,SAAU,IAAI;AAC1B,sBAAQF,QAAO,IAAK,MAAM,SAAU;AAAA,YACrC;AAEA,mBAAO,kBAAmB,MAAM,OAAO,QAAS;AAAA,UACjD;AAAA,QACD;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,KAAM;AAAA,QACZ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,MACT,GAAG,SAAU,QAAQ,QAAS;AAC7B,QAAAA,QAAO,SAAU,SAAS,MAAO,IAAI;AAAA,UACpC,QAAQ,SAAU,OAAQ;AACzB,gBAAID,KAAI,GACP,WAAW,CAAC,GAGZ,QAAQ,OAAO,UAAU,WAAW,MAAM,MAAO,GAAI,IAAI,CAAE,KAAM;AAElE,mBAAQA,KAAI,GAAGA,MAAM;AACpB,uBAAU,SAAS,UAAWA,EAAE,IAAI,MAAO,IAC1C,MAAOA,EAAE,KAAK,MAAOA,KAAI,CAAE,KAAK,MAAO,CAAE;AAAA,YAC3C;AAEA,mBAAO;AAAA,UACR;AAAA,QACD;AAEA,YAAK,WAAW,UAAW;AAC1B,UAAAC,QAAO,SAAU,SAAS,MAAO,EAAE,MAAM;AAAA,QAC1C;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,KAAK,SAAU,MAAM,OAAQ;AAC5B,iBAAO,OAAQ,MAAM,SAAU,MAAMuB,OAAMnB,QAAQ;AAClD,gBAAI,QAAQ,KACX,MAAM,CAAC,GACPL,KAAI;AAEL,gBAAK,MAAM,QAASwB,KAAK,GAAI;AAC5B,uBAAS,UAAW,IAAK;AACzB,oBAAMA,MAAK;AAEX,qBAAQxB,KAAI,KAAKA,MAAM;AACtB,oBAAKwB,MAAMxB,EAAE,CAAE,IAAIC,QAAO,IAAK,MAAMuB,MAAMxB,EAAE,GAAG,OAAO,MAAO;AAAA,cAC/D;AAEA,qBAAO;AAAA,YACR;AAEA,mBAAOK,WAAU,SAChBJ,QAAO,MAAO,MAAMuB,OAAMnB,MAAM,IAChCJ,QAAO,IAAK,MAAMuB,KAAK;AAAA,UACzB,GAAG,MAAM,OAAO,UAAU,SAAS,CAAE;AAAA,QACtC;AAAA,MACD,CAAE;AAEF,eAAS,MAAO,MAAM,SAAS,MAAM,KAAK,QAAS;AAClD,eAAO,IAAI,MAAM,UAAU,KAAM,MAAM,SAAS,MAAM,KAAK,MAAO;AAAA,MACnE;AACA,MAAAvB,QAAO,QAAQ;AAEf,YAAM,YAAY;AAAA,QACjB,aAAa;AAAA,QACb,MAAM,SAAU,MAAM,SAAS,MAAM,KAAK,QAAQ,MAAO;AACxD,eAAK,OAAO;AACZ,eAAK,OAAO;AACZ,eAAK,SAAS,UAAUA,QAAO,OAAO;AACtC,eAAK,UAAU;AACf,eAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,eAAK,MAAM;AACX,eAAK,OAAO,SAAU,SAAU,IAAK,IAAI,OAAO;AAAA,QACjD;AAAA,QACA,KAAK,WAAW;AACf,cAAI,QAAQ,MAAM,UAAW,KAAK,IAAK;AAEvC,iBAAO,SAAS,MAAM,MACrB,MAAM,IAAK,IAAK,IAChB,MAAM,UAAU,SAAS,IAAK,IAAK;AAAA,QACrC;AAAA,QACA,KAAK,SAAU,SAAU;AACxB,cAAI,OACH,QAAQ,MAAM,UAAW,KAAK,IAAK;AAEpC,cAAK,KAAK,QAAQ,UAAW;AAC5B,iBAAK,MAAM,QAAQA,QAAO,OAAQ,KAAK,MAAO;AAAA,cAC7C;AAAA,cAAS,KAAK,QAAQ,WAAW;AAAA,cAAS;AAAA,cAAG;AAAA,cAAG,KAAK,QAAQ;AAAA,YAC9D;AAAA,UACD,OAAO;AACN,iBAAK,MAAM,QAAQ;AAAA,UACpB;AACA,eAAK,OAAQ,KAAK,MAAM,KAAK,SAAU,QAAQ,KAAK;AAEpD,cAAK,KAAK,QAAQ,MAAO;AACxB,iBAAK,QAAQ,KAAK,KAAM,KAAK,MAAM,KAAK,KAAK,IAAK;AAAA,UACnD;AAEA,cAAK,SAAS,MAAM,KAAM;AACzB,kBAAM,IAAK,IAAK;AAAA,UACjB,OAAO;AACN,kBAAM,UAAU,SAAS,IAAK,IAAK;AAAA,UACpC;AACA,iBAAO;AAAA,QACR;AAAA,MACD;AAEA,YAAM,UAAU,KAAK,YAAY,MAAM;AAEvC,YAAM,YAAY;AAAA,QACjB,UAAU;AAAA,UACT,KAAK,SAAU,OAAQ;AACtB,gBAAI;AAIJ,gBAAK,MAAM,KAAK,aAAa,KAC5B,MAAM,KAAM,MAAM,IAAK,KAAK,QAAQ,MAAM,KAAK,MAAO,MAAM,IAAK,KAAK,MAAO;AAC7E,qBAAO,MAAM,KAAM,MAAM,IAAK;AAAA,YAC/B;AAMA,qBAASA,QAAO,IAAK,MAAM,MAAM,MAAM,MAAM,EAAG;AAGhD,mBAAO,CAAC,UAAU,WAAW,SAAS,IAAI;AAAA,UAC3C;AAAA,UACA,KAAK,SAAU,OAAQ;AAKtB,gBAAKA,QAAO,GAAG,KAAM,MAAM,IAAK,GAAI;AACnC,cAAAA,QAAO,GAAG,KAAM,MAAM,IAAK,EAAG,KAAM;AAAA,YACrC,WAAY,MAAM,KAAK,aAAa,MACnCA,QAAO,SAAU,MAAM,IAAK,KAC3B,MAAM,KAAK,MAAO,cAAe,MAAM,IAAK,CAAE,KAAK,OAAS;AAC7D,cAAAA,QAAO,MAAO,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAK;AAAA,YAC9D,OAAO;AACN,oBAAM,KAAM,MAAM,IAAK,IAAI,MAAM;AAAA,YAClC;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,MAAAA,QAAO,SAAS;AAAA,QACf,QAAQ,SAAU,GAAI;AACrB,iBAAO;AAAA,QACR;AAAA,QACA,OAAO,SAAU,GAAI;AACpB,iBAAO,MAAM,KAAK,IAAK,IAAI,KAAK,EAAG,IAAI;AAAA,QACxC;AAAA,QACA,UAAU;AAAA,MACX;AAEA,MAAAA,QAAO,KAAK,MAAM,UAAU;AAG5B,MAAAA,QAAO,GAAG,OAAO,CAAC;AAElB,UACC,OAAO,YACP,WAAW,0BACX,OAAO;AAER,eAASwB,YAAW;AACnB,YAAK,YAAa;AACjB,cAAK,WAAW,WAAW,SAAS1B,QAAO,uBAAwB;AAClE,YAAAA,QAAO,sBAAuB0B,SAAS;AAAA,UACxC,OAAO;AACN,YAAA1B,QAAO,WAAY0B,WAAU,EAAG;AAAA,UACjC;AAEA,UAAAxB,QAAO,GAAG,KAAK;AAAA,QAChB;AAAA,MACD;AAGA,eAAS,cAAc;AACtB,QAAAF,QAAO,WAAY,WAAW;AAC7B,kBAAQ;AAAA,QACT,CAAE;AACF,eAAS,QAAQ,KAAK,IAAI;AAAA,MAC3B;AAGA,eAAS,MAAO,MAAM,cAAe;AACpC,YAAI,OACHC,KAAI,GACJ,QAAQ,EAAE,QAAQ,KAAK;AAIxB,uBAAe,eAAe,IAAI;AAClC,eAAQA,KAAI,GAAGA,MAAK,IAAI,cAAe;AACtC,kBAAQ,UAAWA,EAAE;AACrB,gBAAO,WAAW,KAAM,IAAI,MAAO,YAAY,KAAM,IAAI;AAAA,QAC1D;AAEA,YAAK,cAAe;AACnB,gBAAM,UAAU,MAAM,QAAQ;AAAA,QAC/B;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,YAAa,OAAO,MAAM,WAAY;AAC9C,YAAI,OACH,cAAe,UAAU,SAAU,IAAK,KAAK,CAAC,GAAI,OAAQ,UAAU,SAAU,GAAI,CAAE,GACpF,QAAQ,GACR,SAAS,WAAW;AACrB,eAAQ,QAAQ,QAAQ,SAAU;AACjC,cAAO,QAAQ,WAAY,KAAM,EAAE,KAAM,WAAW,MAAM,KAAM,GAAM;AAGrE,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAEA,eAAS,iBAAkB,MAAM,OAAO0B,OAAO;AAC9C,YAAI,MAAM,OAAO,QAAQ,OAAO,SAAS,WAAW,gBAAgB,SACnE,QAAQ,WAAW,SAAS,YAAY,OACxC,OAAO,MACP,OAAO,CAAC,GACR,QAAQ,KAAK,OACb,SAAS,KAAK,YAAY,mBAAoB,IAAK,GACnD,WAAW,SAAS,IAAK,MAAM,QAAS;AAGzC,YAAK,CAACA,MAAK,OAAQ;AAClB,kBAAQzB,QAAO,YAAa,MAAM,IAAK;AACvC,cAAK,MAAM,YAAY,MAAO;AAC7B,kBAAM,WAAW;AACjB,sBAAU,MAAM,MAAM;AACtB,kBAAM,MAAM,OAAO,WAAW;AAC7B,kBAAK,CAAC,MAAM,UAAW;AACtB,wBAAQ;AAAA,cACT;AAAA,YACD;AAAA,UACD;AACA,gBAAM;AAEN,eAAK,OAAQ,WAAW;AAGvB,iBAAK,OAAQ,WAAW;AACvB,oBAAM;AACN,kBAAK,CAACA,QAAO,MAAO,MAAM,IAAK,EAAE,QAAS;AACzC,sBAAM,MAAM,KAAK;AAAA,cAClB;AAAA,YACD,CAAE;AAAA,UACH,CAAE;AAAA,QACH;AAGA,aAAM,QAAQ,OAAQ;AACrB,kBAAQ,MAAO,IAAK;AACpB,cAAK,SAAS,KAAM,KAAM,GAAI;AAC7B,mBAAO,MAAO,IAAK;AACnB,qBAAS,UAAU,UAAU;AAC7B,gBAAK,WAAY,SAAS,SAAS,SAAW;AAI7C,kBAAK,UAAU,UAAU,YAAY,SAAU,IAAK,MAAM,QAAY;AACrE,yBAAS;AAAA,cAGV,OAAO;AACN;AAAA,cACD;AAAA,YACD;AACA,iBAAM,IAAK,IAAI,YAAY,SAAU,IAAK,KAAKA,QAAO,MAAO,MAAM,IAAK;AAAA,UACzE;AAAA,QACD;AAGA,oBAAY,CAACA,QAAO,cAAe,KAAM;AACzC,YAAK,CAAC,aAAaA,QAAO,cAAe,IAAK,GAAI;AACjD;AAAA,QACD;AAGA,YAAK,SAAS,KAAK,aAAa,GAAI;AAKnC,UAAAyB,MAAK,WAAW,CAAE,MAAM,UAAU,MAAM,WAAW,MAAM,SAAU;AAGnE,2BAAiB,YAAY,SAAS;AACtC,cAAK,kBAAkB,MAAO;AAC7B,6BAAiB,SAAS,IAAK,MAAM,SAAU;AAAA,UAChD;AACA,oBAAUzB,QAAO,IAAK,MAAM,SAAU;AACtC,cAAK,YAAY,QAAS;AACzB,gBAAK,gBAAiB;AACrB,wBAAU;AAAA,YACX,OAAO;AAGN,uBAAU,CAAE,IAAK,GAAG,IAAK;AACzB,+BAAiB,KAAK,MAAM,WAAW;AACvC,wBAAUA,QAAO,IAAK,MAAM,SAAU;AACtC,uBAAU,CAAE,IAAK,CAAE;AAAA,YACpB;AAAA,UACD;AAGA,cAAK,YAAY,YAAY,YAAY,kBAAkB,kBAAkB,MAAO;AACnF,gBAAKA,QAAO,IAAK,MAAM,OAAQ,MAAM,QAAS;AAG7C,kBAAK,CAAC,WAAY;AACjB,qBAAK,KAAM,WAAW;AACrB,wBAAM,UAAU;AAAA,gBACjB,CAAE;AACF,oBAAK,kBAAkB,MAAO;AAC7B,4BAAU,MAAM;AAChB,mCAAiB,YAAY,SAAS,KAAK;AAAA,gBAC5C;AAAA,cACD;AACA,oBAAM,UAAU;AAAA,YACjB;AAAA,UACD;AAAA,QACD;AAEA,YAAKyB,MAAK,UAAW;AACpB,gBAAM,WAAW;AACjB,eAAK,OAAQ,WAAW;AACvB,kBAAM,WAAWA,MAAK,SAAU,CAAE;AAClC,kBAAM,YAAYA,MAAK,SAAU,CAAE;AACnC,kBAAM,YAAYA,MAAK,SAAU,CAAE;AAAA,UACpC,CAAE;AAAA,QACH;AAGA,oBAAY;AACZ,aAAM,QAAQ,MAAO;AAGpB,cAAK,CAAC,WAAY;AACjB,gBAAK,UAAW;AACf,kBAAK,YAAY,UAAW;AAC3B,yBAAS,SAAS;AAAA,cACnB;AAAA,YACD,OAAO;AACN,yBAAW,SAAS,IAAK,MAAM,UAAU,EAAE,SAAS,eAAe,CAAE;AAAA,YACtE;AAGA,gBAAK,QAAS;AACb,uBAAS,SAAS,CAAC;AAAA,YACpB;AAGA,gBAAK,QAAS;AACb,uBAAU,CAAE,IAAK,GAAG,IAAK;AAAA,YAC1B;AAGA,iBAAK,KAAM,WAAW;AAGrB,kBAAK,CAAC,QAAS;AACd,yBAAU,CAAE,IAAK,CAAE;AAAA,cACpB;AACA,uBAAS,OAAQ,MAAM,QAAS;AAChC,mBAAM,QAAQ,MAAO;AACpB,gBAAAzB,QAAO,MAAO,MAAM,MAAM,KAAM,IAAK,CAAE;AAAA,cACxC;AAAA,YACD,CAAE;AAAA,UACH;AAGA,sBAAY,YAAa,SAAS,SAAU,IAAK,IAAI,GAAG,MAAM,IAAK;AACnE,cAAK,EAAG,QAAQ,WAAa;AAC5B,qBAAU,IAAK,IAAI,UAAU;AAC7B,gBAAK,QAAS;AACb,wBAAU,MAAM,UAAU;AAC1B,wBAAU,QAAQ;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,eAAS,WAAY,OAAO,eAAgB;AAC3C,YAAI,OAAO,MAAM,QAAQ,OAAO;AAGhC,aAAM,SAAS,OAAQ;AACtB,iBAAO,aAAc,KAAM;AAC3B,mBAAS,cAAe,IAAK;AAC7B,kBAAQ,MAAO,KAAM;AACrB,cAAK,MAAM,QAAS,KAAM,GAAI;AAC7B,qBAAS,MAAO,CAAE;AAClB,oBAAQ,MAAO,KAAM,IAAI,MAAO,CAAE;AAAA,UACnC;AAEA,cAAK,UAAU,MAAO;AACrB,kBAAO,IAAK,IAAI;AAChB,mBAAO,MAAO,KAAM;AAAA,UACrB;AAEA,kBAAQA,QAAO,SAAU,IAAK;AAC9B,cAAK,SAAS,YAAY,OAAQ;AACjC,oBAAQ,MAAM,OAAQ,KAAM;AAC5B,mBAAO,MAAO,IAAK;AAInB,iBAAM,SAAS,OAAQ;AACtB,kBAAK,EAAG,SAAS,QAAU;AAC1B,sBAAO,KAAM,IAAI,MAAO,KAAM;AAC9B,8BAAe,KAAM,IAAI;AAAA,cAC1B;AAAA,YACD;AAAA,UACD,OAAO;AACN,0BAAe,IAAK,IAAI;AAAA,UACzB;AAAA,QACD;AAAA,MACD;AAEA,eAAS,UAAW,MAAM,YAAY,SAAU;AAC/C,YAAI,QACH,SACA,QAAQ,GACR,SAAS,UAAU,WAAW,QAC9B,WAAWA,QAAO,SAAS,EAAE,OAAQ,WAAW;AAG/C,iBAAO,KAAK;AAAA,QACb,CAAE,GACF,OAAO,WAAW;AACjB,cAAK,SAAU;AACd,mBAAO;AAAA,UACR;AACA,cAAI,cAAc,SAAS,YAAY,GACtC,YAAY,KAAK,IAAK,GAAG,UAAU,YAAY,UAAU,WAAW,WAAY,GAEhF,UAAU,KAAM,YAAY,UAAU,YAAY,IAClD0B,SAAQ,GACRC,UAAS,UAAU,OAAO;AAE3B,iBAAQD,SAAQC,SAAQD,UAAU;AACjC,sBAAU,OAAQA,MAAM,EAAE,IAAK,OAAQ;AAAA,UACxC;AAEA,mBAAS,WAAY,MAAM,CAAE,WAAW,SAAS,SAAU,CAAE;AAG7D,cAAK,UAAU,KAAKC,SAAS;AAC5B,mBAAO;AAAA,UACR;AAGA,cAAK,CAACA,SAAS;AACd,qBAAS,WAAY,MAAM,CAAE,WAAW,GAAG,CAAE,CAAE;AAAA,UAChD;AAGA,mBAAS,YAAa,MAAM,CAAE,SAAU,CAAE;AAC1C,iBAAO;AAAA,QACR,GACA,YAAY,SAAS,QAAS;AAAA,UAC7B;AAAA,UACA,OAAO3B,QAAO,OAAQ,CAAC,GAAG,UAAW;AAAA,UACrC,MAAMA,QAAO,OAAQ,MAAM;AAAA,YAC1B,eAAe,CAAC;AAAA,YAChB,QAAQA,QAAO,OAAO;AAAA,UACvB,GAAG,OAAQ;AAAA,UACX,oBAAoB;AAAA,UACpB,iBAAiB;AAAA,UACjB,WAAW,SAAS,YAAY;AAAA,UAChC,UAAU,QAAQ;AAAA,UAClB,QAAQ,CAAC;AAAA,UACT,aAAa,SAAU,MAAM,KAAM;AAClC,gBAAI,QAAQA,QAAO;AAAA,cAAO;AAAA,cAAM,UAAU;AAAA,cAAM;AAAA,cAAM;AAAA,cACrD,UAAU,KAAK,cAAe,IAAK,KAAK,UAAU,KAAK;AAAA,YAAO;AAC/D,sBAAU,OAAO,KAAM,KAAM;AAC7B,mBAAO;AAAA,UACR;AAAA,UACA,MAAM,SAAU,SAAU;AACzB,gBAAI0B,SAAQ,GAIXC,UAAS,UAAU,UAAU,OAAO,SAAS;AAC9C,gBAAK,SAAU;AACd,qBAAO;AAAA,YACR;AACA,sBAAU;AACV,mBAAQD,SAAQC,SAAQD,UAAU;AACjC,wBAAU,OAAQA,MAAM,EAAE,IAAK,CAAE;AAAA,YAClC;AAGA,gBAAK,SAAU;AACd,uBAAS,WAAY,MAAM,CAAE,WAAW,GAAG,CAAE,CAAE;AAC/C,uBAAS,YAAa,MAAM,CAAE,WAAW,OAAQ,CAAE;AAAA,YACpD,OAAO;AACN,uBAAS,WAAY,MAAM,CAAE,WAAW,OAAQ,CAAE;AAAA,YACnD;AACA,mBAAO;AAAA,UACR;AAAA,QACD,CAAE,GACF,QAAQ,UAAU;AAEnB,mBAAY,OAAO,UAAU,KAAK,aAAc;AAEhD,eAAQ,QAAQ,QAAQ,SAAU;AACjC,mBAAS,UAAU,WAAY,KAAM,EAAE,KAAM,WAAW,MAAM,OAAO,UAAU,IAAK;AACpF,cAAK,QAAS;AACb,gBAAK,OAAO,OAAO,SAAS,YAAa;AACxC,cAAA1B,QAAO,YAAa,UAAU,MAAM,UAAU,KAAK,KAAM,EAAE,OAC1D,OAAO,KAAK,KAAM,MAAO;AAAA,YAC3B;AACA,mBAAO;AAAA,UACR;AAAA,QACD;AAEA,QAAAA,QAAO,IAAK,OAAO,aAAa,SAAU;AAE1C,YAAK,OAAO,UAAU,KAAK,UAAU,YAAa;AACjD,oBAAU,KAAK,MAAM,KAAM,MAAM,SAAU;AAAA,QAC5C;AAGA,kBACE,SAAU,UAAU,KAAK,QAAS,EAClC,KAAM,UAAU,KAAK,MAAM,UAAU,KAAK,QAAS,EACnD,KAAM,UAAU,KAAK,IAAK,EAC1B,OAAQ,UAAU,KAAK,MAAO;AAEhC,QAAAA,QAAO,GAAG;AAAA,UACTA,QAAO,OAAQ,MAAM;AAAA,YACpB;AAAA,YACA,MAAM;AAAA,YACN,OAAO,UAAU,KAAK;AAAA,UACvB,CAAE;AAAA,QACH;AAEA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,YAAYA,QAAO,OAAQ,WAAW;AAAA,QAE5C,UAAU;AAAA,UACT,KAAK,CAAE,SAAU,MAAM,OAAQ;AAC9B,gBAAI,QAAQ,KAAK,YAAa,MAAM,KAAM;AAC1C,sBAAW,MAAM,MAAM,MAAM,QAAQ,KAAM,KAAM,GAAG,KAAM;AAC1D,mBAAO;AAAA,UACR,CAAE;AAAA,QACH;AAAA,QAEA,SAAS,SAAU,OAAO,UAAW;AACpC,cAAK,OAAO,UAAU,YAAa;AAClC,uBAAW;AACX,oBAAQ,CAAE,GAAI;AAAA,UACf,OAAO;AACN,oBAAQ,MAAM,MAAO,aAAc;AAAA,UACpC;AAEA,cAAI,MACH,QAAQ,GACR,SAAS,MAAM;AAEhB,iBAAQ,QAAQ,QAAQ,SAAU;AACjC,mBAAO,MAAO,KAAM;AACpB,sBAAU,SAAU,IAAK,IAAI,UAAU,SAAU,IAAK,KAAK,CAAC;AAC5D,sBAAU,SAAU,IAAK,EAAE,QAAS,QAAS;AAAA,UAC9C;AAAA,QACD;AAAA,QAEA,YAAY,CAAE,gBAAiB;AAAA,QAE/B,WAAW,SAAU,UAAU,SAAU;AACxC,cAAK,SAAU;AACd,sBAAU,WAAW,QAAS,QAAS;AAAA,UACxC,OAAO;AACN,sBAAU,WAAW,KAAM,QAAS;AAAA,UACrC;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,QAAQ,SAAU,OAAO,QAAQ,IAAK;AAC5C,YAAI,MAAM,SAAS,OAAO,UAAU,WAAWA,QAAO,OAAQ,CAAC,GAAG,KAAM,IAAI;AAAA,UAC3E,UAAU,MAAM,UACf,OAAO,UAAU,cAAc;AAAA,UAChC,UAAU;AAAA,UACV,QAAQ,MAAM,UAAU,UAAU,OAAO,WAAW,cAAc;AAAA,QACnE;AAGA,YAAKA,QAAO,GAAG,KAAM;AACpB,cAAI,WAAW;AAAA,QAEhB,OAAO;AACN,cAAK,OAAO,IAAI,aAAa,UAAW;AACvC,gBAAK,IAAI,YAAYA,QAAO,GAAG,QAAS;AACvC,kBAAI,WAAWA,QAAO,GAAG,OAAQ,IAAI,QAAS;AAAA,YAE/C,OAAO;AACN,kBAAI,WAAWA,QAAO,GAAG,OAAO;AAAA,YACjC;AAAA,UACD;AAAA,QACD;AAGA,YAAK,IAAI,SAAS,QAAQ,IAAI,UAAU,MAAO;AAC9C,cAAI,QAAQ;AAAA,QACb;AAGA,YAAI,MAAM,IAAI;AAEd,YAAI,WAAW,WAAW;AACzB,cAAK,OAAO,IAAI,QAAQ,YAAa;AACpC,gBAAI,IAAI,KAAM,IAAK;AAAA,UACpB;AAEA,cAAK,IAAI,OAAQ;AAChB,YAAAA,QAAO,QAAS,MAAM,IAAI,KAAM;AAAA,UACjC;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,QAAQ,SAAU,OAAO,IAAI,QAAQ,UAAW;AAG/C,iBAAO,KAAK,OAAQ,kBAAmB,EAAE,IAAK,WAAW,CAAE,EAAE,KAAK,EAGhE,IAAI,EAAE,QAAS,EAAE,SAAS,GAAG,GAAG,OAAO,QAAQ,QAAS;AAAA,QAC3D;AAAA,QACA,SAAS,SAAU,MAAM,OAAO,QAAQ,UAAW;AAClD,cAAI,QAAQA,QAAO,cAAe,IAAK,GACtC,SAASA,QAAO,MAAO,OAAO,QAAQ,QAAS,GAC/C,cAAc,WAAW;AAGxB,gBAAI,OAAO,UAAW,MAAMA,QAAO,OAAQ,CAAC,GAAG,IAAK,GAAG,MAAO;AAG9D,gBAAK,SAAS,SAAS,IAAK,MAAM,QAAS,GAAI;AAC9C,mBAAK,KAAM,IAAK;AAAA,YACjB;AAAA,UACD;AAED,sBAAY,SAAS;AAErB,iBAAO,SAAS,OAAO,UAAU,QAChC,KAAK,KAAM,WAAY,IACvB,KAAK,MAAO,OAAO,OAAO,WAAY;AAAA,QACxC;AAAA,QACA,MAAM,SAAU,MAAM,YAAY,SAAU;AAC3C,cAAI,YAAY,SAAU,OAAQ;AACjC,gBAAI,OAAO,MAAM;AACjB,mBAAO,MAAM;AACb,iBAAM,OAAQ;AAAA,UACf;AAEA,cAAK,OAAO,SAAS,UAAW;AAC/B,sBAAU;AACV,yBAAa;AACb,mBAAO;AAAA,UACR;AACA,cAAK,YAAa;AACjB,iBAAK,MAAO,QAAQ,MAAM,CAAC,CAAE;AAAA,UAC9B;AAEA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAI,UAAU,MACb,QAAQ,QAAQ,QAAQ,OAAO,cAC/B4B,UAAS5B,QAAO,QAChB,OAAO,SAAS,IAAK,IAAK;AAE3B,gBAAK,OAAQ;AACZ,kBAAK,KAAM,KAAM,KAAK,KAAM,KAAM,EAAE,MAAO;AAC1C,0BAAW,KAAM,KAAM,CAAE;AAAA,cAC1B;AAAA,YACD,OAAO;AACN,mBAAM,SAAS,MAAO;AACrB,oBAAK,KAAM,KAAM,KAAK,KAAM,KAAM,EAAE,QAAQ,KAAK,KAAM,KAAM,GAAI;AAChE,4BAAW,KAAM,KAAM,CAAE;AAAA,gBAC1B;AAAA,cACD;AAAA,YACD;AAEA,iBAAM,QAAQ4B,QAAO,QAAQ,WAAW;AACvC,kBAAKA,QAAQ,KAAM,EAAE,SAAS,SAC3B,QAAQ,QAAQA,QAAQ,KAAM,EAAE,UAAU,OAAS;AAErD,gBAAAA,QAAQ,KAAM,EAAE,KAAK,KAAM,OAAQ;AACnC,0BAAU;AACV,gBAAAA,QAAO,OAAQ,OAAO,CAAE;AAAA,cACzB;AAAA,YACD;AAKA,gBAAK,WAAW,CAAC,SAAU;AAC1B,cAAA5B,QAAO,QAAS,MAAM,IAAK;AAAA,YAC5B;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QACA,QAAQ,SAAU,MAAO;AACxB,cAAK,SAAS,OAAQ;AACrB,mBAAO,QAAQ;AAAA,UAChB;AACA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAI,OACH,OAAO,SAAS,IAAK,IAAK,GAC1B,QAAQ,KAAM,OAAO,OAAQ,GAC7B,QAAQ,KAAM,OAAO,YAAa,GAClC4B,UAAS5B,QAAO,QAChB,SAAS,QAAQ,MAAM,SAAS;AAGjC,iBAAK,SAAS;AAGd,YAAAA,QAAO,MAAO,MAAM,MAAM,CAAC,CAAE;AAE7B,gBAAK,SAAS,MAAM,MAAO;AAC1B,oBAAM,KAAK,KAAM,MAAM,IAAK;AAAA,YAC7B;AAGA,iBAAM,QAAQ4B,QAAO,QAAQ,WAAW;AACvC,kBAAKA,QAAQ,KAAM,EAAE,SAAS,QAAQA,QAAQ,KAAM,EAAE,UAAU,MAAO;AACtE,gBAAAA,QAAQ,KAAM,EAAE,KAAK,KAAM,IAAK;AAChC,gBAAAA,QAAO,OAAQ,OAAO,CAAE;AAAA,cACzB;AAAA,YACD;AAGA,iBAAM,QAAQ,GAAG,QAAQ,QAAQ,SAAU;AAC1C,kBAAK,MAAO,KAAM,KAAK,MAAO,KAAM,EAAE,QAAS;AAC9C,sBAAO,KAAM,EAAE,OAAO,KAAM,IAAK;AAAA,cAClC;AAAA,YACD;AAGA,mBAAO,KAAK;AAAA,UACb,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAA5B,QAAO,KAAM,CAAE,UAAU,QAAQ,MAAO,GAAG,SAAU,IAAI,MAAO;AAC/D,YAAI,QAAQA,QAAO,GAAI,IAAK;AAC5B,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,OAAO,QAAQ,UAAW;AACvD,iBAAO,SAAS,QAAQ,OAAO,UAAU,YACxC,MAAM,MAAO,MAAM,SAAU,IAC7B,KAAK,QAAS,MAAO,MAAM,IAAK,GAAG,OAAO,QAAQ,QAAS;AAAA,QAC7D;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,KAAM;AAAA,QACZ,WAAW,MAAO,MAAO;AAAA,QACzB,SAAS,MAAO,MAAO;AAAA,QACvB,aAAa,MAAO,QAAS;AAAA,QAC7B,QAAQ,EAAE,SAAS,OAAO;AAAA,QAC1B,SAAS,EAAE,SAAS,OAAO;AAAA,QAC3B,YAAY,EAAE,SAAS,SAAS;AAAA,MACjC,GAAG,SAAU,MAAM,OAAQ;AAC1B,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,OAAO,QAAQ,UAAW;AACvD,iBAAO,KAAK,QAAS,OAAO,OAAO,QAAQ,QAAS;AAAA,QACrD;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,SAAS,CAAC;AACjB,MAAAA,QAAO,GAAG,OAAO,WAAW;AAC3B,YAAI6B,QACH9B,KAAI,GACJ6B,UAAS5B,QAAO;AAEjB,gBAAQ,KAAK,IAAI;AAEjB,eAAQD,KAAI6B,QAAO,QAAQ7B,MAAM;AAChC,UAAA8B,SAAQD,QAAQ7B,EAAE;AAGlB,cAAK,CAAC8B,OAAM,KAAKD,QAAQ7B,EAAE,MAAM8B,QAAQ;AACxC,YAAAD,QAAO,OAAQ7B,MAAK,CAAE;AAAA,UACvB;AAAA,QACD;AAEA,YAAK,CAAC6B,QAAO,QAAS;AACrB,UAAA5B,QAAO,GAAG,KAAK;AAAA,QAChB;AACA,gBAAQ;AAAA,MACT;AAEA,MAAAA,QAAO,GAAG,QAAQ,SAAU6B,QAAQ;AACnC,QAAA7B,QAAO,OAAO,KAAM6B,MAAM;AAC1B,QAAA7B,QAAO,GAAG,MAAM;AAAA,MACjB;AAEA,MAAAA,QAAO,GAAG,QAAQ,WAAW;AAC5B,YAAK,YAAa;AACjB;AAAA,QACD;AAEA,qBAAa;AACb,QAAAwB,UAAS;AAAA,MACV;AAEA,MAAAxB,QAAO,GAAG,OAAO,WAAW;AAC3B,qBAAa;AAAA,MACd;AAEA,MAAAA,QAAO,GAAG,SAAS;AAAA,QAClB,MAAM;AAAA,QACN,MAAM;AAAA;AAAA,QAGN,UAAU;AAAA,MACX;AAGA,MAAAA,QAAO,GAAG,QAAQ,SAAU,MAAM,MAAO;AACxC,eAAOA,QAAO,KAAKA,QAAO,GAAG,OAAQ,IAAK,KAAK,OAAO;AACtD,eAAO,QAAQ;AAEf,eAAO,KAAK,MAAO,MAAM,SAAU,MAAM,OAAQ;AAChD,cAAI,UAAUF,QAAO,WAAY,MAAM,IAAK;AAC5C,gBAAM,OAAO,WAAW;AACvB,YAAAA,QAAO,aAAc,OAAQ;AAAA,UAC9B;AAAA,QACD,CAAE;AAAA,MACH;AAEA,UAAI,aAAa,uCAChB,aAAa;AAEd,MAAAE,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,MAAM,OAAQ;AAC7B,iBAAO,OAAQ,MAAMA,QAAO,MAAM,MAAM,OAAO,UAAU,SAAS,CAAE;AAAA,QACrE;AAAA,QAEA,YAAY,SAAU,MAAO;AAC5B,iBAAO,KAAK,KAAM,WAAW;AAC5B,mBAAO,KAAMA,QAAO,QAAS,IAAK,KAAK,IAAK;AAAA,UAC7C,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,OAAQ;AAAA,QACd,MAAM,SAAU,MAAM,MAAM,OAAQ;AACnC,cAAI,KAAK,OACR,QAAQ,KAAK;AAGd,cAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAI;AAChD;AAAA,UACD;AAEA,cAAK,UAAU,KAAK,CAACA,QAAO,SAAU,IAAK,GAAI;AAG9C,mBAAOA,QAAO,QAAS,IAAK,KAAK;AACjC,oBAAQA,QAAO,UAAW,IAAK;AAAA,UAChC;AAEA,cAAK,UAAU,QAAY;AAC1B,gBAAK,SAAS,SAAS,UACpB,MAAM,MAAM,IAAK,MAAM,OAAO,IAAK,OAAQ,QAAY;AACzD,qBAAO;AAAA,YACR;AAEA,mBAAS,KAAM,IAAK,IAAI;AAAA,UACzB;AAEA,cAAK,SAAS,SAAS,UAAW,MAAM,MAAM,IAAK,MAAM,IAAK,OAAQ,MAAO;AAC5E,mBAAO;AAAA,UACR;AAEA,iBAAO,KAAM,IAAK;AAAA,QACnB;AAAA,QAEA,WAAW;AAAA,UACV,UAAU;AAAA,YACT,KAAK,SAAU,MAAO;AAMrB,kBAAI,WAAW,KAAK,aAAc,UAAW;AAE7C,kBAAK,UAAW;AACf,uBAAO,SAAU,UAAU,EAAG;AAAA,cAC/B;AAEA,kBACC,WAAW,KAAM,KAAK,QAAS;AAAA;AAAA,cAI/B,WAAW,KAAM,KAAK,QAAS,KAAK,KAAK,MACxC;AACD,uBAAO;AAAA,cACR;AAEA,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD;AAAA,QAEA,SAAS;AAAA,UACR,OAAO;AAAA,UACP,SAAS;AAAA,QACV;AAAA,MACD,CAAE;AAOF,UAAK,MAAO;AACX,QAAAA,QAAO,UAAU,WAAW;AAAA,UAC3B,KAAK,SAAU,MAAO;AAErB,gBAAIO,UAAS,KAAK;AAClB,gBAAKA,WAAUA,QAAO,YAAa;AAElC,cAAAA,QAAO,WAAW;AAAA,YACnB;AACA,mBAAO;AAAA,UACR;AAAA,UACA,KAAK,SAAU,MAAO;AAGrB,gBAAIA,UAAS,KAAK;AAClB,gBAAKA,SAAS;AAEb,cAAAA,QAAO;AAEP,kBAAKA,QAAO,YAAa;AAExB,gBAAAA,QAAO,WAAW;AAAA,cACnB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,MAAAP,QAAO,KAAM;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,GAAG,WAAW;AACb,QAAAA,QAAO,QAAS,KAAK,YAAY,CAAE,IAAI;AAAA,MACxC,CAAE;AAIF,eAAS,iBAAkB,OAAQ;AAClC,YAAI,SAAS,MAAM,MAAO,aAAc,KAAK,CAAC;AAC9C,eAAO,OAAO,KAAM,GAAI;AAAA,MACzB;AAEA,eAAS,SAAU,MAAO;AACzB,eAAO,KAAK,gBAAgB,KAAK,aAAc,OAAQ,KAAK;AAAA,MAC7D;AAEA,eAAS,eAAgB,OAAQ;AAChC,YAAK,MAAM,QAAS,KAAM,GAAI;AAC7B,iBAAO;AAAA,QACR;AACA,YAAK,OAAO,UAAU,UAAW;AAChC,iBAAO,MAAM,MAAO,aAAc,KAAK,CAAC;AAAA,QACzC;AACA,eAAO,CAAC;AAAA,MACT;AAEA,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,UAAU,SAAU,OAAQ;AAC3B,cAAI,YAAY,KAAK,UAAU,WAAWD,IAAG;AAE7C,cAAK,OAAO,UAAU,YAAa;AAClC,mBAAO,KAAK,KAAM,SAAU,GAAI;AAC/B,cAAAC,QAAQ,IAAK,EAAE,SAAU,MAAM,KAAM,MAAM,GAAG,SAAU,IAAK,CAAE,CAAE;AAAA,YAClE,CAAE;AAAA,UACH;AAEA,uBAAa,eAAgB,KAAM;AAEnC,cAAK,WAAW,QAAS;AACxB,mBAAO,KAAK,KAAM,WAAW;AAC5B,yBAAW,SAAU,IAAK;AAC1B,oBAAM,KAAK,aAAa,KAAO,MAAM,iBAAkB,QAAS,IAAI;AAEpE,kBAAK,KAAM;AACV,qBAAMD,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAM;AACzC,8BAAY,WAAYA,EAAE;AAC1B,sBAAK,IAAI,QAAS,MAAM,YAAY,GAAI,IAAI,GAAI;AAC/C,2BAAO,YAAY;AAAA,kBACpB;AAAA,gBACD;AAGA,6BAAa,iBAAkB,GAAI;AACnC,oBAAK,aAAa,YAAa;AAC9B,uBAAK,aAAc,SAAS,UAAW;AAAA,gBACxC;AAAA,cACD;AAAA,YACD,CAAE;AAAA,UACH;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,aAAa,SAAU,OAAQ;AAC9B,cAAI,YAAY,KAAK,UAAU,WAAWA,IAAG;AAE7C,cAAK,OAAO,UAAU,YAAa;AAClC,mBAAO,KAAK,KAAM,SAAU,GAAI;AAC/B,cAAAC,QAAQ,IAAK,EAAE,YAAa,MAAM,KAAM,MAAM,GAAG,SAAU,IAAK,CAAE,CAAE;AAAA,YACrE,CAAE;AAAA,UACH;AAEA,cAAK,CAAC,UAAU,QAAS;AACxB,mBAAO,KAAK,KAAM,SAAS,EAAG;AAAA,UAC/B;AAEA,uBAAa,eAAgB,KAAM;AAEnC,cAAK,WAAW,QAAS;AACxB,mBAAO,KAAK,KAAM,WAAW;AAC5B,yBAAW,SAAU,IAAK;AAG1B,oBAAM,KAAK,aAAa,KAAO,MAAM,iBAAkB,QAAS,IAAI;AAEpE,kBAAK,KAAM;AACV,qBAAMD,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAM;AACzC,8BAAY,WAAYA,EAAE;AAG1B,yBAAQ,IAAI,QAAS,MAAM,YAAY,GAAI,IAAI,IAAK;AACnD,0BAAM,IAAI,QAAS,MAAM,YAAY,KAAK,GAAI;AAAA,kBAC/C;AAAA,gBACD;AAGA,6BAAa,iBAAkB,GAAI;AACnC,oBAAK,aAAa,YAAa;AAC9B,uBAAK,aAAc,SAAS,UAAW;AAAA,gBACxC;AAAA,cACD;AAAA,YACD,CAAE;AAAA,UACH;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,aAAa,SAAU,OAAO,UAAW;AACxC,cAAI,YAAY,WAAWA,IAAGc;AAE9B,cAAK,OAAO,UAAU,YAAa;AAClC,mBAAO,KAAK,KAAM,SAAUd,IAAI;AAC/B,cAAAC,QAAQ,IAAK,EAAE;AAAA,gBACd,MAAM,KAAM,MAAMD,IAAG,SAAU,IAAK,GAAG,QAAS;AAAA,gBAChD;AAAA,cACD;AAAA,YACD,CAAE;AAAA,UACH;AAEA,cAAK,OAAO,aAAa,WAAY;AACpC,mBAAO,WAAW,KAAK,SAAU,KAAM,IAAI,KAAK,YAAa,KAAM;AAAA,UACpE;AAEA,uBAAa,eAAgB,KAAM;AAEnC,cAAK,WAAW,QAAS;AACxB,mBAAO,KAAK,KAAM,WAAW;AAG5B,cAAAc,QAAOb,QAAQ,IAAK;AAEpB,mBAAMD,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAM;AACzC,4BAAY,WAAYA,EAAE;AAG1B,oBAAKc,MAAK,SAAU,SAAU,GAAI;AACjC,kBAAAA,MAAK,YAAa,SAAU;AAAA,gBAC7B,OAAO;AACN,kBAAAA,MAAK,SAAU,SAAU;AAAA,gBAC1B;AAAA,cACD;AAAA,YACD,CAAE;AAAA,UACH;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,UAAU,SAAU,UAAW;AAC9B,cAAI,WAAW,MACdd,KAAI;AAEL,sBAAY,MAAM,WAAW;AAC7B,iBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,gBAAK,KAAK,aAAa,MACpB,MAAM,iBAAkB,SAAU,IAAK,CAAE,IAAI,KAAM,QAAS,SAAU,IAAI,IAAK;AACjF,qBAAO;AAAA,YACR;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAEF,MAAAC,QAAO,GAAG,OAAQ;AAAA,QACjB,KAAK,SAAU,OAAQ;AACtB,cAAI,OAAO,KAAK,iBACf,OAAO,KAAM,CAAE;AAEhB,cAAK,CAAC,UAAU,QAAS;AACxB,gBAAK,MAAO;AACX,sBAAQA,QAAO,SAAU,KAAK,IAAK,KAClCA,QAAO,SAAU,KAAK,SAAS,YAAY,CAAE;AAE9C,kBAAK,SACJ,SAAS,UACP,MAAM,MAAM,IAAK,MAAM,OAAQ,OAAQ,QACxC;AACD,uBAAO;AAAA,cACR;AAEA,oBAAM,KAAK;AAGX,qBAAO,OAAO,OAAO,KAAK;AAAA,YAC3B;AAEA;AAAA,UACD;AAEA,4BAAkB,OAAO,UAAU;AAEnC,iBAAO,KAAK,KAAM,SAAUD,IAAI;AAC/B,gBAAI;AAEJ,gBAAK,KAAK,aAAa,GAAI;AAC1B;AAAA,YACD;AAEA,gBAAK,iBAAkB;AACtB,oBAAM,MAAM,KAAM,MAAMA,IAAGC,QAAQ,IAAK,EAAE,IAAI,CAAE;AAAA,YACjD,OAAO;AACN,oBAAM;AAAA,YACP;AAGA,gBAAK,OAAO,MAAO;AAClB,oBAAM;AAAA,YAEP,WAAY,OAAO,QAAQ,UAAW;AACrC,qBAAO;AAAA,YAER,WAAY,MAAM,QAAS,GAAI,GAAI;AAClC,oBAAMA,QAAO,IAAK,KAAK,SAAUI,QAAQ;AACxC,uBAAOA,UAAS,OAAO,KAAKA,SAAQ;AAAA,cACrC,CAAE;AAAA,YACH;AAEA,oBAAQJ,QAAO,SAAU,KAAK,IAAK,KAAKA,QAAO,SAAU,KAAK,SAAS,YAAY,CAAE;AAGrF,gBAAK,CAAC,SAAS,EAAG,SAAS,UAAW,MAAM,IAAK,MAAM,KAAK,OAAQ,MAAM,QAAY;AACrF,mBAAK,QAAQ;AAAA,YACd;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,OAAQ;AAAA,QACd,UAAU;AAAA,UACT,QAAQ;AAAA,YACP,KAAK,SAAU,MAAO;AACrB,kBAAI,OAAO,QAAQD,IAClB,UAAU,KAAK,SACf,QAAQ,KAAK,eACb,MAAM,KAAK,SAAS,cACpB,SAAS,MAAM,OAAO,CAAC,GACvB,MAAM,MAAM,QAAQ,IAAI,QAAQ;AAEjC,kBAAK,QAAQ,GAAI;AAChB,gBAAAA,KAAI;AAAA,cAEL,OAAO;AACN,gBAAAA,KAAI,MAAM,QAAQ;AAAA,cACnB;AAGA,qBAAQA,KAAI,KAAKA,MAAM;AACtB,yBAAS,QAASA,EAAE;AAEpB,oBAAK,OAAO;AAAA,gBAGV,CAAC,OAAO,aACN,CAAC,OAAO,WAAW,YACpB,CAAC,SAAU,OAAO,YAAY,UAAW,IAAM;AAGjD,0BAAQC,QAAQ,MAAO,EAAE,IAAI;AAG7B,sBAAK,KAAM;AACV,2BAAO;AAAA,kBACR;AAGA,yBAAO,KAAM,KAAM;AAAA,gBACpB;AAAA,cACD;AAEA,qBAAO;AAAA,YACR;AAAA,YAEA,KAAK,SAAU,MAAM,OAAQ;AAC5B,kBAAI,WAAW,QACd,UAAU,KAAK,SACf,SAASA,QAAO,UAAW,KAAM,GACjCD,KAAI,QAAQ;AAEb,qBAAQA,MAAM;AACb,yBAAS,QAASA,EAAE;AAEpB,oBAAO,OAAO,WACbC,QAAO,QAASA,QAAQ,MAAO,EAAE,IAAI,GAAG,MAAO,IAAI,IAChD;AACH,8BAAY;AAAA,gBACb;AAAA,cACD;AAGA,kBAAK,CAAC,WAAY;AACjB,qBAAK,gBAAgB;AAAA,cACtB;AACA,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,UAAK,MAAO;AACX,QAAAA,QAAO,SAAS,SAAS;AAAA,UACxB,KAAK,SAAU,MAAO;AAErB,gBAAI,MAAM,KAAK,aAAc,OAAQ;AACrC,mBAAO,OAAO,OACb;AAAA;AAAA;AAAA;AAAA;AAAA,cAMA,iBAAkBA,QAAO,KAAM,IAAK,CAAE;AAAA;AAAA,UACxC;AAAA,QACD;AAAA,MACD;AAGA,MAAAA,QAAO,KAAM,CAAE,SAAS,UAAW,GAAG,WAAW;AAChD,QAAAA,QAAO,SAAU,IAAK,IAAI;AAAA,UACzB,KAAK,SAAU,MAAM,OAAQ;AAC5B,gBAAK,MAAM,QAAS,KAAM,GAAI;AAC7B,qBAAS,KAAK,UAAUA,QAAO,QAASA,QAAQ,IAAK,EAAE,IAAI,GAAG,KAAM,IAAI;AAAA,YACzE;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,UAAI,cAAc,mCACjB,0BAA0B,SAAU,GAAI;AACvC,UAAE,gBAAgB;AAAA,MACnB;AAED,MAAAA,QAAO,OAAQA,QAAO,OAAO;AAAA,QAE5B,SAAS,SAAUsB,QAAO,MAAM,MAAM,cAAe;AAEpD,cAAIvB,IAAG,KAAK,KAAK,YAAY,QAAQ,QAAQ,SAAS,aACrD,YAAY,CAAE,QAAQ,UAAW,GACjC,OAAO,OAAO,KAAMuB,QAAO,MAAO,IAAIA,OAAM,OAAOA,QACnD,aAAa,OAAO,KAAMA,QAAO,WAAY,IAAIA,OAAM,UAAU,MAAO,GAAI,IAAI,CAAC;AAElF,gBAAM,cAAc,MAAM,OAAO,QAAQ;AAGzC,cAAK,KAAK,aAAa,KAAK,KAAK,aAAa,GAAI;AACjD;AAAA,UACD;AAGA,cAAK,YAAY,KAAM,OAAOtB,QAAO,MAAM,SAAU,GAAI;AACxD;AAAA,UACD;AAEA,cAAK,KAAK,QAAS,GAAI,IAAI,IAAK;AAG/B,yBAAa,KAAK,MAAO,GAAI;AAC7B,mBAAO,WAAW,MAAM;AACxB,uBAAW,KAAK;AAAA,UACjB;AACA,mBAAS,KAAK,QAAS,GAAI,IAAI,KAAK,OAAO;AAG3C,UAAAsB,SAAQA,OAAOtB,QAAO,OAAQ,IAC7BsB,SACA,IAAItB,QAAO,MAAO,MAAM,OAAOsB,WAAU,YAAYA,MAAM;AAG5D,UAAAA,OAAM,YAAY,eAAe,IAAI;AACrC,UAAAA,OAAM,YAAY,WAAW,KAAM,GAAI;AACvC,UAAAA,OAAM,aAAaA,OAAM,YACxB,IAAI,OAAQ,YAAY,WAAW,KAAM,eAAgB,IAAI,SAAU,IACvE;AAGD,UAAAA,OAAM,SAAS;AACf,cAAK,CAACA,OAAM,QAAS;AACpB,YAAAA,OAAM,SAAS;AAAA,UAChB;AAGA,iBAAO,QAAQ,OACd,CAAEA,MAAM,IACRtB,QAAO,UAAW,MAAM,CAAEsB,MAAM,CAAE;AAGnC,oBAAUtB,QAAO,MAAM,QAAS,IAAK,KAAK,CAAC;AAC3C,cAAK,CAAC,gBAAgB,QAAQ,WAAW,QAAQ,QAAQ,MAAO,MAAM,IAAK,MAAM,OAAQ;AACxF;AAAA,UACD;AAIA,cAAK,CAAC,gBAAgB,CAAC,QAAQ,YAAY,CAAC,SAAU,IAAK,GAAI;AAE9D,yBAAa,QAAQ,gBAAgB;AACrC,gBAAK,CAAC,YAAY,KAAM,aAAa,IAAK,GAAI;AAC7C,oBAAM,IAAI;AAAA,YACX;AACA,mBAAQ,KAAK,MAAM,IAAI,YAAa;AACnC,wBAAU,KAAM,GAAI;AACpB,oBAAM;AAAA,YACP;AAGA,gBAAK,SAAU,KAAK,iBAAiB,aAAe;AACnD,wBAAU,KAAM,IAAI,eAAe,IAAI,gBAAgBF,OAAO;AAAA,YAC/D;AAAA,UACD;AAGA,UAAAC,KAAI;AACJ,kBAAU,MAAM,UAAWA,IAAI,MAAO,CAACuB,OAAM,qBAAqB,GAAI;AACrE,0BAAc;AACd,YAAAA,OAAM,OAAOvB,KAAI,IAChB,aACA,QAAQ,YAAY;AAGrB,sBAAW,SAAS,IAAK,KAAK,QAAS,KAAK,uBAAO,OAAQ,IAAK,GAAKuB,OAAM,IAAK,KAC/E,SAAS,IAAK,KAAK,QAAS;AAC7B,gBAAK,QAAS;AACb,qBAAO,MAAO,KAAK,IAAK;AAAA,YACzB;AAGA,qBAAS,UAAU,IAAK,MAAO;AAC/B,gBAAK,UAAU,OAAO,SAAS,WAAY,GAAI,GAAI;AAClD,cAAAA,OAAM,SAAS,OAAO,MAAO,KAAK,IAAK;AACvC,kBAAKA,OAAM,WAAW,OAAQ;AAC7B,gBAAAA,OAAM,eAAe;AAAA,cACtB;AAAA,YACD;AAAA,UACD;AACA,UAAAA,OAAM,OAAO;AAGb,cAAK,CAAC,gBAAgB,CAACA,OAAM,mBAAmB,GAAI;AAEnD,iBAAO,CAAC,QAAQ,YACf,QAAQ,SAAS,MAAO,UAAU,IAAI,GAAG,IAAK,MAAM,UACpD,WAAY,IAAK,GAAI;AAIrB,kBAAK,UAAU,OAAO,KAAM,IAAK,MAAM,cAAc,CAAC,SAAU,IAAK,GAAI;AAGxE,sBAAM,KAAM,MAAO;AAEnB,oBAAK,KAAM;AACV,uBAAM,MAAO,IAAI;AAAA,gBAClB;AAGA,gBAAAtB,QAAO,MAAM,YAAY;AAEzB,oBAAKsB,OAAM,qBAAqB,GAAI;AACnC,8BAAY,iBAAkB,MAAM,uBAAwB;AAAA,gBAC7D;AAEA,qBAAM,IAAK,EAAE;AAEb,oBAAKA,OAAM,qBAAqB,GAAI;AACnC,8BAAY,oBAAqB,MAAM,uBAAwB;AAAA,gBAChE;AAEA,gBAAAtB,QAAO,MAAM,YAAY;AAEzB,oBAAK,KAAM;AACV,uBAAM,MAAO,IAAI;AAAA,gBAClB;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAOsB,OAAM;AAAA,QACd;AAAA;AAAA;AAAA,QAIA,UAAU,SAAU,MAAM,MAAMA,QAAQ;AACvC,cAAI,IAAItB,QAAO;AAAA,YACd,IAAIA,QAAO,MAAM;AAAA,YACjBsB;AAAA,YACA;AAAA,cACC;AAAA,cACA,aAAa;AAAA,YACd;AAAA,UACD;AAEA,UAAAtB,QAAO,MAAM,QAAS,GAAG,MAAM,IAAK;AAAA,QACrC;AAAA,MAED,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QAEjB,SAAS,SAAU,MAAM,MAAO;AAC/B,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAAA,QAAO,MAAM,QAAS,MAAM,MAAM,IAAK;AAAA,UACxC,CAAE;AAAA,QACH;AAAA,QACA,gBAAgB,SAAU,MAAM,MAAO;AACtC,cAAI,OAAO,KAAM,CAAE;AACnB,cAAK,MAAO;AACX,mBAAOA,QAAO,MAAM,QAAS,MAAM,MAAM,MAAM,IAAK;AAAA,UACrD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,UAAI8B,YAAWhC,QAAO;AAEtB,UAAI,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE;AAE/B,UAAI,SAAS;AAGb,MAAAE,QAAO,WAAW,SAAU,MAAO;AAClC,YAAI,KAAK;AACT,YAAK,CAAC,QAAQ,OAAO,SAAS,UAAW;AACxC,iBAAO;AAAA,QACR;AAIA,YAAI;AACH,gBAAQ,IAAIF,QAAO,UAAU,EAAI,gBAAiB,MAAM,UAAW;AAAA,QACpE,SAAU,GAAI;AAAA,QAAC;AAEf,0BAAkB,OAAO,IAAI,qBAAsB,aAAc,EAAG,CAAE;AACtE,YAAK,CAAC,OAAO,iBAAkB;AAC9B,UAAAE,QAAO,MAAO,mBACb,kBACCA,QAAO,IAAK,gBAAgB,YAAY,SAAUmB,KAAK;AACtD,mBAAOA,IAAG;AAAA,UACX,CAAE,EAAE,KAAM,IAAK,IACf,KACA;AAAA,QACH;AACA,eAAO;AAAA,MACR;AAEA,UACC,WAAW,SACX,QAAQ,UACR,kBAAkB,yCAClB,eAAe;AAEhB,eAAS,YAAa,QAAQ,KAAK,aAAaL,MAAM;AACrD,YAAI;AAEJ,YAAK,MAAM,QAAS,GAAI,GAAI;AAG3B,UAAAd,QAAO,KAAM,KAAK,SAAUD,IAAG,GAAI;AAClC,gBAAK,eAAe,SAAS,KAAM,MAAO,GAAI;AAG7C,cAAAe,KAAK,QAAQ,CAAE;AAAA,YAEhB,OAAO;AAGN;AAAA,gBACC,SAAS,OAAQ,OAAO,MAAM,YAAY,KAAK,OAAOf,KAAI,MAAO;AAAA,gBACjE;AAAA,gBACA;AAAA,gBACAe;AAAA,cACD;AAAA,YACD;AAAA,UACD,CAAE;AAAA,QAEH,WAAY,CAAC,eAAe,OAAQ,GAAI,MAAM,UAAW;AAGxD,eAAM,QAAQ,KAAM;AACnB,wBAAa,SAAS,MAAM,OAAO,KAAK,IAAK,IAAK,GAAG,aAAaA,IAAI;AAAA,UACvE;AAAA,QAED,OAAO;AAGN,UAAAA,KAAK,QAAQ,GAAI;AAAA,QAClB;AAAA,MACD;AAIA,MAAAd,QAAO,QAAQ,SAAU,GAAG,aAAc;AACzC,YAAI,QACH,IAAI,CAAC,GACLc,OAAM,SAAU,KAAK,iBAAkB;AAGtC,cAAI,QAAQ,OAAO,oBAAoB,aACtC,gBAAgB,IAChB;AAED,YAAG,EAAE,MAAO,IAAI,mBAAoB,GAAI,IAAI,MAC3C,mBAAoB,SAAS,OAAO,KAAK,KAAM;AAAA,QACjD;AAED,YAAK,KAAK,MAAO;AAChB,iBAAO;AAAA,QACR;AAGA,YAAK,MAAM,QAAS,CAAE,KAAO,EAAE,UAAU,CAACd,QAAO,cAAe,CAAE,GAAM;AAGvE,UAAAA,QAAO,KAAM,GAAG,WAAW;AAC1B,YAAAc,KAAK,KAAK,MAAM,KAAK,KAAM;AAAA,UAC5B,CAAE;AAAA,QAEH,OAAO;AAIN,eAAM,UAAU,GAAI;AACnB,wBAAa,QAAQ,EAAG,MAAO,GAAG,aAAaA,IAAI;AAAA,UACpD;AAAA,QACD;AAGA,eAAO,EAAE,KAAM,GAAI;AAAA,MACpB;AAEA,MAAAd,QAAO,GAAG,OAAQ;AAAA,QACjB,WAAW,WAAW;AACrB,iBAAOA,QAAO,MAAO,KAAK,eAAe,CAAE;AAAA,QAC5C;AAAA,QACA,gBAAgB,WAAW;AAC1B,iBAAO,KAAK,IAAK,WAAW;AAG3B,gBAAI,WAAWA,QAAO,KAAM,MAAM,UAAW;AAC7C,mBAAO,WAAWA,QAAO,UAAW,QAAS,IAAI;AAAA,UAClD,CAAE,EAAE,OAAQ,WAAW;AACtB,gBAAI,OAAO,KAAK;AAGhB,mBAAO,KAAK,QAAQ,CAACA,QAAQ,IAAK,EAAE,GAAI,WAAY,KACnD,aAAa,KAAM,KAAK,QAAS,KAAK,CAAC,gBAAgB,KAAM,IAAK,MAChE,KAAK,WAAW,CAAC,eAAe,KAAM,IAAK;AAAA,UAC/C,CAAE,EAAE,IAAK,SAAU,IAAI,MAAO;AAC7B,gBAAI,MAAMA,QAAQ,IAAK,EAAE,IAAI;AAE7B,gBAAK,OAAO,MAAO;AAClB,qBAAO;AAAA,YACR;AAEA,gBAAK,MAAM,QAAS,GAAI,GAAI;AAC3B,qBAAOA,QAAO,IAAK,KAAK,SAAU+B,MAAM;AACvC,uBAAO,EAAE,MAAM,KAAK,MAAM,OAAOA,KAAI,QAAS,OAAO,MAAO,EAAE;AAAA,cAC/D,CAAE;AAAA,YACH;AAEA,mBAAO,EAAE,MAAM,KAAK,MAAM,OAAO,IAAI,QAAS,OAAO,MAAO,EAAE;AAAA,UAC/D,CAAE,EAAE,IAAI;AAAA,QACT;AAAA,MACD,CAAE;AAEF,UACC,MAAM,QACN,QAAQ,QACR,aAAa,iBACb,WAAW,8BAGX,iBAAiB,6DACjB,aAAa,kBACb,YAAY,SAWZ,aAAa,CAAC,GAOd,aAAa,CAAC,GAGd,WAAW,KAAK,OAAQ,GAAI,GAG5B,eAAe,WAAW,cAAe,GAAI;AAE9C,mBAAa,OAAOD,UAAS;AAG7B,eAAS,4BAA6B,WAAY;AAGjD,eAAO,SAAU,oBAAoB,MAAO;AAE3C,cAAK,OAAO,uBAAuB,UAAW;AAC7C,mBAAO;AACP,iCAAqB;AAAA,UACtB;AAEA,cAAI,UACH/B,KAAI,GACJ,YAAY,mBAAmB,YAAY,EAAE,MAAO,aAAc,KAAK,CAAC;AAEzE,cAAK,OAAO,SAAS,YAAa;AAGjC,mBAAU,WAAW,UAAWA,IAAI,GAAM;AAGzC,kBAAK,SAAU,CAAE,MAAM,KAAM;AAC5B,2BAAW,SAAS,MAAO,CAAE,KAAK;AAClC,iBAAE,UAAW,QAAS,IAAI,UAAW,QAAS,KAAK,CAAC,GAAI,QAAS,IAAK;AAAA,cAGvE,OAAO;AACN,iBAAE,UAAW,QAAS,IAAI,UAAW,QAAS,KAAK,CAAC,GAAI,KAAM,IAAK;AAAA,cACpE;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAGA,eAAS,8BAA+B,WAAW,SAAS,iBAAiB,OAAQ;AAEpF,YAAI,YAAY,CAAC,GAChB,mBAAqB,cAAc;AAEpC,iBAAS,QAAS,UAAW;AAC5B,cAAI;AACJ,oBAAW,QAAS,IAAI;AACxB,UAAAC,QAAO,KAAM,UAAW,QAAS,KAAK,CAAC,GAAG,SAAU,GAAG,oBAAqB;AAC3E,gBAAI,sBAAsB,mBAAoB,SAAS,iBAAiB,KAAM;AAC9E,gBAAK,OAAO,wBAAwB,YACnC,CAAC,oBAAoB,CAAC,UAAW,mBAAoB,GAAI;AAEzD,sBAAQ,UAAU,QAAS,mBAAoB;AAC/C,sBAAS,mBAAoB;AAC7B,qBAAO;AAAA,YACR,WAAY,kBAAmB;AAC9B,qBAAO,EAAG,WAAW;AAAA,YACtB;AAAA,UACD,CAAE;AACF,iBAAO;AAAA,QACR;AAEA,eAAO,QAAS,QAAQ,UAAW,CAAE,CAAE,KAAK,CAAC,UAAW,GAAI,KAAK,QAAS,GAAI;AAAA,MAC/E;AAKA,eAAS,WAAY,QAAQ,KAAM;AAClC,YAAI,KAAK,MACR,cAAcA,QAAO,aAAa,eAAe,CAAC;AAEnD,aAAM,OAAO,KAAM;AAClB,cAAK,IAAK,GAAI,MAAM,QAAY;AAC/B,aAAE,YAAa,GAAI,IAAI,SAAW,SAAU,OAAO,CAAC,IAAS,GAAI,IAAI,IAAK,GAAI;AAAA,UAC/E;AAAA,QACD;AACA,YAAK,MAAO;AACX,UAAAA,QAAO,OAAQ,MAAM,QAAQ,IAAK;AAAA,QACnC;AAEA,eAAO;AAAA,MACR;AAMA,eAAS,oBAAqB,GAAG,OAAO,WAAY;AAEnD,YAAI,IAAI,MAAM,eAAe,eAC5B,WAAW,EAAE,UACb,YAAY,EAAE;AAGf,eAAQ,UAAW,CAAE,MAAM,KAAM;AAChC,oBAAU,MAAM;AAChB,cAAK,OAAO,QAAY;AACvB,iBAAK,EAAE,YAAY,MAAM,kBAAmB,cAAe;AAAA,UAC5D;AAAA,QACD;AAGA,YAAK,IAAK;AACT,eAAM,QAAQ,UAAW;AACxB,gBAAK,SAAU,IAAK,KAAK,SAAU,IAAK,EAAE,KAAM,EAAG,GAAI;AACtD,wBAAU,QAAS,IAAK;AACxB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAGA,YAAK,UAAW,CAAE,KAAK,WAAY;AAClC,0BAAgB,UAAW,CAAE;AAAA,QAC9B,OAAO;AAGN,eAAM,QAAQ,WAAY;AACzB,gBAAK,CAAC,UAAW,CAAE,KAAK,EAAE,WAAY,OAAO,MAAM,UAAW,CAAE,CAAE,GAAI;AACrE,8BAAgB;AAChB;AAAA,YACD;AACA,gBAAK,CAAC,eAAgB;AACrB,8BAAgB;AAAA,YACjB;AAAA,UACD;AAGA,0BAAgB,iBAAiB;AAAA,QAClC;AAKA,YAAK,eAAgB;AACpB,cAAK,kBAAkB,UAAW,CAAE,GAAI;AACvC,sBAAU,QAAS,aAAc;AAAA,UAClC;AACA,iBAAO,UAAW,aAAc;AAAA,QACjC;AAAA,MACD;AAKA,eAAS,YAAa,GAAG,UAAU,OAAO,WAAY;AACrD,YAAI,OAAO,SAAS,MAAM,KAAK,MAC9B,aAAa,CAAC,GAGd,YAAY,EAAE,UAAU,MAAM;AAG/B,YAAK,UAAW,CAAE,GAAI;AACrB,eAAM,QAAQ,EAAE,YAAa;AAC5B,uBAAY,KAAK,YAAY,CAAE,IAAI,EAAE,WAAY,IAAK;AAAA,UACvD;AAAA,QACD;AAEA,kBAAU,UAAU,MAAM;AAG1B,eAAQ,SAAU;AAEjB,cAAK,EAAE,eAAgB,OAAQ,GAAI;AAClC,kBAAO,EAAE,eAAgB,OAAQ,CAAE,IAAI;AAAA,UACxC;AAGA,cAAK,CAAC,QAAQ,aAAa,EAAE,YAAa;AACzC,uBAAW,EAAE,WAAY,UAAU,EAAE,QAAS;AAAA,UAC/C;AAEA,iBAAO;AACP,oBAAU,UAAU,MAAM;AAE1B,cAAK,SAAU;AAGd,gBAAK,YAAY,KAAM;AAEtB,wBAAU;AAAA,YAGX,WAAY,SAAS,OAAO,SAAS,SAAU;AAG9C,qBAAO,WAAY,OAAO,MAAM,OAAQ,KAAK,WAAY,OAAO,OAAQ;AAGxE,kBAAK,CAAC,MAAO;AACZ,qBAAM,SAAS,YAAa;AAG3B,wBAAM,MAAM,MAAO,GAAI;AACvB,sBAAK,IAAK,CAAE,MAAM,SAAU;AAG3B,2BAAO,WAAY,OAAO,MAAM,IAAK,CAAE,CAAE,KACxC,WAAY,OAAO,IAAK,CAAE,CAAE;AAC7B,wBAAK,MAAO;AAGX,0BAAK,SAAS,MAAO;AACpB,+BAAO,WAAY,KAAM;AAAA,sBAG1B,WAAY,WAAY,KAAM,MAAM,MAAO;AAC1C,kCAAU,IAAK,CAAE;AACjB,kCAAU,QAAS,IAAK,CAAE,CAAE;AAAA,sBAC7B;AACA;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAGA,kBAAK,SAAS,MAAO;AAGpB,oBAAK,QAAQ,EAAE,QAAS;AACvB,6BAAW,KAAM,QAAS;AAAA,gBAC3B,OAAO;AACN,sBAAI;AACH,+BAAW,KAAM,QAAS;AAAA,kBAC3B,SAAU,GAAI;AACb,2BAAO;AAAA,sBACN,OAAO;AAAA,sBACP,OAAO,OAAO,IAAI,wBAAwB,OAAO,SAAS;AAAA,oBAC3D;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO,EAAE,OAAO,WAAW,MAAM,SAAS;AAAA,MAC3C;AAEA,MAAAA,QAAO,OAAQ;AAAA;AAAA,QAGd,QAAQ;AAAA;AAAA,QAGR,cAAc,CAAC;AAAA,QACf,MAAM,CAAC;AAAA,QAEP,cAAc;AAAA,UACb,KAAK8B,UAAS;AAAA,UACd,MAAM;AAAA,UACN,SAAS,eAAe,KAAMA,UAAS,QAAS;AAAA,UAChD,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,OAAO;AAAA,UACP,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAcb,SAAS;AAAA,YACR,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAK;AAAA,YACL,MAAM;AAAA,UACP;AAAA,UAEA,UAAU;AAAA,YACT,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UACP;AAAA,UAEA,gBAAgB;AAAA,YACf,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UACP;AAAA;AAAA;AAAA,UAIA,YAAY;AAAA;AAAA,YAGX,UAAU;AAAA;AAAA,YAGV,aAAa;AAAA;AAAA,YAGb,aAAa,KAAK;AAAA;AAAA,YAGlB,YAAY9B,QAAO;AAAA,UACpB;AAAA;AAAA;AAAA;AAAA;AAAA,UAMA,aAAa;AAAA,YACZ,KAAK;AAAA,YACL,SAAS;AAAA,UACV;AAAA,QACD;AAAA;AAAA;AAAA;AAAA,QAKA,WAAW,SAAU,QAAQ,UAAW;AACvC,iBAAO;AAAA;AAAA,YAGN,WAAY,WAAY,QAAQA,QAAO,YAAa,GAAG,QAAS;AAAA;AAAA;AAAA,YAGhE,WAAYA,QAAO,cAAc,MAAO;AAAA;AAAA,QAC1C;AAAA,QAEA,eAAe,4BAA6B,UAAW;AAAA,QACvD,eAAe,4BAA6B,UAAW;AAAA;AAAA,QAGvD,MAAM,SAAUgC,MAAK,SAAU;AAG9B,cAAK,OAAOA,SAAQ,UAAW;AAC9B,sBAAUA;AACV,YAAAA,OAAM;AAAA,UACP;AAGA,oBAAU,WAAW,CAAC;AAEtB,cAAI,WAGH,UAGA,uBACA,iBAGA,cAGA,WAGAC,YAGA,aAGAlC,IAGA,UAGA,IAAIC,QAAO,UAAW,CAAC,GAAG,OAAQ,GAGlC,kBAAkB,EAAE,WAAW,GAG/B,qBAAqB,EAAE,YACpB,gBAAgB,YAAY,gBAAgB,UAC9CA,QAAQ,eAAgB,IACxBA,QAAO,OAGR,WAAWA,QAAO,SAAS,GAC3B,mBAAmBA,QAAO,UAAW,aAAc,GAGnD,aAAa,EAAE,cAAc,CAAC,GAG9B,iBAAiB,CAAC,GAClB,sBAAsB,CAAC,GAGvB,WAAW,YAGX,QAAQ;AAAA,YACP,YAAY;AAAA;AAAA,YAGZ,mBAAmB,SAAU,KAAM;AAClC,kBAAI;AACJ,kBAAKiC,YAAY;AAChB,oBAAK,CAAC,iBAAkB;AACvB,oCAAkB,CAAC;AACnB,yBAAU,QAAQ,SAAS,KAAM,qBAAsB,GAAM;AAO5D,oCAAiB,MAAO,CAAE,EAAE,YAAY,IAAI,GAAI,KAC7C,gBAAiB,MAAO,CAAE,EAAE,YAAY,IAAI,GAAI,KAAK,CAAC,GACtD,OAAQ,MAAO,CAAE,CAAE;AAAA,kBACvB;AAAA,gBACD;AACA,wBAAQ,gBAAiB,IAAI,YAAY,IAAI,GAAI;AAAA,cAClD;AACA,qBAAO,SAAS,OAAO,OAAO,MAAM,KAAM,IAAK;AAAA,YAChD;AAAA;AAAA,YAGA,uBAAuB,WAAW;AACjC,qBAAOA,aAAY,wBAAwB;AAAA,YAC5C;AAAA;AAAA,YAGA,kBAAkB,SAAU,MAAM,OAAQ;AACzC,kBAAKA,cAAa,MAAO;AACxB,uBAAO,oBAAqB,KAAK,YAAY,CAAE,IAC9C,oBAAqB,KAAK,YAAY,CAAE,KAAK;AAC9C,+BAAgB,IAAK,IAAI;AAAA,cAC1B;AACA,qBAAO;AAAA,YACR;AAAA;AAAA,YAGA,kBAAkB,SAAU,MAAO;AAClC,kBAAKA,cAAa,MAAO;AACxB,kBAAE,WAAW;AAAA,cACd;AACA,qBAAO;AAAA,YACR;AAAA;AAAA,YAGA,YAAY,SAAU,KAAM;AAC3B,kBAAI;AACJ,kBAAK,KAAM;AACV,oBAAKA,YAAY;AAGhB,wBAAM,OAAQ,IAAK,MAAM,MAAO,CAAE;AAAA,gBACnC,OAAO;AAGN,uBAAM,QAAQ,KAAM;AACnB,+BAAY,IAAK,IAAI,CAAE,WAAY,IAAK,GAAG,IAAK,IAAK,CAAE;AAAA,kBACxD;AAAA,gBACD;AAAA,cACD;AACA,qBAAO;AAAA,YACR;AAAA;AAAA,YAGA,OAAO,SAAU,YAAa;AAC7B,kBAAI,YAAY,cAAc;AAC9B,kBAAK,WAAY;AAChB,0BAAU,MAAO,SAAU;AAAA,cAC5B;AACA,cAAAC,MAAM,GAAG,SAAU;AACnB,qBAAO;AAAA,YACR;AAAA,UACD;AAGD,mBAAS,QAAS,KAAM;AAKxB,YAAE,QAAUF,QAAO,EAAE,OAAOF,UAAS,QAAS,IAC5C,QAAS,WAAWA,UAAS,WAAW,IAAK;AAG/C,YAAE,OAAO,QAAQ,UAAU,QAAQ,QAAQ,EAAE,UAAU,EAAE;AAGzD,YAAE,aAAc,EAAE,YAAY,KAAM,YAAY,EAAE,MAAO,aAAc,KAAK,CAAE,EAAG;AAGjF,cAAK,EAAE,eAAe,MAAO;AAC5B,wBAAY,WAAW,cAAe,GAAI;AAK1C,gBAAI;AACH,wBAAU,OAAO,EAAE;AAInB,wBAAU,OAAO,UAAU;AAC3B,gBAAE,cAAc,aAAa,WAAW,OAAO,aAAa,SAC3D,UAAU,WAAW,OAAO,UAAU;AAAA,YACxC,SAAU,GAAI;AAIb,gBAAE,cAAc;AAAA,YACjB;AAAA,UACD;AAGA,wCAA+B,YAAY,GAAG,SAAS,KAAM;AAG7D,cAAK,EAAE,QAAQ,EAAE,eAAe,OAAO,EAAE,SAAS,UAAW;AAC5D,cAAE,OAAO9B,QAAO,MAAO,EAAE,MAAM,EAAE,WAAY;AAAA,UAC9C;AAGA,cAAKiC,YAAY;AAChB,mBAAO;AAAA,UACR;AAIA,wBAAcjC,QAAO,SAAS,EAAE;AAGhC,cAAK,eAAeA,QAAO,aAAa,GAAI;AAC3C,YAAAA,QAAO,MAAM,QAAS,WAAY;AAAA,UACnC;AAGA,YAAE,OAAO,EAAE,KAAK,YAAY;AAG5B,YAAE,aAAa,CAAC,WAAW,KAAM,EAAE,IAAK;AAKxC,qBAAW,EAAE,IAAI,QAAS,OAAO,EAAG;AAGpC,cAAK,CAAC,EAAE,YAAa;AAGpB,uBAAW,EAAE,IAAI,MAAO,SAAS,MAAO;AAGxC,gBAAK,EAAE,SAAU,EAAE,eAAe,OAAO,EAAE,SAAS,WAAa;AAChE,2BAAc,OAAO,KAAM,QAAS,IAAI,MAAM,OAAQ,EAAE;AAGxD,qBAAO,EAAE;AAAA,YACV;AAGA,gBAAK,EAAE,UAAU,OAAQ;AACxB,yBAAW,SAAS,QAAS,YAAY,IAAK;AAC9C,0BAAa,OAAO,KAAM,QAAS,IAAI,MAAM,OAAQ,OAClD,MAAM,SAAW;AAAA,YACrB;AAGA,cAAE,MAAM,WAAW;AAAA,UAGpB,WAAY,EAAE,QAAQ,EAAE,gBACrB,EAAE,eAAe,IAAK,QAAS,mCAAoC,MAAM,GAAI;AAC/E,cAAE,OAAO,EAAE,KAAK,QAAS,KAAK,GAAI;AAAA,UACnC;AAGA,cAAK,EAAE,YAAa;AACnB,gBAAKA,QAAO,aAAc,QAAS,GAAI;AACtC,oBAAM,iBAAkB,qBAAqBA,QAAO,aAAc,QAAS,CAAE;AAAA,YAC9E;AACA,gBAAKA,QAAO,KAAM,QAAS,GAAI;AAC9B,oBAAM,iBAAkB,iBAAiBA,QAAO,KAAM,QAAS,CAAE;AAAA,YAClE;AAAA,UACD;AAGA,cAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,SAAS,QAAQ,aAAc;AAC/E,kBAAM,iBAAkB,gBAAgB,EAAE,WAAY;AAAA,UACvD;AAGA,gBAAM;AAAA,YACL;AAAA,YACA,EAAE,UAAW,CAAE,KAAK,EAAE,QAAS,EAAE,UAAW,CAAE,CAAE,IAC/C,EAAE,QAAS,EAAE,UAAW,CAAE,CAAE,KACzB,EAAE,UAAW,CAAE,MAAM,MAAM,OAAO,WAAW,aAAa,MAC7D,EAAE,QAAS,GAAI;AAAA,UACjB;AAGA,eAAMD,MAAK,EAAE,SAAU;AACtB,kBAAM,iBAAkBA,IAAG,EAAE,QAASA,EAAE,CAAE;AAAA,UAC3C;AAGA,cAAK,EAAE,eACJ,EAAE,WAAW,KAAM,iBAAiB,OAAO,CAAE,MAAM,SAASkC,aAAc;AAG5E,mBAAO,MAAM,MAAM;AAAA,UACpB;AAGA,qBAAW;AAGX,2BAAiB,IAAK,EAAE,QAAS;AACjC,gBAAM,KAAM,EAAE,OAAQ;AACtB,gBAAM,KAAM,EAAE,KAAM;AAGpB,sBAAY,8BAA+B,YAAY,GAAG,SAAS,KAAM;AAGzE,cAAK,CAAC,WAAY;AACjB,YAAAC,MAAM,IAAI,cAAe;AAAA,UAC1B,OAAO;AACN,kBAAM,aAAa;AAGnB,gBAAK,aAAc;AAClB,iCAAmB,QAAS,YAAY,CAAE,OAAO,CAAE,CAAE;AAAA,YACtD;AAGA,gBAAKD,YAAY;AAChB,qBAAO;AAAA,YACR;AAGA,gBAAK,EAAE,SAAS,EAAE,UAAU,GAAI;AAC/B,6BAAenC,QAAO,WAAY,WAAW;AAC5C,sBAAM,MAAO,SAAU;AAAA,cACxB,GAAG,EAAE,OAAQ;AAAA,YACd;AAEA,gBAAI;AACH,cAAAmC,aAAY;AACZ,wBAAU,KAAM,gBAAgBC,KAAK;AAAA,YACtC,SAAU,GAAI;AAGb,kBAAKD,YAAY;AAChB,sBAAM;AAAA,cACP;AAGA,cAAAC,MAAM,IAAI,CAAE;AAAA,YACb;AAAA,UACD;AAGA,mBAASA,MAAM,QAAQ,kBAAkB,WAAW,SAAU;AAC7D,gBAAI,WAAW,SAASjB,QAAO,UAAU,UACxC,aAAa;AAGd,gBAAKgB,YAAY;AAChB;AAAA,YACD;AAEA,YAAAA,aAAY;AAGZ,gBAAK,cAAe;AACnB,cAAAnC,QAAO,aAAc,YAAa;AAAA,YACnC;AAIA,wBAAY;AAGZ,oCAAwB,WAAW;AAGnC,kBAAM,aAAa,SAAS,IAAI,IAAI;AAGpC,wBAAY,UAAU,OAAO,SAAS,OAAO,WAAW;AAGxD,gBAAK,WAAY;AAChB,yBAAW,oBAAqB,GAAG,OAAO,SAAU;AAAA,YACrD;AAGA,gBAAK,CAAC,aACLE,QAAO,QAAS,UAAU,EAAE,SAAU,IAAI,MAC1CA,QAAO,QAAS,QAAQ,EAAE,SAAU,IAAI,GAAI;AAC5C,gBAAE,WAAY,aAAc,IAAI,WAAW;AAAA,cAAC;AAAA,YAC7C;AAGA,uBAAW,YAAa,GAAG,UAAU,OAAO,SAAU;AAGtD,gBAAK,WAAY;AAGhB,kBAAK,EAAE,YAAa;AACnB,2BAAW,MAAM,kBAAmB,eAAgB;AACpD,oBAAK,UAAW;AACf,kBAAAA,QAAO,aAAc,QAAS,IAAI;AAAA,gBACnC;AACA,2BAAW,MAAM,kBAAmB,MAAO;AAC3C,oBAAK,UAAW;AACf,kBAAAA,QAAO,KAAM,QAAS,IAAI;AAAA,gBAC3B;AAAA,cACD;AAGA,kBAAK,WAAW,OAAO,EAAE,SAAS,QAAS;AAC1C,6BAAa;AAAA,cAGd,WAAY,WAAW,KAAM;AAC5B,6BAAa;AAAA,cAGd,OAAO;AACN,6BAAa,SAAS;AACtB,0BAAU,SAAS;AACnB,gBAAAiB,SAAQ,SAAS;AACjB,4BAAY,CAACA;AAAA,cACd;AAAA,YACD,OAAO;AAGN,cAAAA,SAAQ;AACR,kBAAK,UAAU,CAAC,YAAa;AAC5B,6BAAa;AACb,oBAAK,SAAS,GAAI;AACjB,2BAAS;AAAA,gBACV;AAAA,cACD;AAAA,YACD;AAGA,kBAAM,SAAS;AACf,kBAAM,cAAe,oBAAoB,cAAe;AAGxD,gBAAK,WAAY;AAChB,uBAAS,YAAa,iBAAiB,CAAE,SAAS,YAAY,KAAM,CAAE;AAAA,YACvE,OAAO;AACN,uBAAS,WAAY,iBAAiB,CAAE,OAAO,YAAYA,MAAM,CAAE;AAAA,YACpE;AAGA,kBAAM,WAAY,UAAW;AAC7B,yBAAa;AAEb,gBAAK,aAAc;AAClB,iCAAmB;AAAA,gBAAS,YAAY,gBAAgB;AAAA,gBACvD,CAAE,OAAO,GAAG,YAAY,UAAUA,MAAM;AAAA,cAAE;AAAA,YAC5C;AAGA,6BAAiB,SAAU,iBAAiB,CAAE,OAAO,UAAW,CAAE;AAElE,gBAAK,aAAc;AAClB,iCAAmB,QAAS,gBAAgB,CAAE,OAAO,CAAE,CAAE;AAGzD,kBAAK,CAAG,EAAEjB,QAAO,QAAW;AAC3B,gBAAAA,QAAO,MAAM,QAAS,UAAW;AAAA,cAClC;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,SAAS,SAAUgC,MAAK,MAAM,UAAW;AACxC,iBAAOhC,QAAO,IAAKgC,MAAK,MAAM,UAAU,MAAO;AAAA,QAChD;AAAA,QAEA,WAAW,SAAUA,MAAK,UAAW;AACpC,iBAAOhC,QAAO,IAAKgC,MAAK,QAAW,UAAU,QAAS;AAAA,QACvD;AAAA,MACD,CAAE;AAEF,MAAAhC,QAAO,KAAM,CAAE,OAAO,MAAO,GAAG,SAAU,IAAI,QAAS;AACtD,QAAAA,QAAQ,MAAO,IAAI,SAAUgC,MAAK,MAAM,UAAU,MAAO;AAIxD,cAAK,OAAO,SAAS,cAAc,SAAS,MAAO;AAClD,mBAAO,QAAQ;AACf,uBAAW;AACX,mBAAO;AAAA,UACR;AAGA,iBAAOhC,QAAO,KAAMA,QAAO,OAAQ;AAAA,YAClC,KAAKgC;AAAA,YACL,MAAM;AAAA,YACN,UAAU;AAAA,YACV;AAAA,YACA,SAAS;AAAA,UACV,GAAGhC,QAAO,cAAegC,IAAI,KAAKA,IAAI,CAAE;AAAA,QACzC;AAAA,MACD,CAAE;AAEF,MAAAhC,QAAO,cAAe,SAAU,GAAI;AACnC,YAAID;AACJ,aAAMA,MAAK,EAAE,SAAU;AACtB,cAAKA,GAAE,YAAY,MAAM,gBAAiB;AACzC,cAAE,cAAc,EAAE,QAASA,EAAE,KAAK;AAAA,UACnC;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAAC,QAAO,WAAW,SAAUgC,MAAK,SAAS,KAAM;AAC/C,eAAOhC,QAAO,KAAM;AAAA,UACnB,KAAKgC;AAAA;AAAA,UAGL,MAAM;AAAA,UACN,UAAU;AAAA,UACV,OAAO;AAAA,UACP,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,aAAa,QAAQ,cAAc,EAAE,eAAe,QAAQ,YAAY,IAAI;AAAA;AAAA;AAAA;AAAA,UAK5E,YAAY;AAAA,YACX,eAAe,WAAW;AAAA,YAAC;AAAA,UAC5B;AAAA,UACA,YAAY,SAAU,UAAW;AAChC,YAAAhC,QAAO,WAAY,UAAU,SAAS,GAAI;AAAA,UAC3C;AAAA,QACD,CAAE;AAAA,MACH;AAEA,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,SAAS,SAAU,MAAO;AACzB,cAAI;AAEJ,cAAK,KAAM,CAAE,GAAI;AAChB,gBAAK,OAAO,SAAS,YAAa;AACjC,qBAAO,KAAK,KAAM,KAAM,CAAE,CAAE;AAAA,YAC7B;AAGA,mBAAOA,QAAQ,MAAM,KAAM,CAAE,EAAE,aAAc,EAAE,GAAI,CAAE,EAAE,MAAO,IAAK;AAEnE,gBAAK,KAAM,CAAE,EAAE,YAAa;AAC3B,mBAAK,aAAc,KAAM,CAAE,CAAE;AAAA,YAC9B;AAEA,iBAAK,IAAK,WAAW;AACpB,kBAAI,OAAO;AAEX,qBAAQ,KAAK,mBAAoB;AAChC,uBAAO,KAAK;AAAA,cACb;AAEA,qBAAO;AAAA,YACR,CAAE,EAAE,OAAQ,IAAK;AAAA,UAClB;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,WAAW,SAAU,MAAO;AAC3B,cAAK,OAAO,SAAS,YAAa;AACjC,mBAAO,KAAK,KAAM,SAAUD,IAAI;AAC/B,cAAAC,QAAQ,IAAK,EAAE,UAAW,KAAK,KAAM,MAAMD,EAAE,CAAE;AAAA,YAChD,CAAE;AAAA,UACH;AAEA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAIc,QAAOb,QAAQ,IAAK,GACvB,WAAWa,MAAK,SAAS;AAE1B,gBAAK,SAAS,QAAS;AACtB,uBAAS,QAAS,IAAK;AAAA,YAExB,OAAO;AACN,cAAAA,MAAK,OAAQ,IAAK;AAAA,YACnB;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,MAAM,SAAU,MAAO;AACtB,cAAI,iBAAiB,OAAO,SAAS;AAErC,iBAAO,KAAK,KAAM,SAAUd,IAAI;AAC/B,YAAAC,QAAQ,IAAK,EAAE,QAAS,iBAAiB,KAAK,KAAM,MAAMD,EAAE,IAAI,IAAK;AAAA,UACtE,CAAE;AAAA,QACH;AAAA,QAEA,QAAQ,SAAU,UAAW;AAC5B,eAAK,OAAQ,QAAS,EAAE,IAAK,MAAO,EAAE,KAAM,WAAW;AACtD,YAAAC,QAAQ,IAAK,EAAE,YAAa,KAAK,UAAW;AAAA,UAC7C,CAAE;AACF,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,KAAK,QAAQ,SAAS,SAAU,MAAO;AAC7C,eAAO,CAACA,QAAO,KAAK,QAAQ,QAAS,IAAK;AAAA,MAC3C;AACA,MAAAA,QAAO,KAAK,QAAQ,UAAU,SAAU,MAAO;AAC9C,eAAO,CAAC,EAAG,KAAK,eAAe,KAAK,gBAAgB,KAAK,eAAe,EAAE;AAAA,MAC3E;AAEA,MAAAA,QAAO,aAAa,MAAM,WAAW;AACpC,eAAO,IAAIF,QAAO,eAAe;AAAA,MAClC;AAEA,UAAI,mBAAmB;AAAA;AAAA,QAGtB,GAAG;AAAA,MACJ;AAEA,MAAAE,QAAO,cAAe,SAAU,SAAU;AACzC,YAAI;AAEJ,eAAO;AAAA,UACN,MAAM,SAAU,SAAS,UAAW;AACnC,gBAAID,IACH,MAAM,QAAQ,IAAI;AAEnB,gBAAI;AAAA,cACH,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,QAAQ;AAAA,YACT;AAGA,gBAAK,QAAQ,WAAY;AACxB,mBAAMA,MAAK,QAAQ,WAAY;AAC9B,oBAAKA,EAAE,IAAI,QAAQ,UAAWA,EAAE;AAAA,cACjC;AAAA,YACD;AAGA,gBAAK,QAAQ,YAAY,IAAI,kBAAmB;AAC/C,kBAAI,iBAAkB,QAAQ,QAAS;AAAA,YACxC;AAOA,gBAAK,CAAC,QAAQ,eAAe,CAAC,QAAS,kBAAmB,GAAI;AAC7D,sBAAS,kBAAmB,IAAI;AAAA,YACjC;AAGA,iBAAMA,MAAK,SAAU;AACpB,kBAAI,iBAAkBA,IAAG,QAASA,EAAE,CAAE;AAAA,YACvC;AAGA,uBAAW,SAAU,MAAO;AAC3B,qBAAO,WAAW;AACjB,oBAAK,UAAW;AACf,6BAAW,IAAI,SAAS,IAAI,UAAU,IAAI,UAAU,IAAI,YAAY;AAEpE,sBAAK,SAAS,SAAU;AACvB,wBAAI,MAAM;AAAA,kBACX,WAAY,SAAS,SAAU;AAC9B;AAAA;AAAA,sBAGC,IAAI;AAAA,sBACJ,IAAI;AAAA,oBACL;AAAA,kBACD,OAAO;AACN;AAAA,sBACC,iBAAkB,IAAI,MAAO,KAAK,IAAI;AAAA,sBACtC,IAAI;AAAA;AAAA,uBAGF,IAAI,gBAAgB,YAAa,SAClC,EAAE,MAAM,IAAI,aAAa,IACzB,EAAE,QAAQ,IAAI,SAAS;AAAA,sBACxB,IAAI,sBAAsB;AAAA,oBAC3B;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAGA,gBAAI,SAAS,SAAS;AACtB,gBAAI,UAAU,IAAI,UAAU,IAAI,YAAY,SAAU,OAAQ;AAG9D,uBAAW,SAAU,OAAQ;AAE7B,gBAAI;AAGH,kBAAI,KAAM,QAAQ,cAAc,QAAQ,QAAQ,IAAK;AAAA,YACtD,SAAU,GAAI;AAGb,kBAAK,UAAW;AACf,sBAAM;AAAA,cACP;AAAA,YACD;AAAA,UACD;AAAA,UAEA,OAAO,WAAW;AACjB,gBAAK,UAAW;AACf,uBAAS;AAAA,YACV;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,eAAS,gBAAiB,GAAI;AAO7B,eAAO,EAAE,eACR,CAAC,EAAE,YAEF,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASA,EAAE,SAASC,QAAO,QAAS,QAAQ,EAAE,SAAU,IAAI;AAAA,MAGxD;AAIA,MAAAA,QAAO,UAAW;AAAA,QACjB,SAAS;AAAA,UACR,QAAQ;AAAA,QAET;AAAA,QACA,YAAY;AAAA,UACX,eAAe,SAAU,MAAO;AAC/B,YAAAA,QAAO,WAAY,IAAK;AACxB,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,cAAe,UAAU,SAAU,GAAI;AAC7C,YAAK,EAAE,UAAU,QAAY;AAC5B,YAAE,QAAQ;AAAA,QACX;AAIA,YAAK,gBAAiB,CAAE,GAAI;AAC3B,YAAE,OAAO;AAAA,QACV;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,cAAe,UAAU,SAAU,GAAI;AAC7C,YAAK,gBAAiB,CAAE,GAAI;AAC3B,cAAI,QAAQ;AACZ,iBAAO;AAAA,YACN,MAAM,SAAU,GAAG,UAAW;AAC7B,uBAASA,QAAQ,UAAW,EAC1B,KAAM,EAAE,eAAe,CAAC,CAAE,EAC1B,KAAM,EAAE,SAAS,EAAE,eAAe,KAAK,EAAE,IAAI,CAAE,EAC/C,GAAI,cAAc,WAAW,SAAU,KAAM;AAC7C,uBAAO,OAAO;AACd,2BAAW;AACX,oBAAK,KAAM;AACV,2BAAU,IAAI,SAAS,UAAU,MAAM,KAAK,IAAI,IAAK;AAAA,gBACtD;AAAA,cACD,CAAE;AAGH,yBAAW,KAAK,YAAa,OAAQ,CAAE,CAAE;AAAA,YAC1C;AAAA,YACA,OAAO,WAAW;AACjB,kBAAK,UAAW;AACf,yBAAS;AAAA,cACV;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,UAAI,eAAe,CAAC,GACnB,SAAS;AAGV,MAAAA,QAAO,UAAW;AAAA,QACjB,OAAO;AAAA,QACP,eAAe,WAAW;AACzB,cAAI,WAAW,aAAa,IAAI,KAAOA,QAAO,UAAU,MAAQ,MAAM;AACtE,eAAM,QAAS,IAAI;AACnB,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,cAAe,SAAS,SAAU,GAAG,kBAAkB,OAAQ;AAErE,YAAI,cAAc,aAAa,mBAC9B,WAAW,EAAE,UAAU,UAAW,OAAO,KAAM,EAAE,GAAI,IACpD,QACA,OAAO,EAAE,SAAS,aACf,EAAE,eAAe,IACjB,QAAS,mCAAoC,MAAM,KACrD,OAAO,KAAM,EAAE,IAAK,KAAK;AAI5B,uBAAe,EAAE,gBAAgB,OAAO,EAAE,kBAAkB,aAC3D,EAAE,cAAc,IAChB,EAAE;AAGH,YAAK,UAAW;AACf,YAAG,QAAS,IAAI,EAAG,QAAS,EAAE,QAAS,QAAQ,OAAO,YAAa;AAAA,QACpE,WAAY,EAAE,UAAU,OAAQ;AAC/B,YAAE,QAAS,OAAO,KAAM,EAAE,GAAI,IAAI,MAAM,OAAQ,EAAE,QAAQ,MAAM;AAAA,QACjE;AAGA,UAAE,WAAY,aAAc,IAAI,WAAW;AAC1C,cAAK,CAAC,mBAAoB;AACzB,YAAAA,QAAO,MAAO,eAAe,iBAAkB;AAAA,UAChD;AACA,iBAAO,kBAAmB,CAAE;AAAA,QAC7B;AAGA,UAAE,UAAW,CAAE,IAAI;AAGnB,sBAAcF,QAAQ,YAAa;AACnC,QAAAA,QAAQ,YAAa,IAAI,WAAW;AACnC,8BAAoB;AAAA,QACrB;AAGA,cAAM,OAAQ,WAAW;AAGxB,cAAK,gBAAgB,QAAY;AAChC,YAAAE,QAAQF,OAAO,EAAE,WAAY,YAAa;AAAA,UAG3C,OAAO;AACN,YAAAA,QAAQ,YAAa,IAAI;AAAA,UAC1B;AAGA,cAAK,EAAG,YAAa,GAAI;AAGxB,cAAE,gBAAgB,iBAAiB;AAGnC,yBAAa,KAAM,YAAa;AAAA,UACjC;AAGA,cAAK,qBAAqB,OAAO,gBAAgB,YAAa;AAC7D,wBAAa,kBAAmB,CAAE,CAAE;AAAA,UACrC;AAEA,8BAAoB,cAAc;AAAA,QACnC,CAAE;AAGF,eAAO;AAAA,MACR,CAAE;AAEF,MAAAE,QAAO,cAAe,SAAU,GAAG,aAAc;AAGhD,YAAK,OAAO,EAAE,SAAS,YAAY,CAACA,QAAO,cAAe,EAAE,IAAK,KAC/D,CAAC,MAAM,QAAS,EAAE,IAAK;AAAA,QAGvB,EAAG,iBAAiB,cAAgB;AACrC,YAAE,cAAc;AAAA,QACjB;AAIA,YAAK,EAAE,gBAAgBF,QAAO,UAAW;AACxC,YAAE,cAAc;AAAA,QACjB;AAAA,MACD,CAAE;AAMF,MAAAE,QAAO,YAAY,SAAU,MAAM,SAAS,aAAc;AACzD,YAAK,OAAO,SAAS,YAAY,CAAC,cAAe,OAAO,EAAG,GAAI;AAC9D,iBAAO,CAAC;AAAA,QACT;AACA,YAAK,OAAO,YAAY,WAAY;AACnC,wBAAc;AACd,oBAAU;AAAA,QACX;AAEA,YAAI,QAAQ;AAEZ,YAAK,CAAC,SAAU;AAIf,oBAAY,IAAIF,QAAO,UAAU,EAC/B,gBAAiB,IAAI,WAAY;AAAA,QACpC;AAEA,iBAAS,WAAW,KAAM,IAAK;AAC/B,kBAAU,CAAC,eAAe,CAAC;AAG3B,YAAK,QAAS;AACb,iBAAO,CAAE,QAAQ,cAAe,OAAQ,CAAE,CAAE,CAAE;AAAA,QAC/C;AAEA,iBAAS,cAAe,CAAE,IAAK,GAAG,SAAS,OAAQ;AAEnD,YAAK,WAAW,QAAQ,QAAS;AAChC,UAAAE,QAAQ,OAAQ,EAAE,OAAO;AAAA,QAC1B;AAEA,eAAOA,QAAO,MAAO,CAAC,GAAG,OAAO,UAAW;AAAA,MAC5C;AAKA,MAAAA,QAAO,GAAG,OAAO,SAAUgC,MAAK,QAAQ,UAAW;AAClD,YAAI,UAAU,MAAM,UACnBnB,QAAO,MACP,MAAMmB,KAAI,QAAS,GAAI;AAExB,YAAK,MAAM,IAAK;AACf,qBAAW,iBAAkBA,KAAI,MAAO,GAAI,CAAE;AAC9C,UAAAA,OAAMA,KAAI,MAAO,GAAG,GAAI;AAAA,QACzB;AAGA,YAAK,OAAO,WAAW,YAAa;AAGnC,qBAAW;AACX,mBAAS;AAAA,QAGV,WAAY,UAAU,OAAO,WAAW,UAAW;AAClD,iBAAO;AAAA,QACR;AAGA,YAAKnB,MAAK,SAAS,GAAI;AACtB,UAAAb,QAAO,KAAM;AAAA,YACZ,KAAKgC;AAAA;AAAA;AAAA;AAAA,YAKL,MAAM,QAAQ;AAAA,YACd,UAAU;AAAA,YACV,MAAM;AAAA,UACP,CAAE,EAAE,KAAM,SAAU,cAAe;AAGlC,uBAAW;AAEX,YAAAnB,MAAK,KAAM;AAAA;AAAA;AAAA,cAIVb,QAAQ,OAAQ,EAAE,OAAQA,QAAO,UAAW,YAAa,CAAE,EAAE,KAAM,QAAS;AAAA;AAAA;AAAA,cAG5E;AAAA,aAAa;AAAA,UAKf,CAAE,EAAE,OAAQ,YAAY,SAAU,OAAO,QAAS;AACjD,YAAAa,MAAK,KAAM,WAAW;AACrB,uBAAS,MAAO,MAAM,YAAY,CAAE,MAAM,cAAc,QAAQ,KAAM,CAAE;AAAA,YACzE,CAAE;AAAA,UACH,CAAE;AAAA,QACH;AAEA,eAAO;AAAA,MACR;AAEA,MAAAb,QAAO,KAAK,QAAQ,WAAW,SAAU,MAAO;AAC/C,eAAOA,QAAO,KAAMA,QAAO,QAAQ,SAAU,IAAK;AACjD,iBAAO,SAAS,GAAG;AAAA,QACpB,CAAE,EAAE;AAAA,MACL;AAEA,MAAAA,QAAO,SAAS;AAAA,QACf,WAAW,SAAU,MAAM,SAASD,IAAI;AACvC,cAAI,aAAa,SAAS,WAAW,QAAQ,WAAW,YAAY,mBACnE,WAAWC,QAAO,IAAK,MAAM,UAAW,GACxC,UAAUA,QAAQ,IAAK,GACvB,QAAQ,CAAC;AAGV,cAAK,aAAa,UAAW;AAC5B,iBAAK,MAAM,WAAW;AAAA,UACvB;AAEA,sBAAY,QAAQ,OAAO;AAC3B,sBAAYA,QAAO,IAAK,MAAM,KAAM;AACpC,uBAAaA,QAAO,IAAK,MAAM,MAAO;AACtC,+BAAsB,aAAa,cAAc,aAAa,aAC3D,YAAY,YAAa,QAAS,MAAO,IAAI;AAIhD,cAAK,mBAAoB;AACxB,0BAAc,QAAQ,SAAS;AAC/B,qBAAS,YAAY;AACrB,sBAAU,YAAY;AAAA,UAEvB,OAAO;AACN,qBAAS,WAAY,SAAU,KAAK;AACpC,sBAAU,WAAY,UAAW,KAAK;AAAA,UACvC;AAEA,cAAK,OAAO,YAAY,YAAa;AAGpC,sBAAU,QAAQ,KAAM,MAAMD,IAAGC,QAAO,OAAQ,CAAC,GAAG,SAAU,CAAE;AAAA,UACjE;AAEA,cAAK,QAAQ,OAAO,MAAO;AAC1B,kBAAM,MAAQ,QAAQ,MAAM,UAAU,MAAQ;AAAA,UAC/C;AACA,cAAK,QAAQ,QAAQ,MAAO;AAC3B,kBAAM,OAAS,QAAQ,OAAO,UAAU,OAAS;AAAA,UAClD;AAEA,cAAK,WAAW,SAAU;AACzB,oBAAQ,MAAM,KAAM,MAAM,KAAM;AAAA,UAEjC,OAAO;AACN,oBAAQ,IAAK,KAAM;AAAA,UACpB;AAAA,QACD;AAAA,MACD;AAEA,MAAAA,QAAO,GAAG,OAAQ;AAAA;AAAA,QAGjB,QAAQ,SAAU,SAAU;AAG3B,cAAK,UAAU,QAAS;AACvB,mBAAO,YAAY,SAClB,OACA,KAAK,KAAM,SAAUD,IAAI;AACxB,cAAAC,QAAO,OAAO,UAAW,MAAM,SAASD,EAAE;AAAA,YAC3C,CAAE;AAAA,UACJ;AAEA,cAAI,MAAM,KACT,OAAO,KAAM,CAAE;AAEhB,cAAK,CAAC,MAAO;AACZ;AAAA,UACD;AAMA,cAAK,CAAC,KAAK,eAAe,EAAE,QAAS;AACpC,mBAAO,EAAE,KAAK,GAAG,MAAM,EAAE;AAAA,UAC1B;AAGA,iBAAO,KAAK,sBAAsB;AAClC,gBAAM,KAAK,cAAc;AACzB,iBAAO;AAAA,YACN,KAAK,KAAK,MAAM,IAAI;AAAA,YACpB,MAAM,KAAK,OAAO,IAAI;AAAA,UACvB;AAAA,QACD;AAAA;AAAA;AAAA,QAIA,UAAU,WAAW;AACpB,cAAK,CAAC,KAAM,CAAE,GAAI;AACjB;AAAA,UACD;AAEA,cAAI,cAAc,QAAQ,KACzB,OAAO,KAAM,CAAE,GACf,eAAe,EAAE,KAAK,GAAG,MAAM,EAAE;AAGlC,cAAKC,QAAO,IAAK,MAAM,UAAW,MAAM,SAAU;AAGjD,qBAAS,KAAK,sBAAsB;AAAA,UAErC,OAAO;AACN,qBAAS,KAAK,OAAO;AAIrB,kBAAM,KAAK;AACX,2BAAe,KAAK,gBAAgB,IAAI;AACxC,mBAAQ,gBACP,iBAAiB,IAAI,mBACrBA,QAAO,IAAK,cAAc,UAAW,MAAM,UAAW;AAEtD,6BAAe,aAAa,gBAAgB,IAAI;AAAA,YACjD;AACA,gBAAK,gBAAgB,iBAAiB,QAAQ,aAAa,aAAa,KACvEA,QAAO,IAAK,cAAc,UAAW,MAAM,UAAW;AAGtD,6BAAeA,QAAQ,YAAa,EAAE,OAAO;AAC7C,2BAAa,OAAOA,QAAO,IAAK,cAAc,kBAAkB,IAAK;AACrE,2BAAa,QAAQA,QAAO,IAAK,cAAc,mBAAmB,IAAK;AAAA,YACxE;AAAA,UACD;AAGA,iBAAO;AAAA,YACN,KAAK,OAAO,MAAM,aAAa,MAAMA,QAAO,IAAK,MAAM,aAAa,IAAK;AAAA,YACzE,MAAM,OAAO,OAAO,aAAa,OAAOA,QAAO,IAAK,MAAM,cAAc,IAAK;AAAA,UAC9E;AAAA,QACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYA,cAAc,WAAW;AACxB,iBAAO,KAAK,IAAK,WAAW;AAC3B,gBAAI,eAAe,KAAK;AAExB,mBAAQ,gBAAgBA,QAAO,IAAK,cAAc,UAAW,MAAM,UAAW;AAC7E,6BAAe,aAAa;AAAA,YAC7B;AAEA,mBAAO,gBAAgB;AAAA,UACxB,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,KAAM,EAAE,YAAY,eAAe,WAAW,cAAc,GAAG,SAAU,QAAQ,MAAO;AAC9F,YAAI,MAAM,kBAAkB;AAE5B,QAAAA,QAAO,GAAI,MAAO,IAAI,SAAU,KAAM;AACrC,iBAAO,OAAQ,MAAM,SAAU,MAAMmC,SAAQJ,MAAM;AAGlD,gBAAI;AACJ,gBAAK,SAAU,IAAK,GAAI;AACvB,oBAAM;AAAA,YACP,WAAY,KAAK,aAAa,GAAI;AACjC,oBAAM,KAAK;AAAA,YACZ;AAEA,gBAAKA,SAAQ,QAAY;AACxB,qBAAO,MAAM,IAAK,IAAK,IAAI,KAAMI,OAAO;AAAA,YACzC;AAEA,gBAAK,KAAM;AACV,kBAAI;AAAA,gBACH,CAAC,MAAMJ,OAAM,IAAI;AAAA,gBACjB,MAAMA,OAAM,IAAI;AAAA,cACjB;AAAA,YAED,OAAO;AACN,mBAAMI,OAAO,IAAIJ;AAAA,YAClB;AAAA,UACD,GAAG,QAAQ,KAAK,UAAU,MAAO;AAAA,QAClC;AAAA,MACD,CAAE;AAGF,MAAA/B,QAAO,KAAM,EAAE,QAAQ,UAAU,OAAO,QAAQ,GAAG,SAAU,MAAM,MAAO;AACzE,QAAAA,QAAO,KAAM;AAAA,UACZ,SAAS,UAAU;AAAA,UACnB,SAAS;AAAA,UACT,IAAI,UAAU;AAAA,QACf,GAAG,SAAU,cAAc,UAAW;AAGrC,UAAAA,QAAO,GAAI,QAAS,IAAI,SAAU,QAAQ,OAAQ;AACjD,gBAAI,YAAY,UAAU,WAAY,gBAAgB,OAAO,WAAW,YACvE,QAAQ,iBAAkB,WAAW,QAAQ,UAAU,OAAO,WAAW;AAE1E,mBAAO,OAAQ,MAAM,SAAU,MAAMoC,OAAMhC,QAAQ;AAClD,kBAAI;AAEJ,kBAAK,SAAU,IAAK,GAAI;AAGvB,uBAAO,SAAS,QAAS,OAAQ,MAAM,IACtC,KAAM,UAAU,IAAK,IACrB,KAAK,SAAS,gBAAiB,WAAW,IAAK;AAAA,cACjD;AAGA,kBAAK,KAAK,aAAa,GAAI;AAC1B,sBAAM,KAAK;AAIX,uBAAO,KAAK;AAAA,kBACX,KAAK,KAAM,WAAW,IAAK;AAAA,kBAAG,IAAK,WAAW,IAAK;AAAA,kBACnD,KAAK,KAAM,WAAW,IAAK;AAAA,kBAAG,IAAK,WAAW,IAAK;AAAA,kBACnD,IAAK,WAAW,IAAK;AAAA,gBACtB;AAAA,cACD;AAEA,qBAAOA,WAAU;AAAA;AAAA,gBAGhBJ,QAAO,IAAK,MAAMoC,OAAM,KAAM;AAAA;AAAA;AAAA,gBAG9BpC,QAAO,MAAO,MAAMoC,OAAMhC,QAAO,KAAM;AAAA;AAAA,YACzC,GAAG,MAAM,YAAY,SAAS,QAAW,SAAU;AAAA,UACpD;AAAA,QACD,CAAE;AAAA,MACH,CAAE;AAEF,MAAAJ,QAAO,KAAM;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,GAAG,SAAU,IAAI,MAAO;AACvB,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,IAAK;AAClC,iBAAO,KAAK,GAAI,MAAM,EAAG;AAAA,QAC1B;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QAEjB,MAAM,SAAUqB,QAAO,MAAM,IAAK;AACjC,iBAAO,KAAK,GAAIA,QAAO,MAAM,MAAM,EAAG;AAAA,QACvC;AAAA,QACA,QAAQ,SAAUA,QAAO,IAAK;AAC7B,iBAAO,KAAK,IAAKA,QAAO,MAAM,EAAG;AAAA,QAClC;AAAA,QAEA,UAAU,SAAU,UAAUA,QAAO,MAAM,IAAK;AAC/C,iBAAO,KAAK,GAAIA,QAAO,UAAU,MAAM,EAAG;AAAA,QAC3C;AAAA,QACA,YAAY,SAAU,UAAUA,QAAO,IAAK;AAG3C,iBAAO,UAAU,WAAW,IAC3B,KAAK,IAAK,UAAU,IAAK,IACzB,KAAK,IAAKA,QAAO,YAAY,MAAM,EAAG;AAAA,QACxC;AAAA,QAEA,OAAO,SAAU,QAAQ,OAAQ;AAChC,iBAAO,KACL,GAAI,cAAc,MAAO,EACzB,GAAI,cAAc,SAAS,MAAO;AAAA,QACrC;AAAA,MACD,CAAE;AAEF,MAAArB,QAAO;AAAA,QACJ,wLAE0D,MAAO,GAAI;AAAA,QACvE,SAAU,IAAI,MAAO;AAGpB,UAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,MAAM,IAAK;AACxC,mBAAO,UAAU,SAAS,IACzB,KAAK,GAAI,MAAM,MAAM,MAAM,EAAG,IAC9B,KAAK,QAAS,IAAK;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AAMA,MAAAA,QAAO,QAAQ,SAAU,IAAI,SAAU;AACtC,YAAI,KAAK,MAAM;AAEf,YAAK,OAAO,YAAY,UAAW;AAClC,gBAAM,GAAI,OAAQ;AAClB,oBAAU;AACV,eAAK;AAAA,QACN;AAIA,YAAK,OAAO,OAAO,YAAa;AAC/B,iBAAO;AAAA,QACR;AAGA,eAAO,MAAM,KAAM,WAAW,CAAE;AAChC,gBAAQ,WAAW;AAClB,iBAAO,GAAG,MAAO,WAAW,MAAM,KAAK,OAAQ,MAAM,KAAM,SAAU,CAAE,CAAE;AAAA,QAC1E;AAGA,cAAM,OAAO,GAAG,OAAO,GAAG,QAAQA,QAAO;AAEzC,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,YAAY,SAAU,MAAO;AACnC,YAAK,MAAO;AACX,UAAAA,QAAO;AAAA,QACR,OAAO;AACN,UAAAA,QAAO,MAAO,IAAK;AAAA,QACpB;AAAA,MACD;AAEA,MAAAA,QAAO,KAAM,GAAI,IAAIA,QAAO,KAAK,UAAUA,QAAO,KAAK;AAevD,UAAK,OAAO,WAAW,cAAc,OAAO,KAAM;AACjD,eAAQ,UAAU,CAAC,GAAG,WAAW;AAChC,iBAAOA;AAAA,QACR,CAAE;AAAA,MACH;AAEA,UAGC,UAAUF,QAAO,QAGjB,KAAKA,QAAO;AAEb,MAAAE,QAAO,aAAa,SAAU,MAAO;AACpC,YAAKF,QAAO,MAAME,SAAS;AAC1B,UAAAF,QAAO,IAAI;AAAA,QACZ;AAEA,YAAK,QAAQA,QAAO,WAAWE,SAAS;AACvC,UAAAF,QAAO,SAAS;AAAA,QACjB;AAEA,eAAOE;AAAA,MACR;AAKA,UAAK,OAAO,aAAa,aAAc;AACtC,QAAAF,QAAO,SAASA,QAAO,IAAIE;AAAA,MAC5B;AAEA,aAAOA;AAAA,IAEP,CAAE;AAAA;AAAA;;;AC/8SF;AAAA;AAAA;AAWC,KAAC,SAAUqC,YAAW;AACrB,UAAI,OAAO,WAAW,YAAa;AAEnC,UAAI,QAAQ,GACV,aAAa,OACb,qBAAqB,OACrB,YAAY,WACZ,eAAe,UAAU,QACzB,QAAQ,iBACR,WAAW,MAAM,QACjB,eAAe,MACfC,yBAAwB,OAAO,uBAC/B,uBAAuB,OAAO,OAAO;AAAA,QACnC,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,uBAAuB;AAAA,MACzB,CAAC,GACD,WAAW,CAAC,GACZC,SAAQ,MACR,WAAW,OAAO,OAAO;AAAA,QACvB,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,aAAa;AAAA,QACb,aAAa;AAAA,QACb,aAAa;AAAA,QACb,qBAAqB;AAAA,QACrB,yBAAyB;AAAA,QACzB,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,KAAK;AAAA,QACL,WAAW;AAAA,QACX,UAAU;AAAA,QACV,WAAW;AAAA,QACX,UAAU;AAAA,QACV,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,SAAS,WAAY;AACnB,iBAAO;AAAA,QACT;AAAA,QACA,UAAU,WAAY;AAAA,QAAC;AAAA,QACvB,QAAQ,WAAY;AAAA,QAAC;AAAA,QACrB,WAAW,WAAY;AACrB,eAAK,gCAAgC;AAAA,QACvC;AAAA,QACA,cAAc,WAAY;AAAA,QAAC;AAAA,QAC3B,cAAc,WAAY;AAAA,QAAC;AAAA,QAC3B,WAAW,WAAY;AAAA,QAAC;AAAA,QACxB,UAAU,WAAY;AACpB,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAEH,eAAS,sBAAsB;AAC7B,eACE,OAAO,oBACP,OAAO,0BACP,OAAO;AAAA,MAEX;AAEA,eAASC,kBAAiBC,KAAI,KAAK,MAAM;AACvC,QAAAA,IAAG,iBAAiB,KAAK,MAAM,KAAK;AAAA,MACtC;AAEA,eAAS,oBAAoBA,KAAI,KAAK,MAAM;AAC1C,QAAAA,IAAG,oBAAoB,KAAK,MAAM,KAAK;AAAA,MACzC;AAEA,eAAS,6BAA6B;AACpC,YAAI,UAAU,CAAC,OAAO,UAAU,KAAK,IAAI;AACzC,YAAI;AAGJ,aAAK,IAAI,GAAG,IAAI,QAAQ,UAAU,CAACH,wBAAuB,KAAK,GAAG;AAChE,UAAAA,yBAAwB,OAAO,QAAQ,CAAC,IAAI,uBAAuB;AAAA,QACrE;AAEA,YAAIA,wBAAuB;AAIzB,UAAAA,yBAAwBA,uBAAsB,KAAK,MAAM;AAAA,QAC3D,OAAO;AACL,UAAAI,KAAI,SAAS,qCAAqC;AAAA,QACpD;AAAA,MACF;AAEA,eAAS,QAAQ,UAAU;AACzB,YAAI,SAAS,gBAAgB;AAE7B,YAAI,OAAO,QAAQ,OAAO,MAAM;AAC9B,mBACE,OAAO,gBAAgB,OAAO,aAAa,QACvC,OAAO,aAAa,MAAM,IAAI,OAAO,WACrC,uBAAuB;AAAA,QAC/B;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,gBAAgB,UAAU;AACjC,eAAO,QAAQ,MAAM,QAAQ,QAAQ,IAAI;AAAA,MAC3C;AAEA,eAAS,aAAa,UAAU;AAC9B,eAAO,SAAS,QAAQ,IAAI,SAAS,QAAQ,EAAE,MAAM;AAAA,MACvD;AAEA,eAASA,KAAI,UAAU,KAAK;AAC1B,eAAO,OAAO,UAAU,KAAK,aAAa,QAAQ,CAAC;AAAA,MACrD;AAEA,eAAS,KAAK,UAAU,KAAK;AAC3B,eAAO,QAAQ,UAAU,KAAK,aAAa,QAAQ,CAAC;AAAA,MACtD;AAEA,eAAS,KAAK,UAAU,KAAK;AAC3B,eAAO,QAAQ,UAAU,KAAK,IAAI;AAAA,MACpC;AAEA,eAAS,OAAO,MAAM,UAAU,KAAK,SAAS;AAC5C,YAAI,SAAS,WAAW,aAAa,OAAO,OAAO,SAAS;AAE1D,kBAAQ,IAAI,EAAE,gBAAgB,QAAQ,GAAG,GAAG;AAAA,QAC9C;AAAA,MACF;AAEA,eAAS,eAAeC,QAAO;AAC7B,iBAAS,eAAe;AACtB,mBAAS,SAAS;AAChB,oBAAQ,WAAW;AACnB,4BAAgB,QAAQ;AACxB,eAAG,aAAa,WAAW;AAAA,UAC7B;AAEA,wBAAc,QAAQ;AACtB,wBAAc,OAAO;AAErB,qBAAW,QAAQ,aAAa,MAAM;AAAA,QACxC;AAEA,iBAAS,aAAa;AACpB,cAAI,OAAO,IAAI,MAAM,QAAQ,EAAE,MAAM,GAAG;AACxC,cAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,GAAG,EAAE,IAAI;AAC/C,cAAI,SAAS,SAAS,KAAK,CAAC,CAAC,KAAK,SAAS,KAAK,CAAC,CAAC,EAAE;AACpD,cAAI,YAAY,iBAAiB,MAAM;AAEvC,iBAAO;AAAA,YACL;AAAA,YACA,IAAI,KAAK,CAAC;AAAA,YACV,QAAQ,SAAS,eAAe,SAAS,IAAI,cAAc,SAAS;AAAA,YACpE,OAAO,KAAK,CAAC;AAAA,YACb,MAAM,KAAK,CAAC;AAAA,UACd;AAAA,QACF;AAEA,iBAAS,eAAe,WAAW;AACjC,cAAI,UAAU,cAAc,cAAc;AACxC,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,UAAU,aAAa,SAAS,UAAU,YAAY,EAAE,IAAI;AACtE,cAAI,MAAM,UAAU,gBAChB,SAAS,UAAU,eAAe,EAAE,IACpC;AACJ,iBAAO,MAAM;AAAA,QACf;AAEA,iBAAS,cAAc,WAAW;AAChC,cAAI,UAAU,cAAc,cAAc;AACxC,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,UAAU,iBAChB,SAAS,UAAU,gBAAgB,EAAE,IACrC;AACJ,cAAI,MAAM,UAAU,oBAChB,SAAS,UAAU,mBAAmB,EAAE,IACxC;AACJ,iBAAO,MAAM;AAAA,QACf;AAEA,iBAAS,cAAc,WAAW;AAChC,cAAI,MAAM,OAAO,SAAS,QAAQ,EAAE,QAAQ,SAAS,CAAC,GACpD,MAAM,OAAO,SAAS,QAAQ,EAAE,QAAQ,SAAS,CAAC,GAClD,YAAY,UAAU,YAAY,GAClC,OAAO,OAAO,YAAY,SAAS,CAAC;AAEtC,UAAAD,KAAI,UAAU,cAAc,YAAY,kBAAkB,MAAM,MAAM,GAAG;AAEzE,cAAI,OAAO,KAAK;AACd,mBAAO;AACP,YAAAA,KAAI,UAAU,SAAS,YAAY,eAAe;AAAA,UACpD;AAEA,cAAI,OAAO,KAAK;AACd,mBAAO;AACP,YAAAA,KAAI,UAAU,SAAS,YAAY,eAAe;AAAA,UACpD;AAEA,sBAAY,SAAS,IAAI,KAAK;AAAA,QAChC;AAEA,iBAAS,sBAAsB;AAC7B,mBAAS,qBAAqB;AAC5B,qBAAS,YAAY;AACnB,kBAAI,IAAI,GACN,UAAU;AAEZ,cAAAA;AAAA,gBACE;AAAA,gBACA,0DACE;AAAA,cACJ;AAEA,qBAAO,IAAI,YAAY,QAAQ,KAAK;AAClC,oBAAI,YAAY,CAAC,MAAM,QAAQ;AAC7B,4BAAU;AACV;AAAA,gBACF;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AAEA,qBAAS,cAAc;AACrB,kBAAI,aAAa,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE;AAC1D,cAAAA,KAAI,UAAU,kCAAkC,UAAU;AAC1D,qBAAO,WAAW;AAAA,YACpB;AAEA,mBAAO,YAAY,gBAAgB,QAAQ,UAAU,IAAI,YAAY;AAAA,UACvE;AAEA,cAAI,SAASC,OAAM,QACjB,cAAc,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE;AAEzD,cAAI,eAAe,KAAK,WAAW,UAAU,CAAC,mBAAmB,GAAG;AAClE,kBAAM,IAAI;AAAA,cACR,uCACE,SACA,UACA,YAAY,OAAO,KACnB,oBACAA,OAAM,OACN;AAAA,YACJ;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAEA,iBAAS,iBAAiB;AACxB,iBACE,WAAW,KAAK,KAAK,MAAM,GAAG,QAAQ,KACtC,IAAI,MAAM,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,QAEzC;AAEA,iBAAS,0BAA0B;AAGjC,cAAI,UAAU,YAAY,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,EAAE;AAEpE,cAAI,SAAS;AACX,YAAAD,KAAI,UAAU,6CAA6C;AAAA,UAC7D;AAEA,iBAAO;AAAA,QACT;AAEA,iBAAS,WAAW,QAAQ;AAC1B,iBAAO,IAAI,MAAM,IAAI,QAAQ,GAAG,IAAI,eAAe,MAAM;AAAA,QAC3D;AAEA,iBAAS,qBAAqB,SAAS;AACrC,UAAAA;AAAA,YACE;AAAA,YACA,gCACE,YAAY,OAAO,KACnB,gBACA,UACA;AAAA,UACJ;AAEA,aAAG,aAAa;AAAA,YACd,QAAQ,YAAY;AAAA,YACpB,SAAS,KAAK,MAAM,OAAO;AAAA,UAC7B,CAAC;AAED,UAAAA,KAAI,UAAU,IAAI;AAAA,QACpB;AAEA,iBAAS,cAAc;AACrB,cAAI,eAAe,SAAS,KAAK,sBAAsB,GACrD,iBAAiB,YAAY,OAAO,sBAAsB;AAE5D,iBAAO,KAAK,UAAU;AAAA,YACpB,cAAc,eAAe;AAAA,YAC7B,aAAa,eAAe;AAAA,YAC5B,cAAc,KAAK;AAAA,cACjB,SAAS,gBAAgB;AAAA,cACzB,OAAO,eAAe;AAAA,YACxB;AAAA,YACA,aAAa,KAAK;AAAA,cAChB,SAAS,gBAAgB;AAAA,cACzB,OAAO,cAAc;AAAA,YACvB;AAAA,YACA,WAAW,SAAS,eAAe,MAAM,aAAa,KAAK,EAAE;AAAA,YAC7D,YAAY,SAAS,eAAe,OAAO,aAAa,MAAM,EAAE;AAAA,YAChE,WAAW,OAAO;AAAA,YAClB,YAAY,OAAO;AAAA,YACnB,gBAAgB,SAAS,gBAAgB;AAAA,YACzC,eAAe,SAAS,gBAAgB;AAAA,YACxC,cAAc,OAAO;AAAA,YACrB,aAAa,OAAO;AAAA,UACtB,CAAC;AAAA,QACH;AAEA,iBAAS,qBAAqB,QAAQE,WAAU;AAC9C,mBAAS,mBAAmB;AAC1B,oBAAQ,kBAAkB,cAAc,YAAY,GAAG,QAAQA,SAAQ;AAAA,UACzE;AACA,8BAAoB,kBAAkB,IAAIA,SAAQ;AAAA,QACpD;AAEA,iBAAS,uBAAuB;AAC9B,mBAAS,YAAY,MAAM,MAAM;AAC/B,qBAAS,eAAe;AACtB,kBAAI,SAAS,EAAE,GAAG;AAChB,qCAAqB,SAAS,EAAE,EAAE,QAAQ,EAAE;AAAA,cAC9C,OAAO;AACL,qBAAK;AAAA,cACP;AAAA,YACF;AAEA;AAAC,aAAC,UAAU,QAAQ,EAAE,QAAQ,SAAU,KAAK;AAC3C,cAAAF,KAAI,IAAI,OAAO,MAAM,4BAA4B;AACjD,mBAAK,QAAQ,KAAK,YAAY;AAAA,YAChC,CAAC;AAAA,UACH;AAEA,mBAAS,OAAO;AACd,wBAAY,WAAW,mBAAmB;AAAA,UAC5C;AAEA,mBAAS,QAAQ;AACf,wBAAY,QAAQF,iBAAgB;AAAA,UACtC;AAEA,cAAI,KAAK;AAET,gBAAM;AAEN,cAAI,SAAS,EAAE,GAAG;AAChB,qBAAS,EAAE,EAAE,eAAe;AAAA,UAC9B;AAAA,QACF;AAEA,iBAAS,sBAAsB;AAC7B,cAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,cAAc;AACzD,qBAAS,QAAQ,EAAE,aAAa;AAChC,mBAAO,SAAS,QAAQ,EAAE;AAAA,UAC5B;AAAA,QACF;AAEA,iBAAS,oBAAoB;AAC3B,cAAI,UAAU;AAEd,cAAI,SAAS,YAAY,QAAQ;AAC/B,iBAAK,UAAU,aAAa,YAAY,KAAK,aAAa;AAC1D,sBAAU;AAAA,UACZ;AACA,iBAAO;AAAA,QACT;AAEA,iBAAS,mBAAmB,QAAQ;AAClC,cAAI,iBAAiB,OAAO,sBAAsB;AAElD,0BAAgB,QAAQ;AAExB,iBAAO;AAAA,YACL,GAAG,KAAK,MAAM,OAAO,eAAe,IAAI,IAAI,OAAO,aAAa,CAAC,CAAC;AAAA,YAClE,GAAG,KAAK,MAAM,OAAO,eAAe,GAAG,IAAI,OAAO,aAAa,CAAC,CAAC;AAAA,UACnE;AAAA,QACF;AAEA,iBAAS,uBAAuB,WAAW;AAEzC,mBAAS,aAAa;AACpB,2BAAe;AACf,qBAAS;AACT,YAAAE,KAAI,UAAU,IAAI;AAAA,UACpB;AAEA,mBAAS,aAAa;AACpB,mBAAO;AAAA,cACL,GAAG,OAAO,YAAY,KAAK,IAAI,OAAO;AAAA,cACtC,GAAG,OAAO,YAAY,MAAM,IAAI,OAAO;AAAA,YACzC;AAAA,UACF;AAEA,mBAAS,eAAe;AACtB,gBAAI,OAAO,cAAc;AACvB,qBAAO,aAAa,cAAc,YAAY,WAAW,GAAG;AAAA,gBAC1D,YAAY;AAAA,gBACZ,YAAY;AAAA,cACd;AAAA,YACF,OAAO;AACL;AAAA,gBACE;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,cAAI,SAAS,YACP,mBAAmB,YAAY,MAAM,IACrC,EAAE,GAAG,GAAG,GAAG,EAAE,GACjB,cAAc,WAAW;AAE3B,UAAAA;AAAA,YACE;AAAA,YACA,gDACE,OAAO,IACP,QACA,OAAO,IACP;AAAA,UACJ;AAEA,cAAI,OAAO,QAAQ,OAAO,MAAM;AAC9B,uBAAW;AAAA,UACb,OAAO;AACL,yBAAa;AAAA,UACf;AAAA,QACF;AAEA,iBAAS,WAAW;AAClB,cAAI,UAAU,GAAG,YAAY,YAAY,GAAG;AAC1C,8BAAkB;AAAA,UACpB,OAAO;AACL,4BAAgB,QAAQ;AAAA,UAC1B;AAAA,QACF;AAEA,iBAAS,WAAWG,WAAU;AAC5B,mBAAS,eAAe;AACtB,gBAAI,eAAe,mBAAmB,MAAM;AAE5C,YAAAH;AAAA,cACE;AAAA,cACA,8BACEI,QACA,aACA,aAAa,IACb,SACA,aAAa;AAAA,YACjB;AACA,2BAAe;AAAA,cACb,GAAG,aAAa;AAAA,cAChB,GAAG,aAAa;AAAA,YAClB;AAEA,qBAAS;AACT,YAAAJ,KAAI,UAAU,IAAI;AAAA,UACpB;AAEA,mBAAS,eAAe;AACtB,gBAAI,OAAO,cAAc;AACvB,qBAAO,aAAa,aAAaI,KAAI;AAAA,YACvC,OAAO;AACL,cAAAJ;AAAA,gBACE;AAAA,gBACA,mBACEI,QACA;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AAEA,cAAIA,QAAOD,UAAS,MAAM,GAAG,EAAE,CAAC,KAAK,IACnC,WAAW,mBAAmBC,KAAI,GAClC,SACE,SAAS,eAAe,QAAQ,KAChC,SAAS,kBAAkB,QAAQ,EAAE,CAAC;AAE1C,cAAI,QAAQ;AACV,yBAAa;AAAA,UACf,WAAW,OAAO,QAAQ,OAAO,MAAM;AACrC,YAAAJ,KAAI,UAAU,mBAAmBI,QAAO,YAAY;AAAA,UACtD,OAAO;AACL,yBAAa;AAAA,UACf;AAAA,QACF;AAEA,iBAAS,QAAQH,QAAO;AACtB,cAAI,WAAW,CAAC;AAEhB,cAAI,OAAO,YAAY,KAAK,MAAM,KAAK,OAAO,YAAY,MAAM,MAAM,GAAG;AACvE,gBAAI,OAAO,WAAW,CAAC,EAAE,MAAM,GAAG;AAClC,uBAAW;AAAA,cACT,GAAG,KAAK,CAAC;AAAA,cACT,GAAG,KAAK,CAAC;AAAA,YACX;AAAA,UACF,OAAO;AACL,uBAAW;AAAA,cACT,GAAG,YAAY;AAAA,cACf,GAAG,YAAY;AAAA,YACjB;AAAA,UACF;AAEA,aAAGA,QAAO;AAAA,YACR,QAAQ,YAAY;AAAA,YACpB,SAAS,OAAO,SAAS,CAAC;AAAA,YAC1B,SAAS,OAAO,SAAS,CAAC;AAAA,YAC1B,MAAM,YAAY;AAAA,UACpB,CAAC;AAAA,QACH;AAEA,iBAAS,GAAG,UAAU,KAAK;AACzB,iBAAO,SAAS,UAAU,UAAU,GAAG;AAAA,QACzC;AAEA,iBAAS,YAAY;AACnB,cAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,SAAU,UAAS;AAEhE,kBAAQ,YAAY,MAAM;AAAA,YACxB,KAAK,SAAS;AACZ,0BAAY,YAAY,MAAM;AAC9B;AAAA,YACF;AAAA,YAEA,KAAK,WAAW;AACd,mCAAqB,WAAW,CAAC,CAAC;AAClC;AAAA,YACF;AAAA,YAEA,KAAK,cAAc;AACjB,sBAAQ,cAAc;AACtB;AAAA,YACF;AAAA,YAEA,KAAK,cAAc;AACjB,sBAAQ,cAAc;AACtB;AAAA,YACF;AAAA,YAEA,KAAK,cAAc;AACjB,uBAAS,QAAQ,EAAE,aAAa,KAAK,MAAM,WAAW,CAAC,CAAC;AACxD;AAAA,YACF;AAAA,YAEA,KAAK,YAAY;AACf,qCAAuB,KAAK;AAC5B;AAAA,YACF;AAAA,YAEA,KAAK,kBAAkB;AACrB,qCAAuB,IAAI;AAC3B;AAAA,YACF;AAAA,YAEA,KAAK,YAAY;AACf;AAAA,gBACE,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE;AAAA,gBACzC;AAAA,cACF;AACA,mCAAqB;AACrB;AAAA,YACF;AAAA,YAEA,KAAK,gBAAgB;AACnB,kCAAoB;AACpB;AAAA,YACF;AAAA,YAEA,KAAK,cAAc;AACjB,yBAAW,WAAW,CAAC,CAAC;AACxB;AAAA,YACF;AAAA,YAEA,KAAK,SAAS;AACZ,0BAAY,WAAW;AACvB;AAAA,YACF;AAAA,YAEA,KAAK,QAAQ;AACX,2BAAa;AACb,iBAAG,UAAU,YAAY,MAAM;AAC/B;AAAA,YACF;AAAA,YAEA,SAAS;AACP,kBACE,OAAO,YAAY,KAAK,MAAM,KAC9B,OAAO,YAAY,MAAM,MAAM,GAC/B;AACA;AAAA,kBACE,mCACE,YAAY,OACZ;AAAA,gBAEJ;AAAA,cACF,OAAO;AACL,6BAAa;AAAA,cACf;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,YAAYC,WAAU;AAC7B,cAAI,UAAU;AAEd,cAAI,CAAC,SAASA,SAAQ,GAAG;AACvB,sBAAU;AACV;AAAA,cACE,YAAY,OACV,sBACAA,YACA,oBACA;AAAA,YACJ;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAEA,iBAAS,yBAAyB;AAEhC,mBAASA,aAAY,UAAU;AAC7B;AAAA,cACE;AAAA,cACA,kBAAkBA,SAAQ;AAAA,cAC1B,SAASA,SAAQ,EAAE;AAAA,cACnBA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,WAAW;AAClB,cAAI,SAAS,QAAQ,GAAG;AACtB,qBAAS,QAAQ,EAAE,WAAW;AAAA,UAChC;AAAA,QACF;AAEA,YAAI,MAAMD,OAAM,MACd,cAAc,CAAC,GACf,WAAW;AAEb,YAAI,gCAAgC,KAAK;AACvC,iCAAuB;AAAA,QACzB,WAAW,eAAe,GAAG;AAC3B,wBAAc,WAAW;AACzB,qBAAW,YAAY;AACvB,cAAI,SAAS,QAAQ,GAAG;AACtB,qBAAS,QAAQ,EAAE,SAAS;AAAA,UAC9B;AAEA,cAAI,CAAC,wBAAwB,KAAK,YAAY,QAAQ,GAAG;AACvD,YAAAD,KAAI,UAAU,eAAe,GAAG;AAEhC,gBAAI,kBAAkB,KAAK,oBAAoB,GAAG;AAChD,wBAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF,OAAO;AACL,eAAK,UAAU,cAAc,GAAG;AAAA,QAClC;AAAA,MACF;AAEA,eAAS,SAAS,UAAU,UAAU,KAAK;AACzC,YAAI,OAAO,MACT,SAAS;AAEX,YAAI,SAAS,QAAQ,GAAG;AACtB,iBAAO,SAAS,QAAQ,EAAE,QAAQ;AAElC,cAAI,eAAe,OAAO,MAAM;AAC9B,qBAAS,KAAK,GAAG;AAAA,UACnB,OAAO;AACL,kBAAM,IAAI;AAAA,cACR,WAAW,gBAAgB,WAAW;AAAA,YACxC;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,sBAAsB,QAAQ;AACrC,YAAI,WAAW,OAAO;AACtB,eAAO,SAAS,QAAQ;AAAA,MAC1B;AAEA,eAAS,YAAY,QAAQ;AAC3B,YAAI,WAAW,OAAO;AACtB,YAAI,SAAS,UAAU,WAAW,QAAQ,MAAM,OAAO;AACrD,UAAAA,KAAI,UAAU,yCAAyC;AACvD;AAAA,QACF;AACA,QAAAA,KAAI,UAAU,sBAAsB,QAAQ;AAE5C,YAAI;AAEF,cAAI,OAAO,YAAY;AACrB,mBAAO,WAAW,YAAY,MAAM;AAAA,UACtC;AAAA,QACF,SAASK,QAAO;AACd,eAAKA,MAAK;AAAA,QACZ;AAEA,iBAAS,UAAU,YAAY,QAAQ;AACvC,QAAAL,KAAI,UAAU,IAAI;AAClB,8BAAsB,MAAM;AAAA,MAC9B;AAEA,eAAS,gBAAgB,UAAU;AACjC,YAAI,SAAS,cAAc;AACzB,yBAAe;AAAA,YACb,GACE,OAAO,gBAAgBL,aACnB,SAAS,gBAAgB,aACzB,OAAO;AAAA,YACb,GACE,OAAO,gBAAgBA,aACnB,SAAS,gBAAgB,YACzB,OAAO;AAAA,UACf;AACA,UAAAK;AAAA,YACE;AAAA,YACA,wBAAwB,aAAa,IAAI,MAAM,aAAa;AAAA,UAC9D;AAAA,QACF;AAAA,MACF;AAEA,eAAS,gBAAgB,UAAU;AACjC,YAAI,SAAS,cAAc;AACzB,iBAAO,SAAS,aAAa,GAAG,aAAa,CAAC;AAC9C,UAAAA;AAAA,YACE;AAAA,YACA,wBAAwB,aAAa,IAAI,MAAM,aAAa;AAAA,UAC9D;AACA,4BAAkB;AAAA,QACpB;AAAA,MACF;AAEA,eAAS,oBAAoB;AAC3B,uBAAe;AAAA,MACjB;AAEA,eAAS,YAAY,aAAa;AAChC,iBAAS,QAAQ;AACf,kBAAQ,WAAW;AACnB,kBAAQ,SAAS,SAAS,YAAY,QAAQ,YAAY,EAAE;AAAA,QAC9D;AAEA,QAAAA;AAAA,UACE,YAAY;AAAA,UACZ,8BACG,WAAW,YAAY,OAAO,cAAc;AAAA,QACjD;AACA,wBAAgB,YAAY,EAAE;AAC9B,mBAAW,OAAO,aAAa,OAAO;AAAA,MACxC;AAEA,eAAS,QAAQ,aAAa;AAC5B,iBAAS,aAAa,WAAW;AAC/B,cAAI,CAAC,YAAY,IAAI;AACnB,YAAAA,KAAI,aAAa,wBAAwB;AACzC;AAAA,UACF;AACA,sBAAY,OAAO,MAAM,SAAS,IAAI,YAAY,SAAS,IAAI;AAC/D,UAAAA;AAAA,YACE,YAAY;AAAA,YACZ,aACE,WACA,OACA,YACA,aACA,YAAY,SAAS,IACrB;AAAA,UACJ;AAAA,QACF;AAEA,iBAAS,QAAQ,WAAW;AAM1B,cAAI,CAAC,sBAAsB,QAAQ,YAAY,SAAS,GAAG;AACzD,iCAAqB;AACrB,YAAAA,KAAI,UAAU,sDAAsD;AACpE,6BAAiB;AAAA,UACnB;AAAA,QACF;AAEA,iBAAS,iBAAiB,WAAW;AACnC,uBAAa,SAAS;AACtB,kBAAQ,SAAS;AAAA,QACnB;AAEA,YAAI,WAAW,YAAY,OAAO;AAElC,YAAI,SAAS,QAAQ,GAAG;AACtB,cAAI,SAAS,QAAQ,EAAE,YAAY;AACjC,6BAAiB,QAAQ;AAAA,UAC3B;AACA,cAAI,SAAS,QAAQ,EAAE,WAAW;AAChC,6BAAiB,OAAO;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAEA,eAAS,WAAW,MAAM,aAAa,WAAW;AAEhD,YACE,cAAc,YAAY,QAC1BJ;AAAA,QAEA,CAAC,OAAO,SACR;AACA,UAAAI,KAAI,YAAY,IAAI,4BAA4B;AAChD,UAAAJ,uBAAsB,IAAI;AAAA,QAC5B,OAAO;AACL,eAAK;AAAA,QACP;AAAA,MACF;AAEA,eAAS,QAAQ,WAAW,KAAK,QAAQ,IAAI,mBAAmB;AAC9D,iBAAS,sBAAsB;AAC7B,cAAI,SAAS,SAAS,EAAE,KAAK,SAAS,EAAE,EAAE;AAC1C,UAAAI;AAAA,YACE;AAAA,YACA,MACE,YACA,6BACA,KACA,QACA,MACA,qBACA;AAAA,UACJ;AACA,iBAAO,cAAc,YAAY,QAAQ,KAAK,MAAM;AAAA,QACtD;AAEA,iBAAS,iBAAiB;AACxB,eAAK,IAAI,MAAM,YAAY,cAAc,KAAK,aAAa;AAAA,QAC7D;AAEA,iBAAS,aAAa;AACpB,cACE,UACA,mBAAmB,UACnB,SAAS,OAAO,eAChB;AAEA,gCAAoB;AAAA,UACtB,OAAO;AACL,2BAAe;AAAA,UACjB;AAAA,QACF;AAEA,iBAAS,mBAAmB;AAC1B,mBAAS,UAAU;AACjB,gBAAI,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,YAAY;AACvD,2BAAa;AACb;AAAA,gBACE;AAAA,gBACA,qCACE,SAAS,EAAE,EAAE,iBAAiB,MAC9B;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AAEA,cACE,CAAC,CAAC,qBACF,SAAS,EAAE,KACX,CAAC,CAAC,SAAS,EAAE,EAAE,gBACf;AACA,qBAAS,EAAE,EAAE,aAAa;AAAA,cACxB;AAAA,cACA,SAAS,EAAE,EAAE;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAEA,YAAI,aAAa;AAEjB,aAAK,MAAM,OAAO;AAElB,YAAI,SAAS,EAAE,GAAG;AAChB,qBAAW;AACX,2BAAiB;AAAA,QACnB;AAAA,MACF;AAEA,eAAS,kBAAkB,UAAU;AACnC,eACE,WACA,MACA,SAAS,QAAQ,EAAE,eACnB,MACA,SAAS,QAAQ,EAAE,YACnB,MACA,SAAS,QAAQ,EAAE,MACnB,MACA,SAAS,QAAQ,EAAE,WACnB,MACA,SAAS,QAAQ,EAAE,sBACnB,MACA,SAAS,QAAQ,EAAE,aACnB,MACA,SAAS,QAAQ,EAAE,aACnB,MACA,SAAS,QAAQ,EAAE,0BACnB,MACA,SAAS,QAAQ,EAAE,iBACnB,MACA,SAAS,QAAQ,EAAE,cACnB,MACA,SAAS,QAAQ,EAAE,YACnB,MACA,SAAS,QAAQ,EAAE,cACnB,MACA,SAAS,QAAQ,EAAE,aACnB,MACA,SAAS,QAAQ,EAAE,yBACnB,MACA,SAAS,QAAQ,EAAE;AAAA,MAEvB;AAEA,eAAS,SAAS,OAAO;AACvB,eAAO,OAAO,UAAU;AAAA,MAC1B;AAEA,eAAS,YAAY,QAAQ,SAAS;AACpC,iBAAS,YAAY;AACnB,mBAAS,SAAS,OAAO;AACvB,gBAAI,aAAa,SAAS,QAAQ,EAAE,KAAK;AACzC,gBAAI,aAAa,cAAc,MAAM,YAAY;AAC/C,qBAAO,MAAM,KAAK,IAAI,SAAS,UAAU,IACrC,aAAa,OACb;AACJ,cAAAA,KAAI,UAAU,SAAS,QAAQ,QAAQ,OAAO,MAAM,KAAK,CAAC;AAAA,YAC5D;AAAA,UACF;AAEA,mBAAS,UAAU,WAAW;AAC5B,gBACE,SAAS,QAAQ,EAAE,QAAQ,SAAS,IACpC,SAAS,QAAQ,EAAE,QAAQ,SAAS,GACpC;AACA,oBAAM,IAAI;AAAA,gBACR,kBACE,YACA,iCACA;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AAEA,oBAAU,QAAQ;AAClB,oBAAU,OAAO;AAEjB,mBAAS,WAAW;AACpB,mBAAS,WAAW;AACpB,mBAAS,UAAU;AACnB,mBAAS,UAAU;AAAA,QACrB;AAEA,iBAAS,QAAQ;AACf,cAAI,KAAM,WAAW,QAAQ,MAAO,SAAS,KAAK;AAClD,cAAI,SAAS,SAAS,eAAe,EAAE,GAAG;AACxC,kBAAM;AAAA,UACR;AACA,iBAAO;AAAA,QACT;AAEA,iBAAS,YAAYE,WAAU;AAC7B,cAAI,OAAOA,cAAa,UAAU;AAChC,kBAAM,IAAI,UAAU,wCAAwC;AAAA,UAC9D;AAEA,cAAI,OAAOA,WAAU;AAEnB,mBAAO,KAAKA,YAAW,MAAM;AAC7B,0BAAc,WAAW,CAAC,GAAG;AAC7B,YAAAF;AAAA,cACEE;AAAA,cACA,8BAA8BA,YAAW,OAAO,OAAO,MAAM;AAAA,YAC/D;AAAA,UACF;AAEA,iBAAOA;AAAA,QACT;AAEA,iBAAS,eAAe;AACtB,UAAAF;AAAA,YACE;AAAA,YACA,uBACG,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,YACtC,YACA,cACJ,UACA;AAAA,UACJ;AACA,iBAAO,MAAM,WACX,WAAW,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,aAChD,WACA;AACN,kBAAQ,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,WAAW;AAAA,YAC1D,KAAK,QAAQ;AACX;AAAA,YACF;AAAA,YAEA,KAAK,MAAM;AACT,qBAAO,YAAY;AACnB;AAAA,YACF;AAAA,YAEA,KAAK,OAAO;AACV,qBAAO,YAAY;AACnB;AAAA,YACF;AAAA,YAEA,SAAS;AACP,qBAAO,YAAY,SAAS,QAAQ,IAChC,SAAS,QAAQ,EAAE,YACnB;AAAA,YACN;AAAA,UACF;AAAA,QACF;AAKA,iBAAS,wBAAwB;AAC/B,cACE,aACE,QAAQ,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,eACnD,SAAS,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,aAClD;AACA,qBAAS,QAAQ,EAAE,eAAe,SAAS,QAAQ,EAAE;AACrD,qBAAS,QAAQ,EAAE,aACjB,KAAK,SAAS,QAAQ,EAAE,aAAa;AAAA,UACzC;AAAA,QACF;AAEA,iBAAS,aAAa;AAIpB,cAAI,WAAW,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,UACtD,qBACE,SAAS,QAAQ,KACjB,SAAS,QAAQ,EAAE,2BAA2B;AAElD,cAAI,CAAC,YAAY,oBAAoB;AACnC,wBAAY,EAAE,QAAgB,QAAQ,GAAG,OAAO,GAAG,MAAM,OAAO,CAAC;AAAA,UACnE;AAAA,QACF;AAEA,iBAAS,oBAAoB;AAC3B,cAAI,SAAS,QAAQ,GAAG;AACtB,qBAAS,QAAQ,EAAE,OAAO,gBAAgB;AAAA,cACxC,OAAO,YAAY,KAAK,MAAM,SAAS,QAAQ,EAAE,MAAM;AAAA,cAEvD,iBAAiB,sBAAsB;AAAA,gBACrC;AAAA,gBACA,SAAS,QAAQ,EAAE;AAAA,cACrB;AAAA,cAEA,QAAQ,QAAQ;AAAA,gBACd;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,SAAS,QAAQ,EAAE;AAAA,cACrB;AAAA,cAEA,cAAc,SAAU,QAAQ;AAC9B;AAAA,kBACE;AAAA,kBACA,kBAAkB;AAAA,kBAClB,SAAS,QAAQ,EAAE;AAAA,kBACnB;AAAA,gBACF;AAAA,cACF;AAAA,cAEA,aAAa,SAAU,SAAS;AAC9B,0BAAU,KAAK,UAAU,OAAO;AAChC;AAAA,kBACE;AAAA,kBACA,aAAa;AAAA,kBACb,SAAS,QAAQ,EAAE;AAAA,kBACnB;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAKA,iBAAS,KAAK,KAAK;AACjB,mBAAS,eAAe;AACtB,oBAAQ,iBAAiB,KAAK,QAAQL,YAAW,IAAI;AACrD,uBAAW;AAAA,UACb;AAEA,mBAAS,sBAAsBW,mBAAkB;AAC/C,gBAAI,CAAC,OAAO,YAAY;AACtB;AAAA,YACF;AAEA,gBAAI,kBAAkB,IAAIA,kBAAiB,SAAU,WAAW;AAC9D,wBAAU,QAAQ,SAAU,UAAU;AACpC,oBAAI,eAAe,MAAM,UAAU,MAAM,KAAK,SAAS,YAAY;AACnE,6BAAa,QAAQ,SAAU,aAAa;AAC1C,sBAAI,gBAAgB,QAAQ;AAC1B,gCAAY,MAAM;AAAA,kBACpB;AAAA,gBACF,CAAC;AAAA,cACH,CAAC;AAAA,YACH,CAAC;AACD,4BAAgB,QAAQ,OAAO,YAAY;AAAA,cACzC,WAAW;AAAA,YACb,CAAC;AAAA,UACH;AAEA,cAAIA,oBAAmB,oBAAoB;AAC3C,cAAIA,mBAAkB;AACpB,kCAAsBA,iBAAgB;AAAA,UACxC;AAEA,UAAAR,kBAAiB,QAAQ,QAAQ,YAAY;AAC7C,kBAAQ,QAAQ,KAAK,QAAQH,YAAW,IAAI;AAAA,QAC9C;AAEA,iBAAS,aAAaY,UAAS;AAC7B,cAAI,aAAa,OAAOA,UAAS;AAC/B,kBAAM,IAAI,UAAU,0BAA0B;AAAA,UAChD;AAAA,QACF;AAEA,iBAAS,YAAYA,UAAS;AAE5B,mBAAS,UAAU,UAAU;AAC3B,gBAAI,OAAO,UAAU,eAAe,KAAK,UAAU,MAAM,GAAG;AAC1D,uBAAS,QAAQ,EAAE,MAAM,IAAI,OAAO,UAAU,eAAe;AAAA,gBAC3DA;AAAA,gBACA;AAAA,cACF,IACIA,SAAQ,MAAM,IACd,SAAS,MAAM;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,gBAAgB,YAAY;AACnC,iBAAO,OAAO,cACZ,SAAS,WAAW,MAAM,sCAAsC,IAC9D,MACA;AAAA,QACN;AAEA,iBAAS,UAAU,KAAK;AACtB,cAAI,YAAY,IAAI,MAAM,UAAU;AAEpC,cAAI,UAAU,WAAW,GAAG;AAC1B,gBAAI,OACF,OAAO,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,UAAU,CAAC,EAAE,MAAM,CAAC;AACpE,iBAAK,IAAI,IAAI,KAAK,GAAG;AACrB,mBAAO,KAAK,GAAG;AACf;AAAA,cACE;AAAA,cACA,kBACE,MACA,yBACA,OACA;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,eAAeA,UAAS;AAC/B,UAAAA,WAAUA,YAAW,CAAC;AAEtB,mBAAS,QAAQ,IAAI,uBAAO,OAAO,IAAI;AACvC,mBAAS,QAAQ,EAAE,SAAS;AAC5B,mBAAS,QAAQ,EAAE,WAAW;AAC9B,mBAAS,QAAQ,EAAE,aACjB,OAAO,OAAO,OAAO,IAAI,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAE1D,uBAAaA,QAAO;AACpB,iBAAO,KAAKA,QAAO,EAAE,QAAQ,WAAWA,QAAO;AAC/C,sBAAYA,QAAO;AAEnB,cAAI,SAAS,QAAQ,GAAG;AACtB,qBAAS,QAAQ,EAAE,eACjB,SAAS,SAAS,QAAQ,EAAE,cACxB,gBAAgB,SAAS,QAAQ,EAAE,UAAU,IAC7C;AAAA,UACR;AAAA,QACF;AAEA,iBAAS,WAAW;AAClB,iBAAO,YAAY,YAAY,mBAAmB;AAAA,QACpD;AAEA,YAAI,WAAW,YAAY,OAAO,EAAE;AAEpC,YAAI,SAAS,GAAG;AACd,eAAK,UAAU,gCAAgC;AAAA,QACjD,OAAO;AACL,yBAAe,OAAO;AACtB,uBAAa;AACb,oBAAU;AACV,gCAAsB;AACtB,eAAK,kBAAkB,QAAQ,CAAC;AAChC,4BAAkB;AAAA,QACpB;AAAA,MACF;AAEA,eAAS,SAAS,IAAI,MAAM;AAC1B,YAAI,SAASV,QAAO;AAClB,UAAAA,SAAQ,WAAW,WAAY;AAC7B,YAAAA,SAAQ;AACR,eAAG;AAAA,UACL,GAAG,IAAI;AAAA,QACT;AAAA,MACF;AAEA,UAAI,aAAa,CAAC;AAClB,eAAS,oBAAoB,IAAI,MAAM,SAAS;AAC9C,YAAI,CAAC,WAAW,OAAO,GAAG;AACxB,qBAAW,OAAO,IAAI,WAAW,WAAY;AAC3C,uBAAW,OAAO,IAAI;AACtB,eAAG;AAAA,UACL,GAAG,IAAI;AAAA,QACT;AAAA,MACF;AAKA,eAAS,mBAAmB;AAC1B,iBAAS,eAAe;AACtB,mBAAS,YAAY,WAAW;AAC9B,qBAAS,aAAa,WAAW;AAC/B,qBACE,WACC,SAAS,SAAS,KAAK,SAAS,SAAS,EAAE,OAAO,MAAM,SAAS;AAAA,YAEtE;AAEA,qBAASW,WAAUT,KAAI;AACrB,qBAAO,SAASA,IAAG;AAAA,YACrB;AAEA,gBACE,SAAS,SAAS,KAClBS,WAAU,SAAS,SAAS,EAAE,MAAM,MACnC,aAAa,QAAQ,KAAK,aAAa,OAAO,IAC/C;AACA;AAAA,gBACE;AAAA,gBACA;AAAA,gBACA,SAAS,SAAS,EAAE;AAAA,gBACpB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,KAAK,QAAQ,EAAE,QAAQ,SAAU,KAAK;AAC3C,wBAAY,GAAG;AAAA,UACjB,CAAC;AAAA,QACH;AAEA,iBAAS,iBAAiB,WAAW;AACnC,UAAAR;AAAA,YACE;AAAA,YACA,wBAAwB,UAAU,CAAC,EAAE,SAAS,MAAM,UAAU,CAAC,EAAE;AAAA,UACnE;AACA,mBAAS,cAAc,EAAE;AAAA,QAC3B;AAEA,iBAAS,yBAAyB;AAChC,cAAI,SAAS,SAAS,cAAc,MAAM,GACxC,SAAS;AAAA,YACP,YAAY;AAAA,YACZ,mBAAmB;AAAA,YACnB,eAAe;AAAA,YACf,uBAAuB;AAAA,YACvB,WAAW;AAAA,YACX,SAAS;AAAA,UACX,GACA,WAAW,IAAIM,kBAAiB,gBAAgB;AAElD,mBAAS,QAAQ,QAAQ,MAAM;AAAA,QACjC;AAEA,YAAIA,oBAAmB,oBAAoB;AAC3C,YAAIA,mBAAkB;AACpB,iCAAuB;AAAA,QACzB;AAAA,MACF;AAEA,eAAS,cAAcL,QAAO;AAC5B,iBAAS,SAAS;AAChB,yBAAe,YAAYA,QAAO,QAAQ;AAAA,QAC5C;AAEA,QAAAD,KAAI,UAAU,oBAAoBC,MAAK;AACvC,iBAAS,QAAQ,EAAE;AAAA,MACrB;AAIA,eAAS,aAAa;AACpB,iBAAS,SAAS;AAChB,yBAAe,eAAe,QAAQ;AAAA,QACxC;AAEA,YAAI,aAAa,SAAS,iBAAiB;AACzC,UAAAD,KAAI,YAAY,kCAAkC;AAClD,mBAAS,QAAQ,EAAE;AAAA,QACrB;AAAA,MACF;AAEA,eAAS,eAAe,WAAWC,QAAO;AACxC,iBAAS,sBAAsB,UAAU;AACvC,iBACE,SAAS,QAAQ,KACjB,aAAa,SAAS,QAAQ,EAAE,cAChC,SAAS,QAAQ,EAAE,cACnB,CAAC,SAAS,QAAQ,EAAE;AAAA,QAExB;AAEA,eAAO,KAAK,QAAQ,EAAE,QAAQ,SAAU,UAAU;AAChD,cAAI,sBAAsB,QAAQ,GAAG;AACnC,oBAAQ,WAAWA,QAAO,SAAS,QAAQ,EAAE,QAAQ,QAAQ;AAAA,UAC/D;AAAA,QACF,CAAC;AAAA,MACH;AAEA,eAAS,sBAAsB;AAC7B,QAAAH,kBAAiB,QAAQ,WAAW,cAAc;AAElD,QAAAA,kBAAiB,QAAQ,UAAU,WAAY;AAC7C,wBAAc,QAAQ;AAAA,QACxB,CAAC;AAED,QAAAA,kBAAiB,UAAU,oBAAoB,UAAU;AAEzD,QAAAA,kBAAiB,UAAU,4BAA4B,UAAU;AAAA,MACnE;AAEA,eAAS,UAAU;AACjB,iBAAS,KAAK,SAAS,SAAS;AAC9B,mBAAS,UAAU;AACjB,gBAAI,CAAC,QAAQ,SAAS;AACpB,oBAAM,IAAI,UAAU,mCAAmC;AAAA,YACzD,WAAW,aAAa,QAAQ,QAAQ,YAAY,GAAG;AACrD,oBAAM,IAAI;AAAA,gBACR,mCAAmC,QAAQ,UAAU;AAAA,cACvD;AAAA,YACF;AAAA,UACF;AAEA,cAAI,SAAS;AACX,oBAAQ;AACR,wBAAY,SAAS,OAAO;AAC5B,oBAAQ,KAAK,OAAO;AAAA,UACtB;AAAA,QACF;AAEA,iBAAS,sBAAsB,SAAS;AACtC,cAAI,WAAW,QAAQ,qBAAqB;AAC1C;AAAA,cACE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI;AAEJ,mCAA2B;AAC3B,4BAAoB;AAEpB,eAAO,SAAS,cAAc,SAAS,QAAQ;AAC7C,oBAAU,CAAC;AAEX,gCAAsB,OAAO;AAE7B,kBAAQ,OAAO,QAAQ;AAAA,YACrB,KAAK;AAAA,YACL,KAAK,UAAU;AACb,oBAAM,UAAU,QAAQ;AAAA,gBACtB,SAAS,iBAAiB,UAAU,QAAQ;AAAA,gBAC5C,KAAK,KAAKH,YAAW,OAAO;AAAA,cAC9B;AACA;AAAA,YACF;AAAA,YAEA,KAAK,UAAU;AACb,mBAAK,SAAS,MAAM;AACpB;AAAA,YACF;AAAA,YAEA,SAAS;AACP,oBAAM,IAAI,UAAU,2BAA2B,OAAO,SAAS,GAAG;AAAA,YACpE;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,eAAS,yBAAyBc,IAAG;AACnC,YAAI,CAACA,GAAE,IAAI;AACT,eAAK,IAAI,mDAAmD;AAAA,QAC9D,WAAW,CAACA,GAAE,GAAG,cAAc;AAC7B,UAAAA,GAAE,GAAG,eAAe,SAAS,eAAe,SAAS;AACnD,qBAAS,KAAK,OAAO,SAAS;AAC5B,0BAAY,SAAS,OAAO;AAAA,YAC9B;AAEA,mBAAO,KAAK,OAAO,QAAQ,EAAE,KAAK,IAAI,EAAE,IAAI;AAAA,UAC9C;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAAO,WAAWd,YAAW;AAC/B,iCAAyB,OAAO,MAAM;AAAA,MACxC;AAEA,UAAI,OAAO,WAAW,cAAc,OAAO,KAAK;AAC9C,eAAO,CAAC,GAAG,OAAO;AAAA,MACpB,WAAW,OAAO,WAAW,YAAY,OAAO,OAAO,YAAY,UAAU;AAE3E,eAAO,UAAU,QAAQ;AAAA,MAC3B;AACA,aAAO,eAAe,OAAO,gBAAgB,QAAQ;AAAA,IACvD,GAAG;AAAA;AAAA;;;ACz7CH;AAAA;AAAA,MAAC,SAAS,GAAE,GAAE;AAAC,kBAAU,OAAO,WAAS,eAAa,OAAO,SAAO,EAAE,OAAO,IAAE,cAAY,OAAO,UAAQ,OAAO,MAAI,OAAO,SAAQ,CAAC,SAAS,GAAE,CAAC,IAAE,GAAG,IAAE,eAAa,OAAO,aAAW,aAAW,KAAG,MAAM,QAAM,CAAC,CAAC;AAAA,IAAC,GAAE,UAAM,SAAS,GAAE;AAAC;AAAa,UAAI,IAAE,eAAa,OAAO,OAAK,OAAK;AAAO,YAAM,IAAE,eAAa,OAAO,WAAU,IAAE,KAAG,eAAa,OAAO,kBAAiB,IAAE,EAAE,eAAa,OAAO,UAAQ,eAAa,OAAO,WAAS,CAAC,QAAQ,YAAU,CAAC,QAAQ,SAAS,OAAM,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,CAAC,CAAC,GAAE,IAAE,CAAAe,OAAGA;AAAE,eAAS,EAAEA,IAAEC,KAAE,GAAE;AAAC,YAAG,EAAE,KAAG;AAAC,iBAAM,cAAY,OAAO,YAAQ,QAAQ,QAAQA,GAAE,UAAQD,EAAC,CAAC,CAAC,IAAE;AAAA;AAAA,YAAiCA;AAAA,YAAG,KAAKC,EAAC;AAAA,QAAC,SAAOA,IAAE;AAAC,kBAAQ,KAAK,iBAAiBD,EAAC,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,IAAE,EAAE;AAAM,YAAM,IAAE,CAAAA,OAAG,IAAEA;AAAE,UAAG,CAAC,EAAE,OAAM;AAAC,cAAMA,KAAE,EAAE,SAAQ,CAAAA,OAAGA,GAAE,GAAEC,KAAE,EAAE,UAAS,CAAAD,OAAGA,GAAE,GAAEE,KAAE,CAACC,IAAE,EAAC,SAAQC,GAAC,IAAE,CAAC,MAAI,IAAI,SAAS,OAAMC,IAAEC,OAAI;AAAC,cAAG,EAAC,MAAKC,IAAE,UAASC,IAAE,UAASC,IAAE,UAASC,IAAE,QAAOC,GAAC,IAAE,IAAI,IAAIR,EAAC;AAAE,gBAAMS,KAAE,EAAC,QAAO,OAAM,UAASJ,IAAE,MAAK,UAAUC,EAAC,IAAEE,IAAE,SAAQP,GAAC;AAAE,iBAAKG,OAAIK,GAAE,OAAK,OAAOL,EAAC;AAAG,gBAAMM,MAAG,aAAWH,KAAE,MAAMT,KAAE,MAAMD,IAAG,QAAQY,KAAG,CAAAZ,OAAG;AAAC,gBAAG,QAAMA,GAAE,cAAY,QAAMA,GAAE,YAAW;AAAC,kBAAIC,KAAE,IAAI,IAAID,GAAE,QAAQ,UAASG,EAAC,EAAE,SAAS;AAAE,qBAAOD,GAAED,IAAE,EAAC,SAAQG,GAAC,CAAC,EAAE,KAAKC,EAAC,EAAE,MAAMC,EAAC;AAAA,YAAC;AAAC,YAAAD,GAAE,EAAC,QAAOL,GAAE,YAAW,aAAY,MAAI,IAAI,SAAS,CAAAC,OAAG;AAAC,kBAAIC,KAAE,CAAC;AAAE,cAAAF,GAAE,GAAG,SAAQ,CAAAA,OAAGE,GAAE,KAAKF,EAAC,EAAE,GAAEA,GAAE,GAAG,QAAO,MAAIC,GAAE,OAAO,OAAOC,EAAC,CAAC,EAAE;AAAA,YAAC,EAAE,EAAC,CAAC;AAAA,UAAC,EAAE;AAAE,UAAAW,GAAE,GAAG,SAAQP,EAAC,GAAEO,GAAE,IAAI;AAAA,QAAC,EAAE;AAAE,UAAEX,EAAC;AAAA,MAAC;AAAC,eAAS,EAAEF,IAAEC,IAAEC,IAAE;AAAC,eAAOD,MAAKD,KAAE,OAAO,eAAeA,IAAEC,IAAE,EAAC,OAAMC,IAAE,YAAW,MAAG,cAAa,MAAG,UAAS,KAAE,CAAC,IAAEF,GAAEC,EAAC,IAAEC,IAAEF;AAAA,MAAC;AAAC,YAAM,IAAE,CAAAA,OAAG,EAAEA,EAAC,IAAE,SAAOA,IAAE,IAAE,CAAAA,OAAG,WAASA;AAAE,eAAS,EAAEA,IAAE;AAAC,eAAO,WAASA,OAAIA,cAAa,MAAI,MAAIA,GAAE,OAAK,MAAI,OAAO,OAAOA,EAAC,EAAE,OAAO,CAAC,EAAE;AAAA,MAAO;AAAC,eAAS,EAAEA,IAAE;AAAC,YAAIC,KAAE,IAAI,MAAMD,EAAC;AAAE,cAAM,OAAOC,GAAE,OAAMA;AAAA,MAAC;AAAC,eAAS,EAAED,IAAE;AAAC,eAAM,QAAMA,MAAE,SAASA,IAAE;AAAC,iBAAKA,GAAE,SAAS,IAAI,IAAG,CAAAA,KAAEA,GAAE,MAAM,GAAE,EAAE;AAAE,iBAAOA;AAAA,QAAC,GAAEA,EAAC,EAAE,KAAK,KAAG,SAAOA;AAAA,MAAC;AAAC,eAAS,EAAEA,IAAE;AAAC,YAAIC,MAAE,SAASD,IAAE;AAAC,cAAIC,KAAE;AAAE,iBAAOD,GAAE,KAAK,YAAUC,MAAG,OAAMD,GAAE,KAAK,YAAUC,MAAG,OAAMD,GAAE,cAAYC,MAAG,OAAMD,GAAE,gBAAcC,MAAG,OAAMD,GAAE,IAAI,YAAUC,MAAG,MAAKD,GAAE,QAAQ,YAAUC,MAAG,MAAKD,GAAE,KAAK,YAAUC,MAAG,OAAMA,KAAE;AAAA,QAAI,GAAED,EAAC;AAAE,eAAOA,GAAE,KAAK,YAAUC,MAAG,KAAID,GAAE,IAAI,YAAUC,MAAG,MAAKD,GAAE,KAAK,YAAUC,MAAG,OAAMD,GAAE,IAAI,YAAUC,MAAG,MAAKA;AAAA,MAAC;AAAC,YAAM,IAAE,CAAAD,OAAG,OAAO,aAAa,MAAM,MAAKA,EAAC,GAAE,IAAE,eAAa,OAAO,cAAY,IAAI,YAAY,OAAO,IAAE;AAAO,eAAS,EAAEA,IAAE;AAAC,eAAO,IAAE,EAAE,OAAOA,EAAC,IAAE,IAAE,OAAO,KAAKA,EAAC,EAAE,SAAS,MAAM,IAAE,mBAAmB,OAAO,EAAEA,EAAC,CAAC,CAAC;AAAA,MAAC;AAAA,MAAC,MAAM,EAAC;AAAA,QAAC,OAAO,KAAKA,IAAEC,IAAE;AAAC,iBAAOD,cAAa,QAAMA,GAAE,OAAKC,KAAED,KAAE,IAAI,EAAEA,IAAE,QAAO,QAAOC,EAAC;AAAA,QAAC;AAAA,QAAC,YAAYD,IAAEC,KAAE,GAAEC,IAAEC,IAAE;AAAC,cAAG,aAAW,OAAOA,OAAI,KAAK,KAAGA,KAAG,MAAM,QAAQH,EAAC,MAAIA,KAAE,IAAI,WAAWA,EAAC,IAAG,MAAIA,GAAE,MAAK,aAAW,GAAE,KAAK,aAAW;AAAA,mBAAUA,cAAa,aAAY;AAAC,uBAASE,OAAIA,KAAEF,GAAE,aAAWC;AAAG,gBAAIE,KAAE,IAAI,SAASH,IAAEC,IAAEC,EAAC;AAAE,iBAAK,cAAcC,EAAC;AAAA,UAAC,WAASH,cAAa,cAAYA,cAAa,YAAUA,cAAa,GAAE;AAAC,uBAASE,OAAIA,KAAEF,GAAE,aAAWC,MAAIA,MAAGD,GAAE,cAAYE,KAAEF,GAAE,aAAWA,GAAE,cAAY,EAAE,0DAA0D;AAAE,gBAAIG,KAAE,IAAI,SAASH,GAAE,QAAOC,IAAEC,EAAC;AAAE,iBAAK,cAAcC,EAAC;AAAA,UAAC,WAAS,YAAU,OAAOH,IAAE;AAAC,gBAAIC,KAAE,IAAI,SAAS,IAAI,YAAYD,EAAC,CAAC;AAAE,iBAAK,cAAcC,EAAC;AAAA,UAAC,MAAM,GAAE,4CAA0CD,EAAC;AAAA,QAAC;AAAA,QAAC,iBAAiBA,IAAE;AAAC,eAAK,cAAc,IAAI,SAASA,EAAC,CAAC;AAAA,QAAC;AAAA,QAAC,YAAYA,IAAE;AAAC,eAAK,cAAc,IAAI,SAASA,GAAE,QAAOA,GAAE,YAAWA,GAAE,UAAU,CAAC;AAAA,QAAC;AAAA,QAAC,cAAcA,IAAE;AAAC,eAAK,WAASA,IAAE,KAAK,SAAOA,GAAE,QAAO,KAAK,aAAWA,GAAE,YAAW,KAAK,aAAWA,GAAE;AAAA,QAAU;AAAA,QAAC,aAAaA,IAAE;AAAC,iBAAO,KAAK,aAAWA;AAAA,QAAC;AAAA,QAAC,IAAIA,IAAEC,IAAEC,KAAE,GAAE;AAAC,iBAAOF,cAAa,YAAUA,cAAa,IAAEA,KAAE,IAAI,WAAWA,GAAE,QAAOA,GAAE,YAAWA,GAAE,UAAU,IAAEA,cAAa,gBAAcA,KAAE,IAAI,WAAWA,EAAC,IAAGA,cAAa,cAAY,EAAE,0CAA0C,GAAE,KAAK,QAAQ,EAAE,IAAIA,IAAEC,EAAC,GAAE,IAAIC,GAAE,MAAKD,IAAED,GAAE,UAAU;AAAA,QAAC;AAAA,QAAC,SAASA,IAAEC,IAAE;AAAC,iBAAOA,KAAEA,MAAG,KAAK,aAAaD,EAAC,GAAE,IAAI,EAAE,MAAKA,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAS;AAAC,iBAAO,IAAI,WAAW,KAAK,QAAO,KAAK,YAAW,KAAK,UAAU;AAAA,QAAC;AAAA,QAAC,cAAcD,IAAEC,IAAE;AAAC,iBAAO,IAAI,WAAW,KAAK,QAAO,KAAK,aAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAUD,KAAE,GAAEC,KAAE,KAAK,YAAW;AAAC,iBAAO,EAAE,KAAK,cAAcD,IAAEC,EAAC,CAAC;AAAA,QAAC;AAAA,QAAC,gBAAgBD,KAAE,GAAEC,KAAE,KAAK,YAAW;AAAC,cAAIC,KAAE,KAAK,cAAcF,IAAEC,EAAC;AAAE,iBAAO,EAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,iBAAiBF,KAAE,GAAEC,KAAE,KAAK,YAAW;AAAC,gBAAMC,KAAE,CAAC;AAAE,mBAAQC,KAAE,GAAEA,KAAEF,MAAGD,KAAEG,KAAE,KAAK,YAAWA,MAAG,EAAE,CAAAD,GAAE,KAAK,KAAK,UAAUF,KAAEG,EAAC,CAAC;AAAE,iBAAO,EAAED,EAAC;AAAA,QAAC;AAAA,QAAC,QAAQF,IAAE;AAAC,iBAAO,KAAK,SAAS,QAAQA,EAAC;AAAA,QAAC;AAAA,QAAC,SAASA,IAAE;AAAC,iBAAO,KAAK,SAAS,SAASA,EAAC;AAAA,QAAC;AAAA,QAAC,SAASA,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,SAASD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,SAASD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,SAASD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAUD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,UAAUD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAUD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,UAAUD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,WAAWD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,WAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,WAAWD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,WAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,SAASD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,WAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAUD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,WAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,aAAaD,IAAEC,IAAEC,IAAE;AAAC,kBAAOD,IAAE;AAAA,YAAC,KAAK;AAAE,qBAAO,KAAK,SAASD,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAO,KAAK,UAAUF,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAO,KAAK,UAAUF,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAO,KAAK,aAAW,KAAK,UAAUF,IAAEE,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,QAAQF,IAAEC,IAAEC,IAAE;AAAC,kBAAOD,IAAE;AAAA,YAAC,KAAK;AAAE,qBAAO,KAAK,SAASD,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAO,KAAK,UAAUF,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAO,KAAK,UAAUF,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAO,KAAK,aAAW,KAAK,UAAUF,IAAEE,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,SAASF,IAAE;AAAC,iBAAO,KAAK,SAAS,SAASA,IAAE,KAAK,YAAY,IAAI;AAAA,QAAC;AAAA,QAAC,cAAa;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,EAAEA,IAAEC,IAAE;AAAC,UAAE,GAAGD,EAAC,KAAKC,EAAC,kDAAkD;AAAA,MAAC;AAAA,MAAC,MAAM,UAAU,IAAG;AAAA,QAAC,YAAYD,IAAE;AAAC,gBAAM,GAAE,KAAK,OAAKA;AAAA,QAAC;AAAA,QAAC,IAAIA,IAAEC,IAAE;AAAC,iBAAO,KAAK,IAAID,EAAC,KAAG,EAAE,KAAK,MAAKA,EAAC,GAAEC,OAAID,MAAKC,OAAG,SAASD,IAAEC,IAAE;AAAC,cAAE,WAAWD,EAAC,KAAKC,EAAC,IAAI;AAAA,UAAC,GAAE,KAAK,MAAKD,EAAC,GAAEC,GAAED,EAAC,EAAE,WAAS,EAAE,KAAK,MAAKA,EAAC,IAAG,MAAM,IAAIA,EAAC;AAAA,QAAC;AAAA,QAAC,UAAS;AAAC,iBAAO,MAAM,KAAK,KAAK,KAAK,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,IAAE,IAAI,EAAE,aAAa,GAAE,IAAE,IAAI,EAAE,gBAAgB,GAAE,IAAE,IAAI,EAAE,aAAa;AAAE,YAAM,IAAE;AAAyB,eAAS,EAAEA,IAAEC,IAAE;AAAC,eAAM,YAAU,OAAOD,KAAE,EAAEA,IAAEC,EAAC,IAAE,KAAG,CAAC,KAAGD,cAAa,mBAAiB,EAAEA,GAAE,KAAIC,EAAC,IAAED,cAAa,cAAYA,cAAa,eAAaA,cAAa,WAAS,IAAI,EAAEA,EAAC,IAAE,KAAGA,cAAa,OAAK,EAAEA,IAAEC,IAAE,QAAO,CAAC,IAAE,KAAK,EAAE,CAAC;AAAA,MAAC;AAAC,eAAS,EAAED,IAAEC,IAAE;AAAC,gBAAOE,KAAEH,IAAG,WAAW,OAAO,KAAGG,GAAE,SAAO,MAAI,EAAEH,IAAEC,IAAE,QAAQ,IAAE,KAAGD,GAAE,SAAS,KAAK,IAAE,EAAEA,IAAEC,IAAE,OAAM,CAAC,IAAE,IAAE,EAAED,IAAEC,IAAE,IAAI,IAAE,IAAE,EAAED,IAAEC,IAAE,OAAM,CAAC,IAAE,KAAK,EAAE,CAAC;AAAE,YAAIE;AAAA,MAAC;AAAC,qBAAe,EAAEH,IAAEC,IAAEC,IAAEC,IAAE;AAAC,eAAO,EAAE,IAAID,EAAC,IAAE,EAAEF,IAAEC,IAAEC,EAAC,IAAEC,MAAE,eAAeH,IAAEC,IAAE;AAAC,cAAIC,KAAE,MAAMD,GAAED,EAAC;AAAE,iBAAO,IAAI,EAAEE,EAAC;AAAA,QAAC,GAAEF,IAAEG,EAAC,IAAE,KAAK,EAAE,UAAUD,EAAC,gBAAgB;AAAA,MAAC;AAAC,qBAAe,EAAEF,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAE,KAAI,EAAE,IAAID,EAAC,GAAGF,IAAEC,EAAC;AAAE,eAAO,MAAME,GAAE,KAAK,GAAEA;AAAA,MAAC;AAAC,YAAM,IAAE,CAAAH,OAAG,EAAEA,EAAC,EAAE,MAAM,CAAAA,OAAGA,GAAE,YAAY,EAAE,GAAE,IAAE,CAAAA,OAAG,IAAI,SAAS,CAACC,IAAEC,OAAI;AAAC,YAAIC,KAAE,IAAI;AAAW,QAAAA,GAAE,YAAU,MAAIF,GAAEE,GAAE,UAAQ,IAAI,aAAW,GAAEA,GAAE,UAAQD,IAAEC,GAAE,kBAAkBH,EAAC;AAAA,MAAC,EAAE;AAAA,MAAE,MAAM,UAAU,IAAG;AAAA,QAAC,IAAI,UAAS;AAAC,iBAAO,KAAK,YAAU,KAAK,UAAQ,MAAM,KAAK,KAAK,KAAK,CAAC,IAAG,KAAK;AAAA,QAAO;AAAA,QAAC,IAAI,YAAW;AAAC,iBAAO,KAAK,cAAY,KAAK,YAAU,MAAM,KAAK,KAAK,OAAO,CAAC,IAAG,KAAK;AAAA,QAAS;AAAA,MAAC;AAAC,eAAS,EAAEA,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAE,IAAI;AAAE,iBAAO,CAACH,IAAEC,EAAC,KAAIC,GAAE,CAAAC,GAAE,IAAIH,IAAEC,EAAC;AAAE,YAAG,MAAM,QAAQA,EAAC,EAAE,UAAQC,MAAKD,GAAE,CAAAD,GAAE,IAAIE,IAAEC,EAAC;AAAA,YAAO,CAAAH,GAAE,IAAIC,IAAEE,EAAC;AAAE,eAAOA;AAAA,MAAC;AAAC,eAAS,EAAEH,IAAEC,IAAEC,IAAE;AAAC,YAAIC,IAAEC,KAAEJ,GAAE,IAAIC,EAAC;AAAE,aAAIE,MAAKD,GAAE,CAAAE,GAAE,IAAID,GAAE,CAAC,GAAEA,GAAE,CAAC,CAAC;AAAA,MAAC;AAAC,YAAM,IAAE,oBAAI,OAAI,IAAE,oBAAI,OAAI,IAAE,oBAAI,OAAI,IAAE,OAAM,IAAE,OAAM,IAAE,KAAI,IAAE,OAAMW,KAAE,OAAM,IAAE,OAAM,IAAE,OAAM,IAAE,OAAMC,KAAE,CAAC,WAAU,kBAAiB,sBAAqB,yBAAwB,aAAY,YAAY,GAAE,IAAE,CAAC,QAAO,OAAM,OAAM,QAAO,MAAM,GAAE,IAAE,CAAC,QAAO,GAAG,CAAC,GAAE,IAAE,CAAC,QAAO,QAAO,QAAO,OAAM,SAAS,GAAE,IAAE,CAAC,GAAG,GAAE,GAAG,CAAC,GAAE,KAAG,CAAC,aAAY,aAAa,GAAE,KAAG,CAAC,iBAAgB,mBAAkB,gBAAe,cAAc,GAAE,KAAG,CAAC,GAAG,IAAG,YAAW,eAAc,cAAc;AAAA,MAAE,MAAM,GAAE;AAAA,QAAC,IAAI,YAAW;AAAC,iBAAO,KAAK,iBAAe,KAAK,mBAAiB,KAAK;AAAA,QAAY;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,QAAC,IAAI,SAAQ;AAAC,iBAAO,KAAK,WAAS,KAAK,KAAK,OAAK;AAAA,QAAC;AAAA,QAAC,YAAYf,IAAEC,IAAEC,IAAEC,IAAE;AAAC,cAAG,MAAM,GAAE,EAAE,MAAK,WAAU,KAAE,GAAE,EAAE,MAAK,QAAO,oBAAI,KAAG,GAAE,EAAE,MAAK,QAAO,oBAAI,KAAG,GAAE,EAAE,MAAK,QAAO,oBAAI,KAAG,GAAE,EAAE,MAAK,iBAAgB,KAAE,GAAE,EAAE,MAAK,mBAAkB,KAAE,GAAE,EAAE,MAAK,gBAAe,KAAE,GAAE,KAAK,MAAIH,IAAE,KAAK,UAAQC,IAAE,KAAK,QAAM,KAAK,SAAQ,KAAK,kBAAkBE,EAAC,GAAE,KAAK,gBAAc,EAAE,SAASH,EAAC,GAAE,KAAK,kBAAgB,KAAK,OAAK,EAAE,IAAIA,EAAC,IAAG,WAASE,GAAE,KAAG,MAAM,QAAQA,EAAC,EAAE,MAAK,QAAM,KAAK,UAAQ,MAAG,KAAK,iBAAeA,GAAE,SAAO,KAAG,KAAK,gBAAgBA,IAAE,KAAK,IAAI;AAAA,mBAAU,YAAU,OAAOA,IAAE;AAAC,gBAAG,KAAK,UAAQ,MAAG,KAAK,QAAM,UAAKA,GAAE,OAAM,KAAK,eAAc;AAAC,kBAAG,EAAC,MAAKF,IAAE,MAAKC,GAAC,IAAEC;AAAE,cAAAF,MAAGA,GAAE,SAAO,KAAG,KAAK,gBAAgBA,IAAE,KAAK,IAAI,GAAEC,MAAGA,GAAE,SAAO,KAAG,KAAK,gBAAgBA,IAAE,KAAK,IAAI;AAAA,YAAC;AAAC,iBAAK,kBAAkBC,EAAC;AAAA,UAAC,MAAK,UAAKA,MAAG,UAAKA,KAAE,KAAK,QAAM,KAAK,UAAQA,KAAE,EAAE,6BAA6BA,EAAC,EAAE;AAAA,QAAC;AAAA,QAAC,kBAAkBF,IAAE;AAAC,cAAIC,IAAEC;AAAE,eAAID,MAAK,GAAG,CAAAC,KAAEF,GAAEC,EAAC,GAAE,WAASC,OAAI,KAAKD,EAAC,IAAEC;AAAA,QAAE;AAAA,QAAC,gBAAgBF,IAAEC,IAAE;AAAC,cAAG,KAAK,MAAK;AAAC,gBAAIC,IAAEC,IAAE,EAAC,SAAQC,IAAE,WAAUC,GAAC,IAAE,KAAK;AAAK,iBAAIH,MAAKF,GAAE,aAAU,OAAOE,MAAGC,KAAEE,GAAE,QAAQH,EAAC,GAAE,OAAKC,OAAIA,KAAEC,GAAE,QAAQ,OAAOF,EAAC,CAAC,IAAG,OAAKC,MAAGF,GAAE,IAAI,OAAOG,GAAED,EAAC,CAAC,CAAC,KAAGF,GAAE,IAAIC,EAAC;AAAA,UAAC,MAAM,UAAQA,MAAKF,GAAE,CAAAC,GAAE,IAAIC,EAAC;AAAA,QAAC;AAAA,QAAC,kBAAiB;AAAC,WAAC,KAAK,WAAS,KAAK,KAAK,OAAK,KAAG,KAAK,UAAQ,MAAG,GAAG,KAAK,MAAK,KAAK,IAAI,KAAG,KAAK,WAAS,KAAK,KAAK,OAAK,KAAG,GAAG,KAAK,MAAK,KAAK,IAAI;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,KAAG,EAAC,MAAK,OAAG,MAAK,MAAG,KAAI,OAAG,KAAI,OAAG,MAAK,OAAG,MAAK,MAAG,MAAK,OAAG,MAAK,MAAG,KAAI,MAAG,SAAQ,OAAG,MAAK,QAAO,WAAU,OAAG,aAAY,OAAG,cAAa,OAAG,MAAK,CAAC,GAAE,MAAK,CAAC,GAAE,eAAc,MAAG,iBAAgB,MAAG,cAAa,MAAG,UAAS,MAAG,aAAY,MAAG,cAAa,MAAG,SAAQ,MAAG,gBAAe,QAAO,oBAAmB,KAAI,uBAAsB,OAAM,WAAU,OAAM,YAAW,EAAC,GAAE,KAAG,oBAAI;AAAA,MAAI,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUF,IAAE;AAAC,cAAIC,KAAE,GAAG,IAAID,EAAC;AAAE,iBAAO,WAASC,OAAIA,KAAE,IAAI,KAAKD,EAAC,GAAE,GAAG,IAAIA,IAAEC,EAAC,IAAGA;AAAA,QAAC;AAAA,QAAC,YAAYD,IAAE;AAAC,gBAAM,GAAE,SAAKA,KAAE,KAAK,cAAc,IAAE,WAASA,KAAE,KAAK,mBAAmB,IAAE,MAAM,QAAQA,EAAC,IAAE,KAAK,eAAeA,EAAC,IAAE,YAAU,OAAOA,KAAE,KAAK,gBAAgBA,EAAC,IAAE,EAAE,4BAA4BA,EAAC,EAAE,GAAE,WAAS,KAAK,mBAAiB,KAAK,iBAAe,IAAE,KAAK,wBAAsB,KAAK,qBAAoB,KAAK,gBAAc,KAAK,KAAK,UAAQ,QAAI,KAAK,wBAAwB,GAAE,KAAK,2BAA2B,GAAE,KAAK,mBAAmB;AAAA,QAAC;AAAA,QAAC,qBAAoB;AAAC,cAAIA;AAAE,eAAIA,MAAKe,GAAE,MAAKf,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,EAAE,MAAKA,EAAC,IAAE,IAAI,GAAGA,IAAE,GAAGA,EAAC,GAAE,QAAO,IAAI;AAAA,QAAC;AAAA,QAAC,gBAAe;AAAC,cAAIA;AAAE,eAAIA,MAAKe,GAAE,MAAKf,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE;AAAG,eAAIA,MAAK,EAAE,MAAKA,EAAC,IAAE,IAAI,GAAGA,IAAE,MAAG,QAAO,IAAI;AAAA,QAAC;AAAA,QAAC,eAAeA,IAAE;AAAC,cAAIC;AAAE,eAAIA,MAAKc,GAAE,MAAKd,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,EAAE,MAAKA,EAAC,IAAE,IAAI,GAAGA,IAAE,OAAG,QAAO,IAAI;AAAE,eAAK,mBAAmBD,IAAE,QAAO,CAAC;AAAA,QAAC;AAAA,QAAC,gBAAgBA,IAAE;AAAC,cAAIC;AAAE,eAAIA,OAAK,EAAE,OAAK,EAAE,QAAM,EAAE,OAAM,EAAE,OAAK,EAAE,QAAM,EAAE,WAAU,OAAO,OAAO,MAAKD,EAAC,GAAEe,IAAG,MAAKd,EAAC,IAAE,GAAGD,GAAEC,EAAC,GAAE,GAAGA,EAAC,CAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGD,GAAEC,EAAC,GAAE,GAAGA,EAAC,CAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGD,GAAEC,EAAC,GAAE,GAAGA,EAAC,CAAC;AAAE,eAAIA,MAAK,EAAE,MAAKA,EAAC,IAAE,IAAI,GAAGA,IAAE,GAAGA,EAAC,GAAED,GAAEC,EAAC,GAAE,IAAI;AAAE,eAAIA,MAAK,EAAE,MAAKA,EAAC,IAAE,IAAI,GAAGA,IAAE,GAAGA,EAAC,GAAED,GAAEC,EAAC,GAAE,KAAK,IAAI;AAAE,eAAK,mBAAmBD,GAAE,MAAKA,GAAE,MAAK,GAAE,CAAC,GAAE,SAAKA,GAAE,OAAK,KAAK,oBAAoB,GAAE,IAAE,IAAE,UAAKA,GAAE,OAAK,KAAK,yBAAyB,GAAEA,EAAC,IAAE,MAAM,QAAQA,GAAE,IAAI,IAAE,KAAK,mBAAmBA,GAAE,MAAK,QAAO,CAAC,IAAE,YAAU,OAAOA,GAAE,QAAM,KAAK,mBAAmBA,GAAE,KAAK,MAAKA,GAAE,KAAK,MAAK,CAAC;AAAA,QAAC;AAAA,QAAC,oBAAoBA,IAAEC,IAAE;AAAC,mBAAQC,MAAKF,GAAE,MAAKE,EAAC,EAAE,UAAQD;AAAA,QAAC;AAAA,QAAC,yBAAyBD,IAAEC,IAAE;AAAC,mBAAQC,MAAKF,IAAE;AAAC,gBAAIA,KAAEC,GAAEC,EAAC;AAAE,iBAAKA,EAAC,EAAE,UAAQ,UAAKF,MAAG,WAASA;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,mBAAmBA,IAAEC,IAAEC,IAAEC,KAAED,IAAE;AAAC,cAAGF,MAAGA,GAAE,QAAO;AAAC,qBAAQA,MAAKG,GAAE,MAAKH,EAAC,EAAE,UAAQ;AAAG,gBAAIC,KAAE,GAAGD,IAAEE,EAAC;AAAE,qBAAO,CAACF,IAAEE,EAAC,KAAID,GAAE,IAAG,KAAKD,EAAC,EAAE,MAAKE,EAAC,GAAE,KAAKF,EAAC,EAAE,UAAQ;AAAA,UAAE,WAASC,MAAGA,GAAE,QAAO;AAAC,gBAAID,KAAE,GAAGC,IAAEC,EAAC;AAAE,qBAAO,CAACD,IAAEC,EAAC,KAAIF,GAAE,IAAG,KAAKC,EAAC,EAAE,MAAKC,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,0BAAyB;AAAC,cAAG,EAAC,MAAKF,IAAE,MAAKC,IAAE,KAAIC,IAAE,MAAKC,IAAE,KAAIC,GAAC,IAAE;AAAK,eAAK,YAAUH,GAAE,KAAK,IAAI,CAAC,IAAEA,GAAE,KAAK,IAAI,CAAC,GAAE,KAAK,cAAYA,GAAE,KAAK,IAAI,CAAC,IAAEA,GAAE,KAAK,IAAI,CAAC,GAAEC,GAAE,WAASF,GAAE,KAAK,IAAI,CAAC,GAAEG,GAAE,WAASH,GAAE,KAAK,IAAI,CAAC,GAAEI,GAAE,WAASJ,GAAE,KAAK,IAAIc,EAAC;AAAA,QAAC;AAAA,QAAC,6BAA4B;AAAC,cAAG,EAAC,MAAKd,IAAE,MAAKC,IAAE,KAAIC,IAAE,SAAQC,GAAC,IAAE;AAAK,UAAAA,GAAE,WAASF,GAAE,KAAK,IAAI,CAAC,GAAED,GAAE,KAAK,IAAI,CAAC,IAAGC,GAAE,UAAQD,GAAE,KAAK,IAAI,CAAC,GAAEE,GAAE,UAAQF,GAAE,KAAK,IAAI,CAAC,GAAE,KAAK,KAAK,UAAQ,EAAE,MAAM,CAAAA,OAAG,SAAK,KAAKA,EAAC,EAAE,QAAQ,KAAG,KAAK,aAAW,KAAK;AAAY,mBAAQA,MAAK,EAAE,MAAKA,EAAC,EAAE,gBAAgB;AAAA,QAAC;AAAA,QAAC,IAAI,WAAU;AAAC,iBAAM,CAAC,EAAE,KAAK,CAAAA,OAAG,KAAKA,EAAC,EAAE,QAAQ,EAAE,MAAM,CAAAA,OAAG,SAAKA,GAAE,KAAG,KAAK,KAAK;AAAA,QAAO;AAAA,QAAC,qBAAoB;AAAC,mBAAQA,MAAK,EAAE,MAAKA,EAAC,EAAE,WAAS,CAAC,EAAE,IAAIA,EAAC,KAAG,EAAE,kBAAiBA,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAGA,IAAEC,IAAE;AAAC,YAAIC,IAAEC,IAAEC,IAAEC,IAAEC,KAAE,CAAC;AAAE,aAAIF,MAAKH,IAAE;AAAC,eAAII,OAAKH,KAAE,EAAE,IAAIE,EAAC,GAAED,KAAE,CAAC,GAAED,IAAG,EAACF,GAAE,SAASK,GAAE,CAAC,CAAC,KAAGL,GAAE,SAASK,GAAE,CAAC,CAAC,MAAIF,GAAE,KAAKE,GAAE,CAAC,CAAC;AAAE,UAAAF,GAAE,UAAQG,GAAE,KAAK,CAACF,IAAED,EAAC,CAAC;AAAA,QAAC;AAAC,eAAOG;AAAA,MAAC;AAAC,eAAS,GAAGN,IAAEC,IAAE;AAAC,eAAO,WAASD,KAAEA,KAAE,WAASC,KAAEA,KAAE;AAAA,MAAM;AAAC,eAAS,GAAGD,IAAEC,IAAE;AAAC,iBAAQC,MAAKD,GAAE,CAAAD,GAAE,IAAIE,EAAC;AAAA,MAAC;AAAC,QAAE,IAAG,WAAU,EAAE;AAAA,MAAE,MAAM,GAAE;AAAA,QAAC,YAAYF,IAAE;AAAC,YAAE,MAAK,WAAU,CAAC,CAAC,GAAE,EAAE,MAAK,UAAS,CAAC,CAAC,GAAE,EAAE,MAAK,UAAS,CAAC,CAAC,GAAE,EAAE,MAAK,iBAAgB,CAAAA,OAAG,KAAK,OAAO,KAAKA,EAAC,EAAE,GAAE,KAAK,UAAQ,GAAG,UAAUA,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,KAAKA,IAAE;AAAC,eAAK,OAAK,MAAM,EAAEA,IAAE,KAAK,OAAO;AAAA,QAAC;AAAA,QAAC,QAAO;AAAC,cAAG,KAAK,WAAW;AAAO,cAAG,EAAC,MAAKA,GAAC,IAAE,MAAKC,KAAED,GAAE,UAAU,CAAC;AAAE,mBAAO,CAACE,IAAEC,EAAC,KAAI,EAAE,KAAGA,GAAE,UAAUH,IAAEC,EAAC,EAAE,QAAO,KAAK,aAAW,IAAIE,GAAE,KAAK,SAAQ,KAAK,MAAK,KAAK,OAAO,GAAEH,GAAEE,EAAC,IAAE;AAAG,eAAK,KAAK,SAAO,KAAK,KAAK,MAAM,GAAE,EAAE,qBAAqB;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,cAAG,EAAC,QAAOF,IAAE,QAAOC,GAAC,IAAE;AAAK,iBAAO,KAAK,MAAM,GAAE,KAAK,QAAQ,gBAAc,MAAM,KAAK,eAAe,EAAE,MAAM,KAAK,YAAY,GAAEA,GAAE,KAAK,GAAG,KAAK,WAAW,MAAM,KAAG,MAAM,KAAK,eAAe,GAAE,KAAK,KAAK,SAAO,KAAK,KAAK,MAAM,GAAE,KAAK,QAAQ,gBAAcA,GAAE,SAAO,MAAID,GAAE,SAAOC,KAAG,EAAED,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,iBAAgB;AAAC,cAAG,EAAC,QAAOA,GAAC,IAAE;AAAK,gBAAM,KAAK,WAAW,MAAM;AAAE,cAAIC,KAAE,OAAO,OAAO,KAAK,OAAO,EAAE,KAAK,OAAMA,OAAG;AAAC,gBAAIC,KAAE,MAAMD,GAAE,MAAM;AAAE,YAAAA,GAAE,eAAeD,IAAEE,EAAC;AAAA,UAAC,EAAE;AAAE,eAAK,QAAQ,iBAAeD,KAAEA,GAAE,KAAK,CAAAD,OAAGA,GAAE,MAAM,KAAK,YAAY,EAAE,IAAG,MAAM,QAAQ,IAAIC,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,mBAAkB;AAAC,eAAK,MAAM;AAAE,cAAG,EAAC,SAAQD,IAAE,MAAKC,GAAC,IAAE,MAAKC,KAAE,EAAE,IAAI,QAAOF,EAAC;AAAE,cAAIG;AAAE,cAAGF,GAAE,OAAKE,KAAE,EAAC,OAAM,GAAE,MAAK,OAAM,IAAEF,GAAE,SAAOE,KAAE,MAAM,KAAK,WAAW,iBAAiB,MAAM,IAAG,WAASA,GAAE;AAAO,cAAIC,KAAE,MAAM,KAAK,WAAW,mBAAmBD,EAAC,GAAEE,KAAE,KAAK,QAAQ,OAAK,IAAIH,GAAEE,IAAEJ,IAAEC,EAAC,GAAEK,KAAE,MAAMD,GAAE,iBAAiB;AAAE,iBAAOJ,GAAE,SAAOA,GAAE,MAAM,GAAEK;AAAA,QAAC;AAAA,MAAC;AAAC,qBAAe,GAAGN,IAAEC,IAAE;AAAC,YAAIC,KAAE,IAAI,GAAGD,EAAC;AAAE,eAAO,MAAMC,GAAE,KAAKF,EAAC,GAAEE,GAAE,MAAM;AAAA,MAAC;AAAC,UAAI,KAAG,OAAO,OAAO,EAAC,WAAU,MAAK,OAAM,IAAG,OAAM,IAAG,aAAY,GAAE,gBAAe,GAAE,aAAY,GAAE,SAAQ,GAAE,WAAU,GAAE,aAAY,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,uBAAsB,GAAE,uBAAsB,GAAE,cAAaa,IAAE,eAAc,GAAE,UAAS,GAAE,YAAW,GAAE,mBAAkB,GAAE,kBAAiB,IAAG,cAAa,IAAG,eAAc,IAAG,SAAQ,GAAE,CAAC;AAAA,MAAE,MAAM,GAAE;AAAA,QAAC,YAAYf,IAAEC,IAAEC,IAAE;AAAC,YAAE,MAAK,UAAS,CAAC,CAAC,GAAE,EAAE,MAAK,uBAAsB,OAAMF,OAAG;AAAC,gBAAIC,KAAED,GAAE,OAAME,KAAEF,GAAE,QAAM;AAAM,gBAAG,KAAK,KAAK,QAAQ,KAAG,KAAK,KAAK,UAAUC,IAAEC,EAAC,EAAE,CAAAF,GAAE,QAAM,KAAK,KAAK,SAASC,IAAEC,EAAC;AAAA,gBAAO,KAAG;AAAC,cAAAF,GAAE,QAAM,MAAM,KAAK,KAAK,UAAUC,IAAEC,EAAC;AAAA,YAAC,SAAOD,IAAE;AAAC,gBAAE,0BAA0B,KAAK,UAAUD,EAAC,CAAC,KAAKC,GAAE,OAAO,EAAE;AAAA,YAAC;AAAA,gBAAM,MAAK,KAAK,aAAWA,KAAEC,KAAEF,GAAE,QAAM,KAAK,KAAK,SAASC,IAAEC,EAAC,IAAE,WAASF,GAAE,OAAKA,GAAE,QAAM,KAAK,KAAK,SAASC,EAAC,IAAE,EAAE,0BAAwB,KAAK,UAAUD,EAAC,CAAC;AAAE,mBAAOA,GAAE;AAAA,UAAK,EAAE,GAAE,KAAK,iBAAe,KAAK,cAAcA,EAAC,GAAE,KAAK,UAAQA,IAAE,KAAK,OAAKC,IAAE,KAAK,UAAQC;AAAA,QAAC;AAAA,QAAC,cAAcF,IAAEC,IAAE;AAAC,eAAK,QAAQD,EAAC,EAAE,WAAS,KAAK,aAAaA,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,aAAaD,IAAEC,IAAE;AAAC,cAAIC,KAAE,KAAI,EAAE,IAAIF,EAAC,GAAGC,IAAE,KAAK,SAAQ,KAAK,IAAI;AAAE,iBAAO,KAAK,QAAQD,EAAC,IAAEE;AAAA,QAAC;AAAA,QAAC,cAAcF,IAAE;AAAC,mBAAQC,MAAKD,IAAE;AAAC,gBAAG,EAAC,MAAKA,IAAE,OAAME,GAAC,IAAED,IAAEE,KAAE,KAAK,QAAQH,EAAC;AAAE,gBAAGG,MAAGA,GAAE,SAAQ;AAAC,kBAAIF,KAAE,KAAK,QAAQD,EAAC;AAAE,cAAAC,MAAGA,GAAE,UAAQA,MAAG,KAAK,aAAaD,IAAEE,EAAC;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,MAAM,aAAaF,IAAE;AAAC,cAAIC,KAAED,GAAE,IAAI,KAAK,kBAAkB;AAAE,gBAAM,QAAQ,IAAIC,EAAC;AAAA,QAAC;AAAA,MAAC;AAAA,MAAC,MAAM,GAAE;AAAA,QAAC,OAAO,aAAaD,IAAEC,IAAE;AAAC,cAAIC,KAAEF,GAAE,UAAUC,KAAE,CAAC,IAAE,GAAEE,KAAE,cAAY,OAAO,KAAK,eAAa,KAAK,aAAaH,IAAEC,IAAEC,EAAC,IAAE,KAAK,cAAaE,KAAEH,KAAEE,IAAEE,KAAEH,KAAEC;AAAE,iBAAM,EAAC,QAAOF,IAAE,QAAOC,IAAE,cAAaC,IAAE,OAAMC,IAAE,MAAKC,IAAE,KAAID,KAAEC,GAAC;AAAA,QAAC;AAAA,QAAC,OAAO,MAAML,IAAEC,KAAE,CAAC,GAAE;AAAC,iBAAO,IAAI,KAAKD,IAAE,IAAI,GAAG,EAAC,CAAC,KAAK,IAAI,GAAEC,GAAC,CAAC,GAAED,EAAC,EAAE,MAAM;AAAA,QAAC;AAAA,QAAC,eAAeA,IAAE;AAAC,iBAAOA,cAAa,IAAEA,KAAE,IAAI,EAAEA,EAAC;AAAA,QAAC;AAAA,QAAC,YAAYA,IAAEC,KAAE,CAAC,GAAEC,IAAE;AAAC,YAAE,MAAK,UAAS,CAAC,CAAC,GAAE,EAAE,MAAK,OAAM,oBAAI,KAAG,GAAE,EAAE,MAAK,gBAAe,CAAAF,OAAG;AAAC,gBAAG,CAAC,KAAK,QAAQ,aAAa,OAAMA;AAAE,iBAAK,OAAO,KAAKA,GAAE,OAAO;AAAA,UAAC,EAAE,GAAE,KAAK,QAAM,KAAK,eAAeA,EAAC,GAAE,KAAK,OAAKE,IAAE,KAAK,OAAK,KAAK,YAAY,MAAK,KAAK,gBAAc,KAAK,UAAQD,IAAE,KAAK,eAAaA,GAAE,KAAK,IAAI,GAAE,KAAK,eAAa,KAAK,gBAAc,KAAK,aAAa;AAAA,QAAS;AAAA,QAAC,YAAW;AAAC,eAAK,iBAAe,KAAK,aAAW,KAAK,eAAe,KAAK,KAAI,KAAK,IAAI;AAAA,QAAE;AAAA,QAAC,IAAI,SAAQ;AAAC,iBAAO,KAAK,aAAW,KAAK,aAAW,KAAK,MAAI,OAAO,YAAY,KAAK,GAAG,IAAE;AAAA,QAAM;AAAA,QAAC,eAAeD,IAAEC,IAAE;AAAC,cAAIC,KAAE,EAAE,IAAID,EAAC,GAAEE,KAAE,EAAE,IAAIF,EAAC,GAAEG,KAAE,EAAE,IAAIH,EAAC,GAAEI,KAAE,KAAK,QAAQJ,EAAC,GAAEK,KAAED,GAAE,gBAAc,CAAC,CAACH,IAAEK,KAAEF,GAAE,mBAAiB,CAAC,CAACF,IAAEK,KAAEH,GAAE,iBAAe,CAAC,CAACD,IAAEK,KAAE,CAAC;AAAE,mBAAO,CAACR,IAAEI,EAAC,KAAIL,GAAE,CAAAM,MAAGJ,GAAE,IAAID,EAAC,IAAEI,KAAEH,GAAE,IAAID,EAAC,EAAEI,EAAC,IAAEE,MAAGJ,GAAE,IAAIF,EAAC,MAAII,KAAE,KAAK,eAAeA,IAAEF,GAAE,IAAIF,EAAC,CAAC,IAAGO,MAAGJ,GAAE,IAAIH,EAAC,MAAIA,KAAEG,GAAE,IAAIH,EAAC,KAAGA,KAAGQ,GAAER,EAAC,IAAEI;AAAE,iBAAOI;AAAA,QAAC;AAAA,QAAC,eAAeT,IAAEC,IAAE;AAAC,iBAAOA,GAAED,EAAC,KAAGC,GAAE,WAASD;AAAA,QAAC;AAAA,QAAC,eAAeA,IAAEC,IAAE;AAAC,eAAK,qBAAqBD,IAAE,KAAK,YAAY,MAAKC,EAAC;AAAA,QAAC;AAAA,QAAC,qBAAqBD,IAAEC,IAAEC,IAAE;AAAC,cAAG,KAAK,cAAc,YAAY,QAAO,OAAO,OAAOF,IAAEE,EAAC;AAAE,UAAAF,GAAEC,EAAC,IAAE,OAAO,OAAOD,GAAEC,EAAC,GAAEC,EAAC,IAAEF,GAAEC,EAAC,IAAEC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,gBAAe,CAAC,GAAE,EAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAG,gBAAe,KAAE,GAAE,EAAE,IAAG,cAAa,MAAI,MAAG;AAAE,eAAS,GAAGF,IAAE;AAAC,eAAO,QAAMA,MAAG,QAAMA,MAAG,QAAMA,MAAG,QAAMA,MAAG,QAAMA,MAAG,QAAMA,MAAG,QAAMA;AAAA,MAAC;AAAC,eAAS,GAAGA,IAAE;AAAC,eAAOA,MAAG,OAAKA,MAAG;AAAA,MAAG;AAAC,eAAS,GAAGA,IAAEC,IAAEC,IAAE;AAAC,iBAAO,CAACC,IAAEC,EAAC,KAAI,EAAE,KAAGA,GAAE,UAAUJ,IAAEC,IAAEC,EAAC,EAAE,QAAOC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,QAAC,eAAeH,IAAE;AAAC,gBAAM,GAAGA,EAAC,GAAE,EAAE,MAAK,eAAc,CAAC,CAAC,GAAE,EAAE,MAAK,gBAAe,CAAC,CAAC,GAAE,EAAE,MAAK,mBAAkB,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,OAAO,UAAUA,IAAEC,IAAE;AAAC,iBAAO,UAAQA;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,gBAAM,KAAK,gBAAgB,GAAE,MAAM,KAAK,aAAa,KAAK,WAAW,GAAE,KAAK,mBAAmB,GAAE,KAAK,cAAc,KAAK,qBAAmB,KAAK,WAAW;AAAA,QAAC;AAAA,QAAC,uBAAuBD,IAAE;AAAC,mBAAKA,MAAG,KAAK,UAAQ,MAAG,KAAK,SAAO,IAAI,IAAI,EAAE,QAAQ,CAAC,MAAIA,KAAE,WAASA,KAAE,EAAE,QAAQ,EAAE,QAAQ,CAAAA,OAAG,KAAK,QAAQA,EAAC,EAAE,QAAQ,IAAEA,GAAE,QAAQ,CAAAA,OAAG,KAAK,QAAQA,EAAC,EAAE,WAAS,EAAE,IAAIA,EAAC,EAAE,GAAE,KAAK,UAAQ,OAAG,KAAK,YAAU,IAAI,IAAIA,EAAC,GAAE,KAAK,SAAO,IAAI,IAAIA,EAAC,IAAG,KAAK,yBAAuB;AAAA,QAAE;AAAA,QAAC,MAAM,gBAAgBA,KAAE,GAAEC,IAAE;AAAC,eAAK,uBAAuBA,EAAC;AAAE,cAAG,EAAC,MAAKC,IAAE,SAAQC,IAAE,QAAOC,IAAE,WAAUC,GAAC,IAAE;AAAK,cAAG,CAACF,MAAG,KAAK,KAAK,YAAUA,KAAE,MAAM,KAAKC,EAAC,EAAE,MAAM,CAAAJ,OAAG;AAAC,gBAAIC,KAAE,EAAE,IAAID,EAAC,GAAEE,KAAE,KAAK,QAAQF,EAAC;AAAE,mBAAOC,GAAE,gBAAcC,GAAE;AAAA,UAAY,EAAE,GAAEC,MAAG,MAAM,KAAK,KAAK,UAAU,IAAGH,KAAE,KAAK,uBAAuBA,IAAEE,GAAE,UAAU,GAAE,CAAC,KAAK,QAAQ,YAAUA,GAAE,SAAQ;AAAC,gBAAID,KAAE;AAAG,mBAAKI,GAAE,OAAK,KAAG,CAACJ,OAAIC,GAAE,oBAAkB,KAAK,2BAAyB;AAAC,kBAAG,EAAC,iBAAgBC,GAAC,IAAED,IAAEE,KAAE,KAAK,YAAY,MAAM,CAAAJ,OAAG,CAAC,KAAK,KAAK,UAAUA,GAAE,UAAQA,GAAE,OAAMA,GAAE,UAAQA,GAAE,IAAI,EAAE;AAAE,kBAAGC,KAAED,KAAEG,MAAG,CAACC,KAAE,CAAC,MAAMF,GAAE,cAAcF,EAAC,IAAE,CAAC,MAAME,GAAE,cAAcC,EAAC,GAAE,YAAUH,KAAE,KAAK,uBAAuBA,IAAEE,GAAE,UAAU,GAAG;AAAA,YAAM;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,uBAAuBF,IAAEC,IAAE;AAAC,UAAAA,MAAG;AAAE,cAAIC,IAAEC,IAAEC,IAAEC,IAAEC,IAAEC,IAAE,EAAC,MAAKC,IAAE,SAAQC,IAAE,QAAOC,IAAE,WAAUC,IAAE,SAAQC,GAAC,IAAE;AAAK,iBAAKZ,KAAEC,IAAED,KAAI,KAAG,QAAMQ,GAAE,SAASR,EAAC;AAAE,gBAAGE,KAAEM,GAAE,SAASR,KAAE,CAAC,GAAE,GAAGE,EAAC,GAAE;AAAC,kBAAGC,KAAEK,GAAE,UAAUR,KAAE,CAAC,GAAEI,KAAE,GAAGI,IAAER,IAAEG,EAAC,GAAEC,MAAGM,GAAE,IAAIN,EAAC,MAAIC,KAAE,EAAE,IAAID,EAAC,GAAEE,KAAED,GAAE,aAAaG,IAAER,EAAC,GAAEO,KAAEK,GAAER,EAAC,GAAEE,GAAE,OAAKF,IAAE,KAAK,YAAY,KAAKE,EAAC,GAAE,CAACG,OAAIJ,GAAE,gBAAcE,GAAE,gBAAc,KAAK,yBAAuBD,GAAE,cAAYA,GAAE,YAAW,KAAK,0BAAwBK,GAAE,OAAOP,EAAC,KAAGO,GAAE,OAAOP,EAAC,GAAE,MAAIO,GAAE,OAAO;AAAM,cAAAC,GAAE,0BAAwBN,KAAE,GAAG,aAAaE,IAAER,EAAC,GAAEM,GAAE,SAAOJ,IAAE,KAAK,gBAAgB,KAAKI,EAAC,IAAGN,MAAGG,KAAE;AAAA,YAAC,WAAS,GAAGD,EAAC,GAAE;AAAC,kBAAGC,KAAEK,GAAE,UAAUR,KAAE,CAAC,GAAE,QAAME,MAAG,UAAKU,GAAE,aAAa;AAAO,cAAAA,GAAE,sBAAoB,KAAK,aAAa,KAAK,EAAC,QAAOZ,IAAE,QAAOG,IAAE,QAAOD,GAAC,CAAC,GAAEF,MAAGG,KAAE;AAAA,YAAC;AAAA;AAAC,iBAAOH;AAAA,QAAC;AAAA,QAAC,qBAAoB;AAAC,cAAG,CAAC,KAAK,YAAY,MAAM,CAAAA,OAAGA,GAAE,aAAa,EAAE;AAAO,cAAIA,MAAE,SAASA,IAAEC,IAAE;AAAC,gBAAIC,IAAEC,IAAEC,IAAEC,KAAE,oBAAI;AAAI,qBAAQC,KAAE,GAAEA,KAAEN,GAAE,QAAOM,KAAI,CAAAJ,KAAEF,GAAEM,EAAC,GAAEH,KAAED,GAAED,EAAC,GAAEI,GAAE,IAAIF,EAAC,IAAEC,KAAEC,GAAE,IAAIF,EAAC,IAAEE,GAAE,IAAIF,IAAEC,KAAE,CAAC,CAAC,GAAEA,GAAE,KAAKF,EAAC;AAAE,mBAAO,MAAM,KAAKG,EAAC;AAAA,UAAC,GAAE,KAAK,aAAY,MAAM;AAAE,eAAK,oBAAkBL,GAAE,KAAK,CAAC,CAACA,IAAEC,EAAC,MAAI;AAAC,gBAAIC,KAAE,EAAE,IAAIF,IAAE,KAAK,OAAO;AAAE,gBAAGE,GAAE,qBAAoB;AAAC,qBAAM,EAAC,MAAKF,IAAE,OAAME,GAAE,oBAAoBD,EAAC,EAAC;AAAA,YAAC;AAAC,mBAAOA,GAAE,CAAC;AAAA,UAAC,EAAE;AAAA,QAAC;AAAA,QAAC,WAAWD,IAAE;AAAC,iBAAO,KAAK,YAAY,MAAM,CAAAC,OAAGA,GAAE,SAAOD,GAAE;AAAA,QAAC;AAAA,QAAC,MAAM,iBAAiBA,IAAE;AAAC,cAAIC,KAAE,KAAK,WAAWD,EAAC;AAAE,iBAAO,WAASC,OAAI,MAAM,KAAK,gBAAgB,GAAE,CAACD,EAAC,CAAC,GAAEC,KAAE,KAAK,WAAWD,EAAC,IAAGC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAI,QAAO,EAAE;AAAE,YAAM,KAAG,CAAC,QAAO,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,cAAa;AAAC,cAAID,KAAE,KAAK,MAAM,UAAU;AAAE,oBAAQA,KAAE,KAAK,KAAG,OAAG,UAAQA,OAAI,KAAK,KAAG,QAAI,KAAK,MAAM,KAAG,KAAK,IAAG,KAAK,eAAa;AAAA,QAAE;AAAA,QAAC,UAAUA,IAAEC,IAAEC,KAAE,oBAAI,OAAI;AAAC,cAAG,EAAC,MAAKC,IAAE,MAAKC,GAAC,IAAE,KAAK,QAAQH,EAAC;AAAE,UAAAE,KAAE,IAAI,IAAIA,EAAC;AAAE,cAAIE,KAAEF,GAAE,OAAK,GAAEG,KAAE,MAAIF,GAAE,MAAKG,KAAE,KAAK,MAAM,UAAUP,EAAC;AAAE,UAAAA,MAAG;AAAE,mBAAQQ,KAAE,GAAEA,KAAED,IAAEC,MAAI;AAAC,gBAAID,KAAE,KAAK,MAAM,UAAUP,EAAC;AAAE,gBAAGK,IAAE;AAAC,kBAAGF,GAAE,IAAII,EAAC,MAAIL,GAAE,IAAIK,IAAE,KAAK,SAASP,IAAEO,IAAEN,EAAC,CAAC,GAAEE,GAAE,OAAOI,EAAC,GAAE,MAAIJ,GAAE,MAAM;AAAA,YAAK,MAAK,EAACG,MAAGF,GAAE,IAAIG,EAAC,KAAGL,GAAE,IAAIK,IAAE,KAAK,SAASP,IAAEO,IAAEN,EAAC,CAAC;AAAE,YAAAD,MAAG;AAAA,UAAE;AAAC,iBAAOE;AAAA,QAAC;AAAA,QAAC,SAASF,IAAEC,IAAEC,IAAE;AAAC,cAAG,EAAC,OAAMC,GAAC,IAAE,MAAKC,KAAED,GAAE,UAAUH,KAAE,CAAC,GAAEK,KAAEF,GAAE,UAAUH,KAAE,CAAC,GAAEM,KAAE,GAAGF,EAAC;AAAE,cAAGE,KAAED,MAAG,IAAEL,MAAG,IAAEA,KAAEG,GAAE,UAAUH,KAAE,CAAC,IAAGI,KAAE,KAAGA,KAAE,OAAK,EAAE,mCAAmCF,GAAE,YAAY,CAAC,UAAUD,GAAE,SAAS,EAAE,CAAC,WAAWG,EAAC,YAAYJ,EAAC,EAAE,GAAEA,KAAEG,GAAE,cAAY,EAAE,qCAAqCD,GAAE,YAAY,CAAC,UAAUD,GAAE,SAAS,EAAE,CAAC,WAAWG,EAAC,YAAYJ,EAAC,6BAA6BG,GAAE,UAAU,EAAE,GAAE,MAAIC,GAAE,QAAOD,GAAE,cAAcH,IAAEK,EAAC;AAAE,cAAG,MAAID,GAAE,QAAO,EAAED,GAAE,UAAUH,IAAEK,EAAC,CAAC;AAAE,cAAG,MAAID,GAAE,QAAOD,GAAE,cAAcH,IAAEK,EAAC;AAAE,cAAG,MAAIA,GAAE,QAAO,KAAK,cAAcD,IAAEJ,EAAC;AAAE;AAAC,gBAAIC,KAAE,MAAI,SAASD,IAAE;AAAC,sBAAOA,IAAE;AAAA,gBAAC,KAAK;AAAE,yBAAO;AAAA,gBAAW,KAAK;AAAE,yBAAO;AAAA,gBAAY,KAAK;AAAE,yBAAO;AAAA,gBAAY,KAAK;AAAE,yBAAO;AAAA,gBAAM,KAAK;AAAE,yBAAO;AAAA,gBAAU,KAAK;AAAE,yBAAO;AAAA,gBAAW,KAAK;AAAE,yBAAO;AAAA,gBAAW,KAAK;AAAG,yBAAO;AAAA,gBAAM,KAAK;AAAG,yBAAO;AAAA,gBAAa,KAAK;AAAG,yBAAO;AAAA,gBAAa;AAAQ,yBAAO;AAAA,cAAK;AAAA,YAAC,GAAEI,EAAC,GAAGC,EAAC,GAAEH,KAAEI;AAAE,qBAAQH,KAAE,GAAEA,KAAEE,IAAEF,KAAI,CAAAF,GAAEE,EAAC,IAAE,KAAK,cAAcC,IAAEJ,EAAC,GAAEA,MAAGE;AAAE,mBAAOD;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,cAAcD,IAAEC,IAAE;AAAC,cAAG,EAAC,OAAMC,GAAC,IAAE;AAAK,kBAAOF,IAAE;AAAA,YAAC,KAAK;AAAE,qBAAOE,GAAE,SAASD,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,UAAUD,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,UAAUD,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,UAAUD,EAAC,IAAEC,GAAE,UAAUD,KAAE,CAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,QAAQD,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,SAASD,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,SAASD,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAOC,GAAE,SAASD,EAAC,IAAEC,GAAE,SAASD,KAAE,CAAC;AAAA,YAAE,KAAK;AAAG,qBAAOC,GAAE,SAASD,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAOC,GAAE,UAAUD,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAOC,GAAE,UAAUD,EAAC;AAAA,YAAE;AAAQ,gBAAE,qBAAqBD,EAAC,EAAE;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUA,IAAEC,IAAE;AAAC,iBAAO,QAAMD,GAAE,SAASC,KAAE,CAAC,KAAG,eAAaD,GAAE,UAAUC,KAAE,CAAC,KAAG,MAAID,GAAE,UAAUC,KAAE,CAAC;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,eAAK,YAAY;AAAE,cAAG,EAAC,SAAQD,GAAC,IAAE;AAAK,iBAAOA,GAAE,KAAK,WAAS,MAAM,KAAK,eAAe,GAAEA,GAAE,KAAK,WAAS,MAAM,KAAK,UAAU,gBAAgB,GAAEA,GAAE,IAAI,WAAS,MAAM,KAAK,UAAU,eAAe,GAAEA,GAAE,QAAQ,WAAS,MAAM,KAAK,UAAU,mBAAmB,GAAEA,GAAE,KAAK,WAAS,MAAM,KAAK,UAAU,qBAAqB,GAAE,KAAK,aAAa;AAAA,QAAC;AAAA,QAAC,UAAUA,IAAE;AAAC,cAAIC,KAAE,KAAKD,EAAC,EAAE;AAAE,iBAAO,WAASC,GAAE,UAAQA,KAAEA,GAAE,MAAM,KAAK,WAAW,IAAGA;AAAA,QAAC;AAAA,QAAC,iBAAgB;AAAC,qBAAS,KAAK,eAAa,KAAK,aAAW,KAAK,MAAM,UAAU,CAAC;AAAA,QAAE;AAAA,QAAC,iBAAgB;AAAC,cAAG,WAAS,KAAK,YAAW;AAAC,iBAAK,eAAe;AAAE,gBAAID,KAAE,KAAK,MAAM,UAAU,KAAK,UAAU,GAAEC,KAAE,KAAK,aAAW,IAAE,KAAGD;AAAE,iBAAK,aAAW,KAAK,MAAM,UAAUC,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,WAAWD,IAAEC,IAAE;AAAC,cAAIC,KAAE,oBAAI;AAAI,iBAAO,KAAKD,EAAC,IAAEC,IAAE,KAAK,UAAUF,IAAEC,IAAEC,EAAC,GAAEA;AAAA,QAAC;AAAA,QAAC,MAAM,iBAAgB;AAAC,cAAG,KAAK,KAAK;AAAO,cAAG,EAAC,MAAKF,GAAC,IAAE;AAAK,eAAK,eAAe,GAAE,KAAK,aAAW,KAAG,EAAE,qBAAqB,GAAE,CAACA,GAAE,WAAS,KAAK,aAAWA,GAAE,cAAY,EAAE;AAAA,mBAA4D,KAAK,UAAU,sBAAsBA,GAAE,UAAU,EAAE,GAAEA,GAAE,QAAM,MAAMA,GAAE,YAAY,KAAK,YAAW,EAAE,KAAK,OAAO,CAAC;AAAE,cAAIC,KAAE,KAAK,WAAW,KAAK,YAAW,MAAM;AAAE,iBAAO,MAAIA,GAAE,QAAM,KAAK,aAAWA,GAAE,IAAI,CAAC,GAAE,KAAK,gBAAcA,GAAE,IAAI,CAAC,GAAE,KAAK,YAAUA,GAAE,IAAI,CAAC,GAAE,KAAK,MAAIA,GAAE,IAAI,CAAC,GAAE,KAAK,OAAKA,GAAE,IAAI,CAAC,GAAE,KAAK,MAAIA,GAAE,IAAIa,EAAC,GAAE,KAAK,QAAQ,aAAWb,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAOa,EAAC,IAAGb,MAAG;AAAA,QAAM;AAAA,QAAC,MAAM,iBAAgB;AAAC,cAAG,KAAK,KAAK;AAAO,cAAG,KAAK,QAAM,MAAM,KAAK,eAAe,GAAE,WAAS,KAAK,WAAW;AAAO,eAAK,KAAK,QAAM,MAAM,KAAK,KAAK,YAAY,KAAK,YAAW,EAAE,KAAK,OAAO,CAAC;AAAE,cAAID,KAAE,KAAK,WAAW,KAAK,YAAW,MAAM;AAAE,iBAAO,KAAK,kBAAgB,KAAK,gBAAcA,GAAE,IAAI,CAAC,IAAG,KAAK,YAAUA,GAAE,IAAI,CAAC,GAAE,KAAK,cAAYA,GAAE,IAAI,CAAC,GAAE,KAAK,QAAQ,aAAWA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,IAAG,KAAK,OAAOA,IAAE,KAAK,GAAE,KAAK,OAAOA,IAAE,KAAK,GAAEA;AAAA,QAAC;AAAA,QAAC,OAAOA,IAAEC,IAAE;AAAC,cAAIC,KAAEF,GAAE,IAAIC,EAAC;AAAE,UAAAC,MAAG,MAAIA,GAAE,UAAQF,GAAE,IAAIC,IAAEC,GAAE,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,MAAM,gBAAe;AAAC,cAAG,KAAK,IAAI;AAAO,cAAG,KAAK,QAAM,MAAM,KAAK,eAAe,GAAE,WAAS,KAAK,UAAU;AAAO,cAAIF,KAAE,KAAK,WAAW,KAAK,WAAU,KAAK;AAAE,iBAAOA,MAAGA,GAAE,IAAI,CAAC,KAAGA,GAAE,IAAI,CAAC,MAAIA,GAAE,IAAI,YAAW,GAAG,GAAGA,GAAE,IAAI,CAAC,GAAEA,GAAE,IAAI,CAAC,CAAC,CAAC,GAAEA,GAAE,IAAI,aAAY,GAAG,GAAGA,GAAE,IAAI,CAAC,GAAEA,GAAE,IAAI,CAAC,CAAC,CAAC,IAAGA;AAAA,QAAC;AAAA,QAAC,MAAM,oBAAmB;AAAC,cAAG,CAAC,KAAK,YAAU,KAAK,QAAM,MAAM,KAAK,eAAe,GAAE,WAAS,KAAK,iBAAe,KAAK,QAAM,MAAM,KAAK,eAAe,GAAE,WAAS,KAAK,eAAe,QAAO,KAAK,WAAW,KAAK,eAAc,SAAS;AAAA,QAAC;AAAA,QAAC,MAAM,oBAAoBA,KAAE,OAAG;AAAC,cAAG,CAAC,KAAK,QAAM,CAAC,KAAK,eAAa,CAAC,KAAK,QAAQ,eAAaA,IAAG,QAAO,KAAK,eAAe,GAAE,KAAK,aAAW,MAAI,KAAK,WAAW,KAAK,YAAW,MAAM,GAAE,KAAK,aAAW,OAAI,KAAK;AAAA,QAAI;AAAA,QAAC,MAAM,mBAAkB;AAAC,cAAG,KAAK,gBAAc,KAAK,YAAY,GAAE,KAAK,cAAY,MAAM,KAAK,oBAAoB,IAAE,GAAE,WAAS,KAAK,KAAK;AAAO,cAAIA,KAAE,KAAK,KAAK,IAAI,GAAG,GAAEC,KAAE,KAAK,KAAK,IAAI,GAAG;AAAE,iBAAO,KAAK,MAAM,cAAcD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,IAAI,QAAO;AAAC,iBAAO,KAAK;AAAA,QAAI;AAAA,QAAC,IAAI,YAAW;AAAC,iBAAO,KAAK;AAAA,QAAI;AAAA,QAAC,eAAc;AAAC,cAAID,IAAEC,IAAEC,IAAEC,KAAE,CAAC;AAAE,eAAIF,MAAK,EAAE,KAAGD,KAAE,KAAKC,EAAC,GAAE,CAAC,EAAED,EAAC,EAAE,KAAGE,KAAE,KAAK,eAAa,KAAK,eAAeF,IAAEC,EAAC,IAAE,OAAO,YAAYD,EAAC,GAAE,KAAK,QAAQ,aAAY;AAAC,gBAAG,WAASC,GAAE;AAAS,mBAAO,OAAOE,IAAED,EAAC;AAAA,UAAC,MAAM,CAAAC,GAAEF,EAAC,IAAEC;AAAE,iBAAO,KAAK,cAAYC,GAAE,YAAU,KAAK,YAAW,KAAK,gBAAcA,GAAE,cAAY,KAAK,cAAaA;AAAA,QAAC;AAAA,QAAC,eAAeH,IAAEC,IAAE;AAAC,cAAG,KAAK,cAAc,YAAY,QAAO,OAAOD,IAAEC,EAAC;AAAA,cAAO,UAAO,CAACC,IAAEC,EAAC,KAAI,OAAO,QAAQF,EAAC,EAAE,MAAK,qBAAqBD,IAAEE,IAAEC,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAGH,IAAEC,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAEJ,KAAEC,KAAE,KAAGC,KAAE;AAAK,eAAM,QAAMC,MAAG,QAAMA,OAAIC,MAAG,KAAIA;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAG,gBAAe,EAAE,GAAE,EAAE,IAAI,QAAO,EAAE;AAAE,UAAI,KAAG,OAAO,OAAO,EAAC,WAAU,MAAK,SAAQ,IAAG,OAAM,IAAG,aAAY,GAAE,gBAAe,GAAE,aAAY,GAAE,SAAQ,GAAE,WAAU,GAAE,aAAY,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,uBAAsB,GAAE,uBAAsB,GAAE,cAAaW,IAAE,eAAc,GAAE,UAAS,GAAE,YAAW,GAAE,mBAAkB,GAAE,kBAAiB,IAAG,cAAa,IAAG,eAAc,IAAG,SAAQ,IAAG,OAAM,GAAE,CAAC;AAAE,YAAM,KAAG,EAAC,MAAK,OAAG,MAAK,OAAG,MAAK,OAAG,KAAI,OAAG,SAAQ,OAAG,UAAS,OAAG,cAAa,MAAG,eAAc,OAAG,iBAAgB,OAAG,aAAY,MAAE,GAAE,KAAG,OAAO,OAAO,CAAC,GAAE,IAAG,EAAC,gBAAe,KAAI,KAAI,CAAC,GAAE,GAAE,GAAE,CAAC,EAAC,CAAC;AAAE,qBAAe,GAAGf,IAAE;AAAC,YAAIC,KAAE,IAAI,GAAG,EAAE;AAAE,cAAMA,GAAE,KAAKD,EAAC;AAAE,YAAIE,KAAE,MAAMD,GAAE,MAAM;AAAE,YAAGC,MAAGA,GAAE,KAAI;AAAC,cAAG,EAAC,UAASF,IAAE,WAAUC,GAAC,IAAEC,GAAE;AAAI,iBAAM,EAAC,UAASF,IAAE,WAAUC,GAAC;AAAA,QAAC;AAAA,MAAC;AAAC,YAAM,KAAG,OAAO,OAAO,CAAC,GAAE,IAAG,EAAC,MAAK,OAAG,MAAK,MAAG,aAAY,MAAE,CAAC;AAAE,qBAAe,GAAGD,IAAE;AAAC,YAAIC,KAAE,IAAI,GAAG,EAAE;AAAE,cAAMA,GAAE,KAAKD,EAAC;AAAE,YAAIE,KAAE,MAAMD,GAAE,iBAAiB;AAAE,eAAOC,MAAG,IAAE,EAAE,KAAKA,EAAC,IAAEA;AAAA,MAAC;AAAC,qBAAe,GAAGF,IAAE;AAAC,YAAIC,KAAE,MAAM,KAAK,UAAUD,EAAC;AAAE,YAAG,WAASC,IAAE;AAAC,cAAID,KAAE,IAAI,KAAK,CAACC,EAAC,CAAC;AAAE,iBAAO,IAAI,gBAAgBD,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,YAAM,KAAG,OAAO,OAAO,CAAC,GAAE,IAAG,EAAC,gBAAe,KAAI,MAAK,CAAC,GAAG,EAAC,CAAC;AAAE,qBAAe,GAAGA,IAAE;AAAC,YAAIC,KAAE,IAAI,GAAG,EAAE;AAAE,cAAMA,GAAE,KAAKD,EAAC;AAAE,YAAIE,KAAE,MAAMD,GAAE,MAAM;AAAE,YAAGC,MAAGA,GAAE,KAAK,QAAOA,GAAE,KAAK,GAAG;AAAA,MAAC;AAAC,YAAM,KAAG,OAAO,OAAO,EAAC,GAAE,EAAC,kBAAiB,OAAG,QAAO,GAAE,QAAO,GAAE,KAAI,GAAE,KAAI,EAAC,GAAE,GAAE,EAAC,kBAAiB,OAAG,QAAO,IAAG,QAAO,GAAE,KAAI,GAAE,KAAI,EAAC,GAAE,GAAE,EAAC,kBAAiB,OAAG,QAAO,GAAE,QAAO,GAAE,KAAI,KAAI,KAAI,MAAI,KAAK,KAAG,IAAG,GAAE,GAAE,EAAC,kBAAiB,OAAG,QAAO,IAAG,QAAO,GAAE,KAAI,KAAI,KAAI,MAAI,KAAK,KAAG,IAAG,GAAE,GAAE,EAAC,kBAAiB,MAAG,QAAO,GAAE,QAAO,IAAG,KAAI,IAAG,KAAI,KAAG,KAAK,KAAG,IAAG,GAAE,GAAE,EAAC,kBAAiB,MAAG,QAAO,GAAE,QAAO,GAAE,KAAI,IAAG,KAAI,KAAG,KAAK,KAAG,IAAG,GAAE,GAAE,EAAC,kBAAiB,MAAG,QAAO,GAAE,QAAO,IAAG,KAAI,KAAI,KAAI,MAAI,KAAK,KAAG,IAAG,GAAE,GAAE,EAAC,kBAAiB,MAAG,QAAO,GAAE,QAAO,GAAE,KAAI,KAAI,KAAI,MAAI,KAAK,KAAG,IAAG,EAAC,CAAC;AAAE,UAAG,EAAE,eAAa,MAAG,EAAE,YAAU,MAAG,YAAU,OAAO,WAAU;AAAC,YAAID,KAAE,UAAU;AAAU,YAAGA,GAAE,SAAS,MAAM,KAAGA,GAAE,SAAS,QAAQ,GAAE;AAAC,cAAIC,KAAED,GAAE,MAAM,gBAAgB;AAAE,cAAGC,IAAE;AAAC,gBAAG,CAAC,EAACD,IAAEE,EAAC,IAAED,IAAEE,KAAE,OAAOH,EAAC,IAAE,MAAG,OAAOE,EAAC;AAAE,cAAE,eAAaC,KAAE,MAAK,EAAE,YAAU;AAAA,UAAE;AAAA,QAAC,WAASH,GAAE,SAAS,SAAS,GAAE;AAAC,cAAG,CAAC,EAACC,EAAC,IAAED,GAAE,MAAM,kBAAkB;AAAE,YAAE,eAAa,EAAE,YAAU,OAAOC,EAAC,IAAE;AAAA,QAAE;AAAC,YAAGD,GAAE,SAAS,SAAS,GAAE;AAAC,cAAG,CAAC,EAACC,EAAC,IAAED,GAAE,MAAM,eAAe;AAAE,YAAE,eAAa,EAAE,YAAU,OAAOC,EAAC,IAAE;AAAA,QAAE,WAASD,GAAE,SAAS,UAAU,GAAE;AAAC,cAAG,CAAC,EAACC,EAAC,IAAED,GAAE,MAAM,gBAAgB;AAAE,YAAE,eAAa,EAAE,YAAU,OAAOC,EAAC,IAAE;AAAA,QAAE;AAAA,MAAC;AAAC,qBAAe,GAAGD,IAAE;AAAC,YAAIC,KAAE,MAAM,GAAGD,EAAC;AAAE,eAAO,OAAO,OAAO,EAAC,QAAO,EAAE,cAAa,KAAI,EAAE,UAAS,GAAE,GAAGC,EAAC,CAAC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,EAAC;AAAA,QAAC,eAAeF,IAAE;AAAC,gBAAM,GAAGA,EAAC,GAAE,EAAE,MAAK,UAAS,IAAI,IAAE,GAAE,MAAI,KAAK,cAAY,KAAK,OAAO,IAAI,GAAE,KAAK,UAAU;AAAA,QAAC;AAAA,QAAC,WAAWA,IAAEC,IAAEC,IAAE;AAAC,cAAG,MAAIF,MAAG,MAAI,KAAK,cAAYE,IAAE;AAAC,gBAAIF,KAAE,IAAI,SAASE,GAAE,UAAQA,IAAEA,GAAE,YAAWA,GAAE,UAAU;AAAE,iBAAK,cAAcF,EAAC;AAAA,UAAC,OAAK;AAAC,gBAAIE,KAAEF,KAAEC;AAAE,gBAAGC,KAAE,KAAK,YAAW;AAAC,kBAAG,EAAC,UAASF,GAAC,IAAE,KAAK,QAAQE,EAAC;AAAE,mBAAK,cAAcF,EAAC;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,QAAQA,IAAE;AAAC,cAAIC;AAAE,UAAAA,KAAE,IAAE,EAAE,YAAYD,EAAC,IAAE,IAAI,WAAWA,EAAC;AAAE,cAAIE,KAAE,IAAI,SAASD,GAAE,QAAOA,GAAE,YAAWA,GAAE,UAAU;AAAE,iBAAOA,GAAE,IAAI,IAAI,WAAW,KAAK,QAAO,KAAK,YAAW,KAAK,UAAU,GAAE,CAAC,GAAE,EAAC,UAASA,IAAE,UAASC,GAAC;AAAA,QAAC;AAAA,QAAC,SAASF,IAAEC,IAAEC,KAAE,OAAG;AAAC,iBAAOD,KAAEA,MAAG,KAAK,aAAaD,EAAC,GAAEE,MAAG,KAAK,WAAWF,IAAEC,EAAC,GAAE,KAAK,OAAO,IAAID,IAAEC,EAAC,GAAE,MAAM,SAASD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,IAAID,IAAEC,IAAEC,KAAE,OAAG;AAAC,UAAAA,MAAG,KAAK,WAAWD,IAAED,GAAE,YAAWA,EAAC;AAAE,cAAIG,KAAE,MAAM,IAAIH,IAAEC,EAAC;AAAE,iBAAO,KAAK,OAAO,IAAIA,IAAEE,GAAE,UAAU,GAAEA;AAAA,QAAC;AAAA,QAAC,MAAM,YAAYH,IAAEC,IAAE;AAAC,eAAK,YAAU,KAAK,OAAO,UAAUD,IAAEC,EAAC,KAAG,MAAM,KAAK,UAAUD,IAAEC,EAAC;AAAA,QAAE;AAAA,QAAC,UAAUD,IAAEC,IAAE;AAAC,iBAAO,KAAK,OAAO,UAAUD,IAAEC,EAAC;AAAA,QAAC;AAAA,MAAC;AAAA,MAAC,MAAM,GAAE;AAAA,QAAC,cAAa;AAAC,YAAE,MAAK,QAAO,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,IAAI,SAAQ;AAAC,iBAAO,KAAK,KAAK;AAAA,QAAM;AAAA,QAAC,IAAID,IAAEC,IAAEC,KAAE,GAAE;AAAC,cAAIC,KAAEH,KAAEC,IAAEG,KAAE,KAAK,KAAK,QAAQ,CAAAH,OAAG,GAAGD,IAAEC,GAAE,QAAOE,EAAC,KAAG,GAAGH,IAAEC,GAAE,KAAIE,EAAC,EAAE;AAAE,cAAGC,GAAE,SAAO,GAAE;AAAC,YAAAJ,KAAE,KAAK,IAAIA,IAAE,GAAGI,GAAE,KAAK,CAAAJ,OAAGA,GAAE,OAAO,CAAC,GAAEG,KAAE,KAAK,IAAIA,IAAE,GAAGC,GAAE,KAAK,CAAAJ,OAAGA,GAAE,IAAI,CAAC,GAAEC,KAAEE,KAAEH;AAAE,gBAAIE,KAAEE,GAAE,MAAM;AAAE,YAAAF,GAAE,SAAOF,IAAEE,GAAE,SAAOD,IAAEC,GAAE,MAAIC,IAAE,KAAK,OAAK,KAAK,KAAK,QAAQ,CAAAH,OAAG,CAACI,GAAE,SAASJ,EAAC,EAAE;AAAA,UAAC,MAAM,MAAK,KAAK,KAAK,EAAC,QAAOA,IAAE,QAAOC,IAAE,KAAIE,GAAC,CAAC;AAAA,QAAC;AAAA,QAAC,UAAUH,IAAEC,IAAE;AAAC,cAAIC,KAAEF,KAAEC;AAAE,iBAAO,KAAK,KAAK,MAAM,CAAAA,OAAGA,GAAE,UAAQD,MAAGE,MAAGD,GAAE,IAAI;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAGD,IAAEC,IAAEC,IAAE;AAAC,eAAOF,MAAGC,MAAGA,MAAGC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,QAAC,YAAYF,IAAEC,IAAE;AAAC,gBAAM,CAAC,GAAE,EAAE,MAAK,cAAa,CAAC,GAAE,KAAK,QAAMD,IAAE,KAAK,UAAQC;AAAA,QAAC;AAAA,QAAC,MAAM,YAAW;AAAC,eAAK,UAAQ,OAAG,MAAM,KAAK,UAAU,KAAK,eAAe;AAAA,QAAC;AAAA,QAAC,MAAM,cAAa;AAAC,eAAK,UAAQ,MAAG,MAAM,KAAK,UAAU,GAAE,KAAK,QAAQ,cAAc;AAAA,QAAC;AAAA,QAAC,MAAM,cAAcD,KAAE,KAAK,iBAAgB;AAAC,cAAG,KAAK,UAAU,QAAO,KAAK,cAAa;AAAG,cAAIC,KAAE,KAAK,QAAQ,WAAUC,KAAE,MAAM,KAAK,UAAUF,IAAEC,EAAC;AAAE,iBAAM,CAAC,CAACC,MAAGA,GAAE,eAAaD;AAAA,QAAC;AAAA,QAAC,MAAM,UAAUD,IAAEC,IAAE;AAAC,cAAG,KAAK,cAAa,OAAKA,KAAE,KAAK,gBAAgBD,IAAEC,EAAC,GAAG,QAAO,KAAK,WAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,gBAAgBD,IAAEC,IAAE;AAAC,iBAAO,WAAS,KAAK,QAAMD,KAAEC,KAAE,KAAK,OAAK,KAAK,IAAI,GAAE,KAAK,OAAKD,EAAC,IAAEC;AAAA,QAAC;AAAA,QAAC,IAAI,kBAAiB;AAAC,cAAG,MAAI,KAAK,OAAO,KAAK,OAAO,QAAO,KAAK,OAAO,KAAK,CAAC,EAAE;AAAA,QAAM;AAAA,QAAC,IAAI,mBAAkB;AAAC,iBAAO,KAAK,aAAW,KAAK,QAAQ;AAAA,QAAU;AAAA,QAAC,IAAI,YAAW;AAAC,iBAAO,WAAS,KAAK,QAAM,KAAK,oBAAkB,KAAK;AAAA,QAAI;AAAA,QAAC,OAAM;AAAC,iBAAO,KAAK,QAAQ,UAAQ,KAAK,YAAY,IAAE,KAAK,UAAU;AAAA,QAAC;AAAA,QAAC,QAAO;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAI,QAAO,cAAc,GAAE;AAAA,QAAC,MAAM,YAAW;AAAC,eAAK,UAAQ;AAAG,cAAID,KAAE,MAAM,EAAE,KAAK,KAAK;AAAE,eAAK,iBAAiBA,EAAC;AAAA,QAAC;AAAA,QAAC,cAAa;AAAC,iBAAO,KAAK,UAAQ,MAAG,KAAK,OAAK,KAAK,MAAM,MAAK,MAAM,YAAY;AAAA,QAAC;AAAA,QAAC,MAAM,WAAWA,IAAEC,IAAE;AAAC,cAAIC,KAAED,KAAED,KAAEC,KAAE,QAAOE,KAAE,KAAK,MAAM,MAAMH,IAAEE,EAAC,GAAEE,KAAE,MAAM,EAAED,EAAC;AAAE,iBAAO,KAAK,IAAIC,IAAEJ,IAAE,IAAE;AAAA,QAAC;AAAA,MAAC,CAAC;AAAE,UAAI,KAAG,OAAO,OAAO,EAAC,WAAU,MAAK,SAAQ,IAAG,OAAM,IAAG,aAAY,GAAE,gBAAe,GAAE,aAAY,GAAE,SAAQ,GAAE,WAAU,GAAE,aAAY,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,uBAAsB,GAAE,uBAAsB,GAAE,cAAae,IAAE,eAAc,GAAE,UAAS,GAAE,YAAW,GAAE,mBAAkB,GAAE,kBAAiB,IAAG,cAAa,IAAG,eAAc,IAAG,SAAQ,IAAG,OAAM,IAAG,gBAAe,IAAG,KAAI,IAAG,sBAAqB,IAAG,WAAU,IAAG,cAAa,IAAG,wBAAuB,IAAG,aAAY,IAAG,WAAU,IAAG,IAAI,eAAc;AAAC,eAAO,EAAE;AAAA,MAAY,GAAE,IAAI,YAAW;AAAC,eAAO,EAAE;AAAA,MAAS,GAAE,UAAS,GAAE,CAAC;AAAE,QAAE,IAAI,OAAM,cAAc,GAAE;AAAA,QAAC,MAAM,YAAW;AAAC,eAAK,UAAQ;AAAG,cAAIf,KAAE,MAAM,EAAE,KAAK,KAAK;AAAE,UAAAA,cAAa,cAAY,KAAK,iBAAiBA,EAAC,IAAEA,cAAa,cAAY,KAAK,YAAYA,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,WAAWA,IAAEC,IAAE;AAAC,cAAIC,KAAED,KAAED,KAAEC,KAAE,IAAE,QAAOE,KAAE,KAAK,QAAQ,eAAa,CAAC;AAAE,WAACH,MAAGE,QAAKC,GAAE,QAAM,SAAS,CAACH,IAAEE,EAAC,EAAE,KAAK,GAAG,CAAC;AAAI,cAAIE,KAAE,MAAM,EAAE,KAAK,OAAM,EAAC,SAAQD,GAAC,CAAC,GAAEE,KAAE,MAAMD,GAAE,YAAY,GAAEE,KAAED,GAAE;AAAW,cAAG,QAAMD,GAAE,OAAO,QAAOE,OAAIL,OAAI,KAAK,OAAKD,KAAEM,KAAG,KAAK,IAAID,IAAEL,IAAE,IAAE;AAAA,QAAC;AAAA,MAAC,CAAC;AAAE,QAAE,UAAU,YAAU,SAASA,IAAE;AAAC,YAAIC,KAAE,KAAK,UAAUD,EAAC,GAAEE,KAAE,KAAK,UAAUF,KAAE,CAAC;AAAE,eAAOC,KAAE,UAAQA,MAAG,KAAGC,KAAE,WAAS,OAAO,KAAG,QAAQ,KAAK,yEAAyE,GAAE,EAAED,EAAC,KAAG,EAAE,EAAE,IAAE,EAAEC,EAAC,KAAG,KAAK,EAAE,8DAA8D;AAAA,MAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,WAAWF,KAAE,GAAE;AAAC,cAAIC,KAAE,CAAC;AAAE,iBAAKD,KAAE,KAAK,KAAK,aAAW,KAAG;AAAC,gBAAIE,KAAE,KAAK,aAAaF,EAAC;AAAE,gBAAGC,GAAE,KAAKC,EAAC,GAAE,MAAIA,GAAE,OAAO;AAAM,YAAAF,MAAGE,GAAE;AAAA,UAAM;AAAC,iBAAOD;AAAA,QAAC;AAAA,QAAC,cAAcD,IAAE;AAAC,UAAAA,GAAE,QAAM,KAAK,WAAWA,GAAE,KAAK;AAAA,QAAC;AAAA,QAAC,QAAQA,IAAEC,IAAE;AAAC,iBAAO,WAASD,GAAE,SAAO,KAAK,cAAcA,EAAC,GAAEA,GAAE,MAAM,MAAM,CAAAA,OAAGA,GAAE,SAAOC,GAAE;AAAA,QAAC;AAAA,QAAC,aAAaD,IAAE;AAAC,cAAIC,KAAE,KAAK,KAAK,UAAUD,EAAC,GAAEE,KAAE,KAAK,KAAK,UAAUF,KAAE,GAAE,CAAC,GAAEG,KAAEH,KAAE;AAAE,iBAAO,MAAIC,OAAIA,KAAE,KAAK,KAAK,UAAUD,KAAE,CAAC,GAAEG,MAAG,IAAG,EAAC,QAAOH,IAAE,QAAOC,IAAE,MAAKC,IAAE,OAAMC,GAAC;AAAA,QAAC;AAAA,QAAC,iBAAiBH,IAAE;AAAC,cAAG,WAASA,GAAE,QAAQ;AAAO,cAAIC,KAAE,KAAK,KAAK,UAAUD,GAAE,KAAK;AAAE,UAAAA,GAAE,UAAQC,MAAG,IAAGD,GAAE,SAAO;AAAA,QAAC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUA,IAAEC,IAAE;AAAC,cAAG,MAAIA,GAAE,QAAM;AAAG,cAAIC,KAAEF,GAAE,UAAU,CAAC;AAAE,cAAGE,KAAE,GAAG,QAAM;AAAG,cAAIC,KAAE,IAAGC,KAAE,CAAC;AAAE,iBAAKD,KAAED,KAAG,CAAAE,GAAE,KAAKJ,GAAE,UAAUG,IAAE,CAAC,CAAC,GAAEA,MAAG;AAAE,iBAAOC,GAAE,SAAS,KAAK,IAAI;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,cAAIJ,KAAE,KAAK,KAAK,UAAU,CAAC,GAAEC,KAAE,KAAK,aAAaD,EAAC;AAAE,iBAAK,WAASC,GAAE,OAAM,CAAAD,MAAGC,GAAE,QAAO,MAAM,KAAK,KAAK,YAAYD,IAAE,EAAE,GAAEC,KAAE,KAAK,aAAaD,EAAC;AAAE,gBAAM,KAAK,KAAK,YAAYC,GAAE,QAAOA,GAAE,MAAM,GAAE,KAAK,iBAAiBA,EAAC,GAAE,KAAK,cAAcA,EAAC,GAAE,KAAK,QAAQ,IAAI,WAAS,MAAM,KAAK,QAAQA,EAAC,GAAE,KAAK,QAAQ,KAAK,WAAS,MAAM,KAAK,SAASA,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,gBAAgBD,IAAEC,IAAEC,IAAE;AAAC,gBAAM,KAAK,KAAK,YAAYD,IAAEC,EAAC;AAAE,cAAIC,KAAE,KAAK,KAAK,SAASF,IAAEC,EAAC;AAAE,eAAK,aAAaF,IAAEG,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,QAAQH,IAAE;AAAC,cAAIC,KAAE,KAAK,QAAQD,IAAE,MAAM;AAAE,cAAG,WAASC,GAAE;AAAO,cAAIC,KAAE,KAAK,QAAQD,IAAE,MAAM;AAAE,cAAG,WAASC,GAAE;AAAO,cAAIC,KAAE,KAAK,QAAQD,IAAE,MAAM;AAAE,qBAASC,MAAG,MAAM,KAAK,gBAAgB,OAAMA,GAAE,SAAO,IAAGA,GAAE,MAAM;AAAA,QAAC;AAAA,QAAC,MAAM,SAASH,IAAE;AAAC,cAAIC,KAAE,KAAK,QAAQD,IAAE,MAAM;AAAE,cAAG,WAASC,GAAE;AAAO,cAAIC,KAAE,KAAK,QAAQF,IAAE,MAAM;AAAE,cAAG,WAASE,GAAE;AAAO,cAAIC,KAAE,KAAK,oBAAoBF,EAAC,GAAEG,KAAE,KAAK,iBAAiBF,IAAEC,EAAC;AAAE,cAAG,WAASC,GAAE;AAAO,cAAG,CAACC,IAAEC,EAAC,IAAEF;AAAE,gBAAM,KAAK,KAAK,YAAYC,IAAEC,EAAC;AAAE,cAAIC,KAAE,IAAE,KAAK,KAAK,UAAUF,EAAC;AAAE,UAAAA,MAAGE,IAAED,MAAGC,IAAE,MAAM,KAAK,gBAAgB,QAAOF,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,oBAAoBN,IAAE;AAAC,eAAK,iBAAiBA,EAAC;AAAE,cAAIC,IAAEC,IAAEC,IAAEC,IAAEC,KAAEL,GAAE,OAAMM,KAAE,KAAK,KAAK,UAAUD,EAAC;AAAE,eAAIA,MAAG,GAAEC,QAAK;AAAC,gBAAGL,KAAE,KAAK,aAAaI,EAAC,GAAE,KAAK,iBAAiBJ,EAAC,GAAEC,KAAED,GAAE,OAAMA,GAAE,WAAS,MAAIE,KAAE,MAAIF,GAAE,UAAQ,IAAE,GAAEG,KAAE,KAAK,KAAK,UAAUF,KAAEC,KAAE,GAAE,CAAC,GAAE,WAASC,IAAG,QAAO,KAAK,KAAK,aAAaF,IAAEC,EAAC;AAAE,YAAAE,MAAGJ,GAAE;AAAA,UAAM;AAAA,QAAC;AAAA,QAAC,SAASD,IAAE;AAAC,cAAIC,KAAE,KAAK,KAAK,SAASD,EAAC;AAAE,iBAAM,CAACC,MAAG,GAAE,KAAGA,EAAC;AAAA,QAAC;AAAA,QAAC,iBAAiBD,IAAEC,IAAE;AAAC,eAAK,iBAAiBD,EAAC;AAAE,cAAIE,KAAEF,GAAE,OAAM,CAACG,IAAEC,EAAC,IAAE,KAAK,SAASF,IAAG,GAAE,CAACG,IAAEC,EAAC,IAAE,KAAK,SAASJ,IAAG,GAAEK,KAAE,MAAIP,GAAE,UAAQ,IAAE,GAAEQ,KAAE,MAAIR,GAAE,WAAS,MAAIA,GAAE,UAAQ,IAAE,GAAES,KAAEH,KAAEH,KAAEC,IAAEM,KAAE,MAAIV,GAAE,UAAQ,IAAE,GAAEW,KAAE,KAAK,KAAK,aAAaT,IAAEQ,EAAC;AAAE,eAAIR,MAAGQ,IAAEC,QAAK;AAAC,gBAAIX,KAAE,KAAK,KAAK,aAAaE,IAAEK,EAAC;AAAE,YAAAL,MAAGK,KAAEC,KAAE,IAAEH;AAAE,gBAAIK,KAAE,KAAK,KAAK,UAAUR,EAAC;AAAE,gBAAGA,MAAG,GAAEF,OAAIC,GAAE,QAAOS,KAAE,KAAG,QAAQ,KAAK,gJAAgJ,GAAE,CAAC,KAAK,KAAK,aAAaR,KAAEI,IAAEH,EAAC,GAAE,KAAK,KAAK,aAAaD,KAAEI,KAAEH,IAAEC,EAAC,CAAC;AAAE,YAAAF,MAAGQ,KAAED;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAI,QAAO,EAAE,GAAE,EAAE,IAAI,QAAO,EAAE,GAAE,EAAE,GAAE,CAAC,QAAO,MAAM,GAAE,CAAC,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,2BAA2B,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,MAAM,GAAE,CAAC,KAAI,OAAO,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,qBAAqB,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,uBAAuB,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,qBAAqB,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,MAAM,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,KAAK,GAAE,CAAC,OAAM,QAAQ,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,WAAW,CAAC,CAAC,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,KAAK,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,2BAA2B,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,6BAA6B,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,MAAK,WAAW,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,MAAM,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,YAAY,CAAC,CAAC,GAAE,EAAE,GAAE,OAAM,CAAC,CAAC,GAAE,cAAc,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,iBAAiB,GAAE,CAAC,GAAE,cAAc,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,cAAc,GAAE,CAAC,GAAE,eAAe,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,QAAQ,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,kBAAkB,GAAE,CAAC,IAAG,mBAAmB,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,cAAc,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,sBAAsB,CAAC,CAAC,GAAE,EAAE,GAAE,CAAC,QAAO,MAAM,GAAE,CAAC,CAAC,KAAI,EAAC,GAAE,uBAAsB,GAAE,qBAAoB,GAAE,cAAa,GAAE,mBAAkB,GAAE,uCAAsC,GAAE,gBAAe,GAAE,sCAAqC,GAAE,gBAAe,CAAC,GAAE,CAAC,KAAI,EAAC,GAAE,QAAO,GAAE,UAAS,GAAE,KAAI,CAAC,CAAC,CAAC;AAAE,UAAI,KAAG,EAAE,GAAE,QAAO,CAAC,CAAC,OAAM,EAAC,GAAE,eAAc,GAAE,UAAS,GAAE,kBAAiB,GAAE,qBAAoB,GAAE,oBAAmB,GAAE,oBAAmB,GAAE,kBAAiB,GAAE,iBAAgB,GAAE,iBAAgB,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,KAAI,GAAE,KAAI,GAAE,MAAK,GAAE,MAAK,GAAE,KAAI,GAAE,KAAI,GAAE,IAAG,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,WAAU,GAAE,WAAU,GAAE,yBAAwB,GAAE,QAAO,GAAE,aAAY,GAAE,WAAU,GAAE,WAAU,KAAI,QAAO,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,WAAU,GAAE,YAAW,GAAE,eAAc,GAAE,iCAAgC,GAAE,SAAQ,GAAE,gBAAe,IAAG,kBAAiB,IAAG,SAAQ,IAAG,yCAAwC,IAAG,0CAAyC,IAAG,2CAA0C,IAAG,uCAAsC,IAAG,oBAAmB,IAAG,oBAAmB,IAAG,oBAAmB,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,IAAG,uBAAsB,KAAI,QAAO,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,sBAAqB,GAAE,eAAc,GAAE,oCAAmC,GAAE,gCAA+B,GAAE,sCAAqC,IAAG,iEAAgE,IAAG,6DAA4D,IAAG,6CAA4C,IAAG,iCAAgC,IAAG,0BAAyB,IAAG,qDAAoD,IAAG,iDAAgD,IAAG,qBAAoB,IAAG,uCAAsC,IAAG,kEAAiE,IAAG,8DAA6D,IAAG,8DAA6D,IAAG,yFAAwF,IAAG,qFAAoF,IAAG,kDAAiD,IAAG,6EAA4E,IAAG,wEAAuE,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,eAAc,GAAE,8BAA6B,GAAE,8BAA6B,GAAE,gCAA+B,GAAE,gCAA+B,GAAE,oBAAmB,GAAE,iCAAgC,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,gBAAe,GAAE,4BAA2B,GAAE,iBAAgB,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,wBAAuB,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,UAAS,GAAE,UAAS,GAAE,2BAA0B,GAAE,wBAAuB,GAAE,sBAAqB,GAAE,YAAW,GAAE,gBAAe,GAAE,WAAU,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,QAAO,GAAE,UAAS,GAAE,eAAc,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,QAAO,GAAE,SAAQ,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,YAAW,GAAE,aAAY,GAAE,YAAW,GAAE,SAAQ,GAAE,QAAO,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,QAAO,GAAE,eAAc,GAAE,gBAAe,GAAE,iBAAgB,GAAE,iBAAgB,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,WAAU,GAAE,SAAQ,GAAE,SAAQ,GAAE,UAAS,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,WAAU,GAAE,yBAAwB,GAAE,2BAA0B,GAAE,0CAAyC,CAAC,CAAC,CAAC;AAAE,YAAM,KAAG,EAAC,GAAE,mCAAkC,GAAE,QAAO,GAAE,aAAY;AAAE,SAAG,IAAI,OAAM,EAAE,GAAE,GAAG,IAAI,OAAM,EAAE;AAAE,YAAM,KAAG,EAAC,GAAE,UAAS,GAAE,OAAM,GAAE,OAAM;AAAE,eAAS,GAAGT,IAAE;AAAC,eAAM,YAAU,OAAOA,MAAG,WAASA,GAAE,SAAOA,GAAE,CAAC,IAAEA;AAAA,MAAC;AAAC,eAAS,GAAGA,IAAE;AAAC,YAAIC,KAAE,MAAM,KAAKD,EAAC,EAAE,MAAM,CAAC;AAAE,eAAOC,GAAE,CAAC,IAAE,OAAKA,KAAEA,GAAE,KAAK,CAAAD,OAAG,OAAO,aAAaA,EAAC,EAAE,IAAG,QAAMC,GAAE,CAAC,KAAG,MAAIA,GAAE,CAAC,KAAGA,GAAE,IAAI,GAAEA,GAAE,KAAK,GAAG;AAAA,MAAC;AAAC,eAAS,GAAGD,IAAE;AAAC,YAAG,YAAU,OAAOA,IAAE;AAAC,cAAG,CAACC,IAAEC,IAAEC,IAAEC,IAAEC,IAAEC,EAAC,IAAEN,GAAE,KAAK,EAAE,MAAM,QAAQ,EAAE,IAAI,MAAM,GAAEO,KAAE,IAAI,KAAKN,IAAEC,KAAE,GAAEC,EAAC;AAAE,iBAAO,OAAO,MAAMC,EAAC,KAAG,OAAO,MAAMC,EAAC,KAAG,OAAO,MAAMC,EAAC,MAAIC,GAAE,SAASH,EAAC,GAAEG,GAAE,WAAWF,EAAC,GAAEE,GAAE,WAAWD,EAAC,IAAG,OAAO,MAAM,CAACC,EAAC,IAAEP,KAAEO;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAGP,IAAE;AAAC,YAAG,YAAU,OAAOA,GAAE,QAAOA;AAAE,YAAIC,KAAE,CAAC;AAAE,YAAG,MAAID,GAAE,CAAC,KAAG,MAAIA,GAAEA,GAAE,SAAO,CAAC,EAAE,UAAQE,KAAE,GAAEA,KAAEF,GAAE,QAAOE,MAAG,EAAE,CAAAD,GAAE,KAAK,GAAGD,GAAEE,KAAE,CAAC,GAAEF,GAAEE,EAAC,CAAC,CAAC;AAAA,YAAO,UAAQA,KAAE,GAAEA,KAAEF,GAAE,QAAOE,MAAG,EAAE,CAAAD,GAAE,KAAK,GAAGD,GAAEE,EAAC,GAAEF,GAAEE,KAAE,CAAC,CAAC,CAAC;AAAE,eAAO,EAAE,OAAO,cAAc,GAAGD,EAAC,CAAC;AAAA,MAAC;AAAC,eAAS,GAAGD,IAAEC,IAAE;AAAC,eAAOD,MAAG,IAAEC;AAAA,MAAC;AAAC,SAAG,IAAI,OAAM,EAAE,GAAE,GAAG,IAAI,OAAM,EAAE,GAAE,GAAG,IAAI,OAAM,EAAE,GAAE,EAAE,GAAE,CAAC,QAAO,MAAM,GAAE,CAAC,CAAC,OAAM,SAASD,IAAE;AAAC,eAAM,YAAU,OAAOA,KAAE,EAAEA,EAAC,IAAEA;AAAA,MAAC,CAAC,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,CAAC,CAAC,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,CAAC,CAAC,GAAE,EAAE,GAAE,OAAM,CAAC,CAAC,GAAE,CAAAA,OAAG,MAAM,KAAKA,EAAC,EAAE,KAAK,GAAG,CAAC,GAAE,CAAC,GAAE,CAAAA,OAAG,MAAM,KAAKA,EAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAAE,YAAM,KAAG,wBAAuB,KAAG;AAAA,MAAqC,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUA,IAAEC,IAAE;AAAC,iBAAO,QAAMD,GAAE,SAASC,KAAE,CAAC,KAAG,eAAaD,GAAE,UAAUC,KAAE,CAAC,KAAGD,GAAE,UAAUC,KAAE,GAAE,GAAG,MAAM,MAAI;AAAA,QAAE;AAAA,QAAC,OAAO,aAAaD,IAAEC,IAAE;AAAC,iBAAOD,GAAE,UAAUC,KAAE,GAAE,GAAG,MAAM,MAAI,KAAG,KAAG,IAAE,+BAA+B,SAAO;AAAA,QAAC;AAAA,QAAC,OAAO,aAAaD,IAAEC,IAAE;AAAC,cAAIC,KAAE,MAAM,aAAaF,IAAEC,EAAC;AAAE,iBAAOC,GAAE,eAAaA,GAAE,WAAS,OAAKA,GAAE,cAAaA,GAAE,gBAAcA,GAAE,aAAWF,GAAE,SAASC,KAAE,EAAE,GAAEC,GAAE,cAAYF,GAAE,SAASC,KAAE,EAAE,GAAE,MAAID,GAAE,SAASC,KAAE,EAAE,KAAGC,GAAE,kBAAgBA,GAAE,aAAW,IAAE,GAAEA,GAAE,cAAY,KAAIA;AAAA,QAAC;AAAA,QAAC,OAAO,oBAAoBF,IAAE;AAAC,iBAAOA,GAAE,KAAK,CAAAA,OAAGA,GAAE,MAAM,UAAU,EAAE,EAAE,KAAK,EAAE;AAAA,QAAC;AAAA,QAAC,eAAeA,IAAE;AAAC,iBAAM,YAAU,OAAOA,KAAEA,KAAE,EAAE,KAAKA,EAAC,EAAE,UAAU;AAAA,QAAC;AAAA,QAAC,MAAMA,KAAE,KAAK,OAAM;AAAC,cAAG,CAAC,KAAK,aAAa,MAAM,QAAOA;AAAE,UAAAA,MAAE,SAASA,IAAE;AAAC,gBAAIC,KAAE,CAAC,GAAEC,KAAE,CAAC;AAAE,qBAAQF,MAAK,GAAG,CAAAC,GAAED,EAAC,IAAE,CAAC,GAAEE,GAAEF,EAAC,IAAE;AAAE,mBAAOA,GAAE,QAAQ,KAAI,CAACA,IAAEG,IAAEC,OAAI;AAAC,kBAAG,QAAMD,IAAE;AAAC,oBAAIA,KAAE,EAAED,GAAEE,EAAC;AAAE,uBAAOH,GAAEG,EAAC,EAAE,KAAKD,EAAC,GAAE,GAAGH,EAAC,IAAIG,EAAC;AAAA,cAAE;AAAC,qBAAM,GAAGH,EAAC,IAAIC,GAAEG,EAAC,EAAE,IAAI,CAAC;AAAA,YAAE,EAAE;AAAA,UAAC,GAAEJ,EAAC;AAAE,cAAIC,KAAE,GAAG,QAAQD,IAAE,OAAM,aAAa;AAAE,gBAAIC,GAAE,UAAQA,GAAE,KAAK,IAAI,GAAG,OAAM,eAAc,QAAOD,EAAC,CAAC;AAAE,cAAIE,IAAEC,KAAE,CAAC;AAAE,mBAAQH,MAAKC,GAAE,UAAQA,MAAKD,GAAE,WAAW,CAAAE,KAAE,GAAGD,GAAE,IAAGE,EAAC,GAAE,GAAGF,IAAEC,EAAC;AAAE,kBAAO,SAASF,IAAE;AAAC,gBAAIC;AAAE,qBAAQC,MAAKF,GAAE,CAAAC,KAAED,GAAEE,EAAC,IAAE,EAAEF,GAAEE,EAAC,CAAC,GAAE,WAASD,MAAG,OAAOD,GAAEE,EAAC;AAAE,mBAAO,EAAEF,EAAC;AAAA,UAAC,GAAEG,EAAC;AAAA,QAAC;AAAA,QAAC,eAAeH,IAAEC,IAAE;AAAC,cAAG,KAAK,aAAa,MAAM,UAAO,CAACC,IAAEC,EAAC,KAAI,OAAO,QAAQF,EAAC,EAAE,SAAOC,IAAE;AAAA,YAAC,KAAI;AAAO,mBAAK,qBAAqBF,IAAE,QAAOG,EAAC;AAAE;AAAA,YAAM,KAAI;AAAO,mBAAK,qBAAqBH,IAAE,QAAOG,EAAC;AAAE;AAAA,YAAM,KAAI;AAAQ;AAAA,YAAM;AAAQ,mBAAK,qBAAqBH,IAAEE,IAAEC,EAAC;AAAA,UAAC;AAAA,cAAM,CAAAH,GAAE,MAAIC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,KAAK,GAAE,EAAE,IAAG,gBAAe,IAAE,GAAE,EAAE,IAAI,OAAM,EAAE;AAAA,MAAE,MAAM,GAAE;AAAA,QAAC,OAAO,QAAQD,IAAE;AAAC,iBAAO,GAAGA,IAAE,qDAAqD,EAAE,IAAI,GAAG,WAAW;AAAA,QAAC;AAAA,QAAC,OAAO,YAAYA,IAAE;AAAC,cAAIC,KAAED,GAAE,CAAC,GAAEE,KAAEF,GAAE,CAAC,GAAEG,KAAEH,GAAE,CAAC,EAAE,MAAM,GAAE,EAAE;AAAE,iBAAOG,KAAE,GAAGA,EAAC,GAAE,IAAI,GAAGF,IAAEC,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,YAAYH,IAAEC,IAAEC,IAAE;AAAC,eAAK,KAAGF,IAAE,KAAK,OAAKC,IAAE,KAAK,QAAMC;AAAA,QAAC;AAAA,QAAC,YAAW;AAAC,iBAAO,KAAK;AAAA,QAAK;AAAA,MAAC;AAAC,YAAM,KAAG;AAAA,MAAa,MAAM,GAAE;AAAA,QAAC,OAAO,QAAQF,IAAEC,IAAEC,IAAE;AAAC,cAAG,WAASD,MAAG,WAASC,IAAE;AAAC,YAAAD,KAAEA,MAAG,IAAGC,KAAEA,MAAG;AAAG,gBAAIC,KAAE,IAAI,OAAO,KAAKF,EAAC,MAAMC,EAAC,2FAA0F,IAAI;AAAA,UAAC,MAAM,CAAAC,KAAE;AAAqG,iBAAO,GAAGH,IAAEG,EAAC,EAAE,IAAI,GAAG,WAAW;AAAA,QAAC;AAAA,QAAC,OAAO,YAAYH,IAAE;AAAC,cAAIC,KAAED,GAAE,CAAC,GAAEE,KAAEF,GAAE,CAAC,GAAEG,KAAEH,GAAE,CAAC,GAAEI,KAAEJ,GAAE,CAAC;AAAE,iBAAO,IAAI,GAAGC,IAAEC,IAAEC,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,YAAYJ,IAAEC,IAAEC,IAAEC,IAAE;AAAC,eAAK,KAAGH,IAAE,KAAK,OAAKC,IAAE,KAAK,aAAWC,IAAE,KAAK,WAASC,IAAE,KAAK,QAAM,GAAG,QAAQD,EAAC,GAAE,KAAK,WAAS,GAAG,QAAQC,EAAC,GAAE,KAAK,QAAM,MAAI,KAAK,SAAS,SAAO,GAAGA,EAAC,IAAE,QAAO,KAAK,aAAW,CAAC,GAAG,KAAK,OAAM,GAAG,KAAK,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAI,cAAa;AAAC,iBAAO,WAAS,KAAK,SAAO,MAAI,KAAK,MAAM,UAAQ,MAAI,KAAK,SAAS;AAAA,QAAM;AAAA,QAAC,IAAI,kBAAiB;AAAC,iBAAO,MAAI,KAAK,SAAS,UAAQ,KAAK,SAAS,CAAC,EAAE;AAAA,QAAM;AAAA,QAAC,IAAI,SAAQ;AAAC,cAAG,EAAC,IAAGH,IAAE,MAAKC,GAAC,IAAE;AAAK,iBAAM,UAAQD,OAAI,UAAQC,MAAG,UAAQA,MAAG,UAAQA;AAAA,QAAE;AAAA,QAAC,IAAI,aAAY;AAAC,iBAAM,UAAQ,KAAK,MAAI,SAAO,KAAK;AAAA,QAAI;AAAA,QAAC,YAAW;AAAC,cAAG,MAAI,KAAK,WAAW,UAAQ,WAAS,KAAK,MAAM;AAAO,cAAG,KAAK,YAAY,QAAO,KAAK;AAAM,cAAG,KAAK,gBAAgB,QAAO,KAAK,SAAS,CAAC,EAAE,UAAU;AAAE,cAAG,KAAK,OAAO,QAAO,GAAG,KAAK,SAAS,IAAI,EAAE,CAAC;AAAE,cAAG,KAAK,cAAY,MAAI,KAAK,SAAS,UAAQ,MAAI,KAAK,MAAM,OAAO,QAAO,KAAK,SAAS,CAAC,EAAE,UAAU;AAAE,cAAID,KAAE,CAAC;AAAE,mBAAQC,MAAK,KAAK,WAAW,IAAGA,IAAED,EAAC;AAAE,iBAAO,WAAS,KAAK,UAAQA,GAAE,QAAM,KAAK,QAAO,EAAEA,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAGA,IAAEC,IAAE;AAAC,YAAIC,KAAEF,GAAE,UAAU;AAAE,mBAASE,OAAID,GAAED,GAAE,IAAI,IAAEE;AAAA,MAAE;AAAC,UAAI,KAAG,CAAAF,OAAGA,GAAE,UAAU,GAAE,KAAG,CAAAA,OAAG,MAAIA,GAAE,SAAOA,GAAE,CAAC,IAAEA,IAAE,KAAG,CAACA,IAAEC,OAAIA,GAAED,EAAC,IAAEC,GAAED,EAAC,IAAEC,GAAED,EAAC,IAAE,CAAC;AAAE,eAAS,GAAGA,IAAEC,IAAE;AAAC,YAAIC,IAAEC,KAAE,CAAC;AAAE,YAAG,CAACH,GAAE,QAAOG;AAAE,eAAK,UAAQD,KAAED,GAAE,KAAKD,EAAC,KAAI,CAAAG,GAAE,KAAKD,EAAC;AAAE,eAAOC;AAAA,MAAC;AAAC,eAAS,GAAGH,IAAE;AAAC,aAAG,SAASA,IAAE;AAAC,iBAAO,QAAMA,MAAG,WAASA,MAAG,gBAAcA,MAAG,OAAKA,MAAG,OAAKA,GAAE,KAAK;AAAA,QAAC,GAAEA,EAAC,EAAE;AAAO,YAAIC,KAAE,OAAOD,EAAC;AAAE,YAAG,CAAC,OAAO,MAAMC,EAAC,EAAE,QAAOA;AAAE,YAAIC,KAAEF,GAAE,YAAY;AAAE,eAAM,WAASE,MAAG,YAAUA,MAAGF,GAAE,KAAK;AAAA,MAAC;AAAC,YAAM,KAAG,CAAC,UAAS,WAAU,WAAU,WAAU,iBAAiB,GAAE,KAAG,IAAI,OAAO,WAAW,GAAG,KAAK,GAAG,CAAC,KAAI,GAAG;AAAE,UAAI,KAAG,OAAO,OAAO,EAAC,WAAU,MAAK,SAAQ,IAAG,OAAM,IAAG,aAAY,GAAE,gBAAe,GAAE,aAAY,GAAE,SAAQ,GAAE,WAAU,GAAE,aAAY,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,uBAAsB,GAAE,uBAAsB,GAAE,cAAae,IAAE,eAAc,GAAE,UAAS,GAAE,YAAW,GAAE,mBAAkB,GAAE,kBAAiB,IAAG,cAAa,IAAG,eAAc,IAAG,SAAQ,IAAG,OAAM,IAAG,gBAAe,IAAG,KAAI,IAAG,sBAAqB,IAAG,WAAU,IAAG,cAAa,IAAG,wBAAuB,IAAG,aAAY,IAAG,WAAU,IAAG,IAAI,eAAc;AAAC,eAAO,EAAE;AAAA,MAAY,GAAE,IAAI,YAAW;AAAC,eAAO,EAAE;AAAA,MAAS,GAAE,UAAS,GAAE,CAAC;AAAE,YAAM,KAAG,CAAC,OAAM,OAAM,QAAO,MAAM,GAAE,KAAG,MAAI;AAAA,MAAC;AAAE,qBAAe,GAAGf,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAED,GAAEF,EAAC;AAAE,eAAOG,GAAE,UAAQ,MAAGA,GAAE,QAAM,MAAG,EAAE,IAAIH,EAAC,EAAE,MAAMC,IAAEE,EAAC;AAAA,MAAC;AAAC,UAAI,KAAG,EAAE,OAAM,CAAAH,OAAGA,GAAE,SAAS;AAAE,QAAE,IAAI,MAAK,cAAc,GAAE;AAAA,QAAC,MAAM,YAAW;AAAC,eAAK,UAAQ,OAAG,KAAK,KAAG,MAAM;AAAG,cAAIA,KAAE,MAAM,KAAK,GAAG,SAAS,KAAK,KAAK;AAAE,eAAK,YAAYA,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,cAAa;AAAC,eAAK,UAAQ,MAAG,KAAK,KAAG,MAAM,IAAG,MAAM,KAAK,KAAK,GAAE,MAAM,KAAK,UAAU,GAAE,KAAK,QAAQ,cAAc;AAAA,QAAC;AAAA,QAAC,MAAM,OAAM;AAAC,qBAAS,KAAK,OAAK,KAAK,KAAG,MAAM,KAAK,GAAG,KAAK,KAAK,OAAM,GAAG,GAAE,KAAK,QAAM,MAAM,KAAK,GAAG,KAAK,KAAK,KAAK,GAAG;AAAA,QAAK;AAAA,QAAC,MAAM,WAAWA,IAAEC,IAAE;AAAC,qBAAS,KAAK,MAAI,MAAM,KAAK,KAAK,GAAED,KAAEC,KAAE,KAAK,SAAOA,KAAE,KAAK,OAAKD;AAAG,cAAIE,KAAE,KAAK,SAASF,IAAEC,IAAE,IAAE;AAAE,iBAAO,MAAM,KAAK,GAAG,KAAKC,GAAE,UAAS,GAAED,IAAED,EAAC,GAAEE;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,cAAG,KAAK,IAAG;AAAC,gBAAIF,KAAE,KAAK;AAAG,iBAAK,KAAG,QAAO,MAAMA,GAAE,MAAM;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAE,QAAE,IAAI,UAAS,cAAc,GAAE;AAAA,QAAC,eAAeA,IAAE;AAAC,gBAAM,GAAGA,EAAC,GAAE,KAAK,QAAM,KAAK,MAAM,QAAQ,4BAA2B,EAAE,GAAE,KAAK,OAAK,KAAK,MAAM,SAAO,IAAE,GAAE,KAAK,MAAM,SAAS,IAAI,IAAE,KAAK,QAAM,IAAE,KAAK,MAAM,SAAS,GAAG,MAAI,KAAK,QAAM;AAAA,QAAE;AAAA,QAAC,MAAM,WAAWA,IAAEC,IAAE;AAAC,cAAIC,IAAEC,IAAEC,KAAE,KAAK;AAAM,qBAASJ,MAAGA,KAAE,GAAEE,KAAE,GAAEC,KAAE,MAAID,KAAE,IAAE,KAAK,MAAMF,KAAE,CAAC,GAAEG,KAAEH,KAAEE,KAAE,IAAE,IAAG,WAASD,OAAIA,KAAE,KAAK;AAAM,cAAIK,KAAEN,KAAEC,IAAEO,KAAEN,KAAE,IAAE,KAAK,KAAKI,KAAE,CAAC;AAAE,UAAAF,KAAEA,GAAE,MAAMF,IAAEM,EAAC;AAAE,cAAIC,KAAE,KAAK,IAAIR,IAAE,KAAK,OAAKD,EAAC;AAAE,cAAG,GAAE;AAAC,gBAAIC,KAAE,EAAE,KAAKG,IAAE,QAAQ,EAAE,MAAMD,IAAEA,KAAEM,EAAC;AAAE,mBAAO,KAAK,IAAIR,IAAED,IAAE,IAAE;AAAA,UAAC;AAAC;AAAC,gBAAIC,KAAE,KAAK,SAASD,IAAES,IAAE,IAAE,GAAEP,KAAE,KAAKE,EAAC,GAAEC,KAAEJ,GAAE,QAAQ;AAAE,qBAAQD,KAAE,GAAEA,KAAES,IAAET,KAAI,CAAAK,GAAEL,EAAC,IAAEE,GAAE,WAAWC,KAAEH,EAAC;AAAE,mBAAOC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUD,IAAEC,IAAE;AAAC,iBAAO,UAAQA,MAAG,UAAQA;AAAA,QAAC;AAAA,QAAC,cAAcD,IAAE;AAAC,cAAG,EAAC,MAAKC,IAAE,KAAIC,IAAE,MAAKC,IAAE,KAAIC,GAAC,IAAEJ;AAAE,UAAAE,GAAE,WAASD,GAAE,KAAK,IAAI,CAAC,GAAEE,GAAE,WAASF,GAAE,KAAK,IAAI,CAAC,GAAEG,GAAE,WAASH,GAAE,KAAK,IAAIa,EAAC,GAAEb,GAAE,gBAAgB;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,cAAG,EAAC,MAAKD,IAAE,KAAIC,IAAE,MAAKC,IAAE,KAAIC,GAAC,IAAE,KAAK;AAAQ,cAAGH,GAAE,WAASC,GAAE,WAASC,GAAE,WAASC,GAAE,SAAQ;AAAC,gBAAIH,KAAE,KAAK,IAAI,EAAE,KAAK,OAAO,GAAE,KAAK,QAAQ,SAAS;AAAE,kBAAM,KAAK,KAAK,YAAY,GAAEA,EAAC,GAAE,KAAK,aAAa,QAAO,KAAK,IAAI,GAAE,KAAK,QAAQ,KAAK,YAAY,GAAE,MAAM,KAAK,QAAQ,KAAK,eAAe,GAAE,KAAK,uBAAuB,KAAK,GAAE,KAAK,uBAAuB,MAAM,GAAE,KAAK,uBAAuB,KAAK;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,uBAAuBA,IAAE;AAAC,cAAG,KAAK,QAAQ,KAAKA,EAAC,GAAE;AAAC,gBAAIC,KAAE,KAAK,QAAQ,KAAKD,EAAC;AAAE,iBAAK,cAAcA,IAAEC,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAI,QAAO,EAAE;AAAE,UAAI,KAAG,EAAE,MAAM;AAAE,YAAM,KAAG,qBAAoB,KAAG,QAAO,KAAG,QAAO,KAAG,QAAO,KAAG,QAAO,KAAG,CAAC,IAAG,IAAG,IAAG,IAAG,MAAM;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,eAAeD,IAAE;AAAC,gBAAM,GAAGA,EAAC,GAAE,EAAE,MAAK,eAAc,CAAAA,OAAG,KAAK,OAAO,KAAKA,EAAC,EAAE,GAAE,EAAE,MAAK,cAAa,CAAC,CAAC,GAAE,EAAE,MAAK,iBAAgB,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,OAAO,UAAUA,IAAEC,IAAE;AAAC,iBAAO,UAAQA,MAAG,eAAaD,GAAE,UAAU,CAAC,KAAG,cAAYA,GAAE,UAAU,CAAC;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,cAAG,EAAC,MAAKA,GAAC,IAAE;AAAK,gBAAM,KAAK,qBAAqB,iBAAc,QAAOA,GAAE,UAAU,GAAE,MAAM,KAAK,aAAa,KAAK,UAAU,GAAE,KAAK,SAAS,GAAE,KAAK,gBAAgB,GAAE,MAAM,KAAK,SAAS,EAAE,MAAM,KAAK,UAAU,GAAE,MAAM,KAAK,QAAQ,EAAE,MAAM,KAAK,UAAU,GAAE,MAAM,KAAK,QAAQ,EAAE,MAAM,KAAK,UAAU;AAAA,QAAC;AAAA,QAAC,MAAM,qBAAqBA,IAAEC,IAAE;AAAC,cAAG,EAAC,MAAKC,GAAC,IAAE;AAAK,iBAAKF,KAAEC,MAAG;AAAC,gBAAIA,KAAEC,GAAE,UAAUF,EAAC,GAAEG,KAAED,GAAE,UAAUF,KAAE,CAAC,GAAEI,KAAEF,GAAE,UAAUF,KAAE,GAAE,CAAC,EAAE,YAAY,GAAEK,KAAEJ,KAAE,IAAE,IAAE,GAAEK,KAAE,EAAC,MAAKF,IAAE,QAAOJ,IAAE,QAAOK,IAAE,OAAML,KAAE,IAAE,GAAE,MAAKC,IAAE,QAAOE,GAAC;AAAE,eAAG,SAASC,EAAC,IAAE,KAAK,WAAW,KAAKE,EAAC,IAAE,KAAK,cAAc,KAAKA,EAAC,GAAEN,MAAGK;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,kBAAiB;AAAC,cAAIL,KAAE,KAAK,WAAW,QAAQ,CAAAA,OAAGA,GAAE,SAAO,GAAG;AAAE,mBAAQC,MAAKD,IAAE;AAAC,gBAAG,CAACA,IAAEE,EAAC,IAAE,KAAK,KAAK,UAAUD,GAAE,OAAMA,GAAE,IAAI,EAAE,MAAM,IAAI;AAAE,iBAAK,mBAAmBD,IAAEE,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,mBAAmBF,IAAEC,IAAE;AAAC,cAAIC,KAAE,KAAK,QAAQ;AAAK,UAAAA,MAAGA,GAAE,IAAI,IAAIF,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,WAAU;AAAC,cAAID,KAAE,KAAK,WAAW,MAAM,CAAAA,OAAGA,GAAE,SAAO,GAAG;AAAE,UAAAA,MAAG,UAAK,KAAK,QAAQ,KAAK,WAAS,KAAK,aAAa,IAAGA,GAAE,KAAK;AAAA,QAAC;AAAA,QAAC,MAAM,WAAU;AAAC,cAAIA,KAAE,KAAK,WAAW,MAAM,CAAAA,OAAG,WAASA,GAAE,KAAK;AAAE,UAAAA,MAAG,KAAK,cAAc,QAAOA,GAAE,KAAK;AAAA,QAAC;AAAA,QAAC,MAAM,UAAS;AAAC,cAAIA,KAAE,KAAK,WAAW,QAAQ,CAAAA,OAAGA,GAAE,SAAO,GAAG;AAAE,mBAAQC,MAAKD,IAAE;AAAC,YAAAC,GAAE,MAAM,UAAU,GAAE,GAAG,MAAM,MAAI,MAAI,KAAK,cAAc,OAAMA,GAAE,KAAK;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,MAAM,UAAS;AAAC,cAAID,KAAE,KAAK,WAAW,MAAM,CAAAA,OAAGA,GAAE,SAAO,GAAG;AAAE,cAAG,CAACA,GAAE;AAAO,cAAG,EAAC,OAAMC,GAAC,IAAED,IAAEE,KAAED,GAAE,cAAc,GAAE,EAAE,GAAEE,KAAE;AAAE,iBAAKA,KAAE,MAAI,MAAID,GAAEC,EAAC,IAAG,CAAAA;AAAI,cAAIE,KAAEF,KAAE,GAAEG,KAAEL,GAAE,UAAU,GAAEE,EAAC;AAAE,cAAG,KAAK,mBAAmB,eAAcG,EAAC,GAAE,GAAE;AAAC,gBAAIN,KAAE,MAAM,IAAGE,KAAED,GAAE,cAAcI,EAAC;AAAE,YAAAH,KAAEF,GAAE,YAAYE,EAAC,GAAE,KAAK,cAAc,OAAMA,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,KAAK,GAAE,EAAE,IAAI,OAAM,EAAE,GAAE,EAAE,GAAE,WAAU,CAAC,CAAC,GAAE,cAAc,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,MAAK,wBAAwB,GAAE,CAAC,MAAK,mBAAmB,GAAE,CAAC,MAAK,oBAAoB,CAAC,CAAC,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,IAAG,oBAAoB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,OAAM,QAAQ,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,2BAA2B,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,kBAAkB,CAAC,CAAC;AAAE,UAAI,KAAG,CAAC,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,wBAAwB,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,qBAAqB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,qBAAqB,GAAE,CAAC,KAAI,wBAAwB,GAAE,CAAC,KAAI,qBAAqB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,oBAAoB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,+BAA+B,GAAE,CAAC,OAAM,+BAA+B,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,QAAQ,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,QAAQ,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,MAAM,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,QAAQ,CAAC;AAAE,QAAE,GAAE,QAAO,EAAE,GAAE,EAAE,GAAE,QAAO,EAAE,GAAE,EAAE,GAAE,OAAM,CAAC,CAAC,IAAG,EAAC,GAAE,kBAAiB,GAAE,aAAY,CAAC,GAAE,CAAC,IAAG,EAAC,GAAE,cAAa,GAAE,SAAQ,GAAE,iBAAgB,CAAC,CAAC,CAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUF,IAAEC,IAAE;AAAC,iBAAO,QAAMD,GAAE,SAASC,KAAE,CAAC,KAAG,eAAaD,GAAE,UAAUC,KAAE,CAAC,KAAG,MAAID,GAAE,SAASC,KAAE,CAAC;AAAA,QAAC;AAAA,QAAC,QAAO;AAAC,iBAAO,KAAK,UAAU,GAAE,KAAK,UAAU,GAAE,KAAK;AAAA,QAAM;AAAA,QAAC,YAAW;AAAC,eAAK,MAAI,oBAAI,IAAI,CAAC,CAAC,GAAE,KAAK,MAAM,UAAU,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,SAAS,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,UAAU,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,UAAU,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,SAAS,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAG,gBAAe,CAAC,GAAE,EAAE,IAAI,QAAO,EAAE,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,GAAE,iBAAiB,CAAC,CAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,QAAO;AAAC,iBAAO,KAAK,UAAU,GAAE,KAAK,UAAU,GAAE,KAAK;AAAA,QAAM;AAAA,QAAC,YAAW;AAAC,eAAK,MAAI,IAAI,IAAI,CAAC,CAAC,GAAE,KAAK,MAAM,UAAU,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,UAAU,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,SAAS,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,SAAS,CAAC,CAAC,GAAE,CAAC,IAAG,KAAK,MAAM,SAAS,EAAE,CAAC,GAAE,CAAC,IAAG,KAAK,MAAM,SAAS,EAAE,CAAC,GAAE,CAAC,IAAG,KAAK,MAAM,SAAS,EAAE,CAAC,GAAE,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAI,QAAO,EAAE,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,QAAQ,GAAE,CAAC,IAAG,WAAW,CAAC,CAAC,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,GAAE,EAAC,GAAE,aAAY,GAAE,OAAM,GAAE,WAAU,GAAE,wBAAuB,GAAE,kBAAiB,SAAQ,UAAS,CAAC,GAAE,CAAC,IAAG,EAAC,GAAE,mBAAkB,SAAQ,UAAS,CAAC,GAAE,CAAC,IAAG,EAAC,GAAE,YAAW,SAAQ,UAAS,CAAC,GAAE,CAAC,IAAG,EAAC,GAAE,iBAAgB,GAAE,mBAAkB,SAAQ,UAAS,CAAC,CAAC,CAAC;AAAE,YAAM,KAAG;AAAA,MAAW,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUD,IAAEC,IAAE;AAAC,iBAAO,QAAMD,GAAE,SAASC,KAAE,CAAC,KAAG,eAAaD,GAAE,UAAUC,KAAE,CAAC;AAAA,QAAC;AAAA,QAAC,OAAO,aAAaD,IAAEC,IAAE;AAAC,cAAIC,KAAE,MAAM,aAAaF,IAAEC,EAAC;AAAE,iBAAOC,GAAE,cAAYF,GAAE,SAASC,KAAE,EAAE,GAAEC,GAAE,aAAWF,GAAE,SAASC,KAAE,EAAE,GAAEC,GAAE,eAAaA,GAAE,aAAW,GAAEA;AAAA,QAAC;AAAA,QAAC,OAAO,oBAAoBF,IAAE;AAAC,kBAAO,SAASA,IAAE;AAAC,gBAAIC,MAAE,SAASD,IAAE;AAAC,kBAAIC,KAAED,GAAE,CAAC,EAAE,aAAYE,KAAE;AAAE,uBAAQD,MAAKD,GAAE,CAAAE,MAAGD,GAAE;AAAO,kBAAIE,KAAE,IAAIF,GAAEC,EAAC,GAAEE,KAAE;AAAE,uBAAQH,MAAKD,GAAE,CAAAG,GAAE,IAAIF,IAAEG,EAAC,GAAEA,MAAGH,GAAE;AAAO,qBAAOE;AAAA,YAAC,GAAEH,GAAE,KAAK,CAAAA,OAAGA,GAAE,MAAM,QAAQ,EAAE,CAAC;AAAE,mBAAO,IAAI,EAAEC,EAAC;AAAA,UAAC,GAAED,EAAC;AAAA,QAAC;AAAA,QAAC,QAAO;AAAC,iBAAO,KAAK,MAAI,oBAAI,OAAI,KAAK,YAAY,GAAE,KAAK,UAAU,GAAE,KAAK,UAAU,GAAE,KAAK;AAAA,QAAM;AAAA,QAAC,cAAa;AAAC,cAAG,EAAC,KAAIA,GAAC,IAAE;AAAK,eAAK,MAAM,aAAW,MAAI,EAAE,yBAAyB;AAAE,mBAAO,CAACC,IAAEC,EAAC,KAAI,OAAO,QAAQ,EAAE,GAAE;AAAC,YAAAD,KAAE,SAASA,IAAE,EAAE;AAAE,gBAAIE,KAAED,GAAE,KAAK,OAAMD,EAAC;AAAE,YAAAE,OAAI,MAAIH,GAAE,IAAIC,IAAEE,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,YAAW;AAAC,cAAIH,IAAEC,IAAEC,IAAEC,IAAEC,IAAE,EAAC,KAAIC,GAAC,IAAE,MAAKC,KAAE,KAAK,MAAM,UAAU,GAAG,GAAEC,KAAE,KAAIC,KAAE,KAAK,MAAM;AAAW,iBAAKF,QAAK;AAAC,gBAAGN,KAAE,KAAK,MAAM,UAAUO,IAAE,CAAC,GAAEN,KAAE,KAAK,MAAM,UAAUM,KAAE,CAAC,GAAEL,KAAE,KAAK,MAAM,UAAUK,KAAE,CAAC,GAAEJ,KAAE,KAAK,MAAM,UAAUF,IAAE,CAAC,GAAEA,KAAEC,KAAEM,GAAE,QAAO,KAAK,QAAQ,KAAK,oGAAoG;AAAE,YAAAJ,KAAE,KAAK,SAASD,IAAEF,IAAEC,EAAC,GAAE,WAASE,MAAGA,OAAI,MAAIC,GAAE,IAAIL,IAAEI,EAAC,GAAEG,MAAG;AAAA,UAAE;AAAA,QAAC;AAAA,QAAC,SAASP,IAAEC,IAAEC,IAAE;AAAC,kBAAOF,IAAE;AAAA,YAAC,KAAI;AAAO,qBAAO,KAAK,UAAUC,EAAC;AAAA,YAAE,KAAI;AAAO,qBAAO,KAAK,UAAUA,EAAC;AAAA,YAAE,KAAI;AAAO,qBAAO,KAAK,UAAUA,IAAEC,EAAC;AAAA,YAAE,KAAI;AAAO,qBAAO,KAAK,SAASD,EAAC;AAAA,UAAC;AAAC,cAAG,EAAEA,KAAEC,KAAE,KAAK,MAAM,YAAY,QAAO,KAAK,MAAM,cAAcD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAUF,IAAE;AAAC,cAAIC,KAAE,KAAK,MAAM,UAAUD,KAAE,CAAC,IAAE;AAAE,iBAAO,EAAE,KAAK,MAAM,UAAUA,KAAE,IAAGC,EAAC,CAAC;AAAA,QAAC;AAAA,QAAC,UAAUD,IAAEC,IAAE;AAAC,iBAAO,EAAE,KAAK,MAAM,UAAUD,KAAE,GAAEC,KAAE,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,SAASD,IAAE;AAAC,iBAAO,EAAE,KAAK,MAAM,UAAUA,KAAE,GAAE,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,UAAUA,IAAE;AAAC,cAAG,EAAC,OAAMC,GAAC,IAAE,MAAKC,KAAED,GAAE,UAAUD,KAAE,CAAC,GAAEG,KAAEF,GAAE,UAAUD,KAAE,EAAE,GAAEI,KAAEJ,KAAE,IAAGK,KAAE,CAAC;AAAE,mBAAQC,KAAE,GAAEA,KAAEJ,IAAEI,MAAI;AAAC,gBAAIJ,KAAED,GAAE,UAAUG,KAAE,GAAE,CAAC,GAAEE,KAAEL,GAAE,UAAUG,KAAE,GAAE,CAAC,GAAEG,KAAEN,GAAE,UAAUG,KAAE,CAAC,GAAEI,KAAEP,GAAE,UAAUG,KAAE,CAAC,IAAEJ,IAAES,KAAE,EAAER,GAAE,iBAAiBO,IAAED,EAAC,CAAC;AAAE,YAAAF,GAAE,KAAK,EAAC,MAAKH,IAAE,SAAQI,IAAE,MAAKG,GAAC,CAAC,GAAEL,MAAGD;AAAA,UAAC;AAAC,iBAAO,MAAID,KAAEG,GAAE,CAAC,EAAE,OAAKA;AAAA,QAAC;AAAA,QAAC,eAAeL,IAAEC,IAAE;AAAC,iBAAM,YAAU,OAAOD,KAAEC,GAAED,EAAC,KAAGC,GAAED,GAAE,YAAY,CAAC,KAAGA,KAAEC,GAAED,EAAC,KAAGA;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,KAAK,GAAE,EAAE,IAAG,gBAAe,IAAE,GAAE,EAAE,IAAG,gBAAe,EAAE;AAAE,YAAM,KAAG,EAAC,GAAE,IAAG,GAAE,SAASA,IAAEC,IAAE;AAAC,eAAM,CAACD,GAAE,SAASC,EAAC,GAAED,GAAE,SAASC,KAAE,CAAC,KAAG,GAAED,GAAE,SAASC,KAAE,CAAC,IAAE,EAAE,EAAE,KAAK,CAAAD,OAAGA,GAAE,SAAS,EAAE,EAAE,EAAE,KAAK,GAAG;AAAA,MAAC,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,SAASA,IAAEC,IAAE;AAAC,cAAMC,KAAEF,GAAE,UAAUC,EAAC,GAAEE,KAAEH,GAAE,UAAUC,KAAE,CAAC,IAAE,GAAEG,KAAEJ,GAAE,UAAUC,KAAE,CAAC,GAAEI,KAAEL,GAAE,UAAUC,KAAE,CAAC,GAAEK,KAAEN,GAAE,UAAUC,KAAE,CAAC,GAAEM,KAAEP,GAAE,UAAUC,KAAE,EAAE;AAAE,eAAO,IAAI,KAAK,KAAK,IAAIC,IAAEC,IAAEC,IAAEC,IAAEC,IAAEC,EAAC,CAAC;AAAA,MAAC,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,CAACP,IAAEC,OAAID,GAAE,UAAUC,EAAC,GAAE,IAAG,GAAE;AAAE,eAAS,GAAGD,IAAEC,IAAE;AAAC,eAAO,EAAED,GAAE,UAAUC,IAAE,CAAC,CAAC;AAAA,MAAC;AAAC,QAAE,IAAI,OAAM,EAAE,GAAE,EAAE,GAAE,OAAM,CAAC,CAAC,GAAE,gBAAgB,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,IAAG,cAAc,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,wBAAwB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,sBAAsB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,kBAAkB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,2BAA2B,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,WAAW,GAAE,CAAC,UAAS,eAAe,GAAE,CAAC,QAAO,aAAa,GAAE,CAAC,QAAO,SAAS,GAAE,CAAC,QAAO,kBAAkB,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,qBAAqB,GAAE,CAAC,QAAO,qBAAqB,GAAE,CAAC,QAAO,cAAc,GAAE,CAAC,QAAO,8BAA8B,GAAE,CAAC,QAAO,kBAAkB,GAAE,CAAC,QAAO,eAAe,GAAE,CAAC,QAAO,eAAe,GAAE,CAAC,QAAO,kBAAkB,GAAE,CAAC,QAAO,SAAS,GAAE,CAAC,QAAO,oBAAoB,GAAE,CAAC,QAAO,gBAAgB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,eAAe,GAAE,CAAC,QAAO,sBAAsB,GAAE,CAAC,QAAO,gCAAgC,GAAE,CAAC,QAAO,UAAU,GAAE,CAAC,QAAO,mBAAmB,GAAE,CAAC,QAAO,OAAO,GAAE,CAAC,QAAO,SAAS,GAAE,CAAC,QAAO,WAAW,GAAE,CAAC,QAAO,aAAa,GAAE,CAAC,QAAO,UAAU,GAAE,CAAC,QAAO,cAAc,GAAE,CAAC,QAAO,aAAa,GAAE,CAAC,QAAO,YAAY,GAAE,CAAC,QAAO,mBAAmB,GAAE,CAAC,QAAO,UAAU,GAAE,CAAC,QAAO,UAAU,GAAE,CAAC,QAAO,UAAU,GAAE,CAAC,QAAO,oBAAoB,GAAE,CAAC,QAAO,gBAAgB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,qBAAqB,GAAE,CAAC,QAAO,2BAA2B,GAAE,CAAC,QAAO,cAAc,GAAE,CAAC,QAAO,QAAQ,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,gBAAgB,GAAE,CAAC,QAAO,mCAAmC,GAAE,CAAC,QAAO,gCAAgC,GAAE,CAAC,QAAO,gCAAgC,GAAE,CAAC,QAAO,kCAAkC,GAAE,CAAC,QAAO,0BAA0B,GAAE,CAAC,QAAO,2BAA2B,GAAE,CAAC,QAAO,eAAe,GAAE,CAAC,QAAO,WAAW,GAAE,CAAC,QAAO,YAAY,GAAE,CAAC,QAAO,YAAY,GAAE,CAAC,QAAO,gBAAgB,GAAE,CAAC,QAAO,mBAAmB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,iBAAiB,CAAC,CAAC;AAAE,YAAM,KAAG,EAAC,QAAO,gBAAe,MAAK,yBAAwB,MAAK,QAAO,MAAK,0BAAyB,MAAK,gBAAe,MAAK,oBAAmB,MAAK,SAAQ,KAAI,eAAc,MAAK,iBAAgB,MAAK,iBAAgB,MAAK,iBAAgB,MAAK,yBAAwB,MAAK,wBAAuB,KAAI,qBAAoB,MAAK,SAAQ,MAAK,kBAAiB,KAAI,OAAM,QAAO,QAAO,MAAK,uBAAsB,MAAK,YAAW,MAAK,cAAa,MAAK,WAAU,MAAK,QAAO,KAAI,wBAAuB,QAAO,UAAS,MAAK,SAAQ,MAAK,SAAQ,MAAK,iBAAgB,MAAK,SAAQ,MAAK,eAAc,KAAI,cAAa,MAAK,cAAa,KAAI,6CAA4C,KAAI,sBAAqB,MAAK,gCAA+B,MAAK,WAAU,MAAK,WAAU,MAAK,YAAW,MAAK,YAAW,MAAK,WAAU,MAAK,+BAA8B,MAAK,UAAS,MAAK,2BAA0B,MAAK,2BAA0B,MAAK,wBAAuB,KAAI,UAAS,MAAK,YAAW,KAAI,eAAc,KAAI,qBAAoB,MAAK,eAAc,KAAI,wBAAuB,MAAK,qBAAoB,MAAK,gBAAe,KAAI,mBAAkB,MAAK,0DAAyD,MAAK,iBAAgB,KAAI,+BAA8B,MAAK,WAAU,MAAK,WAAU,QAAO,yBAAwB,MAAK,gBAAe,IAAG,oBAAmB,MAAK,UAAS,MAAK,UAAS,MAAK,SAAQ,MAAK,iBAAgB,MAAK,yDAAwD,MAAK,kBAAiB,MAAK,aAAY,MAAK,QAAO,MAAK,uBAAsB,IAAG,mBAAkB,MAAK,+BAA8B,MAAK,kBAAiB,MAAK,QAAO,MAAK,wBAAuB,IAAG,WAAU,KAAI,uBAAsB,MAAK,WAAU,IAAG,cAAa,KAAI,oBAAmB,MAAK,4BAA2B,KAAI,iBAAgB,KAAI,OAAM,MAAK,uBAAsB,MAAK,UAAS,MAAK,cAAa,MAAK,iBAAgB,KAAI,uBAAsB,MAAK,QAAO,KAAI,OAAM,KAAI,+BAA8B,MAAK,UAAS,MAAK,mBAAkB,IAAG,mBAAkB,KAAI,WAAU,MAAK,gBAAe,KAAI,OAAM,MAAK,UAAS,KAAI,mBAAkB,MAAK,wBAAuB,MAAK,uBAAsB,MAAK,iBAAgB,KAAI,gBAAe,MAAK,SAAQ,MAAK,cAAa,MAAK,qBAAoB,MAAK,mCAAkC,KAAI,+BAA8B,MAAK,UAAS,KAAI,4BAA2B,MAAK,cAAa,KAAI,OAAM,MAAK,mBAAkB,MAAK,UAAS,MAAK,yBAAwB,MAAK,UAAS,MAAK,oCAAmC,MAAK,uBAAsB,KAAI,4BAA2B,MAAK,UAAS,KAAI,2BAA0B,KAAI,iBAAgB,MAAK,kBAAiB,MAAK,UAAS,MAAK,SAAQ,MAAK,WAAU,MAAK,UAAS,MAAK,SAAQ,MAAK,gBAAe,MAAK,eAAc,MAAK,sBAAqB,MAAK,yBAAwB,MAAK,iBAAgB,MAAK,cAAa,MAAK,WAAU,MAAK,QAAO,MAAK,cAAa,MAAK,mBAAkB,MAAK,kBAAiB,MAAK,cAAa,MAAK,qBAAoB,MAAK,YAAW,MAAK,cAAa,MAAK,WAAU,MAAK,kCAAiC,MAAK,WAAU,MAAK,WAAU,MAAK,YAAW,MAAK,cAAa,MAAK,kBAAiB,MAAK,oBAAmB,MAAK,kBAAiB,MAAK,aAAY,MAAK,oBAAmB,MAAK,uBAAsB,MAAK,SAAQ,KAAI,OAAM,MAAK,sBAAqB,MAAK,yBAAwB,MAAK,SAAQ,MAAK,QAAO,KAAI,oBAAmB,MAAK,YAAW,KAAI,OAAM,MAAK,WAAU,MAAK,WAAU,MAAK,YAAW,MAAK,WAAU,MAAK,iBAAgB,MAAK,aAAY,MAAK,gBAAe,MAAK,kCAAiC,MAAK,WAAU,KAAI,gBAAe,KAAI,OAAM,MAAK,gCAA+B,MAAK,QAAO,MAAK,iBAAgB,MAAK,gCAA+B,MAAK,6BAA4B,MAAK,6BAA4B,MAAK,aAAY,KAAI,OAAM,MAAK,aAAY,MAAK,aAAY,MAAK,QAAO,MAAK,UAAS,MAAK,8BAA6B,KAAI,aAAY,MAAK,eAAc,MAAK,WAAU,MAAK,4BAA2B,MAAK,SAAQ,MAAK,iBAAgB,MAAK,SAAQ,KAAI,0BAAyB,KAAI,iCAAgC,MAAK,SAAQ,MAAK,WAAU,MAAK,yBAAwB,MAAK,UAAS,MAAK,oBAAmB,KAAI,UAAS,KAAI,WAAU,MAAK,qBAAoB,MAAK,YAAW,MAAK,eAAc,MAAK,sBAAqB,MAAK,kCAAiC,MAAK,QAAO,MAAK,cAAa,MAAK,QAAO,KAAI,oBAAmB,MAAK,UAAS,KAAI,UAAS,MAAK,QAAO,MAAK,oBAAmB,MAAK,SAAQ,MAAK,UAAS,MAAK,iBAAgB,KAAI,sBAAqB,MAAK,4BAA2B,MAAK,SAAQ,MAAK,aAAY,IAAG,qBAAoB,MAAK,aAAY,MAAK,WAAU,MAAK,WAAU,MAAK,mBAAkB,MAAK,WAAU,MAAK,WAAU,KAAI,yBAAwB,KAAI,4BAA2B,IAAG,aAAY,MAAK,iBAAgB,MAAK,UAAS,MAAK,qBAAoB,MAAK,aAAY,MAAK,aAAY,MAAK,wBAAuB,MAAK,6BAA4B,MAAK,QAAO,MAAK,kBAAiB,MAAK,cAAa,MAAK,mBAAkB,MAAK,SAAQ,MAAK,UAAS,MAAK,SAAQ,MAAK,sBAAqB,MAAK,kBAAiB,MAAK,cAAa,MAAK,cAAa,MAAK,8BAA6B,MAAK,uBAAsB,IAAG,oBAAmB,MAAK,UAAS,MAAK,+BAA8B,MAAK,YAAW,MAAK,UAAS,MAAK,UAAS,MAAK,cAAa,MAAK,cAAa,MAAK,QAAO,MAAK,gBAAe,MAAK,aAAY,MAAK,cAAa,MAAK,UAAS,MAAK,oBAAmB,KAAI,UAAS,MAAK,gBAAe,MAAK,YAAW,GAAE,KAAG,EAAC,MAAK,WAAU,MAAK,WAAU,MAAK,WAAU,MAAK,eAAc,MAAK,YAAW,MAAK,kCAAiC,MAAK,eAAc,MAAK,8BAA6B,KAAI,mCAAkC,MAAK,yBAAwB,MAAK,kCAAiC,MAAK,6CAA4C;AAAE,QAAE,GAAE,OAAM,CAAC,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,OAAO,OAAO,CAAC,GAAE,IAAG,EAAE,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAC,GAAE,cAAa,GAAE,yBAAwB,GAAE,cAAa,GAAE,wBAAuB,CAAC,GAAE,CAAC,QAAO,EAAC,KAAI,yBAAwB,KAAI,4BAA2B,MAAK,YAAW,KAAI,0BAAyB,MAAK,kBAAiB,MAAK,4BAA2B,MAAK,iCAAgC,MAAK,2BAA0B,MAAK,+BAA8B,MAAK,yBAAwB,MAAK,eAAc,MAAK,eAAc,MAAK,gBAAe,MAAK,WAAU,MAAK,mBAAkB,MAAK,sBAAqB,MAAK,gCAA+B,MAAK,+BAA8B,MAAK,sBAAqB,MAAK,yBAAwB,MAAK,8BAA6B,MAAK,sBAAqB,MAAK,cAAa,MAAK,uBAAsB,MAAK,gBAAe,MAAK,gBAAe,CAAC,CAAC,CAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUD,IAAEC,IAAEC,IAAE;AAAC,iBAAO,QAAMF,GAAE,SAASC,KAAE,CAAC,KAAG,gBAAcD,GAAE,UAAUC,KAAE,GAAE,CAAC,KAAG,WAAS,KAAK,iBAAiBD,IAAEC,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,OAAO,aAAaF,IAAEC,IAAEC,IAAE;AAAC,cAAIC,IAAEC,KAAE,KAAK,iBAAiBJ,IAAEC,IAAEC,EAAC;AAAE,cAAG,WAASE,GAAE,QAAOD,KAAEH,GAAE,SAASC,KAAEG,KAAE,CAAC,GAAED,KAAE,KAAG,MAAIA,MAAG,IAAG,MAAIA,OAAIA,KAAE,IAAGC,KAAE,IAAED;AAAA,QAAC;AAAA,QAAC,OAAO,iBAAiBH,IAAEC,IAAEC,IAAE;AAAC,mBAAQC,KAAE,GAAEA,KAAED,IAAEC,KAAI,KAAG,KAAK,kBAAkBH,IAAEC,KAAEE,EAAC,EAAE,QAAOA;AAAA,QAAC;AAAA,QAAC,OAAO,kBAAkBH,IAAEC,IAAE;AAAC,iBAAO,OAAKD,GAAE,SAASC,EAAC,KAAG,cAAYD,GAAE,UAAUC,EAAC,KAAG,SAAOD,GAAE,UAAUC,KAAE,CAAC;AAAA,QAAC;AAAA,QAAC,QAAO;AAAC,cAAG,EAAC,KAAID,GAAC,IAAE,MAAKC,KAAE,KAAK,MAAM,aAAW,GAAEC,KAAE;AAAG,mBAAQC,KAAE,GAAEA,KAAEF,IAAEE,KAAI,KAAG,OAAK,KAAK,MAAM,SAASA,EAAC,KAAG,MAAI,KAAK,MAAM,SAASA,KAAE,CAAC,GAAE;AAAC,YAAAD,KAAE;AAAG,gBAAID,KAAE,KAAK,MAAM,UAAUE,KAAE,CAAC,GAAEC,KAAE,KAAK,MAAM,SAASD,KAAE,CAAC,GAAEE,KAAE,KAAK,MAAM,gBAAgBF,KAAE,GAAEF,EAAC;AAAE,YAAAD,GAAE,IAAII,IAAE,KAAK,eAAeJ,GAAE,IAAII,EAAC,GAAEC,EAAC,CAAC,GAAEF,MAAG,IAAEF;AAAA,UAAC,WAASC,GAAE;AAAM,iBAAO,KAAK,UAAU,GAAE,KAAK;AAAA,QAAM;AAAA,QAAC,eAAeF,IAAEC,IAAE;AAAC,iBAAO,WAASD,KAAEA,cAAa,SAAOA,GAAE,KAAKC,EAAC,GAAED,MAAG,CAACA,IAAEC,EAAC,IAAEA;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAG,mBAAkB,KAAE,GAAE,EAAE,IAAG,gBAAe,KAAE,GAAE,EAAE,IAAI,QAAO,EAAE,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,GAAE,0BAA0B,GAAE,CAAC,GAAE,qBAAqB,GAAE,CAAC,GAAE,0BAA0B,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,iBAAiB,GAAE,CAAC,IAAG,SAAS,GAAE,CAAC,IAAG,kBAAkB,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,wBAAwB,GAAE,CAAC,IAAG,mBAAmB,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,eAAe,GAAE,CAAC,IAAG,kBAAkB,GAAE,CAAC,IAAG,eAAe,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,QAAQ,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,MAAM,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,OAAO,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,KAAI,+BAA+B,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,oBAAoB,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,yBAAyB,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,OAAO,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,KAAI,yBAAyB,GAAE,CAAC,KAAI,0BAA0B,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,OAAO,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,aAAa,CAAC,CAAC,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,IAAG,EAAC,GAAE,gBAAe,GAAE,mBAAkB,GAAE,KAAI,GAAE,KAAI,GAAE,KAAI,GAAE,sBAAqB,GAAE,KAAI,GAAE,KAAI,GAAE,oBAAmB,GAAE,4BAA2B,CAAC,GAAE,CAAC,IAAG,EAAC,GAAE,WAAU,GAAE,4BAA2B,GAAE,UAAS,CAAC,GAAE,CAAC,KAAI,EAAC,GAAE,aAAY,GAAE,YAAW,GAAE,SAAQ,CAAC,CAAC,CAAC,GAAE,EAAE,QAAM,IAAG,EAAE,UAAQ,IAAG,EAAE,gBAAc,IAAG,EAAE,eAAac,IAAE,EAAE,mBAAiB,GAAE,EAAE,UAAQ,IAAG,EAAE,mBAAiB,GAAE,EAAE,wBAAsB,GAAE,EAAE,cAAY,GAAE,EAAE,cAAY,GAAE,EAAE,MAAI,IAAG,EAAE,iBAAe,IAAG,EAAE,eAAa,IAAG,EAAE,cAAY,IAAG,EAAE,yBAAuB,IAAG,EAAE,gBAAc,GAAE,EAAE,QAAM,IAAG,EAAE,wBAAsB,GAAE,EAAE,WAAS,IAAG,EAAE,YAAU,IAAG,EAAE,iBAAe,GAAE,EAAE,WAAS,GAAE,EAAE,oBAAkB,GAAE,EAAE,UAAQ,eAAef,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAE,IAAI,GAAGF,EAAC;AAAE,QAAAE,GAAE,UAAQ,OAAG,WAASD,MAAG,YAAU,OAAOF,OAAIE,MAAE,SAASF,IAAE;AAAC,cAAIC,KAAED,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,IAAI;AAAE,cAAG,0BAASA,IAAE;AAAC,mBAAM,WAASA,MAAG,WAASA,MAAG,UAAQA;AAAA,UAAC,GAAEC,EAAC,EAAE,QAAM;AAAO,cAAG,GAAG,SAASA,EAAC,EAAE,QAAOA;AAAA,QAAC,GAAED,EAAC;AAAG,YAAII,KAAE,MAAM,EAAEJ,IAAEG,EAAC;AAAE,YAAGD,IAAE;AAAC,cAAG,GAAG,SAASA,EAAC,EAAE,QAAO,GAAGA,IAAEE,IAAED,EAAC;AAAE,YAAE,sBAAsB;AAAA,QAAC,OAAK;AAAC,eAAG,SAASH,IAAE;AAAC,gBAAIC,KAAED,GAAE,UAAU,GAAE,EAAE,EAAE,KAAK;AAAE,mBAAOC,GAAE,SAAS,WAAW,KAAGA,GAAE,SAAS,KAAK;AAAA,UAAC,GAAEG,EAAC,EAAE,QAAO,GAAG,OAAMA,IAAED,EAAC;AAAE,mBAAO,CAACH,EAAC,KAAI,GAAE;AAAC,gBAAG,CAAC,GAAG,SAASA,EAAC,EAAE;AAAS,gBAAIC,KAAE,MAAM,GAAGD,IAAEI,IAAED,EAAC,EAAE,MAAM,EAAE;AAAE,gBAAGF,GAAE,QAAOA;AAAA,UAAC;AAAC,YAAE,qBAAqB;AAAA,QAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,GAAE,EAAE,cAAY,GAAE,EAAE,YAAU,GAAE,EAAE,YAAU,IAAG,EAAE,uBAAqB,IAAG,EAAE,eAAa,IAAG,EAAE,aAAW,GAAE,EAAE,mBAAiB,IAAG,OAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAA,IAAC,EAAE;AAAA;AAAA;;;ACApk0E;AAAA;AAaA,WAAO,UAAU;AAGjB,WAAO,QAAQ,mBAAmB;AAClC,WAAO,QAAQ,sBAAsB;AAGrC,aAAS,iBAAiB,SAAS,UAAU,YAAY;AACvD,cAAQ,iBAAiB,SAAS,UAAU,UAAU;AAAA,IACxD;AAEA,aAAS,oBAAqB,SAAS,UAAU,YAAa;AAC5D,cAAQ,oBAAoB,SAAS,UAAU,UAAU;AAAA,IAC3D;AAAA;AAAA;;;AC1BA;AAAA;AAOA,QAAI,oBAAoB;AACxB,QAAI,mBAAmB;AACvB,QAAI,wBAAwB;AAC5B,QAAI,6BAA6B;AAEjC,QAAI,mBAAmB;AACvB,QAAI,kBAAkB,KAAO,mBAAmB;AAEhD,QAAI,wBAAwB,OAAO,iBAAiB;AAEpD,aAAS,EAAG,KAAK,KAAK;AAAE,aAAO,IAAM,IAAM,MAAM,IAAM;AAAA,IAAK;AAC5D,aAAS,EAAG,KAAK,KAAK;AAAE,aAAO,IAAM,MAAM,IAAM;AAAA,IAAK;AACtD,aAAS,EAAG,KAAU;AAAE,aAAO,IAAM;AAAA,IAAK;AAG1C,aAAS,WAAY,IAAI,KAAK,KAAK;AAAE,eAAS,EAAE,KAAK,GAAG,IAAI,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,EAAE,GAAG,KAAK;AAAA,IAAI;AAGnG,aAAS,SAAU,IAAI,KAAK,KAAK;AAAE,aAAO,IAAM,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,IAAM,EAAE,KAAK,GAAG,IAAI,KAAK,EAAE,GAAG;AAAA,IAAG;AAEzG,aAAS,gBAAiB,IAAI,IAAI,IAAI,KAAK,KAAK;AAC9C,UAAI,UAAU,UAAU,IAAI;AAC5B,SAAG;AACD,mBAAW,MAAM,KAAK,MAAM;AAC5B,mBAAW,WAAW,UAAU,KAAK,GAAG,IAAI;AAC5C,YAAI,WAAW,GAAK;AAClB,eAAK;AAAA,QACP,OAAO;AACL,eAAK;AAAA,QACP;AAAA,MACF,SAAS,KAAK,IAAI,QAAQ,IAAI,yBAAyB,EAAE,IAAI;AAC7D,aAAO;AAAA,IACT;AAEA,aAAS,qBAAsB,IAAI,SAAS,KAAK,KAAK;AACrD,eAAS,IAAI,GAAG,IAAI,mBAAmB,EAAE,GAAG;AAC1C,YAAI,eAAe,SAAS,SAAS,KAAK,GAAG;AAC7C,YAAI,iBAAiB,GAAK;AACxB,iBAAO;AAAA,QACT;AACA,YAAI,WAAW,WAAW,SAAS,KAAK,GAAG,IAAI;AAC/C,mBAAW,WAAW;AAAA,MACxB;AACA,aAAO;AAAA,IACR;AAEA,aAAS,aAAc,GAAG;AACxB,aAAO;AAAA,IACT;AAEA,WAAO,UAAU,SAAS,OAAQ,KAAK,KAAK,KAAK,KAAK;AACpD,UAAI,EAAE,KAAK,OAAO,OAAO,KAAK,KAAK,OAAO,OAAO,IAAI;AACnD,cAAM,IAAI,MAAM,yCAAyC;AAAA,MAC3D;AAEA,UAAI,QAAQ,OAAO,QAAQ,KAAK;AAC9B,eAAO;AAAA,MACT;AAGA,UAAI,eAAe,wBAAwB,IAAI,aAAa,gBAAgB,IAAI,IAAI,MAAM,gBAAgB;AAC1G,eAAS,IAAI,GAAG,IAAI,kBAAkB,EAAE,GAAG;AACzC,qBAAa,CAAC,IAAI,WAAW,IAAI,iBAAiB,KAAK,GAAG;AAAA,MAC5D;AAEA,eAAS,SAAU,IAAI;AACrB,YAAI,gBAAgB;AACpB,YAAI,gBAAgB;AACpB,YAAI,aAAa,mBAAmB;AAEpC,eAAO,kBAAkB,cAAc,aAAa,aAAa,KAAK,IAAI,EAAE,eAAe;AACzF,2BAAiB;AAAA,QACnB;AACA,UAAE;AAGF,YAAI,QAAQ,KAAK,aAAa,aAAa,MAAM,aAAa,gBAAgB,CAAC,IAAI,aAAa,aAAa;AAC7G,YAAI,YAAY,gBAAgB,OAAO;AAEvC,YAAI,eAAe,SAAS,WAAW,KAAK,GAAG;AAC/C,YAAI,gBAAgB,kBAAkB;AACpC,iBAAO,qBAAqB,IAAI,WAAW,KAAK,GAAG;AAAA,QACrD,WAAW,iBAAiB,GAAK;AAC/B,iBAAO;AAAA,QACT,OAAO;AACL,iBAAO,gBAAgB,IAAI,eAAe,gBAAgB,iBAAiB,KAAK,GAAG;AAAA,QACrF;AAAA,MACF;AAEA,aAAO,SAAS,aAAc,GAAG;AAE/B,YAAI,MAAM,GAAG;AACX,iBAAO;AAAA,QACT;AACA,YAAI,MAAM,GAAG;AACX,iBAAO;AAAA,QACT;AACA,eAAO,WAAW,SAAS,CAAC,GAAG,KAAK,GAAG;AAAA,MACzC;AAAA,IACF;AAAA;AAAA;;;AC1GA;AAAA;AAAA,QAAI,eAAe;AAGnB,QAAI,aAAa;AAAA,MACf,MAAO,aAAa,MAAM,KAAK,MAAM,CAAC;AAAA,MACtC,QAAQ,aAAa,MAAM,GAAG,GAAG,CAAC;AAAA,MAClC,SAAS,aAAa,GAAG,GAAG,MAAM,CAAC;AAAA,MACnC,WAAW,aAAa,MAAM,GAAG,MAAM,CAAC;AAAA,MACxC,QAAQ,aAAa,GAAG,GAAG,GAAG,CAAC;AAAA,IACjC;AAGA,WAAO,UAAU;AACjB,WAAO,QAAQ,mBAAmB;AAClC,WAAO,QAAQ,kBAAkB,iBAAiB;AAGlD,aAAS,QAAQ,QAAQ,QAAQ,SAAS;AACxC,UAAI,QAAQ,uBAAO,OAAO,IAAI;AAC9B,UAAI,OAAO,uBAAO,OAAO,IAAI;AAC7B,gBAAU,WAAW,CAAC;AAEtB,UAAI,SAAU,OAAO,QAAQ,WAAW,aAAc,QAAQ,SAAS,WAAW,QAAQ,MAAM;AAGhG,UAAI,CAAC,QAAQ;AACX,YAAI,QAAQ,QAAQ;AAClB,kBAAQ,KAAK,wCAAwC,QAAQ,MAAM;AAAA,QACrE;AACA,iBAAS,WAAW;AAAA,MACtB;AAEA,UAAI,OAAO,OAAO,QAAQ,SAAS,aAAa,QAAQ,OAAO;AAC/D,UAAI,OAAO,OAAO,QAAQ,SAAS,aAAa,QAAQ,OAAO;AAE/D,UAAI,YAAY,aAAa,QAAQ,SAAS;AAE9C,UAAI,OAAO,OAAO,KAAK,MAAM;AAC7B,WAAK,QAAQ,SAAS,KAAK;AACzB,cAAM,GAAG,IAAI,OAAO,GAAG;AACvB,aAAK,GAAG,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG;AAAA,MACtC,CAAC;AAED,UAAI,eAAe,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW;AAC7E,UAAI,mBAAmB,KAAK,IAAI,GAAG,eAAe,IAAI;AACtD,UAAI;AACJ,UAAI,QAAQ;AAEZ,4BAAsB,UAAU,KAAK,IAAI;AAEzC,aAAO;AAAA,QACL;AAAA,MACF;AAEA,eAAS,SAAS;AAChB,kBAAU,OAAO,mBAAmB;AACpC,8BAAsB;AAAA,MACxB;AAEA,eAAS,OAAO;AACd,YAAI,IAAI,OAAO,QAAM,gBAAgB;AACrC,iBAAS;AACT,kBAAU,CAAC;AACX,YAAI,SAAS,kBAAkB;AAC7B,gCAAsB,UAAU,KAAK,IAAI;AACzC,eAAK,MAAM;AAAA,QACb,OAAO;AACL,gCAAsB;AACtB,qBAAW,WAAW;AAAE,iBAAK,MAAM;AAAA,UAAE,GAAG,CAAC;AAAA,QAC3C;AAAA,MACF;AAEA,eAAS,UAAU,GAAG;AACpB,aAAK,QAAQ,SAAS,KAAK;AACzB,iBAAO,GAAG,IAAI,KAAK,GAAG,IAAI,IAAI,MAAM,GAAG;AAAA,QACzC,CAAC;AAAA,MACH;AAAA,IACF;AAEA,aAAS,OAAO;AAAA,IAAE;AAElB,aAAS,aAAa,WAAW;AAC/B,UAAI,CAAC,WAAW;AACd,YAAI,SAAS,OAAO,WAAW,eAAe,OAAO;AACrD,eAAO,SAAS,aAAa,IAAI,iBAAiB;AAAA,MACpD;AACA,UAAI,OAAO,UAAU,SAAS,WAAY,OAAM,IAAI,MAAM,iDAAiD;AAC3G,UAAI,OAAO,UAAU,WAAW,WAAY,OAAM,IAAI,MAAM,uDAAuD;AAEnH,aAAO;AAAA,IACT;AAEA,aAAS,eAAe;AACtB,aAAO;AAAA,QACL,MAAM,OAAO,sBAAsB,KAAK,MAAM;AAAA,QAC9C,QAAQ,OAAO,qBAAqB,KAAK,MAAM;AAAA,MACjD;AAAA,IACF;AAEA,aAAS,mBAAmB;AAC1B,aAAO;AAAA,QACL,MAAM,SAAS,IAAI;AACjB,iBAAO,WAAW,IAAI,MAAK,EAAE;AAAA,QAC/B;AAAA,QACA,QAAQ,SAAU,IAAI;AACpB,iBAAO,aAAa,EAAE;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAEA,aAAS,mBAAmB;AAC1B,UAAI,cAAc,oBAAI,IAAI;AAC1B,UAAI,aAAa,oBAAI,IAAI;AACzB,UAAI,aAAa;AAEjB,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACF;AAEA,eAAS,WAAW;AAClB,oBAAY,MAAM;AAClB,mBAAW,MAAM;AACjB,6BAAqB,UAAU;AAC/B,qBAAa;AAAA,MACf;AAEA,eAAS,KAAK,UAAU;AACtB,mBAAW,IAAI,QAAQ;AACvB,wBAAgB;AAAA,MAClB;AAEA,eAAS,kBAAkB;AACzB,YAAI,CAAC,WAAY,cAAa,sBAAsB,WAAW;AAAA,MACjE;AAEA,eAAS,cAAc;AACrB,qBAAa;AAEb,YAAI,IAAI;AACR,qBAAa;AACb,sBAAc;AAEd,oBAAY,QAAQ,SAAS,UAAU;AACrC,mBAAS;AAAA,QACX,CAAC;AACD,oBAAY,MAAM;AAAA,MACpB;AAEA,eAAS,OAAO,UAAU;AACxB,mBAAW,OAAO,QAAQ;AAAA,MAC5B;AAAA,IACF;AAAA;AAAA;;;;;;ACzJe,aAASe,EAASC,GAAS;AACxCC,QAAgBD,CAAO;AAEvB,YAAME,IAAgBC,EAAoBH,CAAO;AACjD,aAAAA,EAAQ,KAAKE,EAAc,IAC3BF,EAAQ,MAAME,EAAc,KAC5BF,EAAQ,OAAOE,EAAc,MACtBF;IACT;AAEA,aAASG,EAAoBH,GAAS;AAMpC,UAAII,IAAmB,uBAAO,OAAO,IAAI;AAEzC,aAAO,EACL,IAAI,SAAUC,GAAWC,GAAUC,GAAK;AACtC,YAAI,OAAOD,KAAa,WACtB,OAAM,IAAI,MAAM,uCAAuC;AAEzD,YAAIE,IAAWJ,EAAiBC,CAAS;AACzC,eAAKG,MACHA,IAAWJ,EAAiBC,CAAS,IAAI,CAAA,IAE3CG,EAAS,KAAK,EAAE,UAAUF,GAAU,KAAKC,EAAAA,CAAK,GAEvCP;MACT,GAEA,KAAK,SAAUK,GAAWC,GAAU;AAElC,YADyB,OAAOD,IAAc,IAG5C,QAAAD,IAAmB,uBAAO,OAAO,IAAI,GAC9BJ;AAGT,YAAII,EAAiBC,CAAS,EAE5B,KADoC,OAAOC,KAAa,WAEtD,QAAOF,EAAiBC,CAAS;aAC5B;AACL,gBAAMI,IAAYL,EAAiBC,CAAS;AAC5C,mBAAS,IAAI,GAAG,IAAII,EAAU,QAAQ,EAAE,EAClCA,GAAU,CAAC,EAAE,aAAaH,KAC5BG,EAAU,OAAO,GAAG,CAAC;QAG3B;AAGF,eAAOT;MACT,GAEA,MAAM,SAAUK,GAAW;AACzB,cAAMI,IAAYL,EAAiBC,CAAS;AAC5C,YAAI,CAACI,EACH,QAAOT;AAGT,YAAIU;AACA,kBAAU,SAAS,MAErBA,IAAgB,MAAM,UAAU,MAAM,KAAK,WAAW,CAAC;AAEzD,iBAASC,IAAI,GAAGA,IAAIF,EAAU,QAAQ,EAAEE,GAAG;AACzC,gBAAMC,IAAeH,EAAUE,CAAC;AAChCC,YAAa,SAAS,MAAMA,EAAa,KAAKF,CAAa;QAC7D;AAEA,eAAOV;MACT,EACJ;IACA;AAEA,aAASC,EAAgBD,GAAS;AAChC,UAAI,CAACA,EACH,OAAM,IAAI,MAAM,oDAAoD;AAEtE,YAAMa,IAAgB,CAAC,MAAM,QAAQ,KAAK;AAC1C,eAASF,IAAI,GAAGA,IAAIE,EAAc,QAAQ,EAAEF,EAC1C,KAAIX,EAAQ,eAAea,EAAcF,CAAC,CAAC,EACzC,OAAM,IAAI,MAAM,kEAAkEE,EAAcF,CAAC,IAAI,GAAG;IAG9G;AAAA,WAAA,UAAA;;;;;ACxFA;AAAA;AAGA,WAAO,UAAU;AAEjB,aAAS,QAAQ,UAAU,QAAQ,UAAU;AAC3C,UAAI,OAAO,aAAa,UAAU;AAEhC,mBAAW,CAAC;AAAA,MACd;AAEA,UAAI,cAAc,OAAO,SAAS,gBAAgB,WAAW,SAAS,cAAc;AACpF,UAAI,YAAY,OAAO,SAAS,cAAc,WAAW,SAAS,YAAY;AAC9E,UAAIG,wBAAuB,OAAO,SAAS,yBAAyB,aAAa,SAAS,uBAAuB,wBAAwB;AACzI,UAAIC,yBAAwB,OAAO,SAAS,0BAA0B,aAAa,SAAS,wBAAwB,yBAAyB;AAE7I,UAAI;AACJ,UAAI;AACJ,UAAI,eAAe;AAEnB,UAAI;AACJ,UAAI,IAAI,SAAS;AACjB,UAAI,IAAI,SAAS;AAEjB,UAAI;AAEJ,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAEA,eAAS,UAAU;AACjB,QAAAD,sBAAqB,MAAM;AAC3B,QAAAA,sBAAqB,GAAG;AAAA,MAC1B;AAEA,eAAS,QAAQ;AACf,oBAAY,SAAS;AAErB,aAAK,KAAK,KAAK,KAAK;AACpB,oBAAY,oBAAI,KAAK;AAErB,QAAAA,sBAAqB,MAAM;AAC3B,QAAAA,sBAAqB,GAAG;AAKxB,iBAASC,uBAAsB,KAAK;AAAA,MACtC;AAEA,eAAS,QAAQ;AACf,YAAI,MAAM,KAAK,IAAI;AACnB,YAAI,UAAU,MAAM;AACpB,oBAAY;AAEZ,YAAI,eAAe,SAAS;AAE5B,YAAI,KAAK,aAAa,IAAI,UAAU;AACpC,YAAI,KAAK,aAAa,IAAI,UAAU;AAEpC,oBAAY;AAEZ,YAAI,KAAK,OAAQ,IAAI;AAGrB,aAAK,MAAM,KAAK,KAAK,MAAM;AAC3B,aAAK,MAAM,KAAK,KAAK,MAAM;AAE3B,iBAASA,uBAAsB,KAAK;AAAA,MACtC;AAEA,eAAS,OAAO;AACd,QAAAD,sBAAqB,MAAM;AAC3B,QAAAA,sBAAqB,GAAG;AAExB,YAAI,eAAe,SAAS;AAE5B,kBAAU,aAAa;AACvB,kBAAU,aAAa;AACvB,oBAAY,KAAK,IAAI;AAErB,YAAI,KAAK,CAAC,eAAe,KAAK,aAAa;AACzC,eAAK,YAAY;AACjB,qBAAW;AAAA,QACb;AAEA,YAAI,KAAK,CAAC,eAAe,KAAK,aAAa;AACzC,eAAK,YAAY;AACjB,qBAAW;AAAA,QACb;AAEA,cAAMC,uBAAsB,UAAU;AAAA,MACxC;AAEA,eAAS,aAAa;AACpB,YAAI,UAAU,KAAK,IAAI,IAAI;AAE3B,YAAI,SAAS;AACb,YAAI,KAAK;AACT,YAAI,KAAK;AAET,YAAI,IAAI;AACN,eAAK,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,YAAY;AAE3C,cAAI,KAAK,OAAO,KAAK,KAAM,UAAS;AAAA,cAC/B,MAAK,KAAK;AAAA,QACjB;AAEA,YAAI,IAAI;AACN,eAAK,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,YAAY;AAE3C,cAAI,KAAK,OAAO,KAAK,KAAM,UAAS;AAAA,cAC/B,MAAK,KAAK;AAAA,QACjB;AAEA,YAAI,QAAQ;AACV,iBAAO,UAAU,IAAI,UAAU,EAAE;AACjC,gBAAMA,uBAAsB,UAAU;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,aAAS,0BAA0B;AACjC,UAAI,OAAO,yBAAyB,WAAY,QAAO;AACvD,aAAO;AAAA,IACT;AAEA,aAAS,2BAA2B;AAClC,UAAI,OAAO,0BAA0B,WAAY,QAAO;AAExD,aAAO,SAAU,SAAS;AACxB,eAAO,WAAW,SAAS,EAAE;AAAA,MAC/B;AAAA,IACF;AAAA;AAAA;;;ACvIA;AAAA;AAGA,WAAO,UAAU;AAEjB,aAAS,6BAA6B,SAAS;AAC7C,UAAI,SAAS;AACX,eAAO;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MACF;AAEA,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI,cAAc;AAElB,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAEA,eAAS,QAAQ,WAAW;AAC1B,sBAAc;AACd,0BAAkB,OAAO,SAAS;AAClC,wBAAgB,OAAO,SAAS;AAEhC,eAAO,SAAS,gBAAgB;AAEhC,qBAAa;AACb,mBAAW,cAAc;AAAA,MAC3B;AAEA,eAAS,UAAU;AACjB,YAAI,CAAC,YAAa;AAElB,sBAAc;AACd,eAAO,SAAS,gBAAgB;AAChC,YAAI,WAAY,YAAW,cAAc;AAAA,MAC3C;AAAA,IACF;AAEA,aAAS,SAAS,GAAG;AACnB,QAAE,gBAAgB;AAClB,aAAO;AAAA,IACT;AAEA,aAAS,OAAO;AAAA,IAAC;AAAA;AAAA;;;AChDjB;AAAA;AAAA,WAAO,UAAU;AAEjB,aAAS,YAAY;AACnB,WAAK,IAAI;AACT,WAAK,IAAI;AACT,WAAK,QAAQ;AAAA,IACf;AAAA;AAAA;;;ACNA;AAAA;AAAA,WAAO,UAAU;AACjB,WAAO,QAAQ,YAAY;AAE3B,aAAS,kBAAkB,YAAY,SAAS;AAC9C,UAAI,CAAC,aAAa,UAAU,GAAG;AAC7B,cAAM,IAAI,MAAM,iDAAiD;AAAA,MACnE;AAEA,UAAI,QAAQ,WAAW;AACvB,UAAI,CAAC,OAAO;AACV,cAAM,IAAI;AAAA,UACR;AAAA,QAEuE;AAAA,MAC3E;AAEA,UAAI,CAAC,QAAQ,4BAA4B;AACvC,cAAM,aAAa,YAAY,CAAC;AAAA,MAClC;AAEA,UAAI,MAAM;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAEP,eAAS,WAAW;AAClB,eAAO;AAAA,MACT;AAEA,eAAS,UAAU;AACjB,YAAI,cAAe,WAAW,QAAQ;AACtC,eAAO;AAAA,UACL,MAAM,YAAY;AAAA,UAClB,KAAK,YAAY;AAAA,UACjB,OAAO,YAAY;AAAA,UACnB,QAAQ,YAAY;AAAA,QACtB;AAAA,MACF;AAEA,eAAS,eAAe;AACtB,YAAI,MAAM,MAAM,OAAO;AACvB,YAAI,CAAC,KAAK;AAGR,iBAAO,MAAM,aAAa;AAAA,QAC5B;AACA,eAAO;AAAA,MACT;AAEA,eAAS,cAAc,WAAW;AAChC,YAAI,YAAY,WAAW,OAAO;AAGlC,YAAI,cAAc,MAAM;AACtB,sBAAY,SAAS,gBAAgB,8BAA8B,KAAK,EAAE,gBAAgB;AAAA,QAC5F;AAEA,kBAAU,IAAI,UAAU;AACxB,kBAAU,IAAI,UAAU;AACxB,kBAAU,QAAQ,UAAU;AAC5B,cAAM,kBAAkB,MAAM,SAAS;AAAA,MACzC;AAEA,eAAS,eAAe,WAAW;AACjC,mBAAW,aAAa,aAAa,YACnC,UAAU,QAAQ,UAClB,UAAU,QAAQ,MAClB,UAAU,IAAI,MAAM,UAAU,IAAI,GAAG;AAAA,MACzC;AAAA,IACF;AAEA,aAAS,aAAa,SAAS;AAC7B,aAAO,WAAW,QAAQ,mBAAmB,QAAQ;AAAA,IACvD;AAAA;AAAA;;;AC9EA;AAAA;AAAA,WAAO,UAAU;AAEjB,WAAO,QAAQ,YAAY;AAE3B,aAAS,kBAAkB,YAAY,SAAS;AAC9C,UAAI,eAAe,aAAa,UAAU;AAC1C,UAAI,CAAC,cAAc;AACjB,cAAM,IAAI,MAAM,6DAA6D;AAAA,MAC/E;AAEA,UAAI,QAAQ,WAAW;AACvB,iBAAW,YAAY;AAEvB,UAAI,CAAC,QAAQ,4BAA4B;AACvC,cAAM,aAAa,YAAY,CAAC;AAAA,MAClC;AAEA,UAAI,MAAM;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAEP,eAAS,WAAW;AAClB,eAAO;AAAA,MACT;AAEA,eAAS,UAAU;AAEjB,eAAQ;AAAA,UACN,MAAM;AAAA,UACN,KAAK;AAAA,UACL,OAAO,WAAW;AAAA,UAClB,QAAQ,WAAW;AAAA,QACrB;AAAA,MACF;AAEA,eAAS,eAAe,WAAW;AAEjC,mBAAW,MAAM,kBAAkB;AACnC,mBAAW,MAAM,YAAY,YAC3B,UAAU,QAAQ,aAClB,UAAU,QAAQ,OAClB,UAAU,IAAI,OAAO,UAAU,IAAI;AAAA,MACvC;AAAA,IACF;AAEA,aAAS,aAAa,SAAS;AAC7B,aAAO,WAAW,QAAQ,iBAAiB,QAAQ;AAAA,IACrD;AAAA;AAAA;;;ACnDA;AAAA;AAAA;AAIA,QAAI,QAAQ;AACZ,QAAI,UAAU;AACd,QAAI,WAAW;AACf,QAAI,UAAU;AACd,QAAI,iCAAiC;AACrC,QAAI,8BAA8B,+BAA+B;AACjE,QAAI,8BAA8B,+BAA+B,IAAI;AACrE,QAAI,YAAY;AAChB,QAAI,oBAAoB;AACxB,QAAI,oBAAoB;AAExB,QAAI,mBAAmB;AACvB,QAAI,4BAA4B;AAChC,QAAI,qBAAqB;AACzB,QAAI,qBAAqB;AAEzB,WAAO,UAAU;AAQjB,aAAS,cAAc,YAAY,SAAS;AAC1C,gBAAU,WAAW,CAAC;AAEtB,UAAI,gBAAgB,QAAQ;AAE5B,UAAI,CAAC,eAAe;AAClB,YAAI,kBAAkB,UAAU,UAAU,GAAG;AAC3C,0BAAgB,kBAAkB,YAAY,OAAO;AAAA,QACvD,WAAW,kBAAkB,UAAU,UAAU,GAAG;AAClD,0BAAgB,kBAAkB,YAAY,OAAO;AAAA,QACvD;AAAA,MACF;AAEA,UAAI,CAAC,eAAe;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,UAAI,QAAQ,cAAc,SAAS;AAGnC,UAAI,kBAAkB,EAAE,GAAG,GAAG,GAAG,EAAE;AAEnC,UAAI,UAAU;AACd,UAAI,YAAY,IAAI,UAAU;AAE9B,UAAI,cAAc,eAAe;AAC/B,sBAAc,cAAc,SAAS;AAAA,MACvC;AAEA,UAAI,YAAY,OAAO,QAAQ,cAAc,aAAa,QAAQ,YAAY;AAE9E,UAAI,aAAa,OAAO,QAAQ,eAAe,WAAW,QAAQ,aAAa;AAC/E,UAAI,SAAS,QAAQ;AACrB,UAAI,UAAU,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU,OAAO;AAC7E,UAAI,UAAU,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU;AAEtE,UAAI,gBAAgB,OAAO,QAAQ,kBAAkB,WAAW,QAAQ,gBAAgB;AACxF,UAAI,uBAAuB,OAAO,QAAQ,yBAAyB,WAAW,QAAQ,uBAAuB;AAC7G,UAAI,cAAc,QAAQ,eAAe;AACzC,UAAI,kBAAkB,QAAQ,mBAAmB;AACjD,UAAI,QAAQ,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY;AACxE,UAAI,kBAAkB,qBAAqB,QAAQ,eAAe;AAClE,UAAI,gBAAgB,QAAQ,sBAAsB,8BAA8B;AAEhF,qBAAe,MAAM;AAErB,UAAI,QAAQ,YAAY;AACtB,mBAAW;AAAA,MACb;AAEA,UAAI;AACJ,UAAI,mBAAmB;AACvB,UAAI,qBAAqB;AACzB,UAAI,2BAA2B;AAC/B,UAAI,uBAAuB;AAC3B,UAAI,oBAAoB,oBAAI,KAAK;AACjC,UAAI;AACJ,UAAI,kBAAkB;AAGtB,UAAI,gBAAgB;AAGpB,UAAI;AACJ,UAAI;AAIJ,UAAI;AACJ,UAAI;AAEJ,UAAI;AAEJ,UAAI;AACJ,UAAI,kBAAkB,WAAW,CAAC,QAAQ,cAAc;AAEtD,uBAAe,YAAY;AAAA,MAC7B,OAAO;AAGL,uBAAe,QAAQ,UAAU,QAAQ,QAAQ,YAAY;AAAA,MAC/D;AAEA,UAAI;AACJ,UAAI;AAEJ,UAAI;AACJ,UAAI,SAAS;AAEb,sBAAgB;AAEhB,UAAI,MAAM;AAAA,QACR;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QAEA,cAAc;AAAA,QAEd;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,MACF;AAEA,eAAS,GAAG;AAEZ,UAAI,WAAW,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW,UAAU;AACnF,UAAI,WAAW,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW,UAAU;AACnF,UAAI,cAAc,OAAO,QAAQ,gBAAgB,WAAW,QAAQ,cAAc,UAAU;AAE5F,UAAG,YAAY,UAAU,KAAK,YAAY,UAAU,KAAK,eAAe,UAAU,OAAM;AACtF,gBAAQ,UAAU,UAAU,WAAW;AAAA,MACzC;AAEA,aAAO;AAEP,eAAS,QAAQ;AACf,sBAAc;AACd,iBAAS;AAAA,MACX;AAEA,eAAS,SAAS;AAChB,YAAI,QAAQ;AACV,0BAAgB;AAChB,mBAAS;AAAA,QACX;AAAA,MACF;AAEA,eAAS,WAAW;AAClB,eAAO;AAAA,MACT;AAEA,eAAS,cAAc,MAAM;AAE3B,YAAI,aAAa,MAAM,sBAAsB;AAC7C,YAAI,OAAO,kBAAkB,WAAW,OAAO,WAAW,MAAM;AAEhE,YAAI,YAAY,KAAK,QAAQ,KAAK;AAClC,YAAI,aAAa,KAAK,SAAS,KAAK;AACpC,YAAI,CAAC,OAAO,SAAS,SAAS,KAAK,CAAC,OAAO,SAAS,UAAU,GAAG;AAC/D,gBAAM,IAAI,MAAM,mBAAmB;AAAA,QACrC;AAEA,YAAI,KAAK,KAAK,IAAI;AAClB,YAAI,KAAK,KAAK,IAAI;AAClB,YAAI,QAAQ,KAAK,IAAI,IAAI,EAAE;AAC3B,kBAAU,IAAI,EAAE,KAAK,OAAO,YAAY,KAAK,QAAQ,KAAK,IAAI;AAC9D,kBAAU,IAAI,EAAE,KAAK,MAAM,aAAa,KAAK,QAAQ,KAAK,IAAI;AAC9D,kBAAU,QAAQ;AAAA,MACpB;AAEA,eAAS,kBAAkB,GAAG,GAAG;AAC/B,YAAI,cAAc,cAAc;AAC9B,cAAI,YAAY,cAAc,aAAa;AAC3C,cAAI,eAAe,UAAU;AAC7B,cAAI,eAAe,UAAU;AAC7B,cAAI,gBAAgB,UAAU;AAC9B,cAAI,gBAAgB,UAAU;AAC9B,0BAAgB,IAAI,IAAI,eAAe;AACvC,0BAAgB,IAAI,IAAI,eAAe;AAAA,QACzC,OAAO;AACL,0BAAgB,IAAI;AACpB,0BAAgB,IAAI;AAAA,QACtB;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,aAAa;AACpB,YAAI;AACJ,YAAI;AACJ,YAAI,OAAO;AACX,YAAI,MAAM;AACV,YAAI,mBAAmB,eAAe;AACtC,YAAI,kBAAkB;AAEpB,iBAAO,iBAAiB;AACxB,gBAAM,iBAAiB;AACvB,cAAI,iBAAiB,QAAQ,iBAAiB;AAC9C,cAAI,iBAAiB,SAAS,iBAAiB;AAAA,QACjD,OAAO;AAEL,cAAI,YAAY,MAAM,sBAAsB;AAC5C,cAAI,UAAU;AACd,cAAI,UAAU;AAAA,QAChB;AACA,YAAI,OAAO,cAAc,QAAQ;AACjC,YAAI,KAAK,UAAU,KAAK,KAAK,WAAW,GAAG;AAGzC;AAAA,QACF;AACA,YAAI,KAAK,IAAI,KAAK;AAClB,YAAI,KAAK,IAAI,KAAK;AAClB,YAAI,QAAQ,KAAK,IAAI,IAAI,EAAE;AAC3B,kBAAU,IAAI,EAAE,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,IAAI,IAAI;AAC9D,kBAAU,IAAI,EAAE,KAAK,MAAM,KAAK,SAAS,KAAK,QAAQ,IAAI,IAAI;AAC9D,kBAAU,QAAQ;AAAA,MACpB;AAEA,eAAS,oBAAoB;AAE3B,eAAO;AAAA,MACT;AAEA,eAAS,aAAa;AACpB,eAAO;AAAA,MACT;AAEA,eAAS,WAAW,YAAY;AAC9B,kBAAU;AAAA,MACZ;AAEA,eAAS,aAAa;AACpB,eAAO;AAAA,MACT;AAEA,eAAS,WAAW,YAAY;AAC9B,kBAAU;AAAA,MACZ;AAEA,eAAS,qBAAqB;AAC5B,eAAO;AAAA,MACT;AAEA,eAAS,mBAAmB,oBAAoB;AAC9C,0BAAkB,qBAAqB,kBAAkB;AAAA,MAC3D;AAEA,eAAS,eAAe;AACtB,eAAO;AAAA,MACT;AAEA,eAAS,aAAa,UAAU;AAC9B,YAAI,CAAC,OAAO,SAAS,QAAQ,GAAG;AAC9B,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,gBAAQ;AAAA,MACV;AAEA,eAAS,WAAW;AAClB,eAAO;AAAA,UACL,GAAG,UAAU;AAAA,UACb,GAAG,UAAU;AAAA,QACf;AAAA,MACF;AAEA,eAAS,OAAO,GAAG,GAAG;AACpB,kBAAU,IAAI;AACd,kBAAU,IAAI;AAEd,kCAA0B;AAE1B,qBAAa,KAAK;AAClB,kBAAU;AAAA,MACZ;AAEA,eAAS,OAAO,IAAI,IAAI;AACtB,eAAO,UAAU,IAAI,IAAI,UAAU,IAAI,EAAE;AAAA,MAC3C;AAEA,eAAS,4BAA4B;AACnC,YAAI,cAAc,eAAe;AACjC,YAAI,CAAC,YAAa;AAElB,YAAI,WAAW;AACf,YAAI,aAAa,cAAc;AAE/B,YAAI,OAAO,YAAY,OAAO,WAAW;AACzC,YAAI,OAAO,GAAG;AACZ,oBAAU,KAAK;AACf,qBAAW;AAAA,QACb;AAEA,eAAO,YAAY,QAAQ,WAAW;AACtC,YAAI,OAAO,GAAG;AACZ,oBAAU,KAAK;AACf,qBAAW;AAAA,QACb;AAGA,eAAO,YAAY,MAAM,WAAW;AACpC,YAAI,OAAO,GAAG;AAKZ,oBAAU,KAAK;AACf,qBAAW;AAAA,QACb;AAEA,eAAO,YAAY,SAAS,WAAW;AACvC,YAAI,OAAO,GAAG;AACZ,oBAAU,KAAK;AACf,qBAAW;AAAA,QACb;AACA,eAAO;AAAA,MACT;AAKA,eAAS,iBAAiB;AACxB,YAAI,CAAC,OAAQ;AAEb,YAAI,OAAO,WAAW,WAAW;AAE/B,cAAI,YAAY,MAAM,sBAAsB;AAC5C,cAAI,aAAa,UAAU;AAC3B,cAAI,cAAc,UAAU;AAE5B,iBAAO;AAAA,YACL,MAAM,aAAa;AAAA,YACnB,KAAK,cAAc;AAAA,YACnB,OAAO,cAAc,IAAI;AAAA,YACzB,QAAQ,eAAe,IAAI;AAAA,UAC7B;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,gBAAgB;AACvB,YAAI,OAAO,cAAc,QAAQ;AACjC,YAAI,UAAU,OAAO,KAAK,MAAM,KAAK,GAAG;AAExC,eAAO;AAAA,UACL,MAAM,QAAQ;AAAA,UACd,KAAK,QAAQ;AAAA,UACb,OAAO,KAAK,QAAQ,UAAU,QAAQ,QAAQ;AAAA,UAC9C,QAAQ,KAAK,SAAS,UAAU,QAAQ,QAAQ;AAAA,QAClD;AAAA,MACF;AAEA,eAAS,OAAO,GAAG,GAAG;AACpB,eAAO;AAAA,UACL,GAAG,IAAI,UAAU,QAAQ,UAAU;AAAA,UACnC,GAAG,IAAI,UAAU,QAAQ,UAAU;AAAA,QACrC;AAAA,MACF;AAEA,eAAS,YAAY;AACnB,kBAAU;AACV,yBAAiB,OAAO,sBAAsB,KAAK;AAAA,MACrD;AAEA,eAAS,YAAY,SAAS,SAAS,OAAO;AAC5C,YAAIC,OAAM,OAAO,KAAKA,OAAM,OAAO,KAAKA,OAAM,KAAK,GAAG;AACpD,gBAAM,IAAI,MAAM,6BAA6B;AAAA,QAC/C;AAEA,YAAI,WAAW,UAAU,QAAQ;AAEjC,YAAI,WAAW,SAAS;AACtB,cAAI,UAAU,UAAU,QAAS;AAEjC,kBAAQ,UAAU,UAAU;AAAA,QAC9B;AACA,YAAI,WAAW,SAAS;AACtB,cAAI,UAAU,UAAU,QAAS;AAEjC,kBAAQ,UAAU,UAAU;AAAA,QAC9B;AAEA,YAAI,OAAO,kBAAkB,SAAS,OAAO;AAE7C,kBAAU,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,UAAU;AACnD,kBAAU,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,UAAU;AAGnD,YAAI,UAAU,kBAAkB,KAAK,YAAY,GAAG;AAClD,oBAAU,SAAS;AACnB,oCAA0B;AAAA,QAC5B,OAAO;AACL,cAAI,oBAAoB,0BAA0B;AAClD,cAAI,CAAC,kBAAmB,WAAU,SAAS;AAAA,QAC7C;AAEA,qBAAa,MAAM;AAEnB,kBAAU;AAAA,MACZ;AAEA,eAAS,QAAQ,SAAS,SAAS,WAAW;AAC5C,YAAI,QAAQ,YAAY,UAAU;AAClC,oBAAY,SAAS,SAAS,KAAK;AAAA,MACrC;AAEA,eAAS,SAAS,IAAI;AACpB,YAAIC,UAAS,GAAG;AAChB,YAAI,CAACA;AACH,gBAAM,IAAI,MAAM,+CAA+C;AAGjE,YAAI,aAAa,GAAG,sBAAsB;AAC1C,YAAI,KAAK,WAAW,OAAO,WAAW,QAAQ;AAC9C,YAAI,KAAK,WAAW,MAAM,WAAW,SAAS;AAE9C,YAAI,YAAYA,QAAO,sBAAsB;AAC7C,YAAI,KAAK,UAAU,QAAQ,IAAI;AAC/B,YAAI,KAAK,UAAU,SAAS,IAAI;AAEhC,uBAAe,IAAI,IAAI,IAAI;AAAA,MAC7B;AAEA,eAAS,aAAa,GAAG,GAAE;AACzB,uBAAe,IAAI,UAAU,GAAG,IAAI,UAAU,GAAG,IAAI;AAAA,MACvD;AAEA,eAAS,eAAe,IAAI,IAAI,QAAQ;AACtC,YAAI,CAAC,QAAQ;AACX,iBAAO,OAAO,IAAI,EAAE;AAAA,QACtB;AAEA,YAAI,gBAAiB,iBAAgB,OAAO;AAE5C,YAAI,OAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AACxB,YAAI,KAAK,EAAE,GAAG,IAAI,GAAG,GAAG;AACxB,YAAI,QAAQ;AACZ,YAAI,QAAQ;AAEZ,0BAAkB,QAAQ,MAAM,IAAI;AAAA,UAClC,MAAM,SAAU,GAAG;AACjB,mBAAO,EAAE,IAAI,OAAO,EAAE,IAAI,KAAK;AAE/B,oBAAQ,EAAE;AACV,oBAAQ,EAAE;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAEA,eAAS,OAAO,GAAG,GAAG;AACpB,4BAAoB;AACpB,eAAO,GAAG,CAAC;AAAA,MACb;AAEA,eAAS,UAAU;AACjB,sBAAc;AAAA,MAChB;AAEA,eAAS,kBAAkB;AACzB,cAAM,iBAAiB,aAAa,aAAa,EAAE,SAAS,MAAM,CAAC;AACnE,cAAM,iBAAiB,YAAY,eAAe,EAAE,SAAS,MAAM,CAAC;AACpE,cAAM,iBAAiB,cAAc,SAAS,EAAE,SAAS,MAAM,CAAC;AAChE,cAAM,iBAAiB,WAAWC,YAAW,EAAE,SAAS,MAAM,CAAC;AAI/D,cAAM,iBAAiB,OAAO,cAAc,EAAE,SAAS,MAAM,CAAC;AAE9D,kBAAU;AAAA,MACZ;AAEA,eAAS,gBAAgB;AACvB,cAAM,oBAAoB,OAAO,YAAY;AAC7C,cAAM,oBAAoB,aAAa,WAAW;AAClD,cAAM,oBAAoB,WAAWA,UAAS;AAC9C,cAAM,oBAAoB,YAAY,aAAa;AACnD,cAAM,oBAAoB,cAAc,OAAO;AAE/C,YAAI,gBAAgB;AAClB,iBAAO,qBAAqB,cAAc;AAC1C,2BAAiB;AAAA,QACnB;AAEA,qBAAa,OAAO;AAEpB,6BAAqB;AACrB,uBAAe;AACf,sBAAc,QAAQ;AAEtB,sBAAc;AAAA,MAChB;AAEA,eAAS,QAAQ;AACf,YAAI,QAAS,gBAAe;AAAA,MAC9B;AAEA,eAAS,iBAAiB;AACxB,kBAAU;AAGV,sBAAc,eAAe,SAAS;AAEtC,qBAAa,WAAW;AACxB,yBAAiB;AAAA,MACnB;AAEA,eAASA,WAAU,GAAG;AACpB,YAAI,IAAI,GACN,IAAI,GACJ,IAAI;AACN,YAAI,EAAE,YAAY,IAAI;AACpB,cAAI;AAAA,QACN,WAAW,EAAE,YAAY,IAAI;AAC3B,cAAI;AAAA,QACN,WAAW,EAAE,YAAY,IAAI;AAC3B,cAAI;AAAA,QACN,WAAW,EAAE,YAAY,IAAI;AAC3B,cAAI;AAAA,QACN,WAAW,EAAE,YAAY,OAAO,EAAE,YAAY,KAAK;AAEjD,cAAI;AAAA,QACN,WAAW,EAAE,YAAY,OAAO,EAAE,YAAY,KAAK;AAEjD,cAAI;AAAA,QACN;AAEA,YAAI,UAAU,GAAG,GAAG,GAAG,CAAC,GAAG;AAEzB;AAAA,QACF;AAEA,YAAI,KAAK,GAAG;AACV,YAAE,eAAe;AACjB,YAAE,gBAAgB;AAElB,cAAI,aAAa,MAAM,sBAAsB;AAE7C,cAAI,SAAS,KAAK,IAAI,WAAW,OAAO,WAAW,MAAM;AACzD,cAAI,iBAAiB;AACrB,cAAI,KAAK,SAAS,iBAAiB;AACnC,cAAI,KAAK,SAAS,iBAAiB;AAGnC,yBAAe,IAAI,EAAE;AAAA,QACvB;AAEA,YAAI,GAAG;AACL,cAAI,kBAAkB,mBAAmB,IAAI,GAAG;AAChD,cAAI,SAAS,kBAAkB,yBAAyB,IAAI,SAAS;AACrE,uBAAa,OAAO,GAAG,OAAO,GAAG,eAAe;AAAA,QAClD;AAAA,MACF;AAEA,eAAS,WAAW;AAClB,YAAI,YAAY,MAAM,sBAAsB;AAC5C,eAAO;AAAA,UACL,GAAG,UAAU,QAAQ;AAAA,UACrB,GAAG,UAAU,SAAS;AAAA,QACxB;AAAA,MACF;AAEA,eAAS,QAAQ,GAAG;AAElB,oBAAY,CAAC;AACb,sCAA8B;AAE9B,YAAI,EAAE,QAAQ,WAAW,GAAG;AAC1B,iBAAO,wBAAwB,GAAG,EAAE,QAAQ,CAAC,CAAC;AAAA,QAChD,WAAW,EAAE,QAAQ,WAAW,GAAG;AAEjC,4BAAkB,mBAAmB,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC/D,uBAAa;AACb,qCAA2B;AAAA,QAC7B;AAAA,MACF;AAEA,eAAS,YAAY,GAAG;AAEtB,YAAI,QAAQ,WAAW,CAAC,QAAQ,QAAQ,CAAC,GAAG;AAG1C;AAAA,QACF;AAEA,UAAE,gBAAgB;AAClB,UAAE,eAAe;AAAA,MACnB;AAEA,eAAS,kBAAkB,GAAG;AAC5B,sCAA8B;AAG9B,YAAI,QAAQ,iBAAiB,CAAC,QAAQ,cAAc,CAAC,GAAG;AAGtD;AAAA,QACF;AAEA,UAAE,eAAe;AACjB,UAAE,gBAAgB;AAAA,MACpB;AAEA,eAAS,wBAAwB,GAAG;AAClC,6BAAqB,oBAAI,KAAK;AAC9B,YAAI,QAAQ,EAAE,QAAQ,CAAC;AACvB,YAAI,SAAS,YAAY,KAAK;AAC9B,iCAAyB;AACzB,YAAI,QAAQ,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAChD,iBAAS,MAAM;AACf,iBAAS,MAAM;AACf,iBAAS;AACT,iBAAS;AAET,qBAAa,OAAO;AACpB,mCAA2B;AAAA,MAC7B;AAEA,eAAS,6BAA6B;AACpC,YAAI,iBAAiB;AAEnB;AAAA,QACF;AAEA,0BAAkB;AAClB,iBAAS,iBAAiB,aAAa,eAAe;AACtD,iBAAS,iBAAiB,YAAY,cAAc;AACpD,iBAAS,iBAAiB,eAAe,cAAc;AAAA,MACzD;AAEA,eAAS,gBAAgB,GAAG;AAC1B,YAAI,EAAE,QAAQ,WAAW,GAAG;AAC1B,YAAE,gBAAgB;AAClB,cAAI,QAAQ,EAAE,QAAQ,CAAC;AAEvB,cAAI,SAAS,YAAY,KAAK;AAC9B,cAAI,QAAQ,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAEhD,cAAI,KAAK,MAAM,IAAI;AACnB,cAAI,KAAK,MAAM,IAAI;AAEnB,cAAI,OAAO,KAAK,OAAO,GAAG;AACxB,4BAAgB;AAAA,UAClB;AACA,mBAAS,MAAM;AACf,mBAAS,MAAM;AACf,yBAAe,IAAI,EAAE;AAAA,QACvB,WAAW,EAAE,QAAQ,WAAW,GAAG;AAEjC,uBAAa;AACb,cAAI,KAAK,EAAE,QAAQ,CAAC;AACpB,cAAI,KAAK,EAAE,QAAQ,CAAC;AACpB,cAAI,qBAAqB,mBAAmB,IAAI,EAAE;AAIlD,cAAI,kBACF,KAAK,qBAAqB,kBAAkB,KAAK;AAEnD,cAAI,kBAAkB,YAAY,EAAE;AACpC,cAAI,mBAAmB,YAAY,EAAE;AACrC,oBAAU,gBAAgB,IAAI,iBAAiB,KAAK;AACpD,oBAAU,gBAAgB,IAAI,iBAAiB,KAAK;AACpD,cAAI,iBAAiB;AACnB,gBAAI,SAAS,yBAAyB;AACtC,qBAAS,OAAO;AAChB,qBAAS,OAAO;AAAA,UAClB;AAEA,uBAAa,QAAQ,QAAQ,eAAe;AAE5C,4BAAkB;AAClB,YAAE,gBAAgB;AAClB,YAAE,eAAe;AAAA,QACnB;AAAA,MACF;AAEA,eAAS,gCAAgC;AACvC,YAAI,0BAA0B;AAC5B,uBAAa,wBAAwB;AACrC,qCAA2B;AAAA,QAC7B;AAAA,MACF;AAEA,eAAS,0BAA0B,GAAG;AAGpC,YAAI,CAAC,QAAQ,QAAS;AACtB,sCAA8B;AAC9B,YAAI,KAAK,SAAS;AAClB,YAAI,KAAK,SAAS;AAClB,YAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACnC,YAAI,IAAI,EAAG;AAEX,mCAA2B,WAAW,WAAW;AAC/C,qCAA2B;AAC3B,kBAAQ,QAAQ,CAAC;AAAA,QACnB,GAAG,kBAAkB;AAAA,MACvB;AAEA,eAAS,eAAe,GAAG;AACzB,sCAA8B;AAC9B,YAAI,EAAE,QAAQ,SAAS,GAAG;AACxB,cAAI,SAAS,YAAY,EAAE,QAAQ,CAAC,CAAC;AACrC,cAAI,QAAQ,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAChD,mBAAS,MAAM;AACf,mBAAS,MAAM;AAAA,QACjB,OAAO;AACL,cAAI,MAAM,oBAAI,KAAK;AACnB,cAAI,MAAM,mBAAmB,oBAAoB;AAE/C,gBAAI,iBAAiB;AACnB,kBAAI,SAAS,yBAAyB;AACtC,yBAAW,OAAO,GAAG,OAAO,GAAG,oBAAoB;AAAA,YACrD,OAAO;AAEL,yBAAW,uBAAuB,GAAG,uBAAuB,GAAG,oBAAoB;AAAA,YACrF;AAAA,UACF,WAAW,MAAM,qBAAqB,oBAAoB;AACxD,sCAA0B,CAAC;AAAA,UAC7B;AAEA,6BAAmB;AAEnB,wBAAc;AACd,yBAAe;AAAA,QACjB;AAAA,MACF;AAEA,eAAS,mBAAmB,SAAS,SAAS;AAC5C,YAAI,KAAK,QAAQ,UAAU,QAAQ;AACnC,YAAI,KAAK,QAAQ,UAAU,QAAQ;AACnC,eAAO,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAAA,MACpC;AAEA,eAAS,cAAc,GAAG;AACxB,0BAAkB,CAAC;AACnB,YAAI,SAAS,YAAY,CAAC;AAC1B,YAAI,iBAAiB;AAGnB,mBAAS,yBAAyB;AAAA,QACpC;AACA,mBAAW,OAAO,GAAG,OAAO,GAAG,oBAAoB;AAAA,MACrD;AAEA,eAAS,YAAY,GAAG;AACtB,sCAA8B;AAG9B,YAAI,gBAAgB,CAAC,EAAG;AAExB,+BAAuB;AACvB,4BAAoB,oBAAI,KAAK;AAE7B,YAAI,iBAAiB;AAGnB,YAAE,gBAAgB;AAClB,iBAAO;AAAA,QACT;AAGA,YAAI,eACD,EAAE,WAAW,KAAK,OAAO,UAAU,QAAS,EAAE,WAAW;AAC5D,YAAI,CAAC,aAAc;AAEnB,qBAAa,OAAO;AAEpB,YAAI,SAAS,YAAY,CAAC;AAC1B,YAAI,QAAQ,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAChD,iBAAS,SAAS,MAAM;AACxB,iBAAS,SAAS,MAAM;AAIxB,iBAAS,iBAAiB,aAAa,WAAW;AAClD,iBAAS,iBAAiB,WAAW,SAAS;AAC9C,sBAAc,QAAQ,EAAE,UAAU,EAAE,UAAU;AAE9C,eAAO;AAAA,MACT;AAEA,eAAS,YAAY,GAAG;AAEtB,YAAI,gBAAiB;AAErB,wBAAgB;AAEhB,YAAI,SAAS,YAAY,CAAC;AAC1B,YAAI,QAAQ,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAChD,YAAI,KAAK,MAAM,IAAI;AACnB,YAAI,KAAK,MAAM,IAAI;AAEnB,iBAAS,MAAM;AACf,iBAAS,MAAM;AAEf,uBAAe,IAAI,EAAE;AAAA,MACvB;AAEA,eAAS,YAAY;AACnB,YAAI,MAAM,oBAAI,KAAK;AACnB,YAAI,MAAM,oBAAoB,mBAAoB,2BAA0B,oBAAoB;AAChG,sBAAc,QAAQ;AACtB,sBAAc;AACd,6BAAqB;AAAA,MACvB;AAEA,eAAS,uBAAuB;AAC9B,iBAAS,oBAAoB,aAAa,WAAW;AACrD,iBAAS,oBAAoB,WAAW,SAAS;AACjD,wBAAgB;AAAA,MAClB;AAEA,eAAS,iBAAiB;AACxB,iBAAS,oBAAoB,aAAa,eAAe;AACzD,iBAAS,oBAAoB,YAAY,cAAc;AACvD,iBAAS,oBAAoB,eAAe,cAAc;AAC1D,wBAAgB;AAChB,qBAAa;AACb,0BAAkB;AAAA,MACpB;AAEA,eAAS,aAAa,GAAG;AAEvB,YAAI,YAAY,CAAC,EAAG;AAEpB,qBAAa,OAAO;AAEpB,YAAI,QAAQ,EAAE;AACd,YAAI,EAAE,YAAY,EAAG,UAAS;AAE9B,YAAI,kBAAkB,mBAAmB,KAAK;AAE9C,YAAI,oBAAoB,GAAG;AACzB,cAAI,SAAS,kBACT,yBAAyB,IACzB,YAAY,CAAC;AACjB,uBAAa,OAAO,GAAG,OAAO,GAAG,eAAe;AAChD,YAAE,eAAe;AAAA,QACnB;AAAA,MACF;AAEA,eAAS,YAAY,GAAG;AACtB,YAAI,SAAS;AAEb,YAAI,YAAY,MAAM,sBAAsB;AAC5C,kBAAU,EAAE,UAAU,UAAU;AAChC,kBAAU,EAAE,UAAU,UAAU;AAEhC,eAAO,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,MAClC;AAEA,eAAS,WAAW,SAAS,SAAS,iBAAiB;AACrD,YAAI,YAAY,UAAU;AAC1B,YAAI,OAAO,EAAE,OAAO,UAAU;AAC9B,YAAI,KAAK,EAAE,OAAO,kBAAkB,UAAU;AAE9C,qBAAa,OAAO;AACpB,4BAAoB;AAEpB,0BAAkB,QAAQ,MAAM,IAAI;AAAA,UAClC,MAAM,SAAU,GAAG;AACjB,oBAAQ,SAAS,SAAS,EAAE,KAAK;AAAA,UACnC;AAAA,UACA,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAEA,eAAS,cAAc,SAAS,SAAS,cAAc;AACrD,YAAI,YAAY,UAAU;AAC1B,YAAI,OAAO,EAAE,OAAO,UAAU;AAC9B,YAAI,KAAK,EAAE,OAAO,aAAa;AAE/B,qBAAa,OAAO;AACpB,4BAAoB;AAEpB,0BAAkB,QAAQ,MAAM,IAAI;AAAA,UAClC,MAAM,SAAU,GAAG;AACjB,oBAAQ,SAAS,SAAS,EAAE,KAAK;AAAA,UACnC;AAAA,UACA,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAEA,eAAS,2BAA2B;AAClC,YAAI,YAAY,MAAM,sBAAsB;AAC5C,eAAO;AAAA,UACL,GAAG,UAAU,QAAQ,gBAAgB;AAAA,UACrC,GAAG,UAAU,SAAS,gBAAgB;AAAA,QACxC;AAAA,MACF;AAEA,eAAS,aAAa,SAAS,SAAS,iBAAiB;AACvD,qBAAa,OAAO;AACpB,4BAAoB;AACpB,eAAO,YAAY,SAAS,SAAS,eAAe;AAAA,MACtD;AAEA,eAAS,sBAAsB;AAC7B,YAAI,iBAAiB;AACnB,0BAAgB,OAAO;AACvB,4BAAkB;AAAA,QACpB;AAAA,MACF;AAEA,eAAS,mBAAmB,OAAO;AACjC,YAAI,OAAO,KAAK,KAAK,KAAK;AAC1B,YAAI,qBAAqB,KAAK,IAAI,MAAM,KAAK,IAAI,QAAQ,QAAQ,GAAG,CAAC;AACrE,eAAO,IAAI,OAAO;AAAA,MACpB;AAEA,eAAS,kBAAkB;AACzB,YAAI,CAAC,eAAe;AAClB,uBAAa,UAAU;AACvB,0BAAgB;AAChB,uBAAa,MAAM;AAAA,QACrB;AAAA,MACF;AAEA,eAAS,gBAAgB;AACvB,YAAI,eAAe;AAEjB,cAAI,CAAC,WAAY,cAAa,KAAK;AACnC,uBAAa,QAAQ;AAAA,QACvB;AAAA,MACF;AAEA,eAAS,iBAAiB;AACxB,qBAAa,SAAS;AAAA,MACxB;AAEA,eAAS,aAAa,MAAM;AAC1B,YAAI,KAAK,MAAM,GAAG;AAAA,MACpB;AAAA,IACF;AAEA,aAAS,qBAAqB,SAAS;AACrC,UAAI,CAAC,QAAS;AACd,UAAI,OAAO,YAAY,UAAU;AAC/B,YAAI,CAAC,SAAS,QAAQ,CAAC,KAAK,CAAC,SAAS,QAAQ,CAAC;AAC7C,8BAAoB,OAAO;AAC7B,eAAO;AAAA,MACT;AAEA,0BAAoB;AAAA,IACtB;AAEA,aAAS,oBAAoB,SAAS;AACpC,cAAQ,MAAM,OAAO;AACrB,YAAM,IAAI;AAAA,QACR;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,EAAE,KAAK,IAAI;AAAA,MACb;AAAA,IACF;AAEA,aAAS,OAAO;AAAA,IAAE;AAElB,aAAS,eAAe,QAAQ;AAC9B,UAAI,aAAa,OAAO;AACxB,UAAI,eAAe,eAAe,eAAe,UAAW;AAE5D,UAAI,cACF,SAAS,OAAO,IAAI,KACpB,SAAS,OAAO,GAAG,KACnB,SAAS,OAAO,MAAM,KACtB,SAAS,OAAO,KAAK;AAEvB,UAAI,CAAC;AACH,cAAM,IAAI;AAAA,UACR;AAAA,QAEF;AAAA,IACJ;AAEA,aAAS,SAAS,GAAG;AACnB,aAAO,OAAO,SAAS,CAAC;AAAA,IAC1B;AAGA,aAASF,OAAM,OAAO;AACpB,UAAI,OAAO,OAAO;AAChB,eAAO,OAAO,MAAM,KAAK;AAAA,MAC3B;AAEA,aAAO,UAAU;AAAA,IACnB;AAEA,aAAS,cAAc;AACrB,aAAO;AAAA,QACL,OAAO;AAAA,QACP,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,aAAS,UAAU;AACjB,UAAI,OAAO,aAAa,YAAa;AAErC,UAAI,UAAU,SAAS,qBAAqB,QAAQ;AACpD,UAAI,CAAC,QAAS;AACd,UAAI;AAEJ,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,YAAI,IAAI,QAAQ,CAAC;AACjB,YAAI,EAAE,OAAO,EAAE,IAAI,MAAM,uBAAuB,GAAG;AACjD,0BAAgB;AAChB;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,cAAe;AAEpB,UAAI,QAAQ,cAAc,aAAa,OAAO;AAC9C,UAAI,CAAC,MAAO;AAEZ,UAAI,aAAa,cAAc,aAAa,MAAM,KAAK;AACvD,UAAI,UAAU,KAAK,IAAI;AAEvB,gBAAU;AAEV,eAAS,YAAY;AACnB,YAAIG,MAAK,SAAS,cAAc,KAAK;AACrC,YAAI,CAACA,KAAI;AACP,cAAI,MAAM,KAAK,IAAI;AACnB,cAAI,UAAU,MAAM;AACpB,cAAI,UAAU,KAAM;AAElB,uBAAW,WAAW,GAAG;AACzB;AAAA,UACF;AAEA,kBAAQ,MAAM,mCAAmC,UAAU;AAC3D;AAAA,QACF;AACA,YAAI,UAAU,eAAe,aAAa;AAC1C,gBAAQ,IAAI,OAAO;AACnB,eAAO,UAAU,IAAI,cAAcA,KAAI,OAAO;AAAA,MAChD;AAEA,eAAS,eAAe,QAAQ;AAC9B,YAAI,QAAQ,OAAO;AACnB,YAAI,UAAU,CAAC;AACf,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AACrC,cAAI,OAAO,MAAM,CAAC;AAClB,cAAI,YAAY,6BAA6B,IAAI;AACjD,cAAI,WAAW;AACb,oBAAQ,UAAU,IAAI,IAAI,UAAU;AAAA,UACtC;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,6BAA6B,MAAM;AAC1C,YAAI,CAAC,KAAK,KAAM;AAChB,YAAI,qBACF,KAAK,KAAK,CAAC,MAAM,OAAO,KAAK,KAAK,CAAC,MAAM,OAAO,KAAK,KAAK,CAAC,MAAM;AAEnE,YAAI,CAAC,mBAAoB;AAEzB,YAAI,OAAO,KAAK,KAAK,OAAO,CAAC;AAC7B,YAAI,QAAQ,KAAK,MAAM,KAAK,KAAK;AACjC,eAAO,EAAE,MAAY,MAAa;AAAA,MACpC;AAAA,IACF;AAEA,YAAQ;AAAA;AAAA;;;AC3kCR,oBAAmB;AAGnB,IAAO,qCAAQ,cAAAC;;;ACGf,2BAAO;AALP,IAAM,YAAY;AAClB,UAAU,IAAI;AACd,UAAU,SAAS;AAClB,mCAAU,UAAU,MAAM;;;ACC3B,OAAO,gBAAgB,CAAC;AACxB,OAAO,iBAAiB;AACxB,IAAI;AAEJ,IAAM,YAAY,CAAC,IAAY,MAAiC,QAAyB;AACvF,QAAM,eAAe;AACrB,SAAO,cAAc,KAAK,EAAE,IAAI,MAAM,IAAI,CAAC;AAC3C,MAAI,OAAO,cAAc,SAAS,aAAc,QAAO,cAAc,MAAM;AAC3E,SAAO,iBAAiB;AAC1B;AAEA,IAAM,eAAe,OAAOC,QAAmC;AAC7D,QAAM,YAAYA,IAAG;AACrB,MAAI,UAAW,WAAU,eAAe,EAAE,UAAU,SAAS,CAAC;AAChE;AAEO,IAAM,MAAM,UAAU,QAAkC;AAC7D,QAAM,KAAK,oBAAI,KAAK;AACpB,QAAM,KAAK,GAAG,GAAG,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACzM,MAAI,OAAO,QAAQ;AACjB,QAAI,OAAO,eAAgB,QAAO,OAAO,aAAa,OAAO,eAAe,GAAG,GAAG;AAClF,iBAAa,OAAO,MAAM;AAAA,EAC5B;AACA,UAAQ,IAAI,IAAI,GAAG,GAAG;AACtB,YAAU,IAAI,OAAO,GAAG;AAC1B;AAEO,IAAM,QAAQ,UAAU,QAAkC;AAC/D,QAAM,KAAK,oBAAI,KAAK;AACpB,QAAM,KAAK,GAAG,GAAG,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACzM,MAAI,OAAO,QAAQ;AACjB,QAAI,OAAO,eAAgB,QAAO,OAAO,aAAa,OAAO,eAAe,GAAG,GAAG;AAClF,iBAAa,OAAO,MAAM;AAAA,EAC5B;AACA,UAAQ,MAAM,IAAI,GAAG,GAAG;AACxB,YAAU,IAAI,SAAS,GAAG;AAC5B;AAEO,IAAM,QAAQ,UAAU,QAAkC;AAC/D,QAAM,KAAK,oBAAI,KAAK;AACpB,QAAM,KAAK,GAAG,GAAG,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACzM,MAAI,OAAO,QAAQ;AACjB,QAAI,OAAO,eAAgB,QAAO,OAAO,aAAa,OAAO,eAAe,GAAG,GAAG;AAClF,iBAAa,OAAO,MAAM;AAAA,EAC5B;AACA,UAAQ,MAAM,IAAI,GAAG,GAAG;AACxB,YAAU,IAAI,SAAS,GAAG;AAG5B;AAEA,IAAM,cAAc,OAClB,QACA,MACA,SACA,cACA,SAAS,OACT,gBAAgB,OAAO,KAAK,sBAAsB,QAChC;AAClB,QAAM,MAAM,CAAC,QAAsB;AACjC,QAAI,CAAC,QAAQ;AACX,YAAM,GAAG,GAAG,WAAW,OAAO,UAAU,WAAW,OAAO,MAAM,aAAa,OAAO,YAAY,EAAE;AAClG,UAAI,aAAc,cAAa,MAAM;AAAA,IACvC;AAAA,EACF;AAEA,MAAI,YAAa,QAAO,iBAAiB,iBAAiB,SAAS,WAAW,EAAE;AAChF,SAAO,iBAAiB,gBAAgB,kBAAkB;AAC1D,SAAO,UAAU;AACjB,SAAO,YAAY,MAAM,IAAI,eAAe;AAC5C,SAAO,UAAU,MAAM,IAAI,aAAa;AACxC,SAAO,UAAU,MAAM,IAAI,aAAa;AACxC,SAAO,qBAAqB,MAAM;AAChC,QAAI,OAAO,eAAe,GAAG;AAC3B,UAAI,OAAO,WAAW,KAAK;AACzB,YAAI;AACF,gBAAM,OAAO,KAAK,MAAM,OAAO,YAAY;AAC3C,cAAI,QAAS,SAAQ,IAAI;AAAA,QAC3B,QAAQ;AAAA,QAER;AAAA,MACF,OAAO;AAAA,MAEP;AAAA,IACF;AAAA,EACF;AACA,QAAM,MAAM,KAAK,UAAU,IAAI;AAC/B,SAAO,KAAK,GAAG;AACjB;AAEO,IAAM,SAAS,CACpBC,MACA,MACA,SACA,cACA,SAAS,OACT,gBAAgB,OAAO,KAAK,sBAAsB,QACzC;AACT,QAAM,MAAM,IAAI,eAAe;AAC/B,QAAM,OAAO,OAAO,KAAK,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,CAAC,IAAI,mBAAmB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG;AAC7G,MAAI,KAAK,OAAO,GAAGA,IAAG,IAAI,IAAI,IAAI,IAAI;AACtC,cAAY,KAAK,MAAM,SAAS,cAAc,QAAQ,aAAa;AACrE;AAEO,SAAS,QACdA,MACA,MACA,SACA,cACA,SAAS,OACT,gBAAgB,OAAO,KAAK,sBAAsB,KAC5C;AACN,QAAM,MAAM,IAAI,eAAe;AAC/B,MAAI,KAAK,QAAQA,MAAK,IAAI;AAC1B,cAAY,KAAK,MAAM,SAAS,cAAc,QAAQ,aAAa;AACrE;AAEO,IAAM,iBAAiB,CAACC,OAA0BC,WAAoC;AAC3F,MAAID,SAAQC,QAAO;AACjB,kBAAc,KAAK,GAAGD,KAAI,IAAIC,MAAK,EAAE;AACrC,QAAI,YAAY,EAAE,MAAAD,MAAK,CAAC;AAAA,EAC1B;AACF;AAEA,OAAO,MAAM;AACb,OAAO,QAAQ;AACf,OAAO,QAAQ;AACf,OAAO,SAAS;AAChB,OAAO,UAAU;;;AC/HjB,IAAI;AACJ,IAAI;AACJ,IAAI;AAEJ,eAAsB,WAA6E;AACjG,MAAI,UAAU,UAAa,SAAS,QAAW;AAC7C,UAAM,MAAM,MAAM,MAAM,GAAG,OAAO,OAAO,QAAQ;AACjD,QAAI,IAAI,IAAI;AACV,YAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,aAAO,KAAK;AACZ,cAAQ,KAAK;AACb,UAAI,YAAY,EAAE,KAAK,CAAC;AACxB,qBAAe,MAAM,KAAK;AAAA,IAC5B;AAAA,EACF;AACA,SAAO,EAAE,MAAM,MAAM;AACvB;AAOA,eAAsBE,WAAUC,MAAwB,UAAuB,CAAC,GAAkC;AAChH,QAAM,SAAS;AACf,MAAI,QAAQ,OAAO;AACjB,UAAM,UAAU,KAAK,GAAG,IAAI,IAAI,KAAK,EAAE;AACvC,UAAM,UAAU,IAAI,QAAQ,QAAQ,OAAO;AAC3C,YAAQ,IAAI,iBAAiB,SAAS,OAAO,EAAE;AAC/C,YAAQ,UAAU;AAAA,EACpB;AACA,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,MAAMA,MAAK,OAAO;AAC9B,QAAI,CAAC,IAAI,GAAI,OAAM,SAAS,EAAE,QAAQ,KAAK,UAAU,KAAK,KAAAA,MAAK,MAAM,MAAM,CAAC;AAAA,EAC9E,SAAS,KAAK;AACZ,QAAI,UAAU,QAAQ;AACpB,YAAM,SAAS,EAAE,QAAQ,KAAK,UAAU,KAAK,KAAAA,MAAK,MAAM,OAAO,OAAO,IAAI,CAAC;AAAA,IAC7E;AAAA,EACF;AACA,MAAI,CAAC,SAAS;AAEZ,cAAU,OAAO,SAAS;AAC1B,QAAI,UAAU,OAAO;AAAA,EACvB;AACA,SAAO;AACT;AACA,OAAO,YAAYD;;;ACpDZ,IAAM,YAAgC,CAAC;AAE9C,eAAsB,MAAM,MAAc,SAAgC;AACxE,YAAU,KAAK,CAAC,MAAM,KAAK,MAAM,OAAO,CAAC,CAAC;AAC5C;AACA,OAAO,QAAQ;AAEf,eAAsB,YAA2B;AAE/C,QAAM,iBAAiB,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG;AACzD,QAAM,YAAoC,CAAC;AAC3C,aAAW,CAAC,MAAM,OAAO,KAAK,eAAgB,WAAU,IAAI,IAAI;AAChE,QAAM,iBAAiB,SAAS;AAElC;;;ACZA,IAAI,iBAA0C;AAE9C,eAAsB,MAAM,IAAI;AAC9B,SAAO,IAAI,QAAQ,CAAC,YAAY;AAAE,eAAW,SAAS,EAAE;AAAA,EAAG,CAAC;AAC9D;AAEO,SAAS,YAA6C;AAC3D,QAAM,QAAQ,SAAS,qBAAqB,YAAY;AACxD,QAAM,OAA2B,MAAM,WAAW,IAAI,WAAW,MAAM,CAAC;AACxE,MAAI,SAAS,SAAU,MAAK,iBAAiB,CAAC,OAAO,SAAS,eAAe,EAAE;AAC/E,MAAI,SAAS,YAAY,KAAK,YAAY;AACxC,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AACA,OAAO,YAAY;AAaZ,SAAS,kBAAkB;AAChC,SAAO,UAAU,EAAE,cAAc,uBAAuB;AAC1D;AAEO,SAAS,yBAAyB;AACvC,MAAI,OAAO,eAAgB,QAAO,UAAU,EAAE,cAAc,mCAAmC;AAC/F,SAAO,UAAU,EAAE,cAAc,kDAAkD;AACrF;AAIO,IAAM,yBAAyB,CAAC;AAChC,IAAM,oBAAoB,CAAC;AAC3B,IAAM,oBAAoB,CAAC;AAC3B,IAAM,mBAAmB,CAAC;AAC1B,IAAM,uBAAuB,CAAC;AAC9B,IAAM,0BAA0B,CAAC;AAExC,IAAI,eAAe;AACnB,IAAI;AAEJ,SAAS,iBAAiB,OAAO,UAAU;AACzC,MAAI,MAAM,SAAS,QAAQ,EAAG;AAC9B,QAAM,KAAK,QAAQ;AACrB;AAEO,SAAS,gBAAgB,UAAU;AACxC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,kFAAkF,QAAQ,EAAE;AAClG;AAAA,EACF;AACA,mBAAiB,wBAAwB,QAAQ;AACnD;AACA,OAAO,kBAAkB;AAElB,SAAS,WAAW,UAAU;AACnC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,6EAA6E,QAAQ,EAAE;AAC7F;AAAA,EACF;AACA,mBAAiB,mBAAmB,QAAQ;AAC9C;AACA,OAAO,aAAa;AAEb,SAAS,WAAW,UAAU;AACnC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,6EAA6E,QAAQ,EAAE;AAC7F;AAAA,EACF;AACA,mBAAiB,mBAAmB,QAAQ;AAC9C;AACA,OAAO,aAAa;AAEb,SAAS,UAAU,UAAU;AAClC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,4EAA4E,QAAQ,EAAE;AAC5F;AAAA,EACF;AACA,mBAAiB,kBAAkB,QAAQ;AAC7C;AACA,OAAO,YAAY;AAEZ,SAAS,cAAc,UAAU;AACtC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,gFAAgF,QAAQ,EAAE;AAChG;AAAA,EACF;AACA,mBAAiB,sBAAsB,QAAQ;AACjD;AACA,OAAO,gBAAgB;AAEhB,SAAS,iBAAiB,UAAU;AACzC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,mFAAmF,QAAQ,EAAE;AACnG;AAAA,EACF;AACA,mBAAiB,yBAAyB,QAAQ;AACpD;AACA,OAAO,mBAAmB;AAEnB,SAAS,iBAAiB,OAAc,KAAW;AAExD,aAAW,YAAY,OAAO;AAC5B,QAAI,CAAC,SAAU;AACf,QAAI;AACF,YAAM,KAAK,YAAY,IAAI;AAC3B,eAAS,GAAG;AACZ,YAAM,KAAK,YAAY,IAAI;AAC3B,UAAI,KAAK,KAAK,IAAK,KAAI,gBAAgB,EAAE,UAAU,SAAS,QAAQ,UAAU,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACzG,YAAM,SAAS,QAAQ,qBAAqB,KAAK,EAAE;AAAA,IACrD,SAAS,GAAG;AACV,YAAM,qBAAqB,QAAQ,IAAI,CAAC,EAAE;AAAA,IAC5C;AAAA,EACF;AACF;AAEA,IAAM,kBAAkB,MAAM,UAAU,EAAE,iBAAiB,eAAe,EAAE,SAAS;AAErF,SAAS,iCAAiC;AACxC,eAAa,oBAAoB;AACjC,yBAAuB,WAAW,MAAM,iBAAiB,sBAAsB,GAAG,GAAG;AACvF;AAEA,IAAI,mBAAmB;AACvB,IAAM,iBAAiB,CAAC,kBAAkB,eAAe,aAAa,qBAAqB,QAAQ;AACnG,IAAM,oBAAoB,IAAI,IAAI,cAAc;AAChD,IAAM,gBAAgB,CAAC,MAAM;AAE7B,IAAI;AACJ,IAAI,iBAAiB,CAAC;AAEtB,eAAe,iBAAiB,WAAW;AACzC,MAAI,UAAU,UAAU,EAAG;AAC3B,aAAW,YAAY,WAAW;AAChC,UAAM,EAAE,OAAO,IAAI;AACnB,QAAI,OAAO,aAAa,QAAS;AACjC,QAAI,kBAAkB,IAAI,OAAO,EAAE,EAAG;AACtC,QAAI,OAAO,WAAW,SAAS,cAAc,CAAC,CAAC,EAAG;AAClD,mBAAe,KAAK,QAAQ;AAAA,EAC9B;AACA,MAAI,eAAe,SAAS,EAAG;AAE/B,MAAI,cAAe,cAAa,aAAa;AAC7C,kBAAgB,WAAW,YAAY;AACrC,QAAI,CAAC,oBAAoB,gBAAgB,GAAG;AAC1C,yBAAmB;AACnB,uBAAiB,iBAAiB;AAAA,IACpC;AACA,QAAI,kBAAkB;AACpB,uBAAiB,mBAAmB,SAAS;AAC7C,qCAA+B;AAAA,IACjC;AACA,UAAM,SAAS,gBAAgB;AAC/B,QAAI,UAAW,WAAW,cAAe;AACvC,qBAAe;AACf,uBAAiB,oBAAoB;AAAA,IACvC;AACA,qBAAiB,CAAC;AAClB,oBAAgB;AAAA,EAClB,GAAG,GAAG;AACR;AAEA,SAAS,iBAAiB,oBAAoB,MAAM;AAClD,MAAI,kBAAkB;AACtB,mBAAiB,IAAI,iBAAiB,gBAAgB;AACtD,iBAAe,QAAQ,UAAU,GAAG,EAAE,WAAW,MAAM,SAAS,MAAM,YAAY,MAAM,CAAC;AAC3F,CAAC;AAED,eAAe,oBAAoB,GAAkB,IAAY;AAC/D,QAAM,OAAO,uBAAuB,EAAE,cAAc,EAAE;AACtD,MAAI,UAAU,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,SAAS,MAAM,EAAE,SAAS,KAAK,EAAE,QAAQ,IAAI,MAAM,MAAM,IAAI,QAAQ,MAAM,SAAS,CAAC;AACzH,MAAI,MAAM;AACR,MAAE,eAAe;AACjB,QAAI,KAAK,aAAa,SAAU,CAAC,KAA2B,MAAM;AAAA,QAC7D,CAAC,KAAqB,MAAM;AAAA,EACnC;AACF;AAKA,SAAS,iBAAiB,WAAW,CAAC,MAAM;AAC1C,MAAI,EAAE,QAAQ,SAAU,qBAAoB,GAAG,wBAAwB;AACvE,MAAI,EAAE,QAAQ,WAAW,EAAE,QAAS,qBAAoB,GAAG,uBAAuB;AAClF,MAAI,EAAE,QAAQ,OAAO,EAAE,QAAS,qBAAoB,GAAG,wBAAwB;AAC/E,MAAI,EAAE,QAAQ,OAAO,EAAE,QAAS,qBAAoB,GAAG,iCAAiC;AACxF,MAAI,EAAE,QAAQ,OAAO,EAAE,QAAS,qBAAoB,GAAG,iCAAiC;AACxF,MAAI,EAAE,QAAQ,OAAO,EAAE,QAAS,qBAAoB,GAAG,mBAAmB;AAC1E,MAAI,EAAE,QAAQ,YAAY,EAAE,QAAS,qBAAoB,GAAG,mBAAmB;AAC/E,MAAI,EAAE,QAAQ,OAAO,EAAE,QAAS,qBAAoB,GAAG,qBAAqB;AAC9E,CAAC;AAED,SAAS,qBAAqB,MAAM,UAAU;AAC5C,QAAM,WAAW,MAAM,SAAS,aAAa,MAAM,aAAa,KAAK,KAAK;AAC1E,MAAI,aAAa,UAAU;AACzB,UAAM,eAAe,OAAO,WAAW,QAAQ;AAC/C,WAAO,OAAO,MAAM,YAAY,IAAI,OAAO,oBAAoB;AAAA,EACjE;AACA,SAAO,SAAS,YAAY;AAC9B;AAEA,SAAS,UAAU,OAAO,aAAa,UAAU,WAAW;AAC1D,QAAM,QAAQ,MAAM,cAAc,OAAO;AACzC,MAAI,CAAC,MAAO;AACZ,QAAM,OAAO,MAAM,KAAU,MAAM,iBAAiB,IAAI,CAAC;AACzD,QAAM,YAAY,cAAc,SAAS,KAAK;AAC9C,QAAM,aAAa,KAChB,IAAI,CAAC,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,EACpC,KAAK,CAAC,GAAG,MAAM;AACd,UAAM,QAAQ,EAAE,IAAI,SAAS,WAAW;AACxC,UAAM,QAAQ,EAAE,IAAI,SAAS,WAAW;AACxC,UAAM,SAAS,qBAAqB,OAAO,QAAQ;AACnD,UAAM,SAAS,qBAAqB,OAAO,QAAQ;AACnD,QAAI,SAAS,OAAQ,QAAO,KAAK;AACjC,QAAI,SAAS,OAAQ,QAAO,IAAI;AAChC,WAAO,EAAE,QAAQ,EAAE;AAAA,EACrB,CAAC;AACH,QAAM,gBAAgB,GAAG,WAAW,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC;AAC7D;AAEA,SAAS,oBAAoB,OAAO,cAAc,WAAW;AAC3D,QAAM,UAAU,MAAM,iBAAiB,aAAa;AACpD,aAAW,UAAU,SAAS;AAC5B,WAAO,UAAU,OAAO,cAAc,aAAa;AACnD,WAAO,gBAAgB,WAAW;AAAA,EACpC;AACA,eAAa,UAAU,IAAI,cAAc,SAAS,gBAAgB,YAAY;AAC9E,eAAa,aAAa,aAAa,cAAc,SAAS,eAAe,WAAW;AAC1F;AAEA,SAAS,yBAAyBE,QAAO;AACvC,QAAM,SAASA,OAAM,OAAO,QAAQ,aAAa;AACjD,MAAI,CAAC,OAAQ;AACb,QAAM,QAAQ,OAAO,QAAQ,6BAA6B;AAC1D,MAAI,CAAC,MAAO;AACZ,QAAM,UAAU,MAAM,KAAU,MAAM,iBAAiB,aAAa,CAAC;AACrE,QAAM,cAAc,QAAQ,QAAQ,MAAM;AAC1C,MAAI,cAAc,EAAG;AAErB,QAAM,iBAAiB,MAAM,QAAQ,WAAW,MAAM,QAAQ;AAC9D,QAAM,mBAAmB,MAAM,QAAQ,aAAa,MAAM,QAAQ,oBAAoB;AACtF,QAAM,kBAAkB,mBAAmB,OAAO,QAAQ;AAC1D,QAAM,YAAY,mBAAmB,qBAAqB,QAAQ,SAAS;AAE3E,QAAM,QAAQ,UAAU,OAAO,QAAQ;AACvC,QAAM,QAAQ,YAAY;AAC1B,YAAU,OAAO,aAAa,OAAO,QAAQ,YAAY,QAAQ,SAAS;AAC1E,sBAAoB,OAAO,QAAQ,SAAS;AAC9C;AAEA,eAAsB,kBAAkB;AACtC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,OAAO,UAAU;AACvB,MAAI,CAAC,KAAK,QAAQ,kBAAkB;AAClC,SAAK,iBAAiB,SAAS,wBAAwB;AACvD,SAAK,QAAQ,mBAAmB;AAAA,EAClC;AACA,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,mBAAmB,KAAK,MAAM,KAAK,EAAE,CAAC;AAC1C,QAAM,mBAAmB,KAAK,EAAE;AAClC;AAEA,eAAsB,WAAW,UAAU;AACzC,MAAI,CAAC,SAAU;AAEf,MAAI,CAAC,QAAQ,sFAAsF,QAAQ,EAAE,EAAG;AAChH,QAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,qBAAqB,mBAAmB,QAAQ,CAAC,IAAI,EAAE,QAAQ,SAAS,CAAC;AAClH,MAAI,CAAC,OAAO,IAAI,WAAW,KAAK;AAC9B,UAAM,cAAc,EAAE,MAAM,UAAU,QAAQ,KAAK,QAAQ,YAAY,KAAK,WAAW,CAAC;AACxF;AAAA,EACF;AACA,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,MAAI,cAAc,IAAI;AACxB;AACA,OAAO,aAAa;AAKb,SAAS,mBAAmBC,KAAI;AACrC,MAAIA,QAAO,SAAU,QAAO;AAC5B,QAAM,gBAAgB,iBAAiBA,GAAE;AACzC,QAAMC,aAAY,cAAc,YAAY;AAC5C,MAAI,CAACA,WAAW,QAAO;AACvB,SAAO,mBAAmBD,IAAG,UAAU;AACzC;AAEO,SAAS,iBAAiBA,KAAI;AACnC,QAAM,SAASA,IAAG,sBAAsB;AACxC,QAAM,eAAe,OAAO;AAC5B,QAAM,aAAa,OAAO,SAAS,KAAK,OAAO,MAAM;AACrD,SAAO;AACT;;;AC9SA,IAAI,oBAA+B,CAAC;AAEpC,IAAM,iBAAiB,CAACE,QAA2B;AACjD,QAAM,WAAsB,CAAC;AAC7B,WAAS,IAAI,GAAG,IAAIA,IAAG,SAAS,QAAQ,KAAK;AAC3C,aAAS,KAAKA,IAAG,SAAS,CAAC,CAAC;AAC5B,QAAIA,IAAG,SAAS,CAAC,EAAE,SAAS,OAAQ,UAAS,KAAK,GAAG,eAAeA,IAAG,SAAS,CAAC,CAAC,CAAC;AAAA,EACrF;AACA,SAAO;AACT;AAEA,SAAS,QAAQA,KAAqB;AACpC,MAAI,OAAO;AACX,EAAAA,IAAG,WAAW,QAAQ,CAAC,SAAS;AAC9B,QAAI,KAAK,aAAa,KAAK,UAAW,SAAQ,KAAK,aAAa;AAAA,EAClE,CAAC;AACD,SAAO,KAAK,KAAK;AACnB;AAEA,IAAI,iBAAiB;AAErB,SAAS,kBAAkB,OAAwB;AACjD,QAAM,SAAS,UAAU,EAAE,eAAe,kBAAkB;AAC5D,MAAI,CAAC,OAAQ;AACb,SAAO,YAAY;AACnB,QAAM,OAAO,SAAS,cAAc,GAAG;AAEvC,QAAM,SAAS,MAAM;AACnB,QAAI,iBAAiB,GAAG;AACtB;AACA,YAAM,cAAc,EAAE,eAAe;AACrC,WAAK,YAAY,sBAAsB,iBAAiB,CAAC,OAAO,MAAM,MAAM;AAAA,IAC9E;AAAA,EACF;AACA,QAAM,SAAS,MAAM;AACnB,QAAI,iBAAiB,MAAM,SAAS,GAAG;AACrC;AACA,YAAM,cAAc,EAAE,eAAe;AACrC,WAAK,YAAY,sBAAsB,iBAAiB,CAAC,OAAO,MAAM,MAAM;AAAA,IAC9E;AAAA,EACF;AAEA,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,YAAY;AACjB,OAAK,YAAY;AACjB,OAAK,UAAU;AACf,OAAK,QAAQ;AACb,SAAO,YAAY,IAAI;AAEvB,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,YAAY;AACjB,OAAK,YAAY;AACjB,OAAK,QAAQ;AACb,OAAK,UAAU;AACf,SAAO,YAAY,IAAI;AAEvB,OAAK,YAAY,gBAAgB,MAAM,MAAM;AAC7C,SAAO,YAAY,IAAI;AACzB;AAEA,eAAsB,gBAAgB;AACpC,QAAM,SAAS,UAAU,EAAE,cAAc,qCAAqC;AAC9E,QAAM,KAAK,UAAU,EAAE,eAAe,oBAAoB;AAC1D,MAAI,EAAE,kBAAkB,wBAAwB,CAAC,IAAI;AAEnD;AAAA,EACF;AACA,QAAM,kBAAkB,YAAY;AAClC,QAAI,kBAAkB,SAAS,IAAK,qBAAoB,eAAe,EAAE;AACzE,UAAM,QAAQ,CAAC;AACf,eAAWA,OAAM,mBAAmB;AAClC,UAAI,OAAO,MAAM,SAAS,KAAK,QAAQA,GAAE,EAAE,YAAY,EAAE,SAAS,OAAO,MAAM,YAAY,CAAC,GAAG;AAC7F,QAAAA,IAAG,UAAU,IAAI,qBAAqB;AACtC,cAAM,KAAKA,GAAE;AAAA,MACf,OAAO;AACL,QAAAA,IAAG,UAAU,OAAO,qBAAqB;AAAA,MAC3C;AAAA,IACF;AACA,sBAAkB,KAAK;AAAA,EACzB;AACA,SAAO,iBAAiB,SAAS,eAAe;AAClD;;;AC/EO,SAAS,iBAAiB,cAAsB,MAA4B;AACjF,QAAM,WAAW,UAAU,EAAE,eAAe,gBAAgB;AAC5D,MAAI,SAAU,UAAS,MAAM;AAC7B,QAAM,MAAM,UAAU,EAAE,cAAc,oCAAoC;AAC1E,MAAI,CAAC,IAAK,QAAO,CAAC,SAAS,GAAG,IAAI;AAClC,QAAM,OAAO,MAAM,KAAU,UAAU,EAAE,iBAAiB,2BAA2B,CAAC;AACtF,QAAM,SAAS,KAAK,UAAU,CAAC,QAAQ,IAAI,UAAU,SAAS,UAAU,CAAC;AACzE,QAAM,WAAW,CAAC,SAAS,SAAS,SAAS,QAAQ;AACrD,MAAI,WAAW,SAAS,MAAM,KAAK;AACnC,MAAI,oBAAoB,EAAE,MAAM,WAAW,KAAK,UAAU,QAAQ,OAAO,OAAO,OAAO,CAAC;AAGxF,MAAK,aAAa,WAAa,OAAO,OAAO,WAAW,eAAgB,OAAO,QAAQ;AACrF,eAAW;AACX,aAAS,IAAI,GAAG,IAAI,OAAO,OAAO,OAAO,WAAW,KAAK;AACvD,WAAK,IAAI,CAAC,IAAI,OAAO,OAAO,SAAS,IAAI,GAAG,OAAO,KAAK;AAAA,IAC1D;AAAA,EACF;AAEA,SAAO,CAAC,UAAU,GAAG,IAAI;AAC3B;AAEA,OAAO,mBAAmB;AAE1B,eAAsB,iBAAiB;AACrC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,OAAO,CAAC,SAAS,UAAU,SAAS;AAC1C,aAAW,OAAO,MAAM;AACtB,UAAM,MAAM,UAAU,EAAE,eAAe,WAAW,GAAG,SAAS;AAC9D,QAAI,CAAC,IAAK;AACV,QAAI,MAAM,SAAS;AACnB,QAAI,UAAU,MAAM;AAClB,YAAM,IAAI,UAAU,EAAE,eAAe,eAAe,GAAG,EAAE;AACzD,UAAI,CAAC,EAAG;AACR,QAAE,MAAM,UAAU,EAAE,MAAM,YAAY,SAAS,UAAU;AACzD,YAAM,IAAI,UAAU,EAAE,eAAe,WAAW,GAAG,SAAS;AAC5D,UAAI,CAAC,EAAG;AACR,QAAE,MAAM,WAAW,EAAE,MAAM,aAAa,MAAM,MAAM;AAAA,IACtD;AAAA,EACF;AAEA,QAAMC,MAAK,UAAU,EAAE,eAAe,sBAAsB;AAC5D,MAAI,CAACA,IAAI;AACT,QAAM,uBAAuB,IAAI,qBAAqB,CAAC,YAAY;AACjE,QAAI,QAAQ,CAAC,EAAE,oBAAoB,GAAG;AACpC,YAAM,UAAU,MAAM,KAAU,UAAU,EAAE,iBAAiB,sCAAsC,CAAC;AACpG,iBAAW,OAAO,SAAS;AACzB,YAAI,EAAE,eAAe,aAAc;AACnC,cAAM,OAAO,IAAI,UAAU,YAAY;AACvC,iBAAS,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC9B,gBAAM,MAAM,UAAU,EAAE,eAAe,WAAW,IAAI,WAAW,CAAC,EAAE;AACpE,cAAI,IAAK,KAAI,MAAM;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACD,uBAAqB,QAAQA,GAAE;AAE/B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,kBAAkB,KAAK,MAAM,KAAK,EAAE,CAAC;AACzC,QAAM,kBAAkB,KAAK,EAAE;AACjC;;;AC5DA,IAAM,uBAAuB,CAAC;AAC9B,IAAM,mBAAmB,CAAC;AAC1B,IAAI,UAAU;AACd,IAAI,aAAa;AACjB,IAAI,UAAU;AAIP,SAAS,sBAAsB;AACpC,SAAO;AACT;AAEO,IAAM,iBAAiB,MAAM;AAClC,MAAI,UAAU;AACd,MAAI,UAAU,EAAE,eAAe,gBAAgB,GAAG,gBAAgB,KAAK,UAAU,EAAE,eAAe,kBAAkB,GAAG,gBAAgB,EAAG,WAAU;AAAA,WAC3I,UAAU,EAAE,eAAe,gBAAgB,GAAG,gBAAgB,KAAK,UAAU,EAAE,eAAe,kBAAkB,GAAG,gBAAgB,EAAG,WAAU;AAAA,WAChJ,UAAU,EAAE,eAAe,gBAAgB,GAAG,gBAAgB,KAAK,UAAU,EAAE,eAAe,kBAAkB,GAAG,gBAAgB,EAAG,WAAU;AAAA,WAChJ,UAAU,EAAE,eAAe,cAAc,GAAG,gBAAgB,KAAK,UAAU,EAAE,eAAe,gBAAgB,GAAG,gBAAgB,EAAG,WAAU;AAAA,WAC5I,UAAU,EAAE,eAAe,cAAc,GAAG,gBAAgB,EAAG,WAAU;AAAA,WACzE,UAAU,EAAE,eAAe,mBAAmB,GAAG,gBAAgB,EAAG,WAAU;AAAA,WAC9E,UAAU,EAAE,eAAe,oBAAoB,GAAG,gBAAgB,EAAG,WAAU;AAExF,MAAI,CAAC,WAAW,WAAW,SAAS,EAAE,SAAS,OAAO,GAAG;AACvD,cAAU;AAAA,EACZ,WAAW,YAAY,IAAI;AACzB,cAAU;AAAA,EACZ;AAEA,MAAI,YAAY,GAAI,QAAO;AAE3B,MAAI,UAAU,EAAE,eAAe,aAAa,GAAG,MAAM,YAAY,QAAS,WAAU;AAAA,WAC3E,UAAU,EAAE,eAAe,aAAa,GAAG,MAAM,YAAY,QAAS,WAAU;AAAA,WAChF,UAAU,EAAE,eAAe,aAAa,GAAG,MAAM,YAAY,QAAS,WAAU;AAAA,WAChF,UAAU,EAAE,eAAe,WAAW,GAAG,MAAM,YAAY,QAAS,WAAU;AAAA,MAClF,WAAU;AAEf,SAAO;AACT;AAEA,IAAM,kBAAkB,MAAM;AAC5B,QAAM,UAAU,eAAe;AAC/B,MAAI,OAAO,UAAU,EAAE,cAAc,IAAI,OAAO,gDAAgD;AAChG,MAAI,CAAC,KAAM,QAAO,UAAU,EAAE,cAAc,IAAI,OAAO,oCAAoC;AAC3F,QAAM,WAAW,OAAO,KAAK,YAAY;AACzC,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,MAAI,SAAU,UAAS,MAAM,UAAU,aAAa,UAAU,gBAAgB;AAE9E,SAAO;AACT;AAEA,IAAM,aAAa,CAAC,UAAU;AAC5B,MAAI,CAAC,MAAO;AACZ,QAAM,MAAM,eAAe;AAC3B,QAAM,OAAO,gBAAgB;AAE7B,QAAMC,MAAK,UAAU,EAAE,cAAc,IAAI,MAAM,GAAG,kCAAkC;AACpF,MAAIA,KAAI;AACN,IAAAA,IAAG,QAAQ,KAAK,UAAU,KAAK;AAC/B,gBAAYA,GAAE;AAAA,EAChB;AACF;AAIO,SAAS,gBAAgBC,QAAO;AAErC,QAAM,UAAU,eAAe;AAC/B,QAAM,MAAM,UAAU,EAAE,eAAe,GAAG,OAAO,oBAAoB;AACrE,MAAI,MAAM;AACV,EAAAA,OAAM,gBAAgB;AACtB,EAAAA,OAAM,eAAe;AACvB;AACA,OAAO,kBAAkB;AAEzB,SAAS,kBAAkB,MAAM;AAE/B,QAAMD,MAAM,OAAO,QAAgB,eAAe;AAClD,MAAIA,KAAI,WAAW,SAAS,MAAM,EAAG,YAAW,EAAE,IAAI,kBAAkB,MAAMA,IAAG,QAAQ,KAAK,CAAC;AAAA,MAC1F,YAAW,EAAE,IAAI,kBAAkB,MAAM,KAAK,CAAC;AACpD,SAAO,CAAC,GAAG,IAAI;AACjB;AAEA,SAAS,aAAaA,KAAI,MAAM;AAC9B,QAAM,yBAAyB,CAAC,OAAO,QAAQ,gBAAgB,MAAM,MAAM,sBAAsB,EAAE,IAAI,CAAC,MAAM,MAAM;AAClH,QAAI,IAAI,MAAM,EAAG,QAAO,KAAK,MAAM,MAAM,EAAE,KAAK,WAAW;AAC3D,WAAO;AAAA,EACT,CAAC,EAAE,KAAK,EAAE;AAEV,QAAM,WAAW,CAAC,GAAG,QAAQ;AAC3B,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,UAAM,WAAW,qBAAqB,eAAe,CAAC;AACtD,QAAI,aAAa,SAAS;AAC1B,iBAAa,uBAAuB,YAAY,IAAI,GAAG,IAAI,EAAE;AAC7D,iBAAa,uBAAuB,YAAY,GAAG,GAAG,KAAK,EAAE;AAC7D,QAAI,eAAe,SAAS,MAAO,eAAc,IAAI,GAAG;AACxD,aAAS,QAAQ;AACjB,gBAAY,QAAQ;AAAA,EACtB;AAEA,MAAI,KAAK,WAAW,EAAG;AACvB,QAAM,WAAW,KAAK,MAAM,GAAG;AAC/B,MAAI,CAAC,YAAY,SAAS,WAAW,EAAG;AACxC,QAAM,SAASA,IAAG,uBAAuB,MAAM,EAAE,CAAC;AAClD,MAAI,CAAC,QAAQ,YAAY,OAAO,SAAS,SAAS,EAAG;AACrD,aAAW,OAAO,UAAU;AAC1B,UAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,SAAK,UAAU,IAAI,KAAK;AACxB,SAAK,cAAc;AACnB,SAAK,UAAU,CAAC,MAAM,SAAS,GAAG,GAAG;AACrC,WAAO,YAAY,IAAI;AAAA,EACzB;AACF;AAEA,SAAS,oBAAoB,MAAM,MAAM;AACvC,SAAO,0BAA0B,EAAE,MAAM,KAAK,GAAG,CAAC,SAAS;AACzD,UAAM,UAAU,eAAe;AAC/B,UAAM,cAAc,UAAU,EAAE,cAAc,IAAI,OAAO,iCAAiC;AAC1F,QAAI,aAAa;AACf,kBAAY,QAAS,MAAc,aAAa,KAAK,KAAK;AAC1D,MAAC,OAAe,YAAY,WAAW;AAAA,IACzC;AACA,eAAW,EAAE,IAAI,uBAAuB,MAAM,KAAK,CAAC;AAAA,EACtD,CAAC;AACH;AAEA,SAAS,wBAAwB;AAC/B,QAAM,WAAW,gBAAgB;AACjC,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,MAAI,WAAW,MAAM,KAAU,UAAU,EAAE,iBAAiB,8BAA8B,CAAC;AAC3F,aAAW,SAAS,OAAO,CAACA,QAAOA,IAAG,QAAQ,MAAM,YAAY,EAAE,SAAS,SAAS,YAAY,CAAC,CAAC;AAElG,SAAO;AACT;AAEA,eAAe,0BAA0B,YAAY;AACnD,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,eAAa,WAAW,YAAY,EAAE,KAAK;AAC3C,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,WAAW,gBAAgB;AACjC,MAAI,CAAC,SAAU;AACf,QAAM,WAAW,MAAM,KAAU,UAAU,EAAE,iBAAiB,sBAAsB,CAAC;AACrF,QAAM,QAAQ,SAAS,OAAO,CAACA,QAAOA,IAAG,GAAG,YAAY,EAAE,SAAS,SAAS,YAAY,CAAC,CAAC;AAC1F,aAAW,MAAM,OAAO;AACtB,UAAM,QAAQ,MAAM,KAAU,GAAG,iBAAiB,OAAO,KAAK,CAAC,CAAC;AAChE,aAAS,MAAM;AACf,QAAI,eAAe,MAAM,eAAe,QAAQ;AAC9C,YAAM,QAAQ,CAAC,SAAS;AAAE,aAAK,MAAM,UAAU;AAAA,MAAI,CAAC;AAAA,IACtD,WAAW,eAAe,cAAc;AACtC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,YAAY,KAAK,KAAK,QAAQ,SAAS,KAAK,KAAK;AAAA,MAC/D,CAAC;AAAA,IACH,WAAW,eAAe,SAAS;AACjC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,MAAM,IAAI,KAAK;AAAA,MAC7B,CAAC;AAAA,IACH,WAAW,eAAe,cAAc;AACtC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,WAAW,IAAI,KAAK;AAAA,MAClC,CAAC;AAAA,IACH,WAAW,eAAe,cAAc;AACtC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,WAAW,IAAI,KAAK;AAAA,MAClC,CAAC;AAAA,IACH,WAAW,eAAe,UAAU;AAClC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,OAAO,IAAI,KAAK;AAAA,MAC9B,CAAC;AAAA,IACH,WAAW,eAAe,cAAc;AACtC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,WAAW,IAAI,KAAK;AAAA,MAClC,CAAC;AAAA,IACH,WAAW,eAAe,aAAa;AACrC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,UAAU,IAAI,KAAK;AAAA,MACjC,CAAC;AAAA,IACH,WAAW,eAAe,UAAU;AAClC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,YAAY,IAAI,SAAS;AAAA,MACvC,CAAC;AAAA,IACH,WAAW,eAAe,cAAc;AACtC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EAAE,QAAQ,YAAY,WAAW,EAAE,WAAW,MAAM,GAAG,EACnE,SAAS,YAAY,IAAI,KAAK;AAAA,MACnC,CAAC;AAAA,IACH,WAAW,WAAW,WAAW,IAAI,GAAG;AACtC,mBAAa,WAAW,UAAU,CAAC;AACnC,YAAM,KAAK,IAAI,OAAO,YAAY,GAAG;AACrC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,GAAG,KAAK,aAAa,KAAK,QAAQ,QAAQ,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ,IAAI,EAAE,IAAI,KAAK;AAAA,MAClI,CAAC;AAAA,IACH,OAAO;AAEL,UAAI,WAAW;AACf,UAAI,aAAa,WAAW,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,MAAM,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AACxG,UAAI,cAAc,WAAW,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC;AACnI,UAAI,WAAW,WAAW,KAAK,WAAW,SAAS,GAAG,GAAG;AACvD,qBAAa,WAAW,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,MAAM,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AACpG,sBAAc,WAAW,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC;AAC/H,mBAAW;AAAA,MACb;AACA,YAAM,gBAAgB,WAAW,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7E,YAAM,iBAAiB,YAAY,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC/E,YAAM,QAAQ,CAAC,SAAS;AACtB,YAAI,OAAO;AACX,YAAI,KAAK,QAAQ,SAAU,SAAQ,GAAG,KAAK,QAAQ,QAAQ;AAC3D,YAAI,KAAK,QAAQ,KAAM,SAAQ,GAAG,KAAK,QAAQ,IAAI;AACnD,YAAI,KAAK,QAAQ,KAAM,SAAQ,GAAG,KAAK,QAAQ,IAAI;AACnD,eAAO,KAAK,YAAY,EAAE,QAAQ,YAAY,WAAW,EAAE,WAAW,MAAM,GAAG;AAC/E,YAAI,YAAY,cAAc,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,CAACA,QAAOA,IAAG,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,GAAG;AACrJ,eAAK,MAAM,UAAU;AAAA,QACvB,WAAW,CAAC,YAAY,cAAc,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,CAACA,QAAOA,IAAG,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,GAAG;AAC5J,eAAK,MAAM,UAAU;AAAA,QACvB,OAAO;AACL,eAAK,MAAM,UAAU;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,IACH;AACA,aAAS,MAAM,OAAO,CAAC,SAAS,KAAK,MAAM,YAAY,EAAE,EAAE;AAAA,EAC7D;AACA,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,8BAA8B,UAAU,WAAW,KAAK,UAAU,KAAK,SAAS,KAAK,MAAM,KAAK,EAAE,CAAC,EAAE;AACzG,QAAM,uBAAuB,UAAU,IAAI,KAAK,EAAE;AACpD;AAkCA,SAAS,kBAAkB,QAAQ,MAAM;AACvC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,WAAW,CAAC,WAAW,cAAc,cAAc,iBAAiB,iBAAiB,kBAAkB,iBAAiB;AAC9H,QAAM,WAAW,gBAAgB;AACjC,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,WAAW,MAAM,KAAU,UAAU,EAAE,iBAAiB,sBAAsB,CAAC;AACrF,QAAM,QAAQ,SAAS,OAAO,CAACE,QAAOA,IAAG,GAAG,YAAY,EAAE,SAAS,SAAS,YAAY,CAAC,CAAC;AAC1F,MAAI,MAAM;AACV,MAAI,YAAY,GAAI,WAAU,SAAS,QAAQ,KAAK,mBAAmB;AACvE,MAAI,UAAU,QAAS,YAAW,UAAU,KAAK,SAAS;AAC1D,QAAM,eAAe,CAAC,GAAG,MAAM;AAC7B,YAAQ,SAAS;AAAA,MACf,KAAK;AAAG,eAAO;AAAA,MACf,KAAK;AAAG,eAAO,EAAE,QAAQ,OAAO,EAAE,QAAQ,KAAK,cAAc,EAAE,QAAQ,IAAI,IAAI;AAAA,MAC/E,KAAK;AAAG,eAAO,EAAE,QAAQ,OAAO,EAAE,QAAQ,KAAK,cAAc,EAAE,QAAQ,IAAI,IAAI;AAAA,MAC/E,KAAK;AAAG,eAAO,EAAE,QAAQ,QAAS,IAAI,KAAK,EAAE,QAAQ,KAAK,EAAG,QAAQ,IAAK,IAAI,KAAK,EAAE,QAAQ,KAAK,EAAG,QAAQ,IAAI;AAAA,MACjH,KAAK;AAAG,eAAO,EAAE,QAAQ,QAAS,IAAI,KAAK,EAAE,QAAQ,KAAK,EAAG,QAAQ,IAAK,IAAI,KAAK,EAAE,QAAQ,KAAK,EAAG,QAAQ,IAAI;AAAA,MACjH,KAAK;AAAG,eAAO,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,WAAW,EAAE,QAAQ,IAAI,IAAI,WAAW,EAAE,QAAQ,IAAI,IAAI;AAAA,MACpH,KAAK;AAAG,eAAO,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,WAAW,EAAE,QAAQ,IAAI,IAAI,WAAW,EAAE,QAAQ,IAAI,IAAI;AAAA,IACtH;AACA,WAAO;AAAA,EACT;AACA,aAAW,MAAM,OAAO;AACtB,UAAM,QAAQ,MAAM,KAAU,GAAG,iBAAiB,OAAO,KAAK,CAAC,CAAC;AAChE,QAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,WAAO,MAAM;AACb,UAAM,KAAK,YAAY;AACvB,eAAW,QAAQ,MAAO,IAAG,YAAY,IAAI;AAAA,EAC/C;AACA,QAAM,OAAO,SAAS,OAAO;AAC7B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,gBAAgB,EAAE,MAAM,UAAU,KAAK,SAAS,OAAO,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACxG,QAAM,qBAAqB,IAAI,IAAI,KAAK,EAAE;AAC1C,SAAO;AACT;AAOA,eAAsB,kBAAkB,UAAU,OAAO,IAAI;AAC3D,MAAI,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC3C,mBAAiB,IAAI,IAAI;AACzB,YAAU,EAAE,iBAAiB,4BAA4B,EAAE,QAAQ,CAACC,QAAO;AACzE,QAAI,KAAK,SAAS,KAAKA,IAAG,QAAQ,SAAS,KAAM;AACjD,QAAI,SAAS,SAASA,IAAG,QAAQ,IAAI,KAAK,SAAS,SAASA,IAAG,QAAQ,KAAK,EAAG,CAAAA,IAAG,UAAU,IAAI,eAAe;AAAA,QAC1G,CAAAA,IAAG,UAAU,OAAO,eAAe;AAAA,EAC1C,CAAC;AACH;AAEA,SAAS,iBAAiB,QAAQ;AAChC,QAAM,QAAQ;AACd,QAAM,QAAQ,CAAC;AACf,MAAI,QAAQ,MAAM,KAAK,MAAM;AAC7B,SAAO,UAAU,MAAM;AACrB,UAAM,KAAK,MAAM,CAAC,CAAC;AACnB,YAAQ,MAAM,KAAK,MAAM;AAAA,EAC3B;AACA,SAAO;AACT;AAEA,SAAS,YAAY,WAAW;AAC9B,QAAM,UAAU,eAAe;AAC/B,MAAI,eAAe,EAAE,KAAK,SAAS,MAAM,UAAU,CAAC;AACpD,QAAM,WAAW,qBAAqB,OAAO;AAC7C,MAAI,SAAS,MAAM,QAAQ,SAAS,MAAM,GAAI,UAAS,QAAQ,SAAS,MAAM,QAAQ,WAAW,EAAE;AAAA,MAC9F,UAAS,SAAS;AACvB,cAAY,QAAQ;AACpB,oBAAkB,iBAAiB,SAAS,KAAK,GAAG,MAAM;AAC5D;AACA,OAAO,cAAc;AAErB,SAAS,0BAA0BC,QAAO;AAExC,QAAM,UAAU,eAAe;AAC/B,QAAM,iBAAiB,UAAU,EAAE,cAAc,IAAI,OAAO,wBAAwB;AACpF,QAAM,SAASA,OAAM;AACrB,MAAI,gBAAgB;AAClB,mBAAe,QAAQ,GAAG,OAAO,YAAY,KAAK,CAAC;AACnD,gBAAY,cAAc;AAAA,EAC5B,OAAO;AACL,YAAQ,MAAM,mDAAmD,OAAO,EAAE;AAAA,EAC5E;AACF;AAEA,SAAS,2BAA2BA,QAAO;AACzC,QAAM,UAAUA,OAAM,OAAO,YAAY,KAAK;AAC9C,QAAM,aAAa,gBAAgB,EAAE,YAAY;AACjD,QAAM,iBAAiB,UAAU,EAAE,iBAAiB,sBAAsB;AAC1E,MAAI,8BAA8B,EAAE,YAAY,QAAQ,CAAC;AACzD,aAAW,iBAAiB,gBAAgB;AAC1C,QAAI,CAAC,cAAc,GAAG,SAAS,UAAU,EAAG;AAC5C,QAAI,cAAc,QAAQ,kBAAkB,SAAS;AACnD,oBAAc,QAAQ,gBAAgB;AACtC,oBAAc,iBAAiB,OAAO,EAAE,QAAQ,CAAC,SAAS;AAAE,aAAK,MAAM,UAAU;AAAA,MAAI,CAAC;AAAA,IACxF,OAAO;AACL,oBAAc,QAAQ,gBAAgB;AACtC,oBAAc,iBAAiB,OAAO,EAAE,QAAQ,CAAC,SAAS;AACxD,YAAI,KAAK,QAAQ,YAAY,QAAS,MAAK,MAAM,UAAU;AAAA,YACtD,MAAK,MAAM,UAAU;AAAA,MAC5B,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,IAAI,eAAe;AACZ,SAAS,YAAY,MAAM;AAChC,iBAAe;AACf,QAAM,UAAU,eAAe;AAC/B,QAAM,SAAS,UAAU,EAAE,cAAc,IAAI,OAAO,gBAAgB;AACpE,SAAO,MAAM;AACf;AAEO,SAAS,YAAY,QAAc;AACxC,MAAI;AACJ,MAAI,QAAQ;AACV,gBAAY,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AAAA,EACtD,OAAO;AACL,UAAM,UAAU,eAAe;AAC/B,aAAS,UAAU,EAAE,iBAAiB,IAAI,OAAO,qBAAqB;AACtE,gBAAY,MAAM,KAAU,MAAM,EAAE,IAAI,CAACD,QAAOA,IAAG,WAAW,EAAE,OAAO,CAACA,QAAOA,IAAG,SAAS,CAAC;AAAA,EAC9F;AACA,QAAM,QAAQ,UAAU,QAAQ,YAAY;AAC5C,MAAI,QAAQ,GAAI,WAAU,OAAO,OAAO,CAAC;AAAA,MACpC,WAAU,KAAK,YAAY;AAChC,oBAAkB,WAAW,OAAO;AACpC,SAAO,UAAU,KAAK,GAAG;AAC3B;AAEO,SAAS,kBAAkB;AAChC,QAAM,UAAU,eAAe;AAC/B,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,MAAI,SAAU,UAAS,MAAM;AAC/B;AAEO,SAAS,iBAAiB;AAC/B,QAAM,UAAU,eAAe;AAC/B,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,kBAAkB;AACvE,MAAI,QAAS,SAAQ,MAAM;AAC3B,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,gBAAgB;AACxE,MAAI,YAAY;AACd,eAAW,MAAM,WAAW,MAAM,GAAG,GAAG;AAAA,EAE1C;AACF;AACA,OAAO,iBAAiB;AASxB,IAAI,UAAU;AACd,SAAS,kBAAkB,MAAM;AAE/B,YAAU;AACV,QAAM,UAAU,eAAe;AAC/B,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,sBAAsB;AAC5E,MAAI,SAAU,YAAW,MAAM,SAAS,MAAM,GAAG,GAAG;AACpD,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,gBAAgB;AACxE,MAAI,cAAc,QAAS,YAAW,MAAM,WAAW,MAAM,GAAG,GAAG;AACnE,SAAO,CAAC,GAAG,IAAI;AACjB;AAEA,SAAS,gBAAgB,MAAM;AAE7B,QAAM,UAAU,eAAe;AAC/B,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,gBAAgB;AACxE,MAAI,cAAc,QAAS,YAAW,MAAM,WAAW,MAAM,GAAG,GAAG;AACnE,YAAU;AACV,SAAO;AACT;AAGA,SAAS,gBAAgB;AACvB,MAAI,sBAAsB,EAAE,WAAW,GAAG;AAExC,UAAM,UAAU,eAAe;AAC/B,UAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,gBAAgB;AACxE,QAAI,WAAY,YAAW,MAAM;AAAA,EACnC;AACF;AAGA,SAAS,yBAAyB,SAAS;AACzC,MAAI,OAAO,UAAU,EAAE,cAAc,IAAI,OAAO,aAAa;AAC7D,MAAI,KAAM,MAAK,UAAU,IAAI,gBAAgB;AAC7C,QAAM,KAAK,UAAU,EAAE,eAAe,GAAG,OAAO,iBAAiB;AACjE,SAAO,UAAU,EAAE,cAAc,IAAI,OAAO,mBAAmB;AAC/D,MAAI,CAAC,KAAM;AAGX,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,qBAAqB;AAC1E,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,gBAAgB;AACxE,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa;AAClE,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa;AAClE,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa;AAClE,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa;AAClE,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,QAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,UAAQ,UAAU,IAAI,SAAS;AAC/B,MAAI,WAAY,SAAQ,YAAY,UAAU;AAC9C,MAAI,SAAU,SAAQ,YAAY,QAAQ;AAC1C,MAAI,SAAU,SAAQ,YAAY,QAAQ;AAC1C,MAAI,QAAS,SAAQ,YAAY,OAAO;AACxC,MAAI,QAAS,SAAQ,YAAY,OAAO;AACxC,MAAI,QAAS,SAAQ,YAAY,OAAO;AACxC,MAAI,QAAS,SAAQ,YAAY,OAAO;AACxC,MAAI,SAAU,SAAQ,YAAY,QAAQ;AAC1C,WAAS,UAAU,MAAM,SAAS,UAAU,OAAO,qBAAqB;AAExE,OAAK,YAAY,OAAO;AAGxB,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,oBAAoB;AAC5E,QAAM,eAAe,UAAU,EAAE,eAAe,GAAG,OAAO,sBAAsB;AAChF,MAAI,cAAc,cAAc;AAC9B,eAAW,QAAQ;AACnB,eAAW,UAAU,MAAM,aAAa,MAAM;AAAA,EAChD;AAGA,QAAM,MAAM,SAAS,cAAc,KAAK;AACxC,MAAI,UAAU,IAAI,aAAa;AAC/B,OAAK,YAAY,GAAG;AACpB,QAAM,YAAY,UAAU,EAAE,cAAc,IAAI,OAAO,eAAe;AACtE,QAAM,iBAAiB,UAAU,EAAE,cAAc,IAAI,OAAO,wBAAwB;AACpF,QAAM,iBAAiB,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AAC1E,MAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,eAAgB;AACtD,YAAU,UAAU,IAAI,QAAQ;AAChC,iBAAe,UAAU,IAAI,aAAa;AAC1C,MAAI,YAAY,SAAS;AACzB,MAAI,YAAY,cAAc;AAC9B,MAAI;AACJ,iBAAe,iBAAiB,SAAS,CAAC,QAAQ;AAChD,QAAI,cAAe,cAAa,aAAa;AAC7C,oBAAgB,WAAW,YAAY;AACrC,YAAM,0BAA0B,eAAe,MAAM,YAAY,CAAC;AAClE,sBAAgB;AAAA,IAClB,GAAG,GAAG;AAAA,EACR,CAAC;AAGD,MAAI;AACJ,MAAI,eAA8B;AAClC,MAAI,OAAO,KAAK,sBAAsB;AACpC,cAAU,EAAE,eAAe,GAAG,OAAO,aAAa,EAAE,cAAc,OAAO,MAAM;AAC7E,YAAME,MAAK,EAAE,OAAO,QAAQ,OAAO;AACnC,UAAI,CAACA,OAAOA,IAAG,UAAU,aAAe;AACxC,UAAI,CAAC,eAAe;AAClB,wBAAgB,WAAW,MAAM;AAC/B,8BAAoBA,IAAG,QAAQ,MAAMA,IAAG,QAAQ,IAAI;AACpD,uBAAaA,KAAIA,IAAG,QAAQ,IAAI;AAChC,yBAAeA,IAAG;AAAA,QACpB,GAAG,GAAG;AAAA,MACR;AACA,MAAAA,IAAG,aAAa,MAAM;AACpB,qBAAa,aAAa;AAC1B,wBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAGA,QAAM,iBAAiB,IAAI,eAAe,CAAC,YAAY;AACrD,eAAW,SAAS,SAAS;AAC3B,iBAAWA,OAAM,MAAM,KAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa,EAAE,iBAAiB,sBAAsB,CAAC,GAAG;AAC9H,cAAM,IAAI,KAAK,MAAM,MAAM,YAAY,MAAM;AAC7C,YAAI,KAAK,EAAG;AACZ,cAAM,KAAK,KAAK,kBAAkB,SAAS;AAC3C,YAAI,OAAO,KAAK,8BAA8B,aAAa,OAAO,KAAK,eAAe,WAAY,CAAAA,IAAG,MAAM,SAAS,OAAO,EAAE,KAAK,IAAI,EAAE;AAAA,iBAC/H,OAAO,KAAK,8BAA8B,YAAY,OAAO,KAAK,eAAe,WAAY,CAAAA,IAAG,MAAM,SAAS;AAAA,iBAC/G,OAAO,KAAK,8BAA8B,WAAW,OAAO,KAAK,eAAe,WAAY,CAAAA,IAAG,MAAM,SAAS;AAAA,YAClH,CAAAA,IAAG,MAAM,SAAS;AAAA,MAEzB;AAAA,IACF;AAAA,EACF,CAAC;AACD,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,WAAW;AACnE,QAAM,cAAc,UAAU,EAAE,eAAe,GAAG,OAAO,YAAY;AACrE,MAAI,WAAY,gBAAe,QAAQ,UAAU;AACjD,MAAI,YAAa,gBAAe,QAAQ,WAAW;AAGnD,MAAI,CAAC,GAAI;AACT,MAAI;AACJ,MAAI,oBAAoB;AACxB,QAAM,uBAAuB,IAAI,qBAAqB,CAAC,YAAY;AACjE,QAAI,CAAC,mBAAmB;AACtB,0BAAoB;AACpB,UAAI;AACJ,YAAM,SAAS,OAAO,KAAK,8BAA8B,YAAY,IAAI,OAAO,KAAK;AACrF,UAAI,OAAO,KAAK,eAAe,WAAY,KAAI,SAAS,IAAI,SAAS;AAAA,UAChE,KAAI,SAAS,IAAI,SAAS;AAC/B,iBAAWA,OAAM,MAAM,KAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa,EAAE,iBAAiB,sBAAsB,CAAC,GAAG;AAC9H,YAAI,IAAI,EAAG,CAAAA,IAAG,MAAM,SAAS,GAAG,CAAC;AACjC,QAAAA,IAAG,cAAc,MAAM,QAAQ;AAAA,MACjC;AAAA,IACF;AACA,UAAM,QAAQ,MAAM,KAAU,UAAU,EAAE,iBAAiB,8BAA8B,CAAC;AAC1F,QAAI,MAAM,SAAS,KAAK,MAAM,WAAW,YAAY;AACnD,mBAAa,MAAM;AACnB,wBAAkB,OAAO;AAAA,IAC3B;AACA,QAAI,aAAa,QAAQ,CAAC,EAAE,oBAAoB,GAAG;AACjD,iBAAW,QAAQ,CAAC,EAAE,oBAAoB;AAC1C,UAAI,UAAU;AACZ,sBAAc;AACd,YAAI,OAAO,KAAK,8BAA8B,SAAS;AACrD,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,SAAS;AAClB,aAAG,MAAM,QAAQ;AACjB,aAAG,MAAM,QAAQ;AACjB,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY;AACrB,aAAG,MAAM,MAAM;AACf,aAAG,MAAM,aAAa;AACtB,aAAG,MAAM,SAAS;AAClB,oBAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM,QAAQ;AAAA,QAC7E,WAAW,OAAO,KAAK,8BAA8B,WAAW;AAC9D,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,SAAS;AAClB,aAAG,MAAM,QAAQ,GAAG,OAAO,KAAK,4BAA4B;AAC5D,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY;AACrB,aAAG,MAAM,QAAQ;AACjB,aAAG,MAAM,MAAM;AACf,aAAG,MAAM,aAAa;AACtB,aAAG,MAAM,SAAS;AAClB,oBAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM,QAAQ,0BAA0B,OAAO,KAAK,4BAA4B;AAAA,QAC/I,OAAO;AACL,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,SAAS;AAClB,aAAG,MAAM,QAAQ;AACjB,aAAG,MAAM,QAAQ;AACjB,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY;AACrB,aAAG,MAAM,MAAM;AACf,aAAG,MAAM,aAAa;AACtB,aAAG,MAAM,SAAS;AAClB,oBAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM,QAAQ;AAAA,QAC7E;AAAA,MACF,OAAO;AACL,YAAI,OAAO,KAAK,8BAA8B,UAAW,IAAG,MAAM,QAAQ;AAC1E,kBAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM,QAAQ;AAAA,MAC7E;AACA,UAAI,YAAY,SAAS;AACvB,kBAAU,EAAE,eAAe,oBAAoB,EAAE,WAAW,MAAM,QAAQ,UAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM;AAC7I,kBAAU,EAAE,eAAe,cAAc,EAAE,WAAW,MAAM,QAAQ,UAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM;AAAA,MACzI;AAAA,IACF;AAAA,EACF,CAAC;AACD,uBAAqB,QAAQ,EAAE;AACjC;AAEA,eAAsB,eAAe;AACnC,aAAW,WAAW,CAAC,WAAW,WAAW,WAAW,OAAO,GAAG;AAChE,UAAM,MAAM,UAAU,EAAE,eAAe,GAAG,OAAO,qBAAqB;AACtE,QAAI,OAAO,KAAK,uBAAuB,IAAK,KAAI,MAAM;AAAA,EACxD;AACA,MAAI,cAAc;AACpB;AAEA,eAAsB,qBAAqB;AACzC,2BAAyB,SAAS;AAClC,2BAAyB,SAAS;AAClC,2BAAyB,SAAS;AAClC,2BAAyB,OAAO;AAEhC,WAAS,eAAe,SAAS,IAAI;AACnC,UAAM,WAAW,UAAU,EAAE,cAAc,IAAI,EAAE,qBAAqB;AACtE,QAAI,CAAC,SAAU;AACf,QAAI,CAAC,qBAAqB,OAAO,EAAG,sBAAqB,OAAO,IAAI;AACpE,aAAS,iBAAiB,SAAS,MAAM;AAAE,2BAAqB,OAAO,IAAI;AAAA,IAAU,CAAC;AAAA,EACxF;AAEA,iBAAe,WAAW,gBAAgB;AAC1C,iBAAe,WAAW,oBAAoB;AAC9C,iBAAe,WAAW,gBAAgB;AAC1C,iBAAe,WAAW,oBAAoB;AAC9C,iBAAe,WAAW,gBAAgB;AAC1C,iBAAe,WAAW,oBAAoB;AAC9C,iBAAe,SAAS,cAAc;AACtC,iBAAe,SAAS,kBAAkB;AAC1C,MAAI,gBAAgB,OAAO,KAAK,wBAAwB;AACxD,WAAS,gBAAgB,MAAM,YAAY,eAAe,GAAG,OAAO,KAAK,wBAAwB,IAAI;AACvG;AAEA,OAAO,cAAc;AACrB,OAAO,iBAAiB;AACxB,OAAO,kBAAkB;AACzB,OAAO,iBAAiB;AACxB,OAAO,sBAAsB;AAC7B,OAAO,oBAAoB;AAC3B,OAAO,kBAAkB;AACzB,OAAO,4BAA4B;AACnC,OAAO,6BAA6B;AACpC,OAAO,cAAc;;;ACnqBrB,SAAS,uBAAuB,SAAqC;AACnE,QAAM,UAA8B,UAAU,EAAE,cAAc,IAAI,OAAO,UAAU;AACnF,MAAI,CAAC,QAAS,QAAO;AACrB,UAAQ,iBAAiB,SAAS,MAAM;AAEtC,UAAM,MAAM,UAAU,EAAE,eAAe,GAAG,OAAO,yBAAyB;AAC1E,QAAI,IAAK,KAAI,MAAM;AAAA,EACrB,CAAC;AACD,UAAQ,iBAAiB,WAAW,CAAC,MAAqB;AACxD,QAAI,EAAE,YAAY,MAAM,EAAE,YAAY,IAAI;AACxC,YAAM,MAAM,UAAU,EAAE,eAAe,GAAG,OAAO,yBAAyB;AAC1E,UAAI,IAAK,KAAI,MAAM;AAAA,IACrB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AAEJ,eAAsB,wBAAwB;AAC5C,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,CAAC,MAAO,SAAQ,UAAU,EAAE,eAAe,eAAe;AAC9D,MAAI,CAAC,MAAO;AAEZ,QAAM,gBAAgB,IAAI,iBAAiB,CAAC,cAAgC;AAC1E,cAAU,QAAQ,CAAC,mBAAmB;AACpC,YAAM,UAAU,eAAe;AAC/B,YAAM,iBAAiB,eAAe;AACtC,UAAI,0BAA0B,eAAe,eAAe,MAAM,YAAY,QAAQ;AACpF,cAAM,MAAM,UAAU,EAAE,eAAe,GAAG,OAAO,yBAAyB;AAC1E,YAAI,IAAK,KAAI,MAAM;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,MAAI,CAAC,eAAgB,kBAAiB,uBAAuB,SAAS;AACtE,MAAI,CAAC,eAAgB,kBAAiB,uBAAuB,SAAS;AACtE,MAAI,CAAC,eAAgB,kBAAiB,uBAAuB,SAAS;AACtE,gBAAc,QAAQ,OAAO,EAAE,YAAY,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC;AAC7E,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,wBAAwB,KAAK,MAAM,KAAK,EAAE,CAAC;AAC/C,QAAM,wBAAwB,KAAK,EAAE;AACvC;;;AC5CA,eAAsB,eAAe;AACnC,MAAI,cAAc;AAClB,SAAO,iBAAiB,QAAQ,CAAC,MAAiB;AAChD,UAAM,SAAS,EAAE,aAAa,EAAE,CAAC;AACjC,QAAI,CAAC,OAAO,YAAa;AACzB,QAAI,OAAO,YAAY,QAAQ,QAAQ,MAAM,GAAI;AACjD,UAAM,UAAU,eAAe;AAC/B,UAAM,eAAe,GAAG,OAAO;AAC/B,UAAM,YAAY,UAAU,EAAE,eAAe,YAAY;AACzD,QAAI,aAAa,QAAQ,cAAc,SAAS;AAChD,QAAI,CAAC,UAAW;AAChB,UAAM,YAAY,UAAU,cAAc,oBAAoB;AAC9D,QAAI,CAAC,aAAa,CAAC,UAAW;AAC9B,SAAK,EAAE,cAAc,OAAO,UAAU,KAAK,GAAG;AAC5C,QAAE,gBAAgB;AAClB,QAAE,eAAe;AACjB,UAAI,qBAAqB,iBAAkB,WAAU,QAAQ,EAAE,aAAa;AAC5E,gBAAU,cAAc,IAAI,MAAM,QAAQ,CAAC;AAC3C,UAAI,mBAAmB,UAAU,KAAK;AAAA,IACxC;AAAA,EACF,CAAC;AACH;;;AC1BA,IAAI,cAAc;AAClB,IAAI,qBAAqB;AAEzB,eAAsB,mBAAmB;AACvC,MAAI;AACF,QAAI,CAAC,oBAAoB;AACvB,2BAAqB,UAAU,EAAE,eAAe,uBAAuB;AACvE,UAAI,mBAAoB,oBAAmB,iBAAiB,SAAS,MAAM,aAAa,kBAAkB,GAAG,IAAI;AAAA,IACnH;AACA,QAAI,SAAS,SAAS,EAAG;AACzB,QAAI,kBAAkB,UAAU,EAAE,iBAAiB,oFAAoF;AACvI,QAAI,CAAC,mBAAmB,gBAAgB,WAAW,EAAG,mBAAkB,UAAU,EAAE,iBAAiB,uBAAuB;AAC5H,QAAI,CAAC,mBAAmB,gBAAgB,WAAW,EAAG;AACtD,UAAM,UAAU,gBAAgB,CAAC,GAAG;AACpC,QAAI,CAAC,WAAW,YAAY,eAAe,QAAQ,SAAS,UAAU,EAAG;AACzE,UAAM,oBAAoB,UAAU,EAAE,cAAc,2BAA2B;AAC/E,QAAI,6BAA6B,iBAAkB,mBAAkB,KAAK;AAC1E,kBAAc;AACd,UAAM,OAAO,IAAI,IAAI,MAAM,KAAU,eAAe,EAAE,IAAI,CAAC,QAAS,eAAe,mBAAmB,IAAI,MAAM,EAAG,CAAC;AACpH,UAAM,eAAe,IAAI,aAAa,WAAW;AAAA,MAC/C,MAAM,aAAa,KAAK,OAAO,IAAI,KAAK,OAAO,OAAO,KAAK,cAAc,CAAC,SAAS,KAAK,OAAO,IAAI,MAAM,EAAE;AAAA,MAC3G,MAAM;AAAA,MACN,OAAO;AAAA,IACT,CAAQ;AACR,iBAAa,UAAU,SAAS,UAAU;AACxC,aAAO,MAAM;AACb,WAAK,MAAM;AAAA,IACb;AACA,QAAI,mBAAmB;AAAA,EACzB,SAAS,GAAG;AACV,UAAM,qBAAqB,CAAC,EAAE;AAAA,EAChC;AACF;;;AC/BA,IAAI,YAAiB,CAAC;AACtB,IAAI,kBAAkB;AACtB,IAAM,kBAAkB;AACxB,IAAM,eAAe;AAEd,SAAS,qBAAqB;AACnC,oBAAkB,OAAO,KAAK,+BAA+B;AAC7D,MAAI,mBAAmB,EAAE,SAAS,SAAS,iBAAiB,UAAU,gBAAgB,CAAC;AACvF,WAAS,iBAAiB,oBAAoB,MAAM;AAClD,QAAI,OAAO,KAAK,+BAA+B,SAAS,SAAS,OAAQ,mBAAkB,KAAK,IAAI,MAAM,OAAO,KAAK,+BAA+B,GAAI;AAAA,QACpJ,mBAAkB,OAAO,KAAK,+BAA+B;AAAA,EAEpE,CAAC;AACH;AAEA,SAAS,KAAK,GAAG;AACf,SAAO,IAAI,KAAK,IAAI,CAAC,KAAK;AAC5B;AAEA,SAAS,WAAW,MAAM;AACxB,MAAI,OAAO,KAAM,QAAO,GAAG,KAAK,KAAK,MAAM,OAAO,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,MAAM,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC;AAC9H,MAAI,OAAO,GAAI,QAAO,GAAG,KAAK,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC;AACnF,SAAO,GAAG,KAAK,MAAM,IAAI,CAAC;AAC5B;AAEO,SAAS,YAAY,OAAO;AACjC,YAAU,SAAS,QAAQ,CAAC,QAAQ,CAAC,UAAU;AAC/C,QAAM,OAAO,SAAS,eAAe,eAAe;AACpD,QAAM,OAAO,SAAS,eAAe,eAAe;AACpD,QAAM,OAAO,SAAS,eAAe,eAAe;AACpD,QAAM,OAAO,SAAS,eAAe,aAAa;AAClD,MAAI,KAAM,MAAK,YAAY,UAAU,SAAS,WAAW;AACzD,MAAI,KAAM,MAAK,YAAY,UAAU,SAAS,WAAW;AACzD,MAAI,KAAM,MAAK,YAAY,UAAU,SAAS,WAAW;AACzD,MAAI,KAAM,MAAK,YAAY,UAAU,SAAS,WAAW;AAC3D;AAEO,SAAS,YAAY,KAAW;AACrC,QAAM,WAAW,CAAC,oBAAoB,oBAAoB,mBAAmB,oBAAoB,kBAAkB,sBAAsB,gBAAgB,kBAAkB;AAC3K,QAAM,WAAW,KAAK,YAAY;AAClC,QAAM,MAAM,KAAK,YAAY,KAAK,OAAO;AACzC,MAAI;AACJ,MAAI,MAAM;AACV,MAAI,QAAQ,MAAO,QAAO;AAAA,OACrB;AACH,WAAO,OAAQ,WAAW,KAAO,WAAW,IAAK,GAAG,KAAK,MAAM,MAAQ,QAAQ,CAAC,OAAO;AACvF,QAAI,MAAM,KAAK,OAAO;AACtB,QAAI,KAAK,OAAQ,OAAM;AAAA,aACd,KAAK,aAAc,WAAW,KAAO,OAAM;AAAA,aAC3C,IAAI,WAAW,KAAK,KAAK,IAAI,WAAW,MAAM,EAAG,OAAM;AAAA,aACvD,QAAQ,EAAG,OAAM;AAAA,SACrB;AACH,YAAM,MAAM,KAAK,MAAM,MAAM,EAAE;AAC/B,aAAO;AACP,YAAM,MAAM,IAAI,GAAG,KAAK,MAAM,GAAG,CAAC,KAAK,KAAK,MAAM,GAAG,CAAC,MAAM,GAAG,KAAK,MAAM,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACA,QAAM,SAAS,SAAS,eAAe,qBAAqB;AAC5D,MAAI,OAAO;AACX,MAAI,UAAU,KAAK;AACjB,UAAM,SAAS,IAAI,OAAO,IAAI,QAAQ,KAAK,UAAU,IAAI,GAAG,GAAG,IAAI,WAAW,KAAK,IAAI,QAAQ,KAAK,EAAE,KAAK;AAC3G,UAAM,WAAW,IAAI,QAAQ,IAAI,YAAY,IAAI,KAAK,IAAI,IAAI,OAAO,KAAK;AAC1E,UAAM,WAAW,IAAI,SAAS,WAAW,IAAI,SAAS,WAAW,IAAI,YAAY,cAAc,IAAI,SAAS,WAAW;AACvH,UAAM,WAAW,IAAI,OAAO,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK;AACrE,UAAM,cAAc,IAAI,WAAW,IAAI,eAAe,KAAK,MAAM,MAAQ,IAAI,QAAQ,CAAC,MAAM;AAC5F,UAAM,SAAS,IAAI,MAAM,IAAI,UAAU,WAAW,IAAI,GAAG,CAAC,KAAK;AAC/D,UAAM,aAAa,IAAI,kBAAkB,IAAI,cAAc,IAAI,eAAe,KAAK;AACnF,UAAM,aAAa,IAAI,WAAW,IAAI,cAAc,WAAY,KAAK,IAAI,IAAI,MAAQ,IAAI,QAAQ,CAAC,KAAK;AACvG,UAAM,aAAa,IAAI,WAAW,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,GAAI,EAAE,mBAAmB,CAAC,KAAK;AAC3G,WAAO,gBAAW,QAAQ,IAAI,MAAM,IAAI,UAAU,IAAI,UAAU,IAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,MAAM,IAAI,UAAU,GAAG,WAAW,MAAM,GAAG,EAAE,KAAK;AAC7J,WAAO,YAAY,MAAM,IAAI;AAAA,EAC/B;AACA,WAAS,QAAQ,WAAW,IAAI;AAChC,aAAW,QAAQ,UAAU;AAC3B,UAAMC,MAAK,SAAS,eAAe,IAAI;AACvC,QAAI,CAACA,IAAI;AACT,UAAM,YAAY,MAAM,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,KAAK,YAAY,KAAK;AAClE,IAAAA,IAAG,YAAY;AACf,IAAAA,IAAG,QAAQ,KAAK,SAAS,IAAI,OAAO;AACpC,QAAI,CAAC,OAAO,gBAAgB;AAC1B,YAAM,WAAW,SAAS,KAAK,OAAO;AACtC,UAAI,aAAa,WAAY,CAAAA,IAAG,MAAM,aAAa;AAAA,eAC1C,SAAS,SAAS,QAAQ,EAAG;AAAA,eAC7B,SAAS,SAAS,OAAO,KAAK,SAAS,SAAS,WAAW,EAAG,CAAAA,IAAG,MAAM,aAAa;AAAA,eACpF,OAAO,WAAW,KAAK,WAAW,EAAG,CAAAA,IAAG,MAAM,aAAa,uEAAuE,QAAQ,wBAAwB,QAAQ;AAAA,UAC9K,CAAAA,IAAG,MAAM,aAAa;AAAA,IAC7B;AAAA,EACF;AACA,QAAMA,MAAK,SAAS,eAAe,qBAAqB;AACxD,MAAIA,OAAM,KAAK;AACb,UAAM,SAAS,IAAI,OAAO,IAAI,QAAQ,KAAK,UAAU,IAAI,GAAG,GAAG,IAAI,WAAW,KAAK,IAAI,QAAQ,KAAK,EAAE,KAAK;AAC3G,UAAM,WAAW,IAAI,QAAQ,IAAI,YAAY,IAAI,KAAK,IAAI,IAAI,OAAO,KAAK;AAC1E,UAAM,WAAW,IAAI,SAAS,WAAW,IAAI,SAAS,WAAW,IAAI,YAAY,cAAc,IAAI,SAAS,WAAW;AACvH,UAAM,WAAW,IAAI,OAAO,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK;AACrE,UAAM,cAAc,IAAI,WAAW,IAAI,eAAe,KAAK,MAAM,MAAQ,IAAI,QAAQ,CAAC,MAAM;AAC5F,UAAM,SAAS,IAAI,MAAM,IAAI,UAAU,WAAW,IAAI,GAAG,CAAC,KAAK;AAC/D,UAAM,aAAa,IAAI,kBAAkB,IAAI,cAAc,IAAI,eAAe,KAAK;AACnF,UAAM,aAAa,IAAI,WAAW,IAAI,cAAc,WAAY,KAAK,IAAI,IAAI,MAAQ,IAAI,QAAQ,CAAC,KAAK;AACvG,UAAM,aAAa,IAAI,WAAW,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,GAAI,EAAE,mBAAmB,CAAC,KAAK;AAC3G,IAAAA,IAAG,YAAY,mBAAc,QAAQ,IAAI,MAAM,IAAI,UAAU,IAAI,UAAU,IAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,MAAM,IAAI,UAAU,OAAO,WAAW,MAAM,GAAG,EAAE,KAAK;AAAA,EAC9K;AACF;AAEO,SAAS,mBAAmB;AACjC,cAAY;AACd;AAEO,SAAS,WAAW;AACzB,SAAO,QAAQ,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AACzI;AAIO,SAAS,gBAAgB,UAAU,aAAa,aAAa,MAAM,YAAY,MAAM,QAAQ,MAAM,aAAa,MAAM,OAAO,OAAO;AACzI,MAAI,QAAS,cAAa,QAAQ,QAAQ,OAAO;AACjD,MAAI,aAAa;AACjB,MAAI,YAAY,KAAK,IAAI;AACzB,MAAI,eAAoB;AACxB,QAAM,gBAAgB,YAAY,UAAU,aAAa;AACzD,MAAI;AACJ,MAAI;AAEJ,QAAM,kBAAkB,MAAM;AAC5B,QAAI,CAAC,cAAe;AACpB,UAAM,UAAU,MAAM,KAAU,UAAU,EAAE,iBAAiB,iBAAiB,CAAC;AAC/E,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,OAAO,iBAAkB,QAAO,MAAM,UAAU;AAAA,IAC7D;AACA,UAAM,YAAY,MAAM,KAAU,UAAU,EAAE,iBAAiB,eAAe,CAAC;AAC/E,eAAW,WAAW,WAAW;AAC/B,UAAI,QAAQ,OAAO,kBAAmB,SAAQ,MAAM,UAAU;AAAA,IAChE;AAEA,kBAAc,SAAS,cAAc,KAAK;AAC1C,gBAAY,YAAY;AACxB,kBAAc,aAAa,aAAa,SAAS;AACjD,UAAM,IAAI,MAAM;AAChB,QAAI,KAAK;AACT,gBAAY,YAAY,GAAG;AAC3B,QAAI,SAAS,MAAM;AACjB,UAAI,MAAM,QAAQ,iBAAiB,IAAI,YAAY;AACnD,YAAM,WAAW,YAAY,kBAAkB;AAC/C,UAAI,UAAU;AAGZ,sBAAc,MAAM,WAAW;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,WAAW,UAAU;AAC9C,UAAM,YAAY,OAAO;AACzB,iBAAa,WAAW,MAAM;AAC9B,gBAAY;AACZ,UAAM,UAAU,MAAM,KAAU,UAAU,EAAE,iBAAiB,iBAAiB,CAAC;AAC/E,eAAW,UAAU,QAAS,QAAO,MAAM,UAAU;AACrD,UAAM,YAAY,MAAM,KAAU,UAAU,EAAE,iBAAiB,eAAe,CAAC;AAC/E,eAAW,WAAW,UAAW,SAAQ,MAAM,UAAU;AACzD,QAAI;AACF,UAAI,iBAAiB,aAAa;AAChC,YAAI,UAAU;AACZ,gBAAM,aAAa,UAAU,EAAE,cAAc,mBAAmB;AAChE,gBAAM,aAAa,cAAc,cAAc,KAAK;AACpD,cAAI,YAAY,OAAO,WAAY,YAAW,MAAM,WAAW;AAAA,QACjE;AACA,sBAAc,YAAY,WAAW;AAAA,MACvC;AACA,UAAI,eAAe;AAGjB,sBAAc,MAAM,WAAW;AAAA,MACjC;AAAA,IACF,QAAQ;AAAA,IAAe;AACvB,gBAAY,IAAI;AAChB,qBAAiB;AACjB,QAAI,MAAO,OAAM;AAAA,EACnB;AAEA,QAAM,iBAAiB,MAAM;AAC3B,QAAI;AACF,aAAO,CAAC,WAAW,QAAQ,UAAU,GAAG,UAAU,SAAS,UAAU;AAAA,IACvE,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,wBAAwB,OAAO,KAAK,WAAW;AACnD,QAAI,KAAK,MAAO,OAAM,aAAa,EAAE,OAAO,WAAW,IAAI,CAAC;AAC5D,gBAAY;AACZ,UAAM,oBAAoB,KAAK,IAAI,IAAI,aAAa;AACpD,iBAAa,cAAc,IAAI;AAC/B,QAAI,IAAI,aAAc,CAAC,IAAI,WAAW,cAAc,OAAQ;AAC1D,YAAM,YAAY,EAAE,KAAK,KAAK,QAAQ,IAAI,YAAY,cAAc,WAAW,CAAC;AAChF,YAAM,SAAS,SAAS,UAAU,CAAC,eAAe;AAClD,UAAI,CAAC,IAAI,OAAQ,mBAAkB,CAAC,MAAM;AAC1C;AAAA,IACF;AACA,QAAI,mBAAmB,mBAAmB,CAAC,IAAI,UAAU,IAAI,aAAa,cAAc;AACtF,YAAM,YAAY,EAAE,KAAK,KAAK,QAAQ,kBAAkB,CAAC;AACzD,UAAI,CAAC,IAAI,OAAQ,mBAAkB,KAAK;AACxC;AAAA,IACF;AACA,QAAI,mBAAmB,gBAAgB,CAAC,IAAI,UAAU,CAAC,IAAI,QAAQ;AACjE,YAAM,YAAY,EAAE,KAAK,KAAK,QAAQ,eAAe,CAAC;AACtD,UAAI,CAAC,IAAI,OAAQ,mBAAkB,KAAK;AACxC;AAAA,IACF;AACA,QAAI,IAAI,aAAa,cAAc;AACjC,kBAAY,KAAK,IAAI;AACrB,qBAAe,IAAI;AAAA,IACrB;AACA,gBAAY,GAAG;AACf,QAAI,IAAI,gBAAgB,CAAC,YAAa,iBAAgB;AACtD,QAAI,kBAAkB,IAAI;AAC1B,QAAI,IAAI,gBAAgB,WAAW;AACjC,UAAI,IAAI,QAAQ,IAAI,aAAc,KAAI,MAAM,IAAI;AAChD,wBAAkB,IAAI;AAAA,IACxB;AACA,QAAI,WAAY,YAAW,GAAG;AAE9B,QAAI,UAAU,KAAK,IAAI,OAAO,KAAK,+BAA+B,KAAK,GAAG;AAC1E,gBAAY,KAAK,OAAO,IAAI,MAAM,OAAO;AACzC,eAAW,MAAM,OAAO,SAAS,eAAe,GAAG,OAAO;AAAA,EAC5D;AAEA,QAAM,yBAAyB,CAAC,QAAQ;AACtC,UAAM,YAAY,EAAE,OAAO,IAAI,CAAC;AAChC,sBAAkB,KAAK;AAAA,EACzB;AAEA,QAAM,mBAAmB,CAAC,QAAgB,oBAA4B;AACpE,UAAM,SAAS,SAAS,UAAU,CAAC,eAAe;AAClD,QAAI,aAAa;AACjB,QAAI,QAAQ;AACV,UAAI,CAAC,OAAO,KAAK,2BAA4B,cAAa;AAAA,IAC5D,WAAW,OAAO,KAAK,gCAAgC,GAAG;AACxD,mBAAa;AAAA,IACf;AAEA,YAAQ,uBAAuB,EAAE,SAAS,iBAAiB,WAAW,GAAG,sBAAsB,wBAAwB,OAAO,GAAK;AAAA,EACrI;AAEA,QAAM,gBAAgB,CAAC,QAAgB,oBAA4B;AAEjE,YAAQ,uBAAuB,EAAE,SAAS,iBAAiB,GAAG,GAAG,mBAAmB,wBAAwB,OAAO,GAAK;AAAA,EAC1H;AAEA,QAAM,oBAAoB,CAAC,QAAQ,sBAAsB,KAAK,aAAa;AAC3E,QAAM,uBAAuB,CAAC,QAAQ,sBAAsB,KAAK,gBAAgB;AAEjF,QAAM,YAAY,EAAE,OAAO,UAAU,CAAC;AACtC,mBAAiB,SAAS,CAAC;AAC3B,gBAAc,SAAS,EAAE;AAC3B;AAEA,OAAO,cAAc;AACrB,OAAO,mBAAmB;AAC1B,OAAO,WAAW;AAClB,OAAO,kBAAkB;;;AC5PzB,IAAI,iBAAiB;AAErB,eAAe,SAAS,OAAc;AACpC,MAAI,MAAM,eAAe,eAAgB;AACzC,mBAAiB,MAAM;AACvB,MAAI,eAAe,KAAK;AAC1B;AAEA,eAAsB,cAAc;AAClC,QAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,aAAa;AACtD,MAAI,OAAO,IAAI,IAAI;AACjB,UAAM,QAAQ,MAAM,IAAI,KAAK;AAC7B,QAAI,OAAO,MAAM,SAAS,EAAG,UAAS,KAAK;AAAA,EAC7C;AACF;;;AChBA,OAAO,OAAO,CAAC;AACf,OAAO,eAAe,CAAC;AACvB,OAAO,SAAS,CAAC;AAIjB,IAAI,mBAAmB;AACvB,IAAI,kBAAiC;AACrC,IAAI,kBAAiC;AACrC,IAAI,mBAAwB;AAC5B,IAAM,YAAY;AAClB,IAAM,iBAAiB,CAAC;AACxB,IAAI,WAAW;AACf,IAAI,qBAAqB;AACzB,OAAO,gBAAgB,MAAM;AAMtB,SAAS,UAAU,OAAO;AAC/B,QAAM,YAAY,OAAO,SAAS;AAClC,MAAI,CAAC,UAAU,SAAS,WAAW,EAAG,QAAO,SAAS,QAAQ,GAAG,SAAS,YAAY,KAAK,EAAE;AAC/F;AAEA,SAAS,qBAAqB,WAAW;AACvC,MAAI,eAAe,SAAS,EAAG,cAAa,eAAe,SAAS,CAAC;AACrE,iBAAe,SAAS,IAAI,WAAW,MAAM,UAAU,EAAE,eAAe,SAAS,GAAG,MAAM,GAAG,SAAS;AACxG;AAEA,SAAS,kBAAkB,SAAS;AAClC,QAAM,QAAQ,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI;AACvC,YAAU,UAAU,UAAU,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,IACnD,MAAM,IAAI,cAAc,KAAK;AAAA,IAC7B,CAAC,QAAQ,MAAM,cAAc,KAAK,IAAI,GAAG,EAAE;AAAA,EAC7C;AACF;AAEA,SAAS,UAAUC,KAAI;AACrB,MAAI,CAACA,IAAI,QAAO;AAChB,QAAM,OAAOA,IAAG,sBAAsB;AACtC,MAAI,KAAK,UAAU,KAAK,KAAK,WAAW,EAAG,QAAO;AAClD,SAAQ,KAAK,OAAO,KAAO,KAAK,QAAQ,KAAO,KAAK,WAAW,OAAO,eAAe,SAAS,gBAAgB,iBAAmB,KAAK,UAAU,OAAO,cAAc,SAAS,gBAAgB;AAChM;AAEO,SAAS,sBAAsB;AACpC,MAAI,oBAAoB,UAAU,EAAE,iBAAiB,kHAAkH;AACvK,MAAI,kBAAkB,WAAW,EAAG,qBAAoB,UAAU,EAAE,iBAAiB,+DAA+D;AACpJ,QAAM,wBAAwB,CAAC;AAC/B,oBAAkB,QAAQ,CAAC,SAAS;AAClC,QAAI,KAAK,cAAc,aAAc,uBAAsB,KAAK,IAAI;AAAA,EACtE,CAAC;AACD,SAAO;AACT;AAEO,SAAS,0BAA0B;AACxC,MAAI,oBAAoB,UAAU,EAAE,iBAAiB,6GAA6G;AAClK,MAAI,kBAAkB,WAAW,EAAG,qBAAoB,UAAU,EAAE,iBAAiB,wEAAwE;AAC7J,MAAI,uBAAuB;AAC3B,oBAAkB,QAAQ,CAAC,SAAS;AAClC,QAAI,KAAK,cAAc,aAAc,wBAAuB;AAAA,EAC9D,CAAC;AACD,SAAO;AACT;AAEA,SAAS,yBAAyB;AAChC,QAAM,UAAU,oBAAoB;AACpC,QAAM,SAAS,wBAAwB;AACvC,MAAI,SAAS;AACb,UAAQ,QAAQ,CAAC,GAAG,MAAM;AAAE,QAAI,MAAM,QAAQ;AAAE,eAAS;AAAA,IAAG;AAAA,EAAE,CAAC;AAC/D,MAAI,WAAW,MAAM,UAAU,EAAE,eAAe,oBAAoB,GAAG,gBAAgB,GAAG;AACxF,UAAMC,oBAAmB,OAAO,oBAAoB;AACpD,QAAI,OAAO,UAAUA,kBAAiB,KAAK,EAAG,UAASA,kBAAiB;AAAA,EAC1E;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,SAAS;AACvC,MAAI,YAAY,CAAC;AACjB,MAAI;AACJ,MAAI,WAAW,YAAY,UAAW,iBAAgB,UAAU,EAAE,iBAAiB,kEAAkE;AAAA,MAChJ,iBAAgB,UAAU,EAAE,iBAAiB,+DAA+D;AACjH,MAAI;AACF,gBAAY,MAAM,KAAU,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,KAAK,CAAC;AAC5E,QAAI,WAAW,YAAY,UAAW,aAAY,UAAU,OAAO,CAAC,QAAQ,UAAU,GAAG,CAAC;AAC1F,gBAAY,UAAU,IAAI,CAAC,QAAQ;AACjC,UAAI,KAAK,IAAI;AACb,UAAI,GAAG,SAAS,OAAO,EAAG,MAAK,GAAG,MAAM,OAAO,EAAE,CAAC;AAClD,aAAO,UAAU,EAAE;AAAA,IACrB,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,UAAM,2BAA2B,GAAG,EAAE;AAAA,EACxC;AACA,MAAI,gBAAgB;AACpB,MAAI,WAAW,YAAY,UAAW,iBAAgB,uBAAuB;AAC7E,SAAO,CAAC,WAAW,aAAa;AAClC;AAEA,SAAS,2BAA2B,SAAS;AAC3C,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC,IAAI;AACtC,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC,QAAQ,CAAC,CAAC;AAC5C,MAAI,QAAQ,uBAAuB;AACnC,MAAI,QAAQ,KAAK,SAAS,QAAQ,OAAQ,SAAQ;AAClD,SAAO,CAAC,QAAQ,KAAK,CAAC;AACxB;AAEA,SAAS,eAAe,SAAS;AAC/B,QAAM,CAAC,KAAK,IAAI,2BAA2B,OAAO;AAClD,MAAI,gBAAgB,KAAK;AACzB,MAAI,OAAO,eAAe,SAAS,MAAM,KAAM,QAAO,YAAY,MAAM,IAAI;AAC9E;AAEA,eAAsB,SAAS,KAAK,KAAK;AACvC,MAAI,CAAC,OAAO,QAAQ,IAAK;AACzB,QAAM,IAAI,QAAQ,WAAW,EAAE;AAC/B,QAAM,IAAI,QAAQ,WAAW,EAAE;AAC/B,QAAM,QAAQ,MAAM,KAAU,SAAS,qBAAqB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,SAAS,GAAG,CAAC;AACvG,MAAI,MAAM,WAAW,GAAG;AACtB,QAAI,uCAAuC,GAAG;AAC9C;AAAA,EACF;AACA,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,KAAK,KAAK,QAAQ,KAAK,GAAG;AACvC,UAAM,MAAM,MAAMC,WAAU,IAAI;AAChC,QAAI,KAAK,IAAI;AACX,UAAI,YAAY,KAAK,GAAG;AACxB,WAAK,OAAO,KAAK,KAAK,QAAQ,KAAK,GAAG;AAAA,IACxC,OAAO;AACL,UAAI,2BAA2B,GAAG;AAAA,IACpC;AAAA,EACF;AACF;AAEO,SAAS,YAAY,KAAK,KAAK;AACpC,QAAM,OAAO,OAAO,OAAO,KAAK,SAAS;AACzC,MAAI,CAAC,OAAO,SAAS,IAAI,EAAG;AAC5B,MAAI,SAAS,OAAO,SAAS,mBAAmB,SAAS,gBAAiB;AAC1E,oBAAkB;AAClB,MAAI,iBAAkB;AAEtB,qBAAmB,sBAAsB,MAAM;AAC7C,UAAM,KAAK,YAAY,IAAI;AAC3B,uBAAmB;AACnB,UAAM,WAAW;AACjB,sBAAkB;AAClB,QAAI,CAAC,OAAO,SAAS,QAAQ,KAAK,aAAa,gBAAiB;AAEhE,uBAAmB,oBAAoB,UAAU;AACjD,UAAM,YAAY,iBAAiB;AACnC,aAAS,gBAAgB,MAAM,YAAY,eAAe,GAAG,QAAQ,IAAI;AACzE,cAAU,YAAY,eAAe,GAAG,QAAQ,IAAI;AACpD,cAAU,YAAY,cAAc,GAAG,WAAW,CAAC,IAAI;AACvD,cAAU,YAAY,aAAa,GAAG,WAAW,CAAC,IAAI;AACtD,cAAU,YAAY,aAAa,GAAG,WAAW,CAAC,IAAI;AACtD,cAAU,YAAY,aAAa,GAAG,QAAQ,IAAI;AAClD,cAAU,YAAY,aAAa,GAAG,WAAW,CAAC,IAAI;AACtD,cAAU,YAAY,aAAa,GAAG,WAAW,CAAC,IAAI;AACtD,cAAU,YAAY,cAAc,GAAG,WAAW,CAAC,IAAI;AACvD,sBAAkB;AAClB,UAAM,KAAK,YAAY,IAAI;AAC3B,QAAI,eAAe,EAAE,MAAM,UAAU,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AAAA,EAClE,CAAC;AACH;AAEA,SAAS,YAAY,KAAK;AACxB,QAAM,OAAO,MAAM,KAAU,UAAU,EAAE,iBAAiB,2BAA2B,CAAC;AACtF,QAAM,MAAM,MAAM,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG;AACjD,MAAI,eAAe,EAAE,IAAI,CAAC;AAC1B,MAAI,IAAK,KAAI,MAAM;AACrB;AAEA,SAAS,qBAAqB,MAAM;AAClC,cAAY,MAAM;AAClB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,sBAAsB,IAAI;AACjC,cAAY,OAAO;AACnB,YAAU,EAAE,eAAe,cAAc,EAAE,iBAAiB,QAAQ,EAAE,EAAE,EAAE,MAAM;AAClF;AAEA,SAAS,qBAAqB,MAAM;AAClC,cAAY,OAAO;AACnB,wBAAsB,CAAC;AACvB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,qBAAqB,MAAM;AAClC,cAAY,OAAO;AACnB,wBAAsB,CAAC;AACvB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,oBAAoB,MAAM;AACjC,cAAY,OAAO;AACnB,wBAAsB,CAAC;AACvB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,uBAAuB,MAAM;AACpC,cAAY,OAAO;AACnB,wBAAsB,CAAC;AACvB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,oBAAoB,MAAM;AACjC,cAAY,SAAS;AACrB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,qBAAqB,MAAM;AAClC,cAAY,SAAS;AACrB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,mBAAmB,MAAM;AAChC,cAAY,OAAO;AACnB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,qBAAqB,MAAM;AAClC,cAAY,SAAS;AACrB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEO,SAAS,cAAc,OAAO;AACnC,MAAI,MAAM;AACV,YAAU,EAAE,eAAe,KAAK,GAAG,cAAc,KAAK,EAAE,iBAAiB,QAAQ,EAC9E,QAAQ,CAAC,QAAQ,MAAM;AACtB,QAAI,OAAO,UAAU,QAAQ,UAAU,MAAM,GAAI,OAAM;AAAA,EACzD,CAAC;AACH,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAO,MAAM;AAC1C,QAAM,MAAM,MAAM,KAAU,IAAI;AAChC,MAAI,CAAC,IAAI,cAAc,KAAK;AAC5B,SAAO;AACT;AAEA,SAAS,yBAAyB,MAAM;AACtC,QAAM,MAAM,MAAM,KAAU,SAAS;AACrC,MAAI,OAAO,EAAE;AACb,MAAI,CAAC,IAAI,cAAc,cAAc;AACrC,SAAO;AACT;AAEO,SAAS,mBAAmB,MAAM;AACvC,QAAM,MAAM,MAAM,KAAU,IAAI;AAChC,MAAI,MAAM,QAAQ,IAAI,IAAI,SAAS,CAAC,CAAC,EAAG,KAAI,IAAI,SAAS,CAAC,IAAI;AAC9D,SAAO;AACT;AAEA,SAAS,uBAAuB,MAAM;AACpC,QAAM,MAAM,sBAAsB,gBAAgB,IAAI;AACtD,SAAO;AACT;AAIA,SAAS,aAAa,SAAS;AAC7B,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,UAAU;AAC/D,UAAQ,UAAU,OAAO,MAAM;AAE/B,QAAM,SAAS,UAAU,EAAE,eAAe,GAAG,OAAO,SAAS;AAC7D,SAAO,MAAM,UAAU;AACzB;AAEO,SAAS,kBAAkB,MAAM;AACtC,MAAI,WAAW;AACf,eAAa,SAAS;AACtB,QAAM,KAAK,SAAS;AACpB,kBAAgB,IAAI,MAAM,UAAU,EAAE,eAAe,iBAAiB,CAAC;AACvE,QAAM,MAAM,mBAAmB,IAAI;AACnC,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI,OAAO;AAChB,SAAO,eAAe;AACtB,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAM;AAC/B,MAAI,WAAW;AACf,eAAa,SAAS;AACtB,QAAM,KAAK,SAAS;AACpB,kBAAgB,IAAI,MAAM,UAAU,EAAE,eAAe,iBAAiB,CAAC;AACvE,QAAM,MAAM,mBAAmB,IAAI;AACnC,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI,OAAO;AAChB,MAAI,CAAC,IAAI,cAAc,cAAc;AACrC,SAAO,eAAe;AACtB,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAM;AAC/B,MAAI,eAAe;AACnB,eAAa,SAAS;AACtB,QAAM,KAAK,SAAS;AACpB,kBAAgB,IAAI,MAAM,UAAU,EAAE,eAAe,iBAAiB,CAAC;AACvE,QAAM,MAAM,mBAAmB,IAAI;AACnC,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI,OAAO;AAEhB,QAAM,OAAO,MAAM,KAAU,UAAU,EAAE,iBAAiB,mCAAmC,CAAC;AAC9F,QAAM,SAAS,KAAK,UAAU,CAAC,QAAQ,IAAI,UAAU,SAAS,UAAU,CAAC;AACzE,QAAM,WAAW,CAAC,cAAc,eAAe,MAAM,QAAQ,WAAW;AACxE,QAAM,cAAc,SAAS,MAAM,KAAK;AACxC,MAAI,CAAC,IAAI,YAAY,YAAY;AACjC,SAAO,eAAe;AACtB,SAAO;AACT;AAEA,SAAS,gBAAgB,MAAM;AAC7B,eAAa,OAAO;AACpB,QAAM,KAAK,SAAS;AACpB,MAAI,eAAe,EAAE;AACrB,kBAAgB,IAAI,MAAM,UAAU,EAAE,eAAe,eAAe,CAAC;AACrE,QAAM,MAAM,mBAAmB,IAAI;AACnC,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI,OAAO;AAChB,SAAO,eAAe;AACtB,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAM;AACjC,QAAM,KAAK,SAAS;AACpB,MAAI,mBAAmB,EAAE;AACzB,kBAAgB,IAAI,MAAM,IAAI;AAC9B,SAAO,eAAe;AACtB,OAAK,CAAC,IAAI;AACV,SAAO;AACT;AAEA,SAAS,cAAc,MAAM;AAC3B,QAAM,KAAK,SAAS;AACpB,MAAI,mBAAmB,EAAE;AACzB,kBAAgB,IAAI,MAAM,IAAI;AAC9B,SAAO,eAAe;AACtB,OAAK,CAAC,IAAI;AACV,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAM;AAC/B,QAAM,KAAK,SAAS;AACpB,MAAI,iBAAiB,EAAE;AACvB,kBAAgB,IAAI,MAAM,IAAI;AAC9B,SAAO,eAAe;AACtB,OAAK,CAAC,IAAI;AACV,SAAO;AACT;AAEA,SAAS,wBAAwB,MAAM;AACrC,QAAM,WAAW,UAAU,EAAE,cAAc,uBAAuB;AAClE,MAAI,KAAK,WAAW,SAAS,KAAK,KAAK,CAAC;AACxC,OAAK,GAAG,QAAQ,mBAAmB,EAAE;AACrC,QAAM,MAAM,UAAU,EAAE,eAAe,GAAG,EAAE,eAAe;AAC3D,MAAI,sBAAsB,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;AACpD,MAAI,IAAK,KAAI,MAAM;AACrB;AAEA,SAAS,yBAAyB,MAAM;AACtC,QAAM,KAAK,SAAS;AACpB,MAAI,iBAAiB,EAAE;AACvB,eAAa,QAAQ;AACrB,kBAAgB,IAAI,MAAM,IAAI;AAC9B,SAAO,eAAe;AACtB,OAAK,CAAC,IAAI;AACV,SAAO;AACT;AAEA,OAAO,eAAe;AAEtB,SAAS,eAAe,MAAM;AAC5B,QAAM,KAAK,SAAS;AACpB,QAAM,MAAM,mBAAmB,IAAI;AACnC,MAAI,CAAC,IAAI;AACT,SAAO;AACT;AAQA,IAAM,8BAA0D,CAAC;AACjE,IAAM,4BAA4B,oBAAI,QAA6B;AACnE,IAAM,sBAAsB,oBAAI,IAAY;AAC5C,IAAM,0BAA0B,oBAAI,IAAY;AAChD,IAAM,2BAAuD;AAAA,EAC3D,CAAC,kBAAkB,yBAAyB,sBAAsB;AAAA,EAClE,CAAC,sBAAsB,kCAAkC,+BAA+B;AAAA,EACxF,CAAC,kBAAkB,yBAAyB,sBAAsB;AAAA,EAClE,CAAC,sBAAsB,kCAAkC,+BAA+B;AAAA,EACxF,CAAC,kBAAkB,yBAAyB,sBAAsB;AAAA,EAClE,CAAC,sBAAsB,kCAAkC,+BAA+B;AAC1F;AACA,IAAI,wBAAwB;AAC5B,IAAI,2BAA2B;AAC/B,IAAI,+BAA+B;AAEnC,SAAS,eAAe,MAAkB;AACxC,MAAI,OAAO,OAAO,wBAAwB,YAAY;AACpD,WAAO,oBAAoB,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,EACnD,OAAO;AACL,eAAW,MAAM,CAAC;AAAA,EACpB;AACF;AAEA,SAAS,wBAAwB,MAAM;AACrC,MAAI,4BAA4B,IAAI,GAAG;AACrC,gCAA4B,IAAI,EAAE;AAAA,EACpC;AACF;AAEA,SAAS,+BAA+B,MAAM;AAC5C,0BAAwB,gBAAgB;AACxC,0BAAwB,oBAAoB;AAC5C,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,+BAA+B,MAAM;AAC5C,0BAAwB,gBAAgB;AACxC,0BAAwB,oBAAoB;AAC5C,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,+BAA+B,MAAM;AAC5C,0BAAwB,gBAAgB;AACxC,0BAAwB,oBAAoB;AAC5C,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,+BAA+B,MAAM;AAC5C,0BAAwB,gBAAgB;AACxC,0BAAwB,oBAAoB;AAC5C,SAAO,MAAM,KAAU,SAAS;AAClC;AAEO,SAAS,mBAAmB;AACjC,QAAM,KAAK,UAAU,EAAE,eAAe,eAAe;AACrD,MAAI,CAAC,GAAI;AACT,KAAG,iBAAiB,YAAY,CAAC,QAAQ;AACvC,QAAI,eAAe;AACnB,QAAI,aAAa,aAAa;AAAA,EAChC,CAAC;AACD,KAAG,iBAAiB,QAAQ,CAAC,QAAQ;AACnC,QAAI,eAAe;AACnB,QAAI,aAAa,aAAa;AAC9B,eAAW,KAAK,IAAI,aAAa,OAAO;AACtC,UAAI,qBAAqB,CAAC;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;AAgCA,SAAS,2BAA2B;AAElC,MAAI,mBAAoB;AACxB,MAAI,6BAA8B;AAClC,QAAM,KAAK,YAAY,IAAI;AAE3B,QAAM,MAAM,UAAU;AACtB,MAAI,CAAC,IAAK;AAEV,QAAM,mBAAmB,CAAC,IAAI,YAAY,cAAc;AACtD,UAAM,SAAS,IAAI,eAAe,EAAE;AACpC,UAAM,UAAU,IAAI,eAAe,UAAU;AAC7C,UAAM,gBAAgB,QAAQ,cAAc,kBAAkB;AAC9D,QAAI,CAAC,UAAU,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,cAAe,QAAO;AAE3E,UAAM,eAAe,OAAO;AAC5B,UAAM,wBAAwB,QAAQ,kBAAkB,gBAAgB,QAAQ,uBAAuB;AACvG,QAAI,yBAAyB,CAAC,wBAAwB,IAAI,EAAE,GAAG;AAC7D,8BAAwB,IAAI,EAAE;AAC9B,qBAAe,MAAM;AACnB,gCAAwB,OAAO,EAAE;AACjC,cAAM,gBAAgB,IAAI,eAAe,EAAE;AAC3C,cAAM,iBAAiB,IAAI,eAAe,UAAU;AACpD,YAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,cAAc,cAAe;AACvE,cAAM,gBAAgB,cAAc;AACpC,YAAI,eAAe,kBAAkB,iBAAiB,eAAe,uBAAuB,eAAe;AACzG,wBAAc,aAAa,gBAAgB,aAAa;AAAA,QAC1D;AACA,YAAI,cAAc,MAAM,aAAa,YAAY;AAC/C,wBAAc,MAAM,WAAW;AAAA,QACjC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,4BAA4B,EAAE,EAAG,6BAA4B,EAAE,IAAI,MAAM;AAAE,2BAAqB,SAAS;AAAA,IAAG;AACjH,QAAI,CAAC,0BAA0B,IAAI,aAAa,GAAG;AACjD,oBAAc,iBAAiB,SAAS,4BAA4B,EAAE,CAAC;AACvE,gCAA0B,IAAI,aAAa;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAEA,QAAM,4BAA4B,MAAM;AACtC,4BAAwB;AACxB,UAAM,QAAQ,yBAAyB;AACvC,QAAI,MAAuC;AAG3C,aAAS,WAAW,GAAG,WAAW,OAAO,YAAY,GAAG;AACtD,YAAM,UAAU,yBAAyB,wBAAwB;AACjE,kCAA4B,2BAA2B,KAAK;AAC5D,YAAM,CAAC,EAAE,IAAI;AACb,UAAI,CAAC,oBAAoB,IAAI,EAAE,GAAG;AAChC,cAAM;AACN;AAAA,MACF;AAAA,IACF;AAEA,QAAI,KAAK;AACP,YAAM,CAAC,EAAE,IAAI;AACb,UAAI,iBAAiB,GAAG,GAAG,GAAG;AAC5B,4BAAoB,IAAI,EAAE;AAAA,MAC5B,OAAO;AAEL,uCAA+B;AAC/B;AAAA,MACF;AAAA,IACF;AAEA,yBAAqB,oBAAoB,SAAS;AAClD,QAAI,oBAAoB;AACtB,qCAA+B;AAC/B,YAAM,KAAK,YAAY,IAAI;AAC3B,UAAI,eAAe,EAAE,OAAO,oBAAoB,MAAM,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACjF,YAAM,eAAe,KAAK,EAAE;AAC5B;AAAA,IACF;AAEA,4BAAwB,sBAAsB,yBAAyB;AAAA,EACzE;AAEA,iCAA+B;AAC/B,0BAAwB,sBAAsB,yBAAyB;AACzE;AAEA,gBAAgB,wBAAwB;AA8CxC,IAAM,QAAQ,CAAC,OAAe,IAAI,QAAQ,CAAC,YAAY;AAAE,aAAW,SAAS,EAAE;AAAG,CAAC;AAEnF,eAAsB,cAAc,UAAU,MAAM;AAClD,WAAS,KAAK,QAAQ;AACtB,WAAS,KAAK,YAAY;AAC1B,MAAI,QAAS,OAAM,MAAM,GAAK;AAC9B,MAAI;AACF,UAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,mCAAmC;AAC5E,YAAQ,IAAI,iBAAiB,GAAG;AAChC,QAAI,KAAK,IAAI;AACX,eAAS,KAAK,YAAY;AAC1B,iBAAW,MAAM,SAAS,OAAO,GAAG,GAAK;AAAA,IAC3C,OAAO;AACL,iBAAW,MAAM,cAAc,KAAK,GAAG,IAAI;AAAA,IAC7C;AAAA,EACF,QAAQ;AACN,eAAW,MAAM,cAAc,KAAK,GAAG,IAAI;AAAA,EAC7C;AACA,SAAO,CAAC;AACV;AAEO,SAASC,aAAY,QAAQ;AAClC,QAAM,IAAI,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC;AAC9C,SAAO,eAAe,GAAG,UAAU,EAAE,OAAO,OAAO,CAAC;AACpD,SAAO,cAAc,CAAC;AACxB;AAEA,IAAI,wBAAwB;AACrB,SAAS,iBAAiB,MAAM;AACrC,0BAAwB;AACxB,QAAM,UAAU,eAAe;AAC/B,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,QAAM,YAAY,YAAY,SAAS,UAAU,SAAS,qBAAqB;AAC/E,MAAI,UAAW,WAAU,EAAE,eAAe,gBAAgB,EAAE,MAAM;AAAA,MAC7D,WAAU,EAAE,eAAe,mBAAmB,EAAE,MAAM;AAC3D,MAAI,oBAAoB,YAAY,YAAY,OAAO,KAAK,qBAAqB,EAAE;AACnF,oBAAkB,CAAC,qBAAqB,GAAG,OAAO;AAClD,aAAW,iBAAiB,GAAG;AACjC;AAEA,IAAI,iBAAiB;AACd,SAAS,UAAU,MAAM;AAC9B,mBAAiB;AACjB,YAAU,EAAE,eAAe,YAAY,EAAE,MAAM;AAC/C,MAAI,cAAc,cAAc,EAAE;AAClC,oBAAkB,CAAC,cAAc,GAAG,KAAK;AAC3C;AAEA,IAAI,kBAAkB;AAEtB,SAAS,6BAA6B,GAAG;AACvC,QAAM,MAAM;AACZ,0BAAwB;AACxB,SAAO,CAAC,OAAO,GAAG,IAAI;AACxB;AAEA,SAAS,sBAAsB,GAAG;AAChC,QAAM,MAAM;AACZ,mBAAiB;AACjB,SAAO,CAAC,OAAO,GAAG,IAAI;AACxB;AAEA,SAAS,uBAAuB,GAAG;AACjC,QAAM,MAAM;AACZ,oBAAkB;AAClB,SAAO,CAAC,OAAO,GAAG,IAAI;AACxB;AAEA,SAAS,2BAA2B;AAClC,SAAO;AACT;AAEO,SAAS,WAAW,MAAM;AAC/B,oBAAkB;AAClB,QAAM,UAAU,eAAe;AAC/B,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,QAAM,cAAc,YAAY,SAAS,UAAU,SAAS,qBAAqB;AACjF,MAAI,YAAa,WAAU,EAAE,eAAe,uBAAuB,EAAE,MAAM;AAAA,MACtE,WAAU,EAAE,eAAe,aAAa,EAAE,MAAM;AACrD,MAAI,cAAc,cAAc,cAAc,SAAS,KAAK,eAAe,EAAE;AAC7E,oBAAkB,CAAC,eAAe,GAAG,MAAM;AAC7C;AAEO,SAAS,gBAAgB,MAAM;AACpC,MAAI,oBAAoB,IAAI,EAAE;AAC9B,0BAAwB;AACxB,YAAU,EAAE,eAAe,kBAAkB,EAAE,MAAM;AACrD,oBAAkB,CAAC,qBAAqB,GAAG,OAAO;AAClD,aAAW,iBAAiB,GAAG;AACjC;AAEA,SAAS,8BAA8B,IAAI,IAAI,SAAS;AACtD,QAAM,MAAM,UAAU,EAAE,cAAc,kDAAkD;AACxF,SAAO,MAAM,CAAC,IAAI,cAAc,IAAI,eAAe,OAAO,IAAI,CAAC,GAAG,GAAG,OAAO;AAC9E;AAEA,SAAS,8BAA8B,IAAI,IAAI,SAAS;AACtD,MAAI,OAAO,QAAQ;AACjB,UAAMC,UAAS,OAAO,OAAO,QAAQ,eAAe;AACpD,WAAO,CAACA,SAAQ,SAAS,GAAGA,SAAQ,UAAU,GAAG,OAAO;AAAA,EAC1D;AACA,QAAM,MAAM,UAAU,EAAE,cAAc,uDAAuD;AAC7F,SAAO,MAAM,CAAC,IAAI,cAAc,IAAI,eAAe,OAAO,IAAI,CAAC,GAAG,GAAG,OAAO;AAC9E;AAEA,SAAS,8CAA8C;AACrD,QAAMC,MAAK,UAAU,EAAE,eAAe,0BAA0B;AAChE,MAAIA,IAAI,YAAW,MAAM,UAAU,EAAE,eAAe,0BAA0B,EAAE,MAAM,GAAG,GAAG;AAC5F,SAAO,CAAC;AACV;AAWA,eAAsB,cAAc,KAAK,KAAK;AAC5C,MAAI,QAAQ,IAAK;AACjB,MAAI,iBAAiB,GAAG;AACxB,MAAI,KAAK;AACP,cAAU,EAAE,MAAM,YAAY,gBAAgB,mBAAmB;AACjE,cAAU,EAAE,iBAAiB,mBAAmB,EAAE,QAAQ,CAACC,QAAOA,IAAG,UAAU,IAAI,QAAQ,CAAC;AAC5F,cAAU,EAAE,iBAAiB,WAAW,EAAE,QAAQ,CAACA,QAAOA,IAAG,UAAU,IAAI,cAAc,CAAC;AAC1F,cAAU,EAAE,iBAAiB,8BAA8B,EAAE,QAAQ,CAACA,QAAOA,IAAG,UAAU,IAAI,mBAAmB,CAAC;AAAA,EACpH,OAAO;AACL,cAAU,EAAE,MAAM,YAAY,gBAAgB,oBAAoB;AAClE,cAAU,EAAE,iBAAiB,mBAAmB,EAAE,QAAQ,CAACA,QAAOA,IAAG,UAAU,OAAO,QAAQ,CAAC;AAC/F,cAAU,EAAE,iBAAiB,WAAW,EAAE,QAAQ,CAACA,QAAOA,IAAG,UAAU,OAAO,cAAc,CAAC;AAC7F,cAAU,EAAE,iBAAiB,8BAA8B,EAAE,QAAQ,CAACA,QAAOA,IAAG,UAAU,OAAO,mBAAmB,CAAC;AAAA,EACvH;AACF;AA+BA,IAAI;AAIG,SAAS,mBAAmB,OAAe,QAAgB;AAChE,MAAI,OAAO,aAAa;AACtB,UAAM,IAAI,OAAO,KAAK;AACtB,UAAM,IAAI,OAAO,MAAM;AACvB,iBAAa,iBAAiB;AAC9B,wBAAoB,WAAW,MAAM,OAAO,cAAc,GAAG,CAAC,GAAG,GAAG;AAAA,EACtE;AACF;AAEA,eAAsB,cAAc;AAClC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,UAAU,UAAU,EAAE,eAAe,iBAAiB;AAC5D,QAAM,UAAU,aAAa,QAAQ,MAAM;AAC3C,QAAM,WAAW,MAAM,KAAU,UAAU,EAAE,iBAAiB,KAAK,CAAC,EAAE,OAAO,CAACC,QAAOA,IAAG,IAAI,SAAS,cAAc,CAAC;AACpH,MAAI,SAAS,SAAS,EAAG,UAAS,CAAC,EAAE,OAAO;AAC5C,MAAI,SAAS;AACX,UAAM,eAAe,OAAO;AAC5B,oBAAgB,SAAS,MAAM,SAAS,MAAM,MAAM,IAAI;AAAA,EAC1D;AACA,aAAW;AAEX,QAAM,WAAW,UAAU,EAAE,eAAe,6BAA6B;AACzE,MAAI,iBAAiB;AACrB,MAAI,iBAAwD;AAE5D,QAAM,oBAAoB,YAAY;AACpC,UAAM,UAAU,SAAS,cAAc,UAAU;AACjD,QAAI,CAAC,SAAS;AACZ,uBAAiB;AACjB,oBAAc,cAAc;AAC5B,kBAAY;AAAA,IACd,WAAW,mBAAmB,GAAG;AAC/B,uBAAiB,KAAK,IAAI;AAC1B,uBAAiB,YAAY,MAAM;AACjC,cAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,YAAI,UAAU,OAAQ,QAAS,SAAQ,MAAM,UAAU;AAAA,MACzD,GAAG,GAAI;AAAA,IACT;AAAA,EACF;AACA,QAAM,oBAAoB,IAAI,iBAAiB,iBAAiB;AAChE,oBAAkB,QAAQ,UAAU,EAAE,YAAY,MAAM,WAAW,MAAM,SAAS,KAAK,CAAC;AACxF,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,eAAe,KAAK,MAAM,KAAK,EAAE,CAAC;AACtC,QAAM,eAAe,KAAK,EAAE;AAC9B;AAEA,OAAO,gBAAgB;AACvB,OAAO,cAAcC;AACrB,OAAO,qBAAqB;AAC5B,OAAO,oBAAoB;AAC3B,OAAO,6BAA6B;AACpC,OAAO,sBAAsB;AAC7B,OAAO,wBAAwB;AAC/B,OAAO,cAAc;AACrB,OAAO,yBAAyB;AAChC,OAAO,yBAAyB;AAChC,OAAO,iBAAiB;AACxB,OAAO,iBAAiB;AACxB,OAAO,mBAAmB;AAC1B,OAAO,iBAAiB;AACxB,OAAO,aAAa;AACpB,OAAO,iBAAiB;AACxB,OAAO,wBAAwB;AAC/B,OAAO,SAAS;AAChB,OAAO,iBAAiB;AACxB,OAAO,eAAe;AACtB,OAAO,uBAAuB;AAC9B,OAAO,oBAAoB;AAC3B,OAAO,wBAAwB;AAC/B,OAAO,oBAAoB;AAC3B,OAAO,oBAAoB;AAC3B,OAAO,mBAAmB;AAC1B,OAAO,sBAAsB;AAC7B,OAAO,mBAAmB;AAC1B,OAAO,oBAAoB;AAC3B,OAAO,kBAAkB;AACzB,OAAO,oBAAoB;AAC3B,OAAO,8BAA8B;AACrC,OAAO,8BAA8B;AACrC,OAAO,8BAA8B;AACrC,OAAO,8BAA8B;AACrC,OAAO,mBAAmB;AAC1B,OAAO,YAAY;AACnB,OAAO,aAAa;AACpB,OAAO,kBAAkB;AACzB,OAAO,+BAA+B;AACtC,OAAO,wBAAwB;AAC/B,OAAO,yBAAyB;AAChC,OAAO,2BAA2B;AAClC,OAAO,gCAAgC;AACvC,OAAO,gCAAgC;AACvC,OAAO,8CAA8C;AACrD,OAAO,qBAAqB;AAC5B,OAAO,YAAY;;;AC52BZ,SAAS,sBAAsB,IAAY,SAAwB;AACxE,QAAM,YAAY,UAAU,EAAE,eAAe,EAAE;AAC/C,MAAI,EAAE,qBAAqB,aAAc;AACzC,QAAM,MAAM;AACZ,MAAI,gBAAgB,UAAU;AAC9B,MAAI,wBAAwB;AAC9B;AAEA,SAAS,eAAe,WAA0B;AAChD,MAAI,EAAE,qBAAqB,aAAc;AACzC,QAAM,MAAM;AACZ,QAAM,YAAY,UAAU,cAAc,aAAa;AACvD,QAAM,iBAAiB,UAAU,EAAE,cAAc,IAAI,UAAU,EAAE,iBAAiB;AAClF,QAAM,QAAQ,UAAU,EAAE,cAAc,IAAI,UAAU,EAAE,QAAQ;AAChE,MAAI,EAAE,qBAAqB,gBAAgB,EAAE,0BAA0B,kBAAmB;AAC1F,QAAM,OAAO,UAAU,cAAc,MAAM;AAC3C,MAAI,EAAE,gBAAgB,aAAc;AACpC,MAAI,SAAS;AACb,QAAM,SAAS,MAAM,UAAU,UAAU,SAAS,MAAM;AACxD,QAAM,wBAAwB,IAAI,iBAAiB,CAAC,cAAc;AAChE,cAAU,QAAQ,CAAC,mBAAmB;AACpC,gBAAU,UAAU,OAAO,wBAAwB,OAAO,CAAC;AAC3D,UAAI,QAAQ;AACV,YAAI,gBAAgB,UAAU,OAAO;AACrC,YAAI,wBAAwB;AAAA,MAC9B;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACD,wBAAsB,QAAQ,WAAW,EAAE,YAAY,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC;AACzF,MAAI,iBAAiB,KAAM,WAAU,aAAa,OAAO,UAAU,gBAAgB;AACnF,MAAI,YAAY,CAAC,YAAqB;AACpC,QAAI,OAAO,MAAM,QAAS,WAAU,MAAM;AAAA,EAC5C;AAEA,QAAM,kBAAkB,SAAS,cAAc,OAAO;AACtD,kBAAgB,OAAO;AACvB,kBAAgB,UAAU,OAAO;AACjC,kBAAgB,KAAK,GAAG,UAAU,EAAE;AACpC,kBAAgB,YAAY,GAAG,eAAe,SAAS;AACvD,OAAK,aAAa,iBAAiB,KAAK,UAAU;AAClD,MAAI,kBAAkB;AACtB,MAAI,0BAA0B,MAAM;AAClC,QAAI,UAAU,OAAO,MAAM,gBAAgB,QAAS,WAAU,MAAM;AACpE,mBAAe,UAAU,gBAAgB;AACzC,IAAAC,aAAY,cAAc;AAAA,EAC5B;AAEA,kBAAgB,iBAAiB,SAAS,CAACC,WAAU;AACnD,aAAS;AACT,IAAAA,OAAM,gBAAgB;AAAA,EACxB,CAAC;AACD,kBAAgB,iBAAiB,SAAS,IAAI,uBAAuB;AACvE;AAEA,OAAO,wBAAwB;AAMxB,SAAS,iBAAiB;AAC/B,aAAW,aAAa,UAAU,EAAE,iBAAiB,kBAAkB,EAAG,gBAAe,SAAS;AACpG;;;AClEA,IAAI,KAAK;AAQT,eAAsB,cAA6B;AACjD,iBAAe,WAA0B;AACvC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,UAAU,KAAK,UAAU,CAAC;AAC1C,cAAQ,UAAU,CAAC,QAAe,OAAO,GAAG;AAC5C,cAAQ,YAAY,CAAC,QAAe;AAClC,aAAM,IAAI,OAA4B;AACtC,cAAM,WAAW,GACd,YAAY,CAAC,QAAQ,GAAG,WAAW,EACnC,YAAY,QAAQ,EACpB,MAAM;AACT,iBAAS,YAAY,MAAM,IAAI,eAAe,SAAS,MAAM;AAC7D,gBAAQ;AAAA,MACV;AACA,cAAQ,kBAAkB,CAAC,QAA+B;AACxD,aAAM,IAAI,OAA4B;AACtC,cAAM,SAAS,IAAI;AACnB,YAAI,SAAS,GAAG;AACd,gBAAM,QAAQ,GAAG,kBAAkB,UAAU,EAAE,SAAS,OAAO,CAAC;AAChE,gBAAM,YAAY,QAAQ,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAAA,QACpD;AACA,YAAI,SAAS,GAAG;AACd,gBAAM,gBAAgB,QAAQ,YAAY,YAAY,QAAQ;AAC9D,wBAAc,YAAY,UAAU,UAAU,EAAE,QAAQ,MAAM,CAAC;AAAA,QACjE;AACA,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,GAAI,OAAM,SAAS;AAC1B;AAEO,SAAS,aAAsB;AACpC,SAAO,OAAO;AAChB;AAYA,SAAS,0BAA6B;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG,cAA6B;AAC9B,WAAS,mBAAmB;AAC1B,WAAO,oBAAoB,SAAS,gBAAgB;AACpD,gBAAY,MAAM;AAAA,EACpB;AACA,SAAO,iBAAiB,SAAS,gBAAgB;AACjD,cAAY,UAAU,MAAM;AAC1B,WAAO,oBAAoB,SAAS,gBAAgB;AACpD,WAAO,IAAI,aAAa,kCAAkC,OAAO,MAAM,IAAI,YAAY,CAAC;AAAA,EAC1F;AACA,cAAY,UAAU,CAAC,MAAM;AAC3B,WAAO,oBAAoB,SAAS,gBAAgB;AACpD,WAAO,IAAI,MAAM,6BAA6B,CAAC;AAAA,EACjD;AACA,cAAY,aAAa,MAAM;AAC7B,WAAO,oBAAoB,SAAS,gBAAgB;AACpD,YAAQ,YAAY;AAAA,EACtB;AACA,SAAO;AACT;AAEA,eAAe,IAAI,QAA4C;AAC7D,MAAI,CAAC,GAAI,QAAO;AAChB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,UAAU,GACb,YAAY,CAAC,QAAQ,GAAG,WAAW,EACnC,YAAY,QAAQ,EACpB,IAAI,MAAM;AACb,YAAQ,YAAY,CAAC,QAAQ,QAAQ,GAAG;AACxC,YAAQ,UAAU,CAAC,QAAQ,OAAO,GAAG;AAAA,EACvC,CAAC;AACH;AAcA,eAAe,IAAIC,OAA2C;AAC5D,MAAI,CAAC,GAAI,QAAO;AAChB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,UAAU,GACb,YAAY,CAAC,QAAQ,GAAG,UAAU,EAClC,YAAY,QAAQ,EACpB,MAAM,MAAM,EACZ,IAAIA,KAAI;AACX,YAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,YAAQ,UAAU,CAAC,QAAQ,OAAO,GAAG;AAAA,EACvC,CAAC;AACH;AA2BA,eAAsB,cAAc,QAAuB,MAAM,QAA0C,MAAqC;AAC9I,MAAI,CAAC,GAAI,QAAO;AAChB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI;AACF,UAAI;AACJ,YAAM,cAAc,GAAG,YAAY,UAAU,UAAU;AACvD,kBAAY,UAAU,CAAC,MAAM,OAAO,CAAC;AACrC,YAAM,QAAQ,YAAY,YAAY,QAAQ;AAC9C,UAAI,MAAO,WAAU,MAAM,MAAM,KAAK,EAAE,WAAW,KAAK;AAAA,UACnD,WAAU,MAAM,WAAW,KAAK;AACrC,cAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,cAAQ,UAAU,CAAC,MAAM,OAAO,CAAC;AAAA,IACnC,SAAS,KAAK;AACZ,aAAO,GAAG;AAAA,IACZ;AAAA,EACF,CAAC;AACH;AAQA,eAAsB,SAAS,QAA4D;AACzF,MAAI,CAAC,GAAI,QAAO;AAChB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI;AACF,UAAI;AACJ,YAAM,cAAc,GAAG,YAAY,UAAU,UAAU;AACvD,kBAAY,UAAU,CAAC,MAAM,OAAO,CAAC;AACrC,YAAM,QAAQ,YAAY,YAAY,QAAQ;AAC9C,UAAI,OAAQ,WAAU,MAAM,MAAM,QAAQ,EAAE,MAAM,MAAM;AAAA,UACnD,WAAU,MAAM,MAAM;AAC3B,cAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,cAAQ,UAAU,CAAC,MAAM,OAAO,CAAC;AAAA,IACnC,SAAS,KAAK;AACZ,aAAO,GAAG;AAAA,IACZ;AAAA,EACF,CAAC;AACH;AASA,eAAsB,iBAAiB,SAAsB,QAAmC,QAA6C;AAC3I,MAAI,CAAC,GAAI,QAAO;AAChB,QAAM,WAAW,MAAM,cAAc,UAAU,MAAM;AACrD,QAAM,WAAW,IAAI,KAAK,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,OAAO,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;AAC9G,QAAM,gBAAgB,SAAS;AAC/B,MAAI,OAAO,SAAS;AAClB,UAAM,IAAI,MAAM,aAAa,OAAO,OAAO,MAAM,CAAC,EAAE;AAAA,EACtD;AACA,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,cAAc,GAAG,YAAY,UAAU,WAAW;AACxD,UAAM,QAAQ,EAAE,aAAa,QAAQ,SAAS,OAAO;AACrD,8BAA0B,OAAO,aAAa;AAC9C,UAAM,QAAQ,YAAY,YAAY,QAAQ;AAC9C,aAAS,QAAQ,CAAC,UAAU;AAAE,YAAM,OAAO,KAAK;AAAA,IAAG,CAAC;AAAA,EACtD,CAAC;AACH;AAYO,IAAM,SAAS;AAEf,IAAM,SAAS;;;AC3NtB,IAAI,eAAmC;AACvC,IAAI,mBAAmB;AACvB,IAAI,cAAc;AAClB,IAAI,YAAY;AAChB,IAAI,eAAe;AAEnB,SAAS,UAAU,IAAoB;AACrC,QAAM,KAAK,IAAI,KAAK,MAAO,EAAE;AAI7B,QAAM,OAAO,OAAO,GAAG,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AAClD,QAAM,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACnD,QAAM,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACnD,QAAM,KAAK,OAAO,GAAG,gBAAgB,CAAC,EAAE,SAAS,GAAG,GAAG;AAEvD,QAAM,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE;AACrC,SAAO;AACT;AAEA,SAAS,WAAW,MAAsB;AACxC,SAAO,KAAK,WAAW,KAAK,OAAO,EAAE,WAAW,KAAK,MAAM,EAAE,WAAW,KAAK,MAAM;AACrF;AAEA,SAAS,aAAa,MAAuB;AAC3C,MAAI,MAAM,KAAK,WAAW,MAAM,GAAG,EAAE,WAAW,MAAM,MAAM;AAC5D,QAAM,iBAAiB,IAAI,QAAQ,WAAW;AAC9C,MAAI,mBAAmB,GAAI,OAAM,IAAI,UAAU,GAAG,cAAc;AAChE,QAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,SAAO;AAAA,IACL,SAAS,OAAO,OAAO,WAAW,KAAK,IAAI,CAAC;AAAA,IAC5C,OAAO,OAAO,OAAO,SAAS,MAAM;AAAA,IACpC,QAAQ,OAAO,OAAO,UAAU,YAAY;AAAA,IAC5C,UAAU,OAAO,OAAO,YAAY,IAAI;AAAA,IACxC,KAAK,OAAO,OAAO,OAAO,EAAE;AAAA,EAC9B;AACF;AAEA,eAAe,cAA6B;AAC1C,gBAAc;AACd,cAAY;AACZ,MAAI,aAAa;AACnB;AAEA,eAAsB,wBAAwB;AAC5C,QAAM,iBAAiB,SAAS,eAAe,8BAA8B;AAC7E,MAAI,gBAAgB;AAClB,mBAAe,UAAU,OAAO,QAAQ;AACtC,UAAI,eAAe;AACnB,UAAI,gBAAgB;AACpB,kBAAY;AAAA,IACd;AAAA,EACF;AACF;AAEA,eAAe,aAAa;AAC1B,QAAM,aAAa,CAAC,SAAuB;AACzC,QAAI,CAAC,aAAc,gBAAe,SAAS,eAAe,gBAAgB;AAC1E,QAAI,CAAC,aAAc;AACnB,QAAI;AACF,YAAM,IAAI,aAAa,IAAI;AAC3B,YAAM,MAAM,SAAS,cAAc,IAAI;AAEvC,YAAM,QAAQ,iCAAiC,EAAE,MAAM,YAAY,CAAC,MAAM,EAAE,KAAK;AACjF,UAAI,EAAE,UAAU,UAAW;AAC3B,UAAI,EAAE,UAAU,QAAS;AACzB,YAAM,SAAS,8BAA8B,EAAE,MAAM;AACrD,YAAM,eAAe,EAAE,SAAS,SAAS,KAAK,GAAG,EAAE,SAAS,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE;AACtF,YAAM,WAAW,EAAE,aAAa,OAAO,8BAA8B,YAAY,UAAU;AAC3F,UAAI,YAAY,OAAO,UAAU,EAAE,OAAO,CAAC,QAAQ,KAAK,GAAG,QAAQ,GAAG,MAAM,OAAO,WAAW,EAAE,GAAG,CAAC;AACpG,mBAAa,YAAY,GAAG;AAAA,IAC9B,SAAS,KAAK;AACZ,YAAM,cAAc,EAAE,OAAO,OAAO,GAAG,GAAG,KAAK,CAAC;AAAA,IAClD;AAAA,EACF;AAEA,QAAM,aAAa,CAACC,cAA4B;AAC9C,QAAI,CAAC,aAAc;AACnB,WAAO,aAAa,oBAAoB,OAAO,aAAa,mBAAmB;AAC7E,mBAAa,YAAY,aAAa,iBAAiB;AAAA,IACzD;AACA,QAAIA,UAAU,cAAa,YAAY,aAAa;AAAA,aAC3C,aAAa,cAAe,cAAa,cAAc,MAAM,UAAU;AAChF,UAAM,SAAS,SAAS,eAAe,aAAa;AACpD,UAAM,QAAQ,SAAS,eAAe,WAAW;AACjD,UAAM,aAAa,SAAS,eAAe,aAAa;AACxD,QAAI,OAAQ,QAAO,YAAY,OAAO,WAAW;AACjD,QAAI,MAAO,OAAM,YAAY,OAAO,SAAS;AAC7C,QAAI,YAAY;AACd,iBAAW,aAAa,eAAe,YAAY,IAAI,OAAO,SAAS,IAAI,EAAE;AAC7E,iBAAW,MAAM,kBAAkB,YAAY,IAAI,uBAAuB;AAC1E,iBAAW,QAAQ;AAAA,SAAe,SAAS;AAAA,WAAc,WAAW;AAAA,IACtE;AAAA,EACF;AAEA,QAAM,aAAa,SAAS,eAAe,iBAAiB;AAC5D,MAAI,WAAY,YAAW,MAAM,SAAS,OAAO,KAAK,kBAAkB,SAAS;AACjF,QAAM,aAAa,SAAS,eAAe,iBAAiB;AAC5D,MAAI,WAAY,YAAW,MAAM,SAAS,OAAO,KAAK,kBAAkB,SAAS;AAEjF,MAAI,CAAC,OAAO,KAAK,iBAAiB;AAChC,UAAM,KAAU,SAAS,uBAAuB,aAAa,CAAC,EAAE,QAAQ,CAACC,QAAO;AAC9E,UAAIA,eAAc,YAAa,CAAAA,IAAG,MAAM,UAAU;AAAA,IACpD,CAAC;AACD;AAAA,EACF;AAEA,MAAI,iBAAkB,YAAW,YAAY,OAAO,KAAK,yBAAyB;AAAA,MAC7E,YAAW,YAAY,KAAK,GAAI;AAErC,qBAAmB;AACnB,MAAI,CAAC,cAAc;AACjB,mBAAe,SAAS,eAAe,gBAAgB;AACvD,QAAI,cAAc;AAChB,mBAAa,iBAAiB,UAAU,MAAM;AAC5C,cAAMD,YAAW,aAAa,gBAAiB,aAAa,YAAY,aAAa;AACrF,YAAIA,aAAY,aAAa,cAAe,cAAa,cAAc,MAAM,UAAU;AAAA,MACzF,CAAC;AAAA,IACH;AAAA,EACF;AACA,MAAI,CAAC,aAAc;AACnB,QAAM,WAAW,aAAa,gBAAiB,aAAa,YAAY,aAAa;AAErF,MAAI;AACF,UAAM,MAAM,MAAME,WAAU,GAAG,OAAO,GAAG,iBAAiB;AAC1D,QAAI,KAAK,IAAI;AACX,yBAAmB;AACnB,YAAM,QAAS,MAAM,IAAI,KAAK;AAC9B,UAAI,gBAAgB,OAAO,SAAS,KAAK,aAAa,eAAe,yBAAyB,aAAa;AACzG,qBAAa,cAAc,cAAc,MAAM,UAAU,OAAO,KAAK,kBAAkB,UAAU;AAAA,MACnG;AACA,UAAI,CAAC,cAAc;AACjB,uBAAe;AACf,gBAAQ,GAAG,OAAO,GAAG,QAAQ,EAAE,OAAO,YAAY,CAAC;AACnD,oBAAY;AAAA,MACd;AACA,iBAAW,QAAQ,MAAO,YAAW,IAAI;AAAA,IAC3C,OAAO;AACL,qBAAe;AACf;AACA,UAAI,IAAK,YAAW,gBAAgB,KAAK,IAAI,CAAC,0FAA0F,KAAK,MAAM,IAAI,KAAK,UAAU,KAAK;AAAA,UACtK,YAAW,gBAAgB,KAAK,IAAI,CAAC,yFAAyF;AAAA,IACrI;AACA,eAAW,QAAQ;AAAA,EACrB,QAAQ;AACN,mBAAe;AACf;AACA,eAAW,gBAAgB,KAAK,IAAI,CAAC,yFAAyF;AAC9H,eAAW,QAAQ;AAAA,EACrB;AACF;AAEA,eAAsB,iBAAiB;AACrC,MAAID,MAAK,SAAS,eAAe,uBAAuB;AACxD,QAAM,WAAW,QAAQA,GAAE;AAC3B,MAAI,CAACA,IAAI,CAAAA,MAAK,SAAS,qBAAqB,QAAQ,EAAE,CAAC;AACvD,MAAI,CAACA,IAAI;AACT,QAAM,KAAK,YAAY,IAAI;AAC3B,EAAAA,IAAG,UAAU,IAAI,aAAa;AAC9B,QAAM,aAAa,MAAM,QAAQ,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,cAAc,CAAC;AACvF,MAAI,WAAW,SAAS,MAAM,EAAG;AACjC,MAAI,UAAU;AACZ,IAAAA,IAAG,MAAM,WAAW;AACpB,IAAAA,IAAG,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,OAAO;AACL,IAAAA,IAAG,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBjB;AACA,EAAAA,IAAG,MAAM,UAAU;AACnB,EAAAC,WAAU,GAAG,OAAO,GAAG,gBAAgB,UAAU,UAAU,SAAS,CAAC,EAAE;AACvE,aAAW;AACX,wBAAsB;AACtB,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,kBAAkB,EAAE,MAAM,OAAO,KAAK,iBAAiB,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACtF,QAAM,kBAAkB,KAAK,EAAE;AACjC;;;ACxMA,IAAI,sBAAsB;AAC1B,IAAI,gBAAgB,CAAC;AACrB,IAAM,YAAY,CAAC;AAEnB,SAAS,kBAAkB;AACzB,MAAI,QAAQ,UAAU,EAAE,iBAAiB,wBAAwB;AACjE,MAAI,CAAC,SAAS,MAAM,WAAW,EAAG,SAAQ,UAAU,EAAE,iBAAiB,uBAAuB;AAC9F,SAAO;AACT;AAEA,IAAM,gBAAuC;AAAA,EAC3C,EAAE,qBAAqB,KAAK;AAAA,EAC5B,EAAE,YAAY,MAAM,UAAU,EAAE,eAAe,6BAA6B,GAAG,MAAM,EAAE;AACzF;AAEO,SAAS,cAAc,QAAQ,UAAU;AAC9C,gBAAc,KAAK,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC;AAC3C;AAEA,IAAM,WAAW;AAAA;AAAA,EACf,EAAE,cAAc,CAAC,KAAK,QAAQ,cAAc,KAAK,GAAG,EAAE;AAAA,EACtD,EAAE,cAAc,CAAC,KAAK,QAAQ,SAAS,KAAK,GAAG,EAAE;AAAA,EACjD,EAAE,WAAW,CAAC,KAAK,QAAQ,YAAY,KAAK,GAAG,EAAE;AACnD;AAEA,eAAe,WAAW,aAAa;AACrC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,gBAAgB,KAAK,MAAM,WAAW;AAC5C,QAAM,WAAW,cAAc;AAC/B,kBAAgB,cAAc;AAE9B,QAAM,KAAK,YAAY,IAAI;AAC3B,aAAW,MAAM,eAAe;AAC9B,UAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,QAAQ,EAAE,EAAE,CAAC;AAC5C,QAAI,OAAO,OAAO,MAAM,GAAG,KAAK,KAAK,GAAG,MAAM,SAAS,GAAG,GAAG;AAC3D,UAAI,aAAa,EAAE,KAAK,KAAK,SAAS,GAAG,EAAE,CAAC;AAC5C,UAAI,SAAU,UAAS,SAAS,GAAG,GAAG,KAAK,GAAG,CAAC;AAAA,IACjD;AAAA,EACF;AAEA,aAAW,MAAM,UAAU;AACzB,UAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,QAAQ,EAAE,EAAE,CAAC;AAC5C,QAAI,UAAU;AACZ,YAAM,KAAK,YAAY,IAAI;AAC3B,eAAS,SAAS,GAAG,GAAG,KAAK,GAAG,CAAC;AACjC,YAAM,KAAK,YAAY,IAAI;AAC3B,UAAI,KAAK,KAAK,IAAK,OAAM,eAAe,KAAK,QAAQ,KAAK,MAAM,KAAK,EAAE,CAAC,EAAE;AAAA,IAC5E;AAAA,EACF;AAEA,SAAO,OAAO;AACd,SAAO,QAAQ,aAAoC,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,MAAqB;AAC3F,QAAI,CAAC,UAAU,KAAK,QAAQ,EAAG,WAAU,KAAK,QAAQ,IAAI,CAAC;AAC3D,QAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,aAAc,WAAU,KAAK,QAAQ,EAAE,eAAe,oBAAI,IAAI;AAC5F,QAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,WAAY,WAAU,KAAK,QAAQ,EAAE,aAAa,oBAAI,IAAI;AACxF,QAAI,CAAC,KAAK,UAAW,WAAU,KAAK,QAAQ,EAAE,aAAa,IAAI,GAAG;AAAA,QAC7D,WAAU,KAAK,QAAQ,EAAE,WAAW,IAAI,GAAG;AAAA,EAClD,CAAC;AACD,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,cAAc,EAAE,UAAU,OAAO,KAAK,QAAQ,EAAE,QAAQ,WAAW,KAAK,MAAM,KAAK,EAAE,GAAG,OAAO,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACxH,QAAM,cAAc,KAAK,EAAE;AAC7B;AAEA,SAAS,kBAAkB;AAIzB,kBAAgB,EAAE,QAAQ,CAAC,SAAS;AAClC,QAAI,KAAK,OAAO,2BAA2B,KAAK,OAAO,0BAA2B;AAClF,SAAK,MAAM,UAAU;AAAA,EACvB,CAAC;AACH;AAEA,SAAS,eAAe,cAAc,OAAO;AAC3C,MAAI,CAAC,cAAc,YAAY,EAAG;AAClC,QAAM,OAAO,UAAU,EAAE,eAAe,0BAA0B,YAAY,EAAE;AAChF,MAAI,CAAC,KAAM;AACX,QAAM,iBAAiB,KAAK,UAAU,KAAK,YAAY,CAAC;AACxD,QAAM,gBAAgB,KAAK,UAAU,KAAK;AAC1C,QAAM,gBAAgB,mBAAmB;AACzC,MAAI,cAAe,MAAK,QAAQ,sCAAsC,cAAc;AACpF,QAAM,EAAE,UAAU,IAAI,cAAc,YAAY;AAChD,MAAI,UAAW,MAAK,QAAQ;AAC5B,OAAK,WAAW,CAAC,iBAAiB,CAAC;AACnC,OAAK,UAAU,OAAO,WAAW,aAAa;AAC9C,OAAK,UAAU,OAAO,SAAS,SAAS;AAExC,QAAM,EAAE,SAAS,IAAI,cAAc,YAAY;AAC/C,MAAI,CAAC,UAAU,QAAQ,EAAE,QAAS,WAAU,QAAQ,EAAE,UAAU,oBAAI,IAAI;AACxE,QAAM,gBAAgB,UAAU,QAAQ,EAAE;AAC1C,MAAI,cAAe,eAAc,IAAI,YAAY;AAAA,MAC5C,eAAc,OAAO,YAAY;AACtC,QAAM,UAAU,UAAU,QAAQ,EAAE;AACpC,QAAM,QAAQ,UAAU,QAAQ,EAAE;AAGlC,QAAM,oBAAoB,UAAU,EAAE,eAAe,0BAA0B,QAAQ,EAAE;AACzF,oBAAkB,WAAY,cAAc,SAAS,KAAO,QAAQ,SAAS;AAC7E,oBAAkB,QAAQ;AAC1B,oBAAkB,UAAU,OAAO,WAAW,cAAc,OAAO,CAAC;AACpE,oBAAkB,UAAU,OAAO,SAAS,MAAM,OAAO,CAAC;AAC1D,MAAI,cAAc,OAAO,EAAG,mBAAkB,SAAS,kBAAkB,cAAc,IAAI;AAAA;AAC3F,MAAI,MAAM,OAAO,EAAG,mBAAkB,SAAS,GAAG,MAAM,IAAI;AAAA,EAAmB,QAAQ,IAAI;AAG7F;AACA,OAAO,iBAAiB;AAExB,SAAS,gBAAgB;AACvB,MAAI,OAAO,KAAK,IAAI,EAAE,WAAW,EAAG,QAAO;AAC3C,QAAM,YAAY,UAAU,EAAE,eAAe,eAAe;AAC5D,MAAI,iBAAiB,CAAC,CAAC,SAAS;AAChC,MAAI,CAAC,UAAW,QAAO;AACvB,YAAU,cAAc,MAAM,UAAU;AACxC,QAAM,WAAW,UAAU,cAAc,UAAU;AACnD,QAAM,SAAS,SAAS;AACxB,aAAW,MAAM;AACjB,SAAO;AACT;AAEA,eAAe,0BAA0B;AACvC,MAAI,CAAC,cAAc,EAAG;AACtB,QAAM,YAAY,UAAU,EAAE,eAAe,eAAe;AAC5D,QAAM,WAAW,UAAU,cAAc,UAAU;AACnD,mBAAiB,uBAAuB;AACxC,mBAAiB;AAEjB,SAAO,eAAe,UAAU,SAAS;AAAA,IACvC,IAAI,UAAU;AACZ,YAAM,YAAY,OAAO,yBAAyB,oBAAoB,WAAW,OAAO;AACxF,YAAM,WAAW,UAAU,IAAI,KAAK,QAAQ;AAC5C,gBAAU,IAAI,KAAK,UAAU,QAAQ;AACrC,UAAI,aAAa,SAAU,YAAW,SAAS,KAAK;AACpD,uBAAiB,uBAAuB;AAAA,IAC1C;AAAA,IACA,MAAM;AACJ,YAAM,YAAY,OAAO,yBAAyB,oBAAoB,WAAW,OAAO;AACxF,aAAO,UAAU,IAAI,KAAK,QAAQ;AAAA,IACpC;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,UAAU,EAAE,iBAAiB,qCAAqC,EAAE,CAAC;AAC5F,MAAI;AACJ,MAAI,qBAAqB;AAEzB,WAAS,mBAAmB;AAC1B,QAAI,uBAAuB,eAAe,MAAM,KAAK,EAAE,YAAY,EAAG;AACtE,oBAAgB;AAChB,UAAM,QAAQ,eAAe,MAAM,KAAK,EAAE,YAAY;AACtD,QAAI,oBAAoB,KAAK;AAC7B,yBAAqB;AACrB,oBAAgB,EAAE,QAAQ,CAAC,YAAY;AACrC,cAAQ,iBAAiB,YAAY,EAAE,QAAQ,CAAC,YAAY;AAC1D,cAAM,UAAU,QAAQ,UAAU,YAAY,EAAE,SAAS,KAAK,KAAK,QAAQ,GAAG,YAAY,EAAE,SAAS,KAAK;AAC1G,cAAMC,UAAS,QAAQ,QAAQ,mBAAmB;AAClD,YAAI,CAAC,QAAS,CAAAA,QAAO,MAAM,UAAU;AAAA,YAChC,CAAAA,QAAO,MAAM,eAAe,SAAS;AAAA,MAC5C,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,iBAAe,UAAU,CAAC,MAAM;AAC9B,QAAI,cAAe,cAAa,aAAa;AAC7C,oBAAgB,WAAW,kBAAkB,GAAG;AAAA,EAClD;AACA,iBAAe,aAAa,CAAC,MAAM;AACjC,QAAI,EAAE,QAAQ,SAAS;AACrB,UAAI,cAAe,cAAa,aAAa;AAC7C,uBAAiB;AAAA,IACnB;AAAA,EACF;AACF;AAEA,gBAAgB,uBAAuB;AAEvC,eAAe,2BAA2B;AACxC,QAAM,gBAAgB,UAAU,EAAE,iBAAiB,4BAA4B;AAC/E,gBAAc,QAAQ,CAAC,SAAS;AAC9B,UAAM,eAAe,KAAK,GAAG,QAAQ,YAAY,EAAE;AACnD,mBAAe,cAAc,KAAK,YAAY,CAAC;AAAA,EACjD,CAAC;AACH;AAEA,iBAAiB,wBAAwB;AAEzC,eAAsB,aAAa;AACjC,QAAM,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA,0BAIK,KAAK,QAAQ;AAAA;AAErC,QAAMC,MAAK,UAAU,EAAE,eAAe,WAAW;AACjD,QAAM,KAAK,UAAU,EAAE,eAAe,wBAAwB;AAC9D,MAAI,CAACA,OAAM,CAAC,GAAI;AAChB,QAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,YAAY;AACrD,QAAM,MAAO,OAAO,IAAI,KAAM,MAAM,IAAI,KAAK,IAAI,CAAC;AAClD,MAAI,cAAc,IAAI,MAAM;AAC5B,QAAM,QAAQ,MAAM;AAAA;AAAA,MAEhB,IAAI,MAAM;AAAA;AAEd,EAAAD,IAAG,YAAY,IAAI,SAAS,IAAI,MAAM,IAAI,KAAK;AAC/C,EAAAA,IAAG,MAAM,UAAU;AACnB,aAAW,MAAM;AAAE,IAAAA,IAAG,MAAM,UAAU;AAAA,EAAQ,GAAG,IAAI,WAAW,IAAI,MAAQ,IAAI;AAChF,MAAI,IAAI,WAAW,GAAG;AACpB,QAAI,GAAG,UAAU,SAAS,MAAM,EAAG,WAAU,EAAE,eAAe,4BAA4B,EAAE,MAAM;AAClG,UAAM,SAAS,YAAY,MAAM;AAC/B,YAAM,UAAU,MAAM,KAAU,UAAU,EAAE,iBAAiB,iCAAiC,CAAC,KAAK,CAAC;AACrG,YAAM,YAAY,QAAQ,KAAK,CAAC,MAAO,EAAE,cAAc,eAAiB,EAAE,cAAc,eAAiB,EAAE,cAAc,eAAiB,EAAE,cAAc,eAAiB,EAAE,cAAc,OAAQ;AACnM,UAAI,WAAW;AACb,sBAAc,MAAM;AACpB,kBAAU,MAAM;AAChB,YAAI,mBAAmB;AAAA,MACzB;AAAA,IACF,GAAG,GAAG;AAAA,EACR;AACF;AAEA,eAAsB,eAAe;AACnC,MAAI,oBAAqB;AACzB,QAAM,KAAK,YAAY,IAAI;AAC3B,wBAAsB;AACtB,QAAM,iBAAiB,UAAU,EAAE,cAAc,sBAAsB;AACvE,MAAI,CAAC,gBAAgB;AACnB,UAAM,gBAAgB,2BAA2B;AACjD;AAAA,EACF;AACA,QAAM,gBAAgB,UAAU,EAAE,iBAAiB,+BAA+B;AAClF,QAAM,cAAc,UAAU,EAAE,iBAAiB,+BAA+B;AAChF,QAAM,WAAW,IAAI,iBAAiB,CAAC,cAAc;AACnD,UAAM,eAAe,UAAU,EAAE,eAAe,yBAAyB;AACzE,QAAI,aAAa,MAAM,YAAY,OAAQ;AAC3C,UAAM,WAAW,CAAC,QAAQ,IAAI,SAAS,gBAAgB,IAAI,kBAAkB;AAC7E,QAAI,UAAU,KAAK,QAAQ,EAAG,iBAAgB;AAAA,EAChD,CAAC;AACD,QAAM,oBAAoB,SAAS,cAAc,KAAK;AACtD,oBAAkB,YAAY;AAC9B,iBAAe,cAAc,aAAa,mBAAmB,eAAe,WAAW;AACvF,cAAY,QAAQ,CAAC,MAAM,UAAU;AACnC,UAAM,UAAU,KAAK,GAAG,QAAQ,yBAAyB,EAAE;AAC3D,UAAM,YAAY,UAAU,EAAE,eAAe,0BAA0B,OAAO,EAAE;AAChF,QAAI,WAAW;AACb,qBAAe,aAAa,SAAS,cAAc,IAAI,GAAG,cAAc,KAAK,CAAC;AAC9E,qBAAe,aAAa,WAAW,cAAc,KAAK,CAAC;AAAA,IAC7D;AACA,sBAAkB,YAAY,IAAI;AAClC,aAAS,QAAQ,MAAM,EAAE,YAAY,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC;AAAA,EACzE,CAAC;AACD,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,gBAAgB,KAAK,MAAM,KAAK,EAAE,CAAC;AACvC,QAAM,gBAAgB,KAAK,EAAE;AAC/B;;;ACxPA,IAAI,gBAAgB;AACpB,IAAI;AAEG,IAAM,yBAAN,MAAM,wBAAuB;AAAA,EAClC,OAAO;AAAA,EACP,OAAO,MAAM;AAAA,EACb,OAAO,QAAQ;AAAA,EACf,OAAO;AAAA,EACP,OAAO,UAAU;AAAA,EACjB,OAAO,SAAS;AAAA,EAChB,OAAO,SAAS;AAAA,EAChB,OAAO,QAAQ;AAAA,EACf,OAAO,UAAgB,oBAAI,KAAK;AAAA,EAChC,OAAO,SAAS;AAAA,EAChB,OAAO,KAAW,oBAAI,KAAK;AAAA,EAE3B,OAAO,WAAmB;AACxB,UAAM,KAAK,OAAO,MAAM,uBAAuB;AAC/C,WAAO,KAAK,KAAK,cAAc,EAAE,IAAI;AAAA,EACvC;AAAA,EAEA,OAAO,cAAc,MAAsB;AACzC,WAAO,KAAK,QAAQ,iBAAiB,EAAE,EAAE,MAAM,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK;AAAA,EAC1E;AAAA,EAEA,OAAO,QAAQ,EAAE,QAAQ,KAAK,GAA2C;AACvE,QAAI,WAAW,KAAK,QAAQ;AAC1B,WAAK,SAAS;AACd,WAAK,KAAK,oBAAI,KAAK;AACnB,YAAM,gBAAgB,EAAE,QAAQ,wBAAuB,QAAQ,IAAI,wBAAuB,IAAI,mBAAmB,EAAE,CAAC;AAAA,IACtH;AACA,QAAI,MAAM,QAAS,MAAK,UAAU,KAAK;AACvC,QAAI,MAAM,OAAQ,MAAK,SAAS,KAAK;AACrC,QAAI,MAAM,OAAQ,MAAK,SAAS,KAAK;AACrC,QAAI,MAAM,MAAO,MAAK,QAAQ,KAAK,cAAc,KAAK,KAAK;AAAA,EAC7D;AAAA,EAEA,OAAO,SAAiB;AACtB,QAAI,CAAC,KAAK,MAAO,MAAK,QAAQ,KAAK,SAAS;AAC5C,WAAO;AAAA,oBACS,KAAK,OAAO;AAAA,mBACb,KAAK,MAAM;AAAA,mBACX,KAAK,MAAM;AAAA,gBACd,KAAK,SAAS,qCAAqC,sCAAsC;AAAA,kBACvF,KAAK,KAAK;AAAA,eACb,KAAK,QAAQ,eAAe,CAAC;AAAA;AAAA,EAE1C;AAAA,EAEA,OAAO,cAAc;AACnB,QAAI,CAAC,KAAK,SAAS;AACjB,YAAME,MAAK,SAAS,eAAe,UAAU;AAC7C,UAAIA,IAAI,MAAK,UAAUA;AAAA,UAClB;AAAA,IACP;AACA,SAAK,QAAQ,QAAQ,OAAO,KAAK,OAAO;AACxC,SAAK,QAAQ,MAAM,kBAAkB,KAAK,SAAS,gCAAgC;AAAA,EACrF;AACF;AAEA,eAAe,gBAAgB,QAAiB,OAAoB,CAAC,GAAG,KAA6B;AACnG,yBAAuB,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAC/C,yBAAuB,YAAY;AACnC,MAAI,IAAK,KAAI,sBAAsB,EAAE,QAAQ,MAAM,IAAI,CAAC;AAC1D;AAEA,SAAS,mBAAmB;AAC1B,MAAI,SAAS;AACX,iBAAa,OAAO;AACpB,cAAU;AAAA,EACZ;AACA,QAAM,oBAAoB,KAAK,IAAI,IAAI,uBAAuB,GAAG,QAAQ;AACzE,MAAI,CAAC,uBAAuB,UAAU,oBAAqB,KAAK,KAAK,IAAO,wBAAuB,QAAQ;AAAA,WAClG,CAAC,uBAAuB,UAAU,oBAAqB,IAAI,KAAK,IAAO,wBAAuB,QAAQ;AAAA,MAC1G,wBAAuB,QAAQ;AACpC,YAAU,WAAW,eAAe,uBAAuB,KAAK;AAClE;AAEA,eAAe,gBAAgB;AAE7B,MAAI,uBAAuB,IAAI;AAC7B,2BAAuB,GAAG,SAAS;AACnC,2BAAuB,GAAG,YAAY;AACtC,2BAAuB,GAAG,UAAU;AACpC,2BAAuB,GAAG,UAAU;AACpC,QAAI;AACF,6BAAuB,GAAG,MAAM;AAAA,IAClC,QAAQ;AAAA,IAER;AACA,2BAAuB,KAAK;AAAA,EAC9B;AAEA,MAAI;AACF,2BAAuB,KAAK,IAAI,UAAU,GAAG,uBAAuB,GAAG,mBAAmB;AAC1F,2BAAuB,GAAG,SAAS,MAAM,gBAAgB,IAAI;AAC7D,2BAAuB,GAAG,YAAY,CAAC,QAAsB,gBAAgB,MAAM,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC;AACvH,2BAAuB,GAAG,UAAU,MAAM;AACxC,sBAAgB,KAAK;AACrB,uBAAiB;AAAA,IACnB;AACA,2BAAuB,GAAG,UAAU,CAAC,MAAa,gBAAgB,OAAO,CAAC,GAAG,OAAQ,EAAiB,WAAW,eAAe,CAAC;AAAA,EACnI,SAAS,GAAG;AACV,oBAAgB,OAAO,CAAC,GAAG,OAAQ,EAAY,WAAW,CAAC,CAAC;AAC5D,qBAAiB;AAAA,EACnB;AACF;AAEA,eAAsB,oBAAoB;AACxC,MAAI,CAAC,eAAe;AAClB,oBAAgB;AAChB,kBAAc,uBAAuB,CAAC,WAAW;AAC/C,6BAAuB,QAAQ;AAC/B,6BAAuB,YAAY;AAAA,IACrC,CAAC;AAAA,EACH;AACA,yBAAuB,UAAU,oBAAI,KAAK;AAE1C,MAAI,OAAoB,CAAC;AACzB,MAAI;AACF,UAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,UAAU;AACnD,QAAI,CAAC,IAAK,OAAM,IAAI,MAAM,aAAa;AACvC,WAAO,MAAM,IAAI,KAAK;AACtB,QAAI,sBAAsB,EAAE,KAAK,CAAC;AAClC,2BAAuB,UAAU,oBAAI,KAAK;AAC1C,2BAAuB,MAAM,IAAI,IAAI,MAAM,QAAQ,EAAE,CAAC,EAAE,QAAQ,UAAU,MAAM,EAAE,QAAQ,SAAS,KAAK;AACxG,oBAAgB,MAAM,IAAI;AAC1B,kBAAc;AAAA,EAChB,QAAQ;AACN,oBAAgB,OAAO,IAAI;AAC3B,qBAAiB;AAAA,EACnB;AACF;;;ACtIA,SAAS,cAAc,UAA+B,YAA+B;AACnF,QAAM,SAAiC,CAAC;AACxC,QAAM,SAAmB,CAAC;AAE1B,WAAS,UAAU,MAAc,OAAe,MAAoB;AAClE,QAAI,OAAO,IAAI,MAAM,OAAO,KAAK,EAAG,QAAO,KAAK,GAAG,IAAI,MAAM,KAAK,eAAe,OAAO,IAAI,KAAK,CAAC,gBAAgB,OAAO,KAAK,KAAK,CAAC,YAAY,IAAI,GAAG;AAAA,EACzJ;AAEA,GAAC,SAAS,MAAM,MAAM,YAAY,KAAK,CAAC,GAAG,QAAQ,CAAC,YAAY;AAAE,WAAO,OAAO,KAAK,OAAO,OAAO,KAAK,KAAK;AAAA,EAAG,CAAC;AACjH,YAAU,KAAK,KAAK,gBAAgB;AACpC,YAAU,KAAK,KAAK,iBAAiB;AACrC,YAAU,KAAK,KAAK,gBAAgB;AACpC,aAAW,QAAQ,OAAO,KAAK,IAAI;AACnC,aAAW,UAAU,OAAO,SAAS,OAAO,WAAW,CAAC;AAC1D;AAEA,SAAS,qBAAqB,UAAkB,WAAyB;AACvE,QAAM,WAAW,UAAU,EAAE,cAAc,IAAI,QAAQ,qBAAqB;AAC5E,QAAM,UAAU,UAAU,EAAE,eAAe,SAAS;AACpD,MAAI,EAAE,oBAAoB,wBAAwB,CAAC,QAAS;AAC5D,WAAS,iBAAiB,SAAS,MAAM,cAAc,UAAU,OAAO,CAAC;AAC3E;AAEA,eAAsB,oBAAoB;AACxC,QAAM,KAAK,YAAY,IAAI;AAC3B,uBAAqB,kBAAkB,uBAAuB;AAC9D,uBAAqB,sBAAsB,gCAAgC;AAC3E,uBAAqB,kBAAkB,uBAAuB;AAC9D,uBAAqB,sBAAsB,gCAAgC;AAC3E,uBAAqB,kBAAkB,uBAAuB;AAC9D,uBAAqB,sBAAsB,gCAAgC;AAC3E,uBAAqB,gBAAgB,qBAAqB;AAC1D,uBAAqB,oBAAoB,8BAA8B;AACvE,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,qBAAqB,KAAK,MAAM,KAAK,EAAE,CAAC;AAC5C,QAAM,qBAAqB,KAAK,EAAE;AACpC;;;ACzBA,IAAM,eAAe;AACrB,IAAM,YAAY;AAIlB,IAAM,IAAI,IAAI,YAAY;AAAA,EACxB;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AACtC,CAAC;AACD,SAAS,WAAW,GAAG,GAAG,GAAG,KAAK,KAAK;AACrC,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAI,MACnF;AACF,SAAO,OAAO,IAAI;AAChB,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,SAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,UAAI,MAAM,IAAI;AACd,QAAE,CAAC,KAAO,EAAE,CAAC,IAAI,QAAS,MAAQ,EAAE,IAAI,CAAC,IAAI,QAAS,MAC1C,EAAE,IAAI,CAAC,IAAI,QAAS,IAAM,EAAE,IAAI,CAAC,IAAI;AAAA,IACnD;AACA,SAAK,IAAI,IAAI,IAAI,IAAI,KAAK;AACxB,UAAI,EAAE,IAAI,CAAC;AACX,YAAM,MAAM,KAAK,KAAM,KAAK,OAAQ,MAAM,KAAK,KAAM,KAAK,MAAQ,MAAM;AACxE,UAAI,EAAE,IAAI,EAAE;AACZ,YAAM,MAAM,IAAI,KAAM,KAAK,MAAO,MAAM,KAAK,KAAM,KAAK,MAAQ,MAAM;AACtE,QAAE,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,KAAK,EAAE,IAAI,EAAE,IAAI;AAAA,IACjD;AACA,SAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,cAAU,MAAM,IAAI,KAAM,KAAK,MAAO,MAAM,KAAK,KAAM,KAAK,OACjD,MAAM,KAAK,KAAM,KAAK,QAAU,IAAI,IAAM,CAAC,IAAI,KAAO,MACrD,KAAM,EAAE,CAAC,IAAI,EAAE,CAAC,IAAK,KAAM,KAAM;AAC7C,aAAQ,MAAM,IAAI,KAAM,KAAK,MAAO,MAAM,KAAK,KAAM,KAAK,OAC/C,MAAM,KAAK,KAAM,KAAK,QAAU,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO;AAC1E,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAK,IAAI,KAAM;AACf,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAK,KAAK,KAAM;AAAA,IAClB;AACA,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,WAAO;AACP,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,IAAM;AAAA;AAAA,GAAsB,WAAY;AACtC,aAASC,QAAO;AACd,WAAK,eAAe;AACpB,WAAK,YAAY;AAEjB,WAAK,QAAQ,IAAI,WAAW,CAAC;AAC7B,WAAK,OAAO,IAAI,WAAW,EAAE;AAC7B,WAAK,SAAS,IAAI,WAAW,GAAG;AAChC,WAAK,eAAe;AACpB,WAAK,cAAc;AACnB,WAAK,WAAW;AAChB,WAAK,MAAM;AAAA,IACb;AAGA,IAAAA,MAAK,UAAU,QAAQ,WAAY;AACjC,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,eAAe;AACpB,WAAK,cAAc;AACnB,WAAK,WAAW;AAChB,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,QAAQ,WAAY;AACjC,eAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAC3C,aAAK,OAAO,CAAC,IAAI;AAAA,MACnB;AACA,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACzC,aAAK,KAAK,CAAC,IAAI;AAAA,MACjB;AACA,WAAK,MAAM;AAAA,IACb;AAQA,IAAAA,MAAK,UAAU,SAAS,SAAU,MAAM,YAAY;AAClD,UAAI,eAAe,QAAQ;AAAE,qBAAa,KAAK;AAAA,MAAQ;AACvD,UAAI,KAAK,UAAU;AACjB,cAAM,IAAI,MAAM,iDAAiD;AAAA,MACnE;AACA,UAAI,UAAU;AACd,WAAK,eAAe;AACpB,UAAI,KAAK,eAAe,GAAG;AACzB,eAAO,KAAK,eAAe,MAAM,aAAa,GAAG;AAC/C,eAAK,OAAO,KAAK,cAAc,IAAI,KAAK,SAAS;AACjD;AAAA,QACF;AACA,YAAI,KAAK,iBAAiB,IAAI;AAC5B,qBAAW,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,EAAE;AACpD,eAAK,eAAe;AAAA,QACtB;AAAA,MACF;AACA,UAAI,cAAc,IAAI;AACpB,kBAAU,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM,SAAS,UAAU;AACrE,sBAAc;AAAA,MAChB;AACA,aAAO,aAAa,GAAG;AACrB,aAAK,OAAO,KAAK,cAAc,IAAI,KAAK,SAAS;AACjD;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAIA,IAAAA,MAAK,UAAU,SAAS,SAAU,KAAK;AACrC,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,cAAc,KAAK;AACzB,cAAM,OAAO,KAAK;AAClB,cAAM,WAAY,cAAc,YAAc;AAC9C,cAAM,WAAW,eAAe;AAChC,cAAM,YAAa,cAAc,KAAK,KAAM,KAAK;AACjD,aAAK,OAAO,IAAI,IAAI;AACpB,iBAAS,IAAI,OAAO,GAAG,IAAI,YAAY,GAAG,KAAK;AAC7C,eAAK,OAAO,CAAC,IAAI;AAAA,QACnB;AACA,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,mBAAW,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,SAAS;AAC3D,aAAK,WAAW;AAAA,MAClB;AACA,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAI,IAAI,IAAI,CAAC,IAAK,KAAK,MAAM,CAAC,MAAM,KAAM;AAC1C,YAAI,IAAI,IAAI,CAAC,IAAK,KAAK,MAAM,CAAC,MAAM,KAAM;AAC1C,YAAI,IAAI,IAAI,CAAC,IAAK,KAAK,MAAM,CAAC,MAAM,IAAK;AACzC,YAAI,IAAI,IAAI,CAAC,IAAK,KAAK,MAAM,CAAC,MAAM,IAAK;AAAA,MAC3C;AACA,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,SAAS,WAAY;AAClC,YAAM,MAAM,IAAI,WAAW,KAAK,YAAY;AAC5C,WAAK,OAAO,GAAG;AACf,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,aAAa,SAAU,KAAK;AACzC,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC1C,YAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAAA,MACvB;AAAA,IACF;AAEA,IAAAA,MAAK,UAAU,gBAAgB,SAAU,MAAM,aAAa;AAC1D,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC1C,aAAK,MAAM,CAAC,IAAI,KAAK,CAAC;AAAA,MACxB;AACA,WAAK,cAAc;AACnB,WAAK,WAAW;AAChB,WAAK,eAAe;AAAA,IACtB;AACA,WAAOA;AAAA,EACT,GAAE;AAAA;AACF,OAAO,OAAO;AAEd,IAAM;AAAA;AAAA,GAAsB,WAAY;AACtC,aAASC,MAAK,KAAK;AACjB,WAAK,QAAQ,IAAI,KAAK;AACtB,WAAK,QAAQ,IAAI,KAAK;AACtB,WAAK,YAAY,KAAK,MAAM;AAC5B,WAAK,eAAe,KAAK,MAAM;AAC/B,YAAM,MAAM,IAAI,WAAW,KAAK,SAAS;AACzC,UAAI,IAAI,SAAS,KAAK,WAAW;AAC/B,QAAC,IAAI,KAAK,EAAG,OAAO,GAAG,EAAE,OAAO,GAAG,EAAE,MAAM;AAAA,MAC7C,OAAO;AACL,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,cAAI,CAAC,IAAI,IAAI,CAAC;AAAA,QAChB;AAAA,MACF;AACA,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAI,CAAC,KAAK;AAAA,MACZ;AACA,WAAK,MAAM,OAAO,GAAG;AACrB,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAI,CAAC,KAAK,KAAO;AAAA,MACnB;AACA,WAAK,MAAM,OAAO,GAAG;AACrB,WAAK,SAAS,IAAI,YAAY,CAAC;AAC/B,WAAK,SAAS,IAAI,YAAY,CAAC;AAC/B,WAAK,MAAM,WAAW,KAAK,MAAM;AACjC,WAAK,MAAM,WAAW,KAAK,MAAM;AACjC,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAI,CAAC,IAAI;AAAA,MACX;AAAA,IACF;AAIA,IAAAA,MAAK,UAAU,QAAQ,WAAY;AACjC,WAAK,MAAM,cAAc,KAAK,QAAQ,KAAK,MAAM,SAAS;AAC1D,WAAK,MAAM,cAAc,KAAK,QAAQ,KAAK,MAAM,SAAS;AAC1D,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,QAAQ,WAAY;AACjC,eAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAC3C,aAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;AAAA,MACpC;AACA,WAAK,MAAM,MAAM;AACjB,WAAK,MAAM,MAAM;AAAA,IACnB;AAEA,IAAAA,MAAK,UAAU,SAAS,SAAU,MAAM;AACtC,WAAK,MAAM,OAAO,IAAI;AACtB,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,SAAS,SAAU,KAAK;AACrC,UAAI,KAAK,MAAM,UAAU;AACvB,aAAK,MAAM,OAAO,GAAG;AAAA,MACvB,OAAO;AACL,aAAK,MAAM,OAAO,GAAG;AACrB,aAAK,MAAM,OAAO,KAAK,KAAK,YAAY,EAAE,OAAO,GAAG;AAAA,MACtD;AACA,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,SAAS,WAAY;AAClC,YAAM,MAAM,IAAI,WAAW,KAAK,YAAY;AAC5C,WAAK,OAAO,GAAG;AACf,aAAO;AAAA,IACT;AACA,WAAOA;AAAA,EACT,GAAE;AAAA;AACF,OAAO,OAAO;AAEd,SAASC,MAAK,MAAM;AAClB,QAAM,IAAK,IAAI,KAAK,EAAG,OAAO,IAAI;AAClC,QAAM,SAAS,EAAE,OAAO;AACxB,IAAE,MAAM;AACR,SAAO;AACT;AACA,OAAO,OAAOA;AAGd,SAAS,KAAK,KAAK,MAAM;AACvB,QAAM,IAAK,IAAI,KAAK,GAAG,EAAG,OAAO,IAAI;AACrC,QAAM,SAAS,EAAE,OAAO;AACxB,IAAE,MAAM;AACR,SAAO;AACT;AACA,OAAO,OAAO;AAGd,SAAS,WAAW,QAAQC,OAAM,MAAM,SAAS;AAE/C,QAAM,MAAM,QAAQ,CAAC;AACrB,MAAI,QAAQ,GAAG;AACb,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AAEA,EAAAA,MAAK,MAAM;AAGX,MAAI,MAAM,GAAG;AACX,IAAAA,MAAK,OAAO,MAAM;AAAA,EACpB;AAEA,MAAI,MAAM;AACR,IAAAA,MAAK,OAAO,IAAI;AAAA,EAClB;AAEA,EAAAA,MAAK,OAAO,OAAO;AAEnB,EAAAA,MAAK,OAAO,MAAM;AAElB,UAAQ,CAAC;AACX;AACA,IAAM,WAAW,IAAI,WAAW,YAAY;AAC5C,SAAS,KAAK,KAAK,MAAM,MAAM,QAAQ;AACrC,MAAI,SAAS,QAAQ;AAAE,WAAO;AAAA,EAAU;AACxC,MAAI,WAAW,QAAQ;AAAE,aAAS;AAAA,EAAI;AACtC,QAAM,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;AAElC,QAAM,MAAM,KAAK,MAAM,GAAG;AAG1B,QAAM,QAAQ,IAAI,KAAK,GAAG;AAE1B,QAAM,SAAS,IAAI,WAAW,MAAM,YAAY;AAChD,MAAI,SAAS,OAAO;AACpB,QAAM,MAAM,IAAI,WAAW,MAAM;AACjC,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,QAAI,WAAW,OAAO,QAAQ;AAC5B,iBAAW,QAAQ,OAAO,MAAM,OAAO;AACvC,eAAS;AAAA,IACX;AACA,QAAI,CAAC,IAAI,OAAO,QAAQ;AAAA,EAC1B;AACA,QAAM,MAAM;AACZ,SAAO,KAAK,CAAC;AACb,UAAQ,KAAK,CAAC;AACd,SAAO;AACT;AACA,OAAO,OAAO;AAOd,SAAS,OAAO,UAAU,MAAM,YAAY,OAAO;AACjD,QAAM,MAAM,IAAI,KAAK,QAAQ;AAC7B,QAAM,MAAM,IAAI;AAChB,QAAM,MAAM,IAAI,WAAW,CAAC;AAC5B,QAAM,IAAI,IAAI,WAAW,GAAG;AAC5B,QAAM,IAAI,IAAI,WAAW,GAAG;AAC5B,QAAM,KAAK,IAAI,WAAW,KAAK;AAC/B,WAAS,IAAI,GAAG,IAAI,MAAM,OAAO,KAAK;AACpC,UAAM,IAAI,IAAI;AACd,QAAI,CAAC,IAAK,MAAM,KAAM;AACtB,QAAI,CAAC,IAAK,MAAM,KAAM;AACtB,QAAI,CAAC,IAAK,MAAM,IAAK;AACrB,QAAI,CAAC,IAAK,MAAM,IAAK;AACrB,QAAI,MAAM;AACV,QAAI,OAAO,IAAI;AACf,QAAI,OAAO,GAAG;AACd,QAAI,OAAO,CAAC;AACZ,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,QAAE,CAAC,IAAI,EAAE,CAAC;AAAA,IACZ;AACA,aAAS,IAAI,GAAG,KAAK,YAAY,KAAK;AACpC,UAAI,MAAM;AACV,UAAI,OAAO,CAAC,EAAE,OAAO,CAAC;AACtB,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAE,CAAC,KAAK,EAAE,CAAC;AAAA,MACb;AAAA,IACF;AACA,aAAS,IAAI,GAAG,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,KAAK;AACnD,SAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;AAAA,IACvB;AAAA,EACF;AACA,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,MAAE,CAAC,IAAI,EAAE,CAAC,IAAI;AAAA,EAChB;AACA,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,QAAI,CAAC,IAAI;AAAA,EACX;AACA,MAAI,MAAM;AACV,SAAO;AACT;AACA,OAAO,SAAS;;;ACxYhB,IAAI;AACJ,IAAI;AAEJ,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,eAAe;AACnB,IAAI,eAAe;AACnB,IAAI,uBAAuB;AAE3B,IAAI,cAAc;AAClB,IAAI,mBAAmB,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG;AAC9C,IAAI,wBAAwB,IAAI,gBAAgB;AAChD,IAAM,mBAAmB;AACzB,IAAM,eAAe;AACrB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB,MAAO,KAAK;AACnC,IAAM,mBAAmB,IAAI,cAAc;AAC3C,IAAM,iBAAiB,IAAI,cAAc;AACzC,IAAI,qBAAqB;AAEzB,IAAM,kBAAkB,oBAAI,IAAI;AAChC,IAAM,KAAK;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AACR;AACA,IAAM,gBAAgB,CAAC;AACvB,IAAM,oBAAoB,CAAC;AAC3B,IAAM,aAAa,CAAC;AACpB,IAAM,QAAQ;AAAA,EACZ,MAAM,OAAO,cAAc,IAAI;AAAA,EAC/B,QAAQ,OAAO,cAAc,MAAM;AAAA;AAAA,EACnC,MAAM,OAAO,cAAc,IAAI;AAAA,EAC/B,QAAQ,OAAO,cAAc,MAAM;AACrC;AAEA,IAAM,aAAa;AAEnB,IAAM,uBAAuB,CAAC,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,SAAS,OAAO,OAAO,QAAQ,QAAQ,OAAO,IAAI;AAEhK,IAAM,gBAAgB;AAAA,EACpB,OAAO,EAAE,MAAM,kBAAkB,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,EAAE;AAAA,EAC9E,OAAO,EAAE,MAAM,mBAAmB,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,EAAE;AAAA,EAC/E,OAAO,EAAE,MAAM,kBAAkB,MAAM,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK;AAAA,EACjE,OAAO,EAAE,MAAM,mBAAmB,MAAM,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK;AAAA,EAClE,MAAM,EAAE,MAAM,wBAAwB,MAAM,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;AAAA,EAC9F,MAAM,EAAE,MAAM,yBAAyB,MAAM,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;AAAA,EAC/F,MAAM,EAAE,MAAM,sBAAsB,MAAM,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AAAA,EACtE,MAAM,EAAE,MAAM,uBAAuB,MAAM,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AAAA,EACvE,MAAM,EAAE,MAAM,QAAQ,MAAM,OAAU;AACxC;AAaA,IAAI,WAAW,cAAc;AAE7B,eAAe,QAAQ,KAAK;AAC1B,MAAI,MAAM;AACV,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,GAAG;AAC3C,MAAI;AACJ,MAAI,QAAQ,QAAQ,QAAQ;AAC1B,cAAU,MAAM,OAAO,OAAO,OAAO,WAAW,MAAM;AAAA,EACxD,OAAO;AACL,UAAM,aAAkB,KAAK,MAAM;AACnC,cAAU,WAAW;AAAA,EACvB;AACA,QAAM,OAAO,IAAI,SAAS,OAAO;AACjC,WAAS,IAAI,GAAG,IAAI,QAAQ,YAAY,KAAK,EAAG,QAAQ,WAAW,KAAK,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,GAAI,MAAM,EAAE;AAC7G,SAAO;AACT;AAEA,SAAS,yBAAyB;AAChC,MAAI,CAAC,GAAG,MAAO,QAAO,CAAC;AACvB,SAAO,MAAM,KAAU,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ,KAAK,YAAY;AAC3F;AAEA,SAAS,8BAA8B,QAAQ,iBAAiB,OAAO,QAAQ,iBAAiB,OAAO;AACrG,QAAM,QAAQ,CAAC,MAAM,MAAM;AACzB,SAAK,UAAU,OAAO,yBAAyB,MAAM,KAAK;AAAA,EAC5D,CAAC;AACH;AAEA,SAAS,0BAA0B;AACjC,gCAA8B,iBAAiB,OAAO,EAAE;AACxD,QAAM,QAAQ,uBAAuB;AACrC,QAAM,QAAQ,MAAM,UAAU,CAAC,SAAS,KAAK,QAAQ,YAAY;AACjE,qBAAmB,EAAE,OAAO,MAAM;AAClC,gCAA8B,OAAO,KAAK;AAC5C;AAEA,SAAS,wBAAwB;AAC/B,gCAA8B,iBAAiB,OAAO,EAAE;AACxD,qBAAmB,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG;AAC1C,iBAAe;AACf,gBAAc;AACd,iBAAe;AACjB;AAEA,SAAS,sBAAsB,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG;AAC1D,MAAI,CAAC,iBAAiB,MAAM,OAAQ,yBAAwB;AAC5D,QAAM,EAAE,MAAM,IAAI;AAClB,MAAI,CAAC,MAAM,OAAQ;AACnB,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,SAAS,MAAM,QAAQ;AAClE,QAAI,wCAAwC,OAAO,MAAM,MAAM;AAC/D,0BAAsB;AACtB;AAAA,EACF;AACA,mBAAiB,QAAQ;AACzB,iBAAe,MAAM,KAAK,EAAE;AAC5B,gBAAc,MAAM,KAAK,EAAE;AAC3B,iBAAe,MAAM,KAAK,EAAE;AAC5B,gCAA8B,OAAO,KAAK;AAC1C,MAAI,QAAQ,GAAG,QAAS,IAAG,QAAQ,MAAM;AAC3C;AAEA,SAAS,6BAA6B,SAAS,SAAS;AACtD,MAAI,CAAC,iBAAiB,MAAM,OAAQ,yBAAwB;AAC5D,MAAI,QAAQ,iBAAiB,MAAM,UAAU,CAAC,SAAS,SAAS,OAAO;AACvE,MAAI,QAAQ,GAAG;AACb,4BAAwB;AACxB,YAAQ,iBAAiB,MAAM,UAAU,CAAC,SAAS,SAAS,OAAO;AAAA,EACrE;AACA,MAAI,SAAS,EAAG,uBAAsB,OAAO,OAAO;AACtD;AAEA,SAAS,oBAAoB,MAAM;AACjC,SAAO,IAAI,IAAI,SAAS,UAAU,IAAI,CAAC,IAAI,OAAO,SAAS,MAAM,EAAE,SAAS;AAC9E;AAEA,OAAO,sBAAsB,OAAO,EAAE,OAAO,iBAAiB,OAAO,OAAO,iBAAiB,MAAM;AACnG,OAAO,sBAAsB,CAAC,OAAO,YAAY,sBAAsB,OAAO,OAAO;AACrF,OAAO,wBAAwB,MAAO,eAAe,oBAAoB,YAAY,IAAI;AAOzF,eAAe,gBAAgB,cAAc,QAAQ;AACnD,SAAO,KAAK,IAAI,cAAc,MAAM,cAAc,QAAQ,IAAI,gBAAgB,CAAC,OAAO,QAAS,OAAM,IAAI,QAAQ,CAAC,YAAY;AAAE,eAAW,SAAS,GAAG;AAAA,EAAG,CAAC;AAC3J,SAAO,eAAe;AACxB;AAEA,SAAS,sBAAsB;AAC7B,MAAI,KAAK,YAAY,YAAY,MAAM,UAAU;AAC/C,qBAAiB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA+BxB;AAAA,EACH,OAAO;AACL,qBAAiB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAexB;AAAA,EACH;AACA,QAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,KAAK;AAC5C,iBAAe,QAAQ;AAAA;AAAA;AAAA;AAAA,gBAIT,IAAI;AAAA,eACL,KAAK,sBAAsB,GAAG,IAAI,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqB5D;AACH;AAIA,IAAM,UAAN,cAAsB,IAAI;AAAA,EACxB,WAAW;AAAA,EACX,YAAY,KAAW;AACrB,UAAM,GAAG;AACT,SAAK,WAAW;AAAA,EAClB;AAAA,EAES,IAAI,OAAkB;AAC7B,MAAE,KAAK;AACP,UAAM,IAAI,KAAK;AACf,WAAO;AAAA,EACT;AAAA,EAES,QAAc;AACrB,SAAK,WAAW;AAChB,UAAM,MAAM;AAAA,EACd;AACF;AAEA,IAAM,gBAAgB,IAAI,QAAQ;AAElC,IAAM,oBAAN,MAAwB;AAAA,EACtB,aAAa,SAAS,cAAc,KAAK;AAAA,EACzC,YAAY,SAAS,cAAc,KAAK;AAAA,EACxC,WAAW,SAAS,cAAc,KAAK;AAAA,EACvC,QAAQ,SAAS,cAAc,MAAM;AAAA,EACrC,WAAW;AAAA,EACX;AAAA,EACA,OAAO;AAAA,EACP,eAAe,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,EAAE;AAAA,EACnI,QAAQ,EAAE,GAAG,KAAK,aAAa;AAAA;AAAA,EAE/B;AAAA,EAEA,YAAY,cAAc;AACxB,SAAK,gBAAgB;AACrB,SAAK,WAAW,MAAM,UAAU;AAChC,SAAK,UAAU,MAAM,UAAU;AAC/B,SAAK,UAAU,MAAM,kBAAkB;AACvC,SAAK,SAAS,MAAM,UAAU;AAC9B,SAAK,MAAM,MAAM,UAAU;AAC3B,SAAK,SAAS,OAAO,KAAK,KAAK;AAC/B,SAAK,WAAW,OAAO,KAAK,WAAW,KAAK,QAAQ;AAAA,EACtD;AAAA,EAEA,MAAM,OAAO;AACX,QAAI,SAAS,EAAG;AAChB,SAAK,KAAK;AACV,SAAK,OAAO;AACZ,QAAI,KAAK,cAAc,QAAQ,KAAK,MAAM;AACxC,WAAK,KAAK;AACV;AAAA,IACF;AACA,SAAK,YAAY,YAAY,MAAM,KAAK,OAAO,KAAK,cAAc,MAAM,KAAK,IAAI,GAAG,GAAG;AAAA,EACzF;AAAA,EAEA,SAAS,SAAS;AAChB,QAAI,QAAQ,cAAe,SAAQ,YAAY;AAC/C,YAAQ,YAAY,KAAK,UAAU;AAAA,EACrC;AAAA,EAEA,OAAO;AACL,SAAK,WAAW,MAAM,UAAU;AAChC,SAAK,WAAW;AAChB,SAAK,UAAU,MAAM,QAAQ;AAC7B,SAAK,MAAM,cAAc;AAAA,EAC3B;AAAA,EAEA,OAAO,QAAQ,KAAK;AAClB,SAAK,UAAU,MAAM,QAAQ,GAAG,KAAK,MAAO,SAAS,MAAO,GAAG,CAAC;AAChE,SAAK,MAAM,cAAc,GAAG,MAAM,IAAI,GAAG;AACzC,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,WAAW,MAAM,UAAU;AAChC,WAAK,WAAW;AAAA,IAClB;AACA,QAAI,UAAU,IAAK,MAAK,KAAK;AAAA,EAC/B;AAAA,EAEA,OAAO;AACL,kBAAc,KAAK,SAAS;AAE5B,QAAI,KAAK,MAAM,OAAO;AACpB,YAAM,4BAA4B,KAAK,KAAK;AAC5C,WAAK,QAAQ,EAAE,GAAG,KAAK,aAAa;AAAA,IACtC;AACA,eAAW,MAAM,KAAK,KAAK,GAAG,GAAG;AAAA,EACnC;AACF;AAEA,IAAM,KAAK,IAAI,kBAAkB,aAAa;AAG9C,IAAM,sBAAN,MAA0B;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,IAAI;AACd,SAAK,MAAM;AACX,SAAK,WAAW;AAChB,SAAK,SAAS,CAAC;AAAA,EACjB;AAAA,EAEA,OAAO,YAAY,YAAY,QAAQ;AACrC,QAAI,OAAO,WAAW,YAAa,kBAAkB,gBAAgB,OAAO,SAAS,cAAe;AAClG,UAAI,YAAY,OAAO,WAAW,YAAY,WAAW,OAAQ,OAAe,WAAW,SAAS,MAAM;AAAA,IAC5G,OAAO;AACL,YAAM,YAAY,OAAO,OAAO;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,QAAQ;AACd,QAAI,EAAE,OAAO,kBAAkB,gBAAgB,OAAO,OAAO,aAAa,YAAY;AACpF,YAAM,IAAI,MAAM,0EAA0E;AAAA,IAC5F;AACA,QAAI,OAAO,OAAO,SAAS;AACzB,YAAM,GAAG,KAAK,GAAG,8CAA8C,OAAO,OAAO,MAAM,GAAG;AACtF;AAAA,IACF;AACA,SAAK,OAAO,KAAK,MAAM;AACvB,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,MAAM,cAAc;AAClB,QAAI,KAAK,YAAY,CAAC,KAAK,OAAO,OAAQ;AAC1C,QAAI;AACF,YAAM,EAAE,QAAQ,SAAS,IAAI,KAAK,OAAO,MAAM;AAC/C,UAAI,OAAO,SAAS;AAClB;AAAA,MACF;AACA,WAAK,WAAW;AAChB,UAAI,SAAS,YAAY,KAAK,YAAY,MAAM,iBAAiB;AAC/D,cAAM,SAAS;AAAA,MACjB,OAAO;AACL,iBAAS;AAAA,MACX;AAAA,IACF,SAAS,KAAK;AACZ,YAAM,GAAG,KAAK,GAAG,WAAW,GAAG;AAAA,IACjC,UAAE;AACA,WAAK,WAAW;AAChB,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AACF;AAIA,IAAM,gBAAN,MAAM,uBAAsB,YAAY;AAAA,EACtC,OAAO,UAAU,oBAAI,IAAI;AAAA;AAAA,EAEzB,OAAO,UAAU;AAAA,EAEjB,YAAY,QAAQ;AAClB,UAAM;AAEN,QAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,WAAK,OAAO,UAAU,OAAO,QAAQ,EAAE;AACvC,WAAK,QAAQ,UAAU,OAAO,SAAS,OAAO,QAAQ,EAAE;AAAA,IAC1D,OAAO;AACL,WAAK,OAAO,UAAU,MAAM;AAC5B,WAAK,QAAQ,KAAK;AAAA,IACpB;AACA,SAAK,MAAM,YAAY;AACvB,SAAK,SAAS,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAChD,SAAK,OAAO,qBAAqB,CAAC,gBAAgB;AAElD,SAAK,MAAM,SAAS,cAAc,KAAK;AAAA,EACzC;AAAA,EAEA,oBAAoB;AAClB,QAAI,eAAc,QAAQ,IAAI,IAAI,EAAG;AACrC,SAAK,IAAI,YAAY;AACrB,SAAK,IAAI,YAAY,mDAAmD,KAAK,KAAK;AAClF,SAAK,IAAI,QAAQ,KAAK;AACtB,SAAK,iBAAiB,SAAS,KAAK,cAAc;AAClD,SAAK,iBAAiB,SAAS,YAAY;AAC3C,SAAK,OAAO,YAAY,KAAK,GAAG;AAChC,mBAAc,QAAQ,IAAI,IAAI;AAC9B,QAAI,KAAK,SAAS,sBAAsB;AACtC,WAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAM,uBAAuB;AAC3B,UAAM,QAAQ,QAAQ;AACtB,QAAI,KAAK,YAAa;AACtB,mBAAc,QAAQ,OAAO,IAAI;AACjC,QAAI,eAAc,YAAY,MAAM;AAClC,qBAAc,UAAU;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,YAAY;AACjB,WAAO,eAAc;AAAA,EACvB;AAAA,EAEA,iBAAiB;AACf,SAAK,IAAI,UAAU,IAAI,yBAAyB;AAChD,mBAAc,UAAU;AACxB,eAAW,UAAU,eAAc,SAAgB;AACjD,UAAI,WAAW,KAAM,QAAO,IAAI,UAAU,OAAO,yBAAyB;AAAA,IAC5E;AAAA,EACF;AACF;AAMA,eAAe,oBAAoB,QAAQ;AACzC,MAAI,QAAQ,QAAS,OAAM,IAAI,aAAa,WAAW,YAAY;AACnE,MAAI,cAAc,iBAAkB;AACpC,QAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AACrC,UAAM,YAAY,MAAM;AACtB,cAAQ,oBAAoB,SAAS,OAAO;AAC5C,cAAQ,IAAI;AAAA,IACd;AACA,UAAM,UAAU,MAAM;AACpB,YAAM,MAAM,WAAW,UAAU,CAAC,SAAS,KAAK,YAAY,SAAS;AACrE,UAAI,QAAQ,GAAI,YAAW,OAAO,KAAK,CAAC;AACxC,aAAO,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,IAClD;AACA,eAAW,KAAK,EAAE,SAAS,UAAU,CAAC;AACtC,YAAQ,iBAAiB,SAAS,OAAO;AAAA,EAC3C,CAAC;AACH;AAEA,eAAe,gBAAgB,IAAI,QAAQ;AACzC,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI;AACF,UAAM,oBAAoB,MAAM;AAAA,EAClC,SAAS,KAAK;AACZ,QAAK,IAAqB,SAAS,aAAc,QAAO;AACxD,UAAM;AAAA,EACR;AACA,KAAG,MAAM,SAAS,GAAG,MAAM,SAAS,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AAC1E,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI;AACF;AACA,UAAM,KAAK,GAAG,SAAS;AACvB,UAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,uBAAuB,UAAU,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,MAAM,CAAC;AACxH,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,eAAe,IAAI,UAAU,EAAE;AACrC,aAAO;AAAA,IACT;AACA,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,OAAO,KAAK,IAAI,EAAE,WAAW,GAAG;AACjE,UAAI,KAAK,MAAO,OAAM,eAAe,KAAK,KAAK,EAAE;AACjD,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,UAAE;AACA;AACA,OAAG,MAAM,SAAS,GAAG,MAAM,SAAS,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AAC1E,QAAI,WAAW,SAAS,KAAK,cAAc,kBAAkB;AAC3D,YAAM,cAAc,WAAW,MAAM;AACrC,kBAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AACF;AAEA,IAAM,cAAN,cAA0B,YAAY;AAAA;AAAA,EAEpC;AAAA,EAEA,YAAY,QAAQ,MAAM,QAAQ;AAChC,UAAM;AACN,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,UAAU;AACf,SAAK,MAAM,GAAG,KAAK,MAAM,IAAI,KAAK,IAAI,GAAG,QAAQ,QAAQ,GAAG;AAC5D,SAAK,aAAa,KAAK,IAAI,QAAQ,YAAY,EAAE;AACjD,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,SAAS,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAChD,SAAK,OAAO,qBAAqB,CAAC,cAAc;AAChD,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,oBAAoB;AACxB,QAAI,CAAC,KAAK,SAAU;AACpB,SAAK,WAAW;AAChB,UAAM,KAAK,YAAY,IAAI;AAC3B,OAAG,MAAM,SAAS,GAAG,MAAM,SAAS,KAAK;AAEzC,UAAM,MAAM,KAAK,KAAK,MAAM,WAAW;AACvC,QAAI,OAAO,IAAI,CAAC,GAAG;AACjB,YAAM,UAAU,IAAI,CAAC;AACrB,YAAM,SAAS,gBAAgB,IAAI,OAAO;AAC1C,UAAI,WAAW,MAAO,MAAK,MAAM,UAAU;AAAA,IAC7C;AAEA,SAAK,OAAO,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAC/D,MAAM,CAAC,QAAQ;AACd,YAAM,YAAY,GAAG;AACrB,aAAO;AAAA,IACT,CAAC;AACH,OAAG,MAAM,QAAQ,GAAG,MAAM,QAAQ,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AACxE,QAAI;AACJ,QAAI,KAAK,eAAe;AACtB,YAAM,KAAK,YAAY,IAAI;AAG3B,mBAAa,MAAM,OAAO,KAAK,IAAI,EAAE,MAAM,MAAM,MAAS;AAC1D,SAAG,MAAM,MAAM,GAAG,MAAM,MAAM,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AAAA,IACtE;AACA,UAAM,MAAM,SAAS,cAAc,KAAK;AACxC,QAAI,YAAY;AAChB,QAAI,UAAU;AACd,QAAI,SAAS,YAAY;AACvB,UAAI,SAAS;AAAA,cAAiB,KAAK,KAAK,MAAM,KAAK,MAAM;AACzD,WAAK,QAAQ,IAAI;AACjB,UAAI,CAAC,cAAc,KAAK,eAAe;AACrC,YAAK,KAAK,UAAU,KAAO,KAAK,WAAW,GAAI;AAC7C,eAAK,QAAQ,IAAI;AACjB,eAAK,SAAS,IAAI;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AACA,QAAIC,MAAK;AACT,QAAI,YAAY,KAAK;AACnB,UAAI,MAAM,WAAW;AACrB,WAAK,OAAO,WAAW;AACvB,WAAK,QAAQ,WAAW;AACxB,WAAK,SAAS,WAAW;AACzB,WAAK,OAAO,WAAW;AACvB,WAAK,QAAQ,IAAI,KAAK,WAAW,KAAK;AACtC,SAAG,MAAM,UAAU,GAAG,MAAM,UAAU,KAAK;AAAA,IAC7C,OAAO;AACL,UAAI;AACF,cAAM,OAAO,MAAM,gBAAgB,KAAK,KAAK,KAAK,OAAO;AACzD,YAAI,CAAC,MAAM;AACT,UAAAA,MAAK;AACL,aAAG,MAAM,UAAU,GAAG,MAAM,UAAU,KAAK;AAAA,QAC7C,OAAO;AACL,cAAI,MAAM,KAAK;AACf,eAAK,OAAO,KAAK;AACjB,eAAK,QAAQ,KAAK;AAClB,eAAK,SAAS,KAAK;AACnB,eAAK,OAAO,KAAK;AACjB,eAAK,QAAQ,IAAI,KAAK,KAAK,KAAK;AAChC,aAAG,MAAM,WAAW,GAAG,MAAM,WAAW,KAAK;AAC7C,cAAI,KAAK,iBAAiB,KAAK,MAAM;AACnC,mBAAO;AAAA,cACL,MAAM,KAAK;AAAA,cACX,QAAQ,KAAK;AAAA,cACb,MAAM,KAAK;AAAA,cACX,MAAM,KAAK;AAAA,cACX,OAAO,KAAK;AAAA,cACZ,OAAO,KAAK;AAAA,cACZ,QAAQ,KAAK;AAAA,cACb,KAAK,KAAK;AAAA,cACV,MAAM,KAAK;AAAA,cACX,KAAK,IAAI;AAAA;AAAA;AAAA,YAGX,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,SAAS,KAAK;AACZ,YAAI,MAAM,QAAQ,KAAK,GAAG;AAC1B,WAAG,MAAM,SAAS,GAAG,MAAM,SAAS,KAAK;AAAA,MAC3C;AAAA,IACF;AACA,OAAG,MAAM,YAAY,GAAG,MAAM,YAAY,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AAChF,QAAI,KAAK,QAAQ,QAAS;AAC1B,kBAAc,IAAI,KAAK,IAAI;AAC3B,QAAI,CAACA,IAAI;AAET,QAAI,UAAU,MAAM;AAClB,mCAA6B,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,IACnD;AACA,QAAI,iBAAiB,MAAM;AACzB,SAAG,QAAQ,UAAU;AACrB,WAAK,OAAO,YAAY,GAAG,OAAO;AAClC,qBAAe,KAAK;AACpB,oBAAc,KAAK;AACnB,qBAAe,KAAK;AAAA,IACtB;AACA,QAAI,iBAAiB,MAAM;AACzB,SAAG,QAAQ,UAAU;AAAA,IACvB;AACA,QAAI,QAAQ,WAAW,KAAK,MAAM;AAAA,QAAW,KAAK,IAAI;AAAA,QAAW,KAAK,KAAK,eAAe,CAAC;AAAA,YAAqB,KAAK,MAAM,eAAe,CAAC;AAC3I,SAAK,QAAQ,IAAI;AACjB,UAAM,6BAA6B,KAAK,MAAM,YAAY,EAAE,SAAS,GAAG,OAAO,MAAM,YAAY,CAAC;AAClG,QAAI,KAAK,MAAM,YAAY,OAAQ,MAAK,MAAM,UAAU,6BAA6B,KAAK;AAC1F,SAAK,OAAO,YAAY,GAAG;AAC3B,OAAG,MAAM,WAAW,GAAG,MAAM,WAAW,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AAAA,EAChF;AACF;AAqBA,eAAe,gBAAgB,WAAW;AACxC,YAAU,UAAU,OAAO,0BAA0B;AACrD,QAAM,YAAY,UAAU,UAAU,SAAS,0BAA0B;AAGzE,kBAAgB,IAAI,UAAU,OAAO,CAAC,SAAS;AAG/C,QAAM,QAAQ,UAAU,cAAc,0BAA0B;AAChE,QAAM,MAAM,YAAY,YAAY,iBAAiB;AAErD,QAAM,MAAM,MAAM,KAAU,GAAG,MAAM,QAAQ;AAC7C,aAAW,KAAK,KAAK;AACnB,QAAI,CAAC,EAAE,KAAM;AAGb,UAAM,UAAU,EAAE,KAAK,MAAM,WAAW;AACxC,UAAM,cAAc,UAAU,QAAQ,CAAC,IAAI;AAE3C,QAAI,UAAU,MAAM,SAAS,KAAK,gBAAgB,UAAU,OAAO;AACjE,QAAE,MAAM,UAAU,YAAY,SAAS;AAAA,IACzC;AAAA,EACF;AAGF;AAEA,eAAe,gBAAgB;AAC7B,WAAS,iBAAiB,oBAAoB,EAAE,QAAQ,CAAC,SAAS;AAAE,OAAG,MAAM,YAAY,IAAI;AAAA,EAAG,CAAC;AACjG,QAAM,MAAM,MAAM,KAAU,GAAG,MAAM,QAAQ;AAC7C,MAAI;AAGJ,QAAM,eAAe,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,MAAM,OAAO,CAAC;AAErE,MAAI,mBAAmB,CAAC;AAGxB,aAAW,KAAK,KAAK;AACnB,QAAI,MAAM,EAAE,MAAM,MAAM,WAAW;AACnC,QAAI,CAAC,IAAK,OAAM;AAAA,QACX,OAAM,IAAI,CAAC;AAChB,QAAI,QAAQ,SAAS;AACnB,gBAAU;AACV,UAAI,IAAI,SAAS,GAAG;AAElB,YAAI,YAAY;AAChB,mBAAW,QAAQ,KAAK;AACtB,cAAI,CAAC,KAAK,KAAM;AAChB,gBAAM,UAAU,KAAK,KAAK,MAAM,WAAW;AAC3C,gBAAM,cAAc,UAAU,QAAQ,CAAC,IAAI;AAC3C,cAAI,gBAAgB,IAAK;AAAA,QAC3B;AAEA,cAAM,MAAM,SAAS,cAAc,KAAK;AACxC,YAAI,YAAY;AAChB,YAAI,QAAQ;AAGZ,cAAM,SAAS,gBAAgB,IAAI,GAAG,IAAI,gBAAgB,IAAI,GAAG,IAAI;AACrE,wBAAgB,IAAI,KAAK,MAAM;AAC/B,YAAI,iBAAkB,oBAAmB;AAEzC,YAAI,CAAC,QAAQ;AACX,cAAI,UAAU,IAAI,0BAA0B;AAAA,QAC9C;AAGA,cAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,cAAM,YAAY;AAClB,cAAM,cAAc;AACpB,cAAM,MAAM,YAAY,SAAS,kBAAkB;AAGnD,cAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,gBAAQ,YAAY;AACpB,gBAAQ,cAAc;AACtB,gBAAQ,QAAQ;AAGhB,cAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,cAAM,YAAY;AAClB,cAAM,cAAc,GAAG,SAAS;AAChC,YAAI,QAAQ,aAAa,OAAO,SAAS;AAEzC,YAAI,YAAY,KAAK;AACrB,YAAI,YAAY,OAAO;AACvB,YAAI,YAAY,KAAK;AAErB,YAAI,UAAU,MAAM,gBAAgB,GAAG;AACvC,WAAG,MAAM,aAAa,KAAK,CAAC;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAGA,aAAW,KAAK,KAAK;AACnB,QAAI,CAAC,EAAE,KAAM;AAEb,UAAM,MAAM,EAAE,KAAK,MAAM,WAAW;AACpC,QAAI,OAAO,IAAI,CAAC,GAAG;AACjB,YAAM,UAAU,IAAI,CAAC;AACrB,YAAM,SAAS,gBAAgB,IAAI,OAAO;AAC1C,UAAI,WAAW,OAAO;AACpB,UAAE,MAAM,UAAU;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;AAIA,IAAM,mBAAmB,CAAC,YAAY,CAAC,YAAY;AACnD,OAAO,mBAAmB;AAO1B,SAAS,oBAAoB,UAAU;AACrC,MAAI,CAAC,GAAG,OAAQ;AAChB,WAAS,QAAQ,CAAC,QAAQ,SAAS,IAAI,CAAC;AACxC,QAAM,WAAW,SAAS,uBAAuB;AACjD,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,MAAM,SAAS,cAAc,KAAK;AACxC,QAAI,MAAM,QAAQ,SAAS,CAAC,CAAC,GAAG;AAC9B,YAAM,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AACzB,YAAM,OAAO,SAAS,cAAc,KAAK;AACzC,YAAM,MAAM,MAAM,CAAC,KAAK,GAAG,CAAC;AAC5B,WAAK,YAAY,GAAG,GAAG,IAAI,CAAC;AAC5B,UAAI,OAAO,IAAI;AAAA,IACjB,OAAO;AACL,YAAM,OAAO,SAAS,cAAc,KAAK;AACzC,WAAK,YAAY,SAAS,CAAC;AAC3B,UAAI,OAAO,IAAI;AAAA,IACjB;AACA,aAAS,OAAO,GAAG;AAAA,EACrB;AACA,MAAI,GAAG,OAAO,cAAc,EAAG,IAAG,OAAO,YAAY;AACrD,KAAG,OAAO,OAAO,QAAQ;AAC3B;AAEA,eAAe,yBAAyB;AACtC,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,cAAc;AAAA;AAAA;AAAA;AAAA,uBAIC,KAAK,YAAY,YAAY,MAAM,WAAW,eAAe,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB5F,WAAS,KAAK,OAAO,KAAK;AAC5B;AAEA,eAAe,UAAU,QAAQ,UAAU,KAAM;AAC/C,QAAM,aAAa;AACnB,QAAM,MAAM,UAAU;AACtB,QAAM,WAAW,MAAO,OAAO,eAAe,UAAU;AACxD,MAAI,OAAO,eAAe,UAAU,WAAY,QAAO,SAAS;AAEhE,MAAI,OAAO;AACX,SAAO,OAAO,eAAe,UAAU,cAAc,OAAO,KAAK;AAC/D,UAAM,IAAI,QAAQ,CAAC,YAAY;AAAE,iBAAW,SAAS,UAAU;AAAA,IAAG,CAAC;AACnE;AAAA,EACF;AACA,SAAO,SAAS;AAClB;AAEA,eAAe,gBAAgB;AAC7B,MAAI,GAAG,OAAO,KAAM,cAAa,GAAG,OAAO,IAAI;AAC/C,KAAG,OAAO,OAAO,WAAW,YAAY;AACtC,UAAM,KAAK,YAAY,IAAI;AAC3B,UAAM,MAAM,GAAG,OAAO,MAAM,YAAY;AACxC,UAAM,WAAW,MAAM,KAAU,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI;AAC9E,UAAM,gBAAgB,MAAM,KAAU,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,UAAU,SAAS,mBAAmB,CAAC;AAGtH,QAAI,QAAQ,IAAI;AACd,oBAAc,QAAQ,CAAC,QAAQ;AAC7B,YAAI,MAAM,UAAU;AACpB,cAAM,SAAS,gBAAgB,IAAI,IAAI,KAAK,IAAI,gBAAgB,IAAI,IAAI,KAAK,IAAI;AAEjF,cAAM,YAAY,IAAI,cAAc,0BAA0B;AAC9D,YAAI,aAAa,IAAI,QAAQ,YAAY;AACvC,oBAAU,cAAc,GAAG,IAAI,QAAQ,UAAU;AAAA,QACnD;AAEA,cAAM,QAAQ,IAAI,cAAc,0BAA0B;AAC1D,YAAI,UAAU,OAAO,4BAA4B,CAAC,MAAM;AACxD,YAAI,MAAO,OAAM,MAAM,YAAY,SAAS,kBAAkB;AAAA,MAChE,CAAC;AAED,eAAS,QAAQ,CAAC,MAAM;AACtB,cAAM,MAAM,EAAE,KAAK,MAAM,WAAW;AACpC,cAAM,UAAW,OAAO,IAAI,CAAC,IAAK,IAAI,CAAC,IAAI;AAC3C,cAAM,SAAS,gBAAgB,IAAI,OAAO;AAC1C,UAAE,MAAM,UAAW,CAAC,WAAW,SAAU,UAAU;AAAA,MACrD,CAAC;AAED,uBAAiB,UAAU,WAAW,CAAC,UAAU,SAAS,OAAO,eAAe,CAAC,CAAC;AAClF;AAAA,IACF;AAGA,QAAI,aAAa;AACjB,UAAM,mBAAmB,oBAAI,IAAI;AACjC,UAAM,cAAc,oBAAI,QAAQ;AAChC,UAAM,IAAI;AAEV,eAAW,KAAK,UAAU;AACxB,UAAI,UAAU;AACd,UAAI,EAAE,KAAK,GAAG,GAAG;AACf,cAAM,QAAQ,IAAI,MAAM,CAAC;AACzB,cAAM,MAAM,MAAM,CAAC,EAAE,KAAK;AAC1B,cAAM,KAAK,MAAM,CAAC,EAAE,KAAK;AACzB,YAAI,MAAM,MAAM,CAAC,EAAE,KAAK;AACxB,YAAI,QAAQ,QAAS,OAAM,IAAI,KAAK,GAAG;AACvC,YAAM,OAAO,OAAS,EAAE,GAAG,MAAM,OAAW,OAAO,OAAS,EAAE,GAAG,IAAI,OAAW,OAAO,OAAS,EAAE,GAAG,IAAI,KAAO;AAC9G,oBAAU;AAAA,QACZ;AAAA,MACF,WAAW,EAAE,OAAO,YAAY,EAAE,SAAS,GAAG,KAAK,EAAE,MAAM,YAAY,EAAE,SAAS,GAAG,GAAG;AACtF,kBAAU;AAAA,MACZ;AAEA,UAAI,SAAS;AACX,oBAAY,IAAI,CAAC;AACjB;AACA,cAAM,MAAM,EAAE,KAAK,MAAM,WAAW;AACpC,cAAM,UAAW,OAAO,IAAI,CAAC,IAAK,IAAI,CAAC,IAAI;AAC3C,yBAAiB,IAAI,UAAU,iBAAiB,IAAI,OAAO,KAAK,KAAK,CAAC;AAAA,MACxE;AAAA,IACF;AAGA,eAAW,OAAO,eAAe;AAC/B,YAAM,UAAU,IAAI;AACpB,YAAM,aAAa,iBAAiB,IAAI,OAAO,KAAK;AAEpD,UAAI,aAAa,GAAG;AAClB,YAAI,MAAM,UAAU;AACpB,YAAI,UAAU,OAAO,0BAA0B;AAE/C,cAAM,QAAQ,IAAI,cAAc,0BAA0B;AAC1D,YAAI,MAAO,OAAM,MAAM,YAAY;AAAA,MAGrC,OAAO;AACL,YAAI,MAAM,UAAU;AAAA,MACtB;AAAA,IACF;AAGA,eAAW,KAAK,UAAU;AACxB,QAAE,MAAM,UAAU,YAAY,IAAI,CAAC,IAAI,UAAU;AAAA,IACnD;AAEA,UAAM,KAAK,YAAY,IAAI;AAC3B,qBAAiB,UAAU,CAAC,UAAU,GAAG,WAAW,eAAe,CAAC,MAAM,SAAS,OAAO,eAAe,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,KAAK,MAAM,KAAK,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;AACpK,UAAM,iBAAiB,GAAG,IAAI,KAAK,EAAE;AACrC,4BAAwB;AAAA,EAC1B,GAAG,GAAG;AACR;AAYA,eAAsB,YAAY,KAAK;AAGrC,MAAI,YAAY,WAAW,GAAG,EAAG,eAAc,YAAY,SAAS,GAAG,IAAI,GAAG,GAAG,MAAM,GAAG,GAAG;AAAA,MACxF,eAAc,GAAG,GAAG;AAEzB,MAAI,CAAC,OAAO,OAAO,eAAe,WAAW,GAAG;AAC9C,UAAM,aAAa,WAAW,sCAAsC;AACpE;AAAA,EACF;AACA,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,MAAM,MAAM,KAAU,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI;AACzE,MAAI,IAAI,WAAW,EAAG;AACtB,QAAM,WAAW,SAAS,uBAAuB;AAGjD,QAAM,aAAa,CAAC,SAAS;AAC3B,UAAM,QAAQ,KAAK,KAAK,MAAM,WAAW;AACzC,WAAO,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC5B;AAGA,QAAM,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC;AACxD,QAAM,iBAAiB,IAAI,OAAO,CAAC,SAAS,WAAW,IAAI,CAAC;AAG5D,QAAM,eAAe,oBAAI,IAAI;AAC7B,aAAW,QAAQ,gBAAgB;AACjC,UAAM,MAAM,WAAW,IAAI;AAC3B,QAAI,CAAC,aAAa,IAAI,GAAG,EAAG,cAAa,IAAI,KAAK,CAAC,CAAC;AACpD,iBAAa,IAAI,GAAG,EAAE,KAAK,IAAI;AAAA,EACjC;AAEA,aAAW,cAAc,WAAW;AAGpC,YAAU,KAAK,SAAS,IAAI;AAC5B,YAAU,QAAQ,CAAC,SAAS,SAAS,YAAY,IAAI,CAAC;AAItD,QAAM,cAAc,MAAM,KAAa,aAAa,KAAK,CAAC;AAC1D,QAAM,oBAAoB,YAAY,SAAS,GAAG,IAAI,YAAY,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAEpJ,aAAW,cAAc,mBAAmB;AAC1C,UAAM,QAAQ,aAAa,IAAI,UAAU;AACzC,UAAM,KAAK,SAAS,IAAI;AACxB,UAAM,QAAQ,CAAC,SAAS,SAAS,YAAY,IAAI,CAAC;AAAA,EACpD;AAEA,MAAI,SAAS,SAAS,WAAW,EAAG;AACpC,KAAG,MAAM,YAAY;AACrB,KAAG,MAAM,YAAY,QAAQ;AAC7B,gBAAc;AAGd,QAAM,MAAM,MAAM,KAAU,GAAG,MAAM,QAAQ;AAC7C,aAAW,KAAK,KAAK;AACnB,QAAI,CAAC,EAAE,KAAM;AAEb,UAAM,MAAM,EAAE,KAAK,MAAM,WAAW;AACpC,QAAI,OAAO,IAAI,CAAC,GAAG;AACjB,YAAM,UAAU,IAAI,CAAC;AACrB,YAAM,SAAS,gBAAgB,IAAI,OAAO;AAC1C,UAAI,WAAW,OAAO;AACpB,UAAE,MAAM,UAAU;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,qBAAqB,SAAS,IAAI,QAAQ,IAAI,MAAM,SAAS,KAAK,MAAM,KAAK,EAAE,CAAC,EAAE;AACtF,mBAAiB,CAAC,UAAU,IAAI,OAAO,eAAe,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,MAAM,KAAK,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;AAC/G,QAAM,eAAe,SAAS,IAAI,IAAI,KAAK,EAAE;AAC7C,0BAAwB;AAC1B;AACA,OAAO,cAAc;AAcrB,SAAS,gBAAgB,OAAO,MAAM,OAAO;AAE3C,QAAMC,UAAS,GAAG,QAAQ;AAC1B,QAAM,kBAAkB,SAAS,cAAc,KAAK;AACpD,QAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,QAAM,OAAO,SAAS,cAAc,MAAM;AAE1C,EAAAA,QAAO,MAAM,WAAW;AACxB,kBAAgB,MAAM,UAAU;AAChC,SAAO,MAAM,UAAU;AACvB,UAAQ,MAAM,UAAU;AACxB,UAAQ,MAAM,UAAU;AACxB,UAAQ,YAAY;AACpB,UAAQ,YAAY,MAAM,yBAAyB,SAAS,KAAK;AACjE,OAAK,UAAU,IAAI,aAAa;AAEhC,SAAO,OAAO,SAAS,OAAO;AAC9B,kBAAgB,OAAO,QAAQ,IAAI;AACnC,EAAAA,QAAO,OAAO,eAAe;AAC7B,SAAO,MAAM;AAAE,oBAAgB,OAAO;AAAA,EAAG;AAC3C;AAEA,IAAM,mBAAmB,IAAI,oBAAoB,qBAAqB;AAStE,eAAe,kBAAkB,QAAQ,UAAU,YAAY,QAAQ,OAAO;AAC5E,MAAI,CAAC,KAAK,iBAAiB,CAAC,MAAO;AACnC,MAAI,CAAC,UAAU,CAAC,SAAU;AAC1B,MAAI,KAAK,IAAI,IAAI,cAAc,MAAM,IAAI,eAAgB;AACzD,gBAAc,MAAM,IAAI,KAAK,IAAI;AACjC,MAAI;AACF,QAAI,OAAO,WAAW,YAAY,OAAO,aAAa,UAAU;AAC9D,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AACA,UAAM,qBAAqB,EAAE,QAAQ,SAAS,CAAC;AAC/C,UAAM,gBAAgB,UAAU,WAAW,MAAM;AAAA,EACnD,SAAS,KAAK;AACZ,UAAM,qBAAqB,EAAE,QAAQ,OAAO,IAAI,CAAC;AACjD;AAAA,EACF;AAEA,mBAAiB,QAAQ;AAAA,IACvB,QAAQ,WAAW;AAAA,IACnB,UAAU,YAAY;AACpB,UAAI,KAAK,IAAI,IAAI,kBAAkB,MAAM,IAAI,eAAgB;AAC7D,wBAAkB,MAAM,IAAI,KAAK,IAAI;AACrC,YAAM,KAAK,YAAY,IAAI;AAC3B,YAAM,oBAAoB,QAAQ,oBAAI,IAAI,IAAI,IAAI,IAAI,cAAc,OAAO,CAAC;AAC5E,YAAM,mBAAmB,OAAO,QAAQ,QAAQ,GAAG,EAAE,QAAQ,OAAO,EAAE;AACtE,YAAM,kBAAkB,YAAY,MAAM,kBAAkB,GAAG,gBAAgB,UAAU,OAAO,IAAI;AACpG,YAAM,oBAAoB,MAAM,SAAS,eAAe,EACrD,MAAM,CAAC,MAAM;AACZ,cAAM,oBAAoB,EAAE,QAAQ,OAAO,EAAE,CAAC;AAC9C,eAAO;AAAA,MACT,CAAC;AACH,YAAM,eAAe,oBAAoB,kBAAkB;AAC3D,UAAI,CAAC,UAAU,eAAe,mBAAmB,CAAC,OAAO,SAAS,YAAY,GAAI;AAClF,UAAI,sBAAsB,EAAE,OAAO,CAAC;AAEpC,UAAI,WAAW,OAAO,SAAS;AAC7B,cAAM,oBAAoB,EAAE,QAAQ,QAAQ,WAAW,OAAO,OAAO,CAAC;AACtE;AAAA,MACF;AACA,YAAM,cAAc,gBAAgB,YAAY;AAChD,YAAM,iBAAiB,mBAAmB,iBAAiB,WAAW,MAAM,EACzE,KAAK,CAAC,aAAa;AAClB,cAAM,KAAK,YAAY,IAAI;AAC3B,YAAI,sBAAsB,EAAE,QAAQ,MAAM,kBAAkB,MAAM,SAAS,UAAU,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AAChH,cAAM,sBAAsB,MAAM,IAAI,KAAK,EAAE;AAC7C,+BAAuB;AACvB,yBAAiB,yBAAyB;AAAA,MAC5C,CAAC,EACA,MAAM,CAAC,WAAW;AACjB,4BAAoB,YAAY,qBAAqB,MAAM;AAAA,MAC7D,CAAC,EACA,QAAQ,YAAY;AACnB,cAAM,IAAI,QAAQ,CAAC,YAAY;AAAE,qBAAW,SAAS,GAAI;AAAA,QAAG,CAAC;AAC7D,oBAAY;AAAA,MACd,CAAC;AAAA,IACL;AAAA,EACF,CAAC;AACH;AAEA,SAAS,kBAAkB,QAAQ;AACjC,wBAAsB,MAAM,MAAM;AAClC,QAAM,aAAa,IAAI,gBAAgB;AACvC,0BAAwB;AAExB,gBAAc,MAAM;AACpB,KAAG,KAAK;AACR,wBAAsB;AACtB,SAAO;AACT;AA6BO,SAAS,aAAa;AAC3B,MAAI,CAAC,qBAAsB;AAC3B,QAAM,aAAa,kBAAkB,kCAAkC;AACvE,KAAG,MAAM,YAAY;AACrB,MAAI,cAAc,EAAE,QAAQ,qBAAqB,CAAC;AAClD,oBAAkB,sBAAsB,GAAG,YAAY,IAAI;AAC7D;AACA,OAAO,aAAa;AAEpB,eAAe,aAAa,KAAK,YAAY;AAC3C,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,WAAW,SAAS,uBAAuB;AACjD,mBAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,GAAG,aAAa;AAC3D,MAAI,WAAW;AAEf,QAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,yBAAyB,UAAU,IAAI,OAAO,IAAI,CAAC,EAAE;AAC9F,MAAI,CAAC,OAAO,IAAI,WAAW,KAAK;AAC9B,qBAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,GAAG,CAAC,UAAU,KAAK,cAAc,aAAa,CAAC;AAC1F;AAAA,EACF;AACA,QAAM,WAAW,MAAM,IAAI,KAAK;AAChC,aAAW,QAAQ,UAAU;AAC3B,UAAM,OAAO,UAAU,IAAI,EAAE,MAAM,OAAO;AAC1C,UAAM,WAAW,KAAK,CAAC;AACvB,UAAM,MAAM,SAAS,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY;AAClD,QAAI,qBAAqB,SAAS,GAAG,GAAG;AACtC;AACA,YAAM,IAAI,IAAI,YAAY,KAAK,CAAC,GAAG,UAAU,WAAW,MAAM;AAC9D,eAAS,YAAY,CAAC;AAAA,IACxB;AAAA,EACF;AAEA,MAAI,WAAW,OAAO,QAAS;AAC/B,KAAG,MAAM,YAAY,QAAQ;AAE7B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,mBAAmB,IAAI,OAAO,IAAI,QAAQ,QAAQ,qBAAqB,KAAK,MAAM,KAAK,EAAE,CAAC,IAAI;AAClG,QAAM,gBAAgB,IAAI,OAAO,IAAI,IAAI,KAAK,EAAE;AAChD,mBAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,GAAG,CAAC,UAAU,SAAS,eAAe,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,MAAM,KAAK,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;AAC1I,KAAG,MAAM,QAAQ;AACjB,gBAAc;AACd,0BAAwB;AACxB,oBAAkB,IAAI,OAAO,MAAM,UAAU,UAAU;AACzD;AAEA,eAAe,aAAa,KAAK;AAC/B,MAAI,CAAC,IAAK;AAEV,QAAM,aAAa,kBAAkB,gBAAgB;AAErD,KAAG,MAAM,YAAY;AACrB,sBAAoB;AACpB,MAAI,MAAM,GAAG,eAAe,UAAU,KAAM,IAAG,MAAM;AACrD,MAAI,cAAc;AAClB,MAAI;AACF,SAAK,IAAI,UAAU,GAAG,GAAG,yBAAyB;AAClD,kBAAc,MAAM,UAAU,EAAE;AAAA,EAClC,SAAS,KAAK;AACZ,QAAI,6BAA6B,GAAG;AACpC;AAAA,EACF;AACA,MAAI,sBAAsB,WAAW,UAAU,IAAI,UAAU,QAAQ,IAAI,GAAG,EAAE;AAC9E,yBAAuB,IAAI,OAAO;AAClC,MAAI,CAAC,aAAa;AAChB,UAAM,aAAa,KAAK,UAAU;AAClC;AAAA,EACF;AACA,mBAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,CAAC;AAC5C,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,WAAW;AACf,MAAI,KAAK,YAAY,IAAI;AACzB,MAAI,WAAW,SAAS,uBAAuB;AAE/C,KAAG,YAAY,CAACC,WAAU;AACxB,SAAK,YAAY,IAAI;AACrB,UAAM,OAAO,UAAUA,OAAM,IAAI,EAAE,MAAM,OAAO;AAChD,QAAI,KAAK,CAAC,MAAM,SAAS;AACvB,SAAG,MAAM;AAAA,IACX,OAAO;AACL,YAAM,WAAW,KAAK,CAAC;AACvB,YAAM,MAAM,SAAS,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY;AAClD,UAAI,qBAAqB,SAAS,GAAG,GAAG;AACtC,cAAM,OAAO,IAAI,YAAY,KAAK,CAAC,GAAG,UAAU,WAAW,MAAM;AACjE;AACA,iBAAS,YAAY,IAAI;AACzB,YAAI,WAAW,iBAAiB,GAAG;AACjC,2BAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,GAAG,CAAC,UAAU,SAAS,eAAe,CAAC,GAAG,CAAC,UAAU,aAAa,GAAG,CAAC,QAAQ,GAAG,KAAK,MAAM,KAAK,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;AACrK,aAAG,MAAM,YAAY,QAAQ;AAC7B,qBAAW,SAAS,uBAAuB;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,KAAG,UAAU,CAACA,WAAU;AACtB,QAAI,WAAW,OAAO,QAAS;AAC/B,OAAG,MAAM,YAAY,QAAQ;AAE7B,QAAI,mBAAmB,IAAI,OAAO,IAAI,QAAQ,QAAQ,mBAAmB,KAAK,MAAM,KAAK,EAAE,CAAC,IAAI;AAChG,qBAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,GAAG,CAAC,UAAU,SAAS,eAAe,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,MAAM,KAAK,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;AAC1I,OAAG,MAAM,QAAQ;AACjB,kBAAc;AACd,4BAAwB;AACxB,sBAAkB,IAAI,OAAO,MAAM,UAAU,UAAU;AAAA,EACzD;AACA,KAAG,UAAU,CAACA,WAAU;AACtB,QAAI,oBAAoBA,MAAK;AAAA,EAC/B;AACA,KAAG,KAAK,UAAU,IAAI,OAAO,IAAI,CAAC;AACpC;AAEA,eAAe,gBAAgB;AAE7B,QAAM,MAAM,MAAMD,WAAU,GAAG,OAAO,GAAG,kBAAkB;AAC3D,MAAI,CAAC,OAAO,IAAI,WAAW,IAAK;AAChC,QAAM,IAAI,IAAI,MAAM,QAAQ,EAAE,CAAC,EAAE,QAAQ,QAAQ,IAAI;AACrD,QAAM,UAAU,MAAM,IAAI,KAAK;AAC/B,KAAG,QAAQ,YAAY;AACvB,aAAW,UAAU,SAAS;AAC5B,UAAM,IAAI,IAAI,cAAc,MAAM;AAClC,OAAG,QAAQ,YAAY,CAAC;AAAA,EAC1B;AACF;AAEA,eAAe,mBAAmB;AAChC,iBAAe,gBAAgB,WAAW;AACxC,UAAM,YAAY,UAAU,OAAO,CAAC,MAAM,EAAE,QAAQ,WAAW,SAAS,SAAS,CAAC;AAClF,eAAW,WAAW,WAAW;AAC/B,YAAM,QAAQ,QAAQ,OAAO,iBAAiB,GAAG;AACjD,iBAAW,QAAQ,OAAO;AACxB,cAAM,OAAO,KAAK,aAAa,MAAM;AACrC,YAAI,CAAC,KAAM;AACX,cAAM,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,IAAI;AACjD,aAAK,aAAa,YAAY,EAAE;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,kBAAkB,UAAU,EAAE,iBAAiB,iBAAiB;AACtE,aAAW,WAAW,iBAAiB;AACrC,UAAM,kBAAkB,IAAI,iBAAiB,eAAe;AAC5D,oBAAgB,QAAQ,SAAS,EAAE,WAAW,MAAM,SAAS,MAAM,YAAY,KAAK,CAAC;AAAA,EACvF;AACF;AAEA,eAAe,sBAAsB;AACnC,QAAM,gBAAgB,SAAS,cAAc,OAAO;AAGpD,gBAAc,cAAc;AAC5B,WAAS,KAAK,OAAO,aAAa;AACpC;AAEA,eAAe,yBAAyB;AACtC,QAAM,WAAW,KAAK,YAAY,YAAY,MAAM;AACpD,MAAI,aAAa,WAAW,SAAS,eAAe,iBAAiB,IAAI,SAAS,eAAe,aAAa;AAC9G,MAAI,UAAU;AACd,SAAO,CAAC,cAAc,YAAY,IAAI;AACpC,UAAM,IAAI,QAAQ,CAAC,YAAY;AAAE,iBAAW,SAAS,IAAI;AAAA,IAAG,CAAC;AAC7D,iBAAa,WAAW,SAAS,eAAe,iBAAiB,IAAI,SAAS,eAAe,aAAa;AAAA,EAC5G;AACA,MAAI,CAAC,YAAY;AACf,UAAM,kBAAkB;AACxB;AAAA,EACF;AACA,QAAM,mBAAmB;AACzB,iBAAe,mBAAmB,WAAW;AAC3C,QAAI,CAAC,KAAK,2BAA4B;AACtC,eAAW,YAAY,WAAW;AAChC,cAAQ,SAAS,eAAe;AAAA,QAC9B,KAAK;AACH,cAAI,SAAS,SAAS,SAAS,QAAQ,KAAK,CAAC,SAAS,OAAO,UAAU,SAAS,QAAQ,GAAG;AACzF,kBAAM,cAAc;AACpB,0BAAc,UAAU,GAAG,MAAM;AAAA,UACnC;AACA;AAAA,QACF,KAAK;AACH,cAAI,iBAAiB,KAAK,SAAS,QAAQ,KAAK,CAAC,iBAAiB,KAAK,SAAS,OAAO,MAAM,OAAO,GAAG;AACrG,kBAAM,cAAc;AACpB,0BAAc,UAAU,GAAG,MAAM;AAAA,UACnC;AACA;AAAA,QACF;AACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACA,QAAM,qBAAqB,IAAI,iBAAiB,kBAAkB;AAClE,qBAAmB,QAAQ,YAAY,EAAE,iBAAiB,CAAC,SAAS,OAAO,GAAG,mBAAmB,KAAK,CAAC;AACzG;AAEA,eAAe,cAAc,KAAK;AAChC,QAAM,MAAM,MAAMA,WAAU,GAAG,OAAO,GAAG,sBAAsB,mBAAmB,YAAY,CAAC,IAAI,EAAE,QAAQ,SAAS,CAAC;AACvH,MAAI,gBAAgB;AACpB,MAAI,CAAC,OAAO,IAAI,WAAW,KAAK;AAC9B,UAAM,iBAAiB,EAAE,MAAM,cAAc,QAAQ,KAAK,QAAQ,YAAY,KAAK,WAAW,CAAC;AAC/F;AAAA,EACF;AACA,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,MAAI,iBAAiB,IAAI;AACzB,gBAAc,UAAU,GAAG,MAAM;AACnC;AAEA,eAAe,gBAAgB,KAAK;AAClC,MAAI,mBAAmB,YAAY;AACnC,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,OAAO,SAAS,mBAAmB,YAAY,CAAC;AACrD,OAAK,WAAW;AAChB,WAAS,KAAK,YAAY,IAAI;AAC9B,OAAK,MAAM;AACX,WAAS,KAAK,YAAY,IAAI;AAC9B,MAAI,gBAAgB;AACtB;AAEA,eAAe,YAAY,KAAK;AAC9B,MAAI,gBAAgB;AACpB,QAAM,MAAM,SAAS,eAAe,6BAA6B;AACjE,MAAI,CAAC,IAAK;AACV,QAAM,MAAM,MAAMA,WAAU,GAAG,OAAO,GAAG,kBAAkB,UAAU,YAAY,CAAC,EAAE;AACpF,MAAI,CAAC,OAAO,IAAI,WAAW,IAAK;AAChC,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,MAAI,mBAAmB,IAAI;AAC3B,QAAM,SAAS,MAAM,YAAY,UAAU;AAC3C,QAAM,WAAW,MAAM,YAAY,YAAY,MAAM,aAAa,iBAAiB,KAAK;AACxF,QAAM,MAAM,MAAM,QAAQ;AAC1B,QAAM,SAAS,MAAM,cAAc,CAAC;AACpC,SAAO,OAAO;AACd,SAAO,OAAO;AACd,SAAO,OAAO,iBAAiB;AAC/B,QAAM,kBAAkB,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,MAAM,GAAG,SAAS,KAAK,EAAE,EAAE,KAAK,KAAK;AAC1G,MAAI,YAAY;AAAA,wBACM,YAAY;AAAA,0BACV,MAAM;AAAA,4BACJ,QAAQ;AAAA,WACzB,eAAe;AAAA,wEAC8C,GAAG;AAAA;AAEzE,QAAM,MAAM,SAAS,cAAc,sBAAsB;AACzD,MAAI,IAAK,KAAI,MAAM,SAAS,mBAAmB,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC;AAC5E,QAAM,SAAS,SAAS,cAAc,qBAAqB;AAC3D,MAAI,OAAQ,QAAO,YAAY;AACjC;AAEA,eAAe,gBAAgB;AAC7B,MAAI,GAAG,QAAS;AAChB,KAAG,UAAU,SAAS,cAAc,KAAK;AACzC,KAAG,QAAQ,YAAY;AACvB,QAAM,cAAc,SAAS,cAAc,MAAM;AACjD,cAAY,YAAY;AACxB,cAAY,QAAQ;AACpB,cAAY,MAAM,SAAS;AAC3B,cAAY,iBAAiB,SAAS,eAAe;AACrD,QAAM,YAAY,SAAS,cAAc,MAAM;AAC/C,YAAU,YAAY;AACtB,YAAU,QAAQ;AAClB,YAAU,MAAM,SAAS;AACzB,YAAU,iBAAiB,SAAS,aAAa;AACjD,QAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,UAAQ,YAAY;AACpB,UAAQ,QAAQ;AAChB,UAAQ,MAAM,SAAS;AACvB,UAAQ,iBAAiB,SAAS,WAAW;AAC7C,KAAG,QAAQ,OAAO,SAAS,WAAW,WAAW;AACnD;AAEA,eAAe,kBAAkB,KAAuB;AACtD,MAAI,CAAC,OAAO,CAAC,IAAI,IAAK;AACtB,MAAI,CAAC,IAAI,IAAI,YAAY,EAAE,SAAS,OAAO,KAAK,CAAC,IAAI,IAAI,YAAY,EAAE,SAAS,OAAO,EAAG;AAC1F,QAAM,UAAU,IAAI;AACpB,MAAI;AACF,UAAM,KAAK,YAAY,IAAI;AAC3B,QAAI,MAAM;AAGV,UAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,+BAA+B;AAC1E,UAAM,MAAM,MAAMA,WAAU,OAAO;AACnC,QAAI,CAAC,OAAO,IAAI,WAAW,IAAK;AAChC,UAAM,YAAY,MAAM,IAAI,KAAK;AACjC,QAAI,CAAC,aAAa,UAAU,QAAQ,MAAM;AACxC,YAAM,aAAa,EAAE,KAAK,SAAS,KAAK,MAAM,UAAU,CAAC;AACzD;AAAA,IACF;AACA,UAAM,gBAAgB,MAAM,SAAS;AAAA,MACnC,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,IACX,CAAC;AACD,QAAI,MAAM,IAAI,gBAAgB,aAAa;AAC3C,UAAM,KAAK,YAAY,IAAI;AAC3B,QAAI,aAAa,EAAE,MAAM,KAAK,MAAM,KAAK,EAAE,GAAG,cAAc,UAAU,MAAM,eAAe,cAAc,KAAK,CAAC;AAAA,EACjH,SAAS,KAAK;AACZ,UAAM,cAAc,EAAE,KAAK,SAAS,IAAI,CAAC;AAAA,EAC3C;AACF;AAEA,eAAe,0BAA0B;AACvC,QAAM,oBAAoB,SAAS,iBAAiB,iBAAiB;AACrE,aAAW,oBAAoB,mBAAmB;AAChD,QAAI,CAAC,iBAAkB;AACvB,UAAM,kBAAkB,IAAI,iBAAiB,CAAC,cAAc;AAC1D,iBAAW,YAAY,WAAW;AAChC,YAAI,SAAS,SAAS,eAAe,SAAS,WAAW,SAAS,GAAG;AACnE,gBAAM,MAAM,iBAAiB,cAAc,KAAK;AAChD,cAAI,OAAO,CAAC,iBAAiB,QAAQ,eAAe;AAClD,6BAAiB,QAAQ,gBAAgB;AACzC,gBAAI,qBAAqB,EAAE,SAAS,iBAAiB,GAAG,CAAC;AACzD,gBAAI,iBAAiB,SAAS,MAAM,kBAAkB,GAAG,CAAC;AAC1D,4BAAgB,WAAW;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AACD,oBAAgB,QAAQ,kBAAkB,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,EAC9E;AACF;AAEA,eAAe,uBAAuB;AAEpC,mBAAiB,QAAQ;AAAA,IACvB,QAAQ,IAAI,gBAAgB,EAAE;AAAA;AAAA,IAC9B,UAAU,YAAY;AACpB,UAAI,UAAU;AACd,aAAO,CAAC,WAAW,KAAK,YAAY,IAAI;AACtC,cAAM,IAAI,QAAQ,CAAC,YAAY;AAAE,qBAAW,SAAS,GAAI;AAAA,QAAG,CAAC;AAAA,MAC/D;AACA,UAAI,CAAC,WAAW,GAAG;AACjB,cAAM,IAAI,MAAM,uCAAuC;AAAA,MACzD;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,cAAc;AAClC,QAAM,KAAK,YAAY,IAAI;AAC3B,KAAG,UAAU,UAAU,EAAE,eAAe,qBAAqB;AAC7D,KAAG,QAAQ,UAAU,EAAE,eAAe,mBAAmB;AACzD,KAAG,SAAS,UAAU,EAAE,eAAe,oBAAoB;AAC3D,KAAG,SAAS,UAAU,EAAE,cAAc,8BAA8B;AACpE,KAAG,OAAO,SAAS,eAAe,wBAAwB;AAC1D,MAAI,CAAC,GAAG,WAAW,CAAC,GAAG,SAAS,CAAC,GAAG,UAAU,CAAC,GAAG,QAAQ;AACxD,UAAM,eAAe,0BAA0B;AAC/C;AAAA,EACF;AAEA,MAAI,GAAG,MAAM;AACX,OAAG,KAAK,QAAQ,KAAK;AACrB,OAAG,KAAK,iBAAiB,SAAS,mBAAmB;AAAA,EACvD;AACA,uBAAqB;AACrB,gBAAc;AACd,sBAAoB;AACpB,yBAAuB;AACvB,sBAAoB;AAEpB,QAAM,WAAW,UAAU,EAAE,eAAe,sBAAsB;AAClE,MAAI,SAAU,IAAG,SAAS,QAAQ;AAAA,MAC7B,KAAI,eAAe,uCAAuC;AAE/D,MAAI,oBAAoB;AACtB,QAAI,eAAe,qBAAqB;AACxC;AAAA,EACF;AACA,uBAAqB;AAErB,KAAG,OAAO,iBAAiB,SAAS,aAAa;AACjD,KAAG,UAAU,UAAU,EAAE,eAAe,wBAAwB;AAChE,WAAS,eAAe,mBAAmB,EAAE,MAAM,SAAS,KAAK,kBAAkB,SAAS;AAE5F,mBAAiB;AACjB,gBAAc;AACd,yBAAuB;AACvB,0BAAwB;AACxB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,QAAQ,CAAC,OAAO;AAAE,kBAAc,IAAI,aAAa;AAAA,EAAG,CAAC;AACvD,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,eAAe,KAAK,MAAM,KAAK,EAAE,CAAC;AACtC,QAAM,eAAe,KAAK,EAAE;AAC9B;AAIA,eAAe,OAAO,kBAAkB,aAAa;AACrD,eAAe,OAAO,gBAAgB,WAAW;;;ACnjDjD,mBAAkB;AAClB,qBAAoB;AAQpB,IAAI,cAAc;AAClB,IAAI;AACJ,IAAI;AAEJ,SAAS,gBAAgB;AACvB,QAAM,OAAO,SAAS;AACtB,QAAM,UAAU,iBAAiB,IAAI,EAAE,iBAAiB,gBAAgB,EAAE,KAAK;AAC/E,MAAI,OAAO;AACX,MAAI,YAAY,UAAW,QAAO;AAAA,WACzB,YAAY,QAAS,QAAO;AAAA,WAC5B,YAAY,OAAQ,QAAO;AAAA,WAC3B,YAAY,aAAc,QAAO;AAC1C,OAAK,MAAM,YAAY,kBAAkB,IAAI;AAC7C,MAAI,iBAAiB,SAAS,IAAI;AACpC;AAEA,OAAO,gBAAgB;AAOvB,SAAS,WAAW,KAAK,QAAQ,OAAO;AACtC,MAAI,MAAO,WAAU,EAAE,eAAe,eAAe,EAAE,MAAM,UAAU;AACvE,MAAI,YAAa;AACjB,MAAI,KAAK,WAAW,EAAG;AACvB,YAAU,EAAE,eAAe,eAAe,EAAE,MAAM,UAAU;AAC5D,MAAI,aAAa,MAAM,KAAU,UAAU,EAAE,iBAAiB,6BAA6B,CAAC;AAC5F,eAAa,WAAW,OAAO,CAACE,QAAOA,IAAG,gBAAgB,CAAC;AAC3D,MAAI,WAAW,WAAW,EAAG;AAC7B,aAAW,CAAC,EAAE,MAAM;AACtB;AAEA,SAAS,iBAAiB,QAAQ;AAChC,QAAM,SAAS,CAAC,GAAG,OAAQ,IAAI,IAAK,KAAK;AACzC,QAAM,iBAAiB,oBAAoB;AAC3C,MAAI,eAAe,SAAS,GAAG;AAC7B,UAAM,gBAAgB,wBAAwB;AAC9C,QAAI,SAAS;AACb,mBAAe,QAAQ,CAAC,GAAG,MAAM;AAC/B,UAAI,MAAM,cAAe,UAAS;AAAA,IACpC,CAAC;AACD,QAAI,WAAW,IAAI;AACjB,YAAM,aAAa,eAAe,OAAQ,SAAS,QAAS,eAAe,MAAM,CAAC;AAClF,iBAAW,MAAM;AACjB,YAAMC,cAAa,UAAU,EAAE,eAAe,YAAY;AAC1D,YAAMC,SAAQ,UAAU,EAAE,eAAe,eAAe;AACxD,MAAAD,YAAW,MAAM,WAAW,SAAS,CAAC,EAAE;AACxC,UAAIA,YAAW,MAAM,YAAY,OAAQ,CAAAC,OAAM,MAAM,YAAY,oBAAoB,OAAOD,YAAW,GAAG,GAAG;AAC7G;AAAA,IACF;AAAA,EACF;AAEA,QAAM,wBAAwB,UAAU,EAAE,eAAe,mBAAmB;AAC5E,MAAI,CAAC,yBAAyB,CAAC,sBAAsB,aAAc;AACnE,QAAME,oBAAmB,OAAO,oBAAoB;AACpD,MAAI,CAACA,kBAAiB,MAAM,UAAUA,kBAAiB,MAAM,UAAU,EAAG;AAC1E,QAAM,YAAYA,kBAAiB,SAAS,IAAIA,kBAAiB,QAAQ;AACzE,QAAM,YAAY,OAAQ,YAAY,QAASA,kBAAiB,MAAM,MAAM;AAC5E,SAAO,oBAAoB,WAAW,EAAE,MAAM,KAAK,CAAC;AACpD,QAAM,aAAa,UAAU,EAAE,eAAe,YAAY;AAC1D,QAAMD,SAAQ,UAAU,EAAE,eAAe,eAAe;AACxD,QAAM,YAAY,OAAO,sBAAsB;AAC/C,MAAI,cAAcA,UAAS,WAAW;AACpC,eAAW,MAAM;AACjB,QAAI,WAAW,MAAM,YAAY,OAAQ,CAAAA,OAAM,MAAM,YAAY,oBAAoB,OAAO,SAAS,GAAG;AAAA,EAC1G;AACF;AAEA,SAAS,eAAeE,QAAa;AACnC,QAAM,UAAU,eAAe;AAC/B,QAAM,UAAU,UAAU,EAAE,eAAe,QAAQ,OAAO,EAAE;AAC5D,MAAI,kBAAkB,SAAS,OAAO;AACtC,MAAI,QAAS,SAAQ,MAAM;AAC3B,mBAAiB,CAAC;AACpB;AAEA,SAAS,gBAAgBA,QAAO;AAC9B,MAAI,mBAAmBA,OAAM,GAAG;AAChC,UAAQA,OAAM,KAAK;AAAA,IACjB,KAAK;AACH,qBAAe;AACf;AAAA,IACF,KAAK;AACH,uBAAiB,EAAE;AACnB;AAAA,IACF,KAAK;AACH,uBAAiB,CAAC;AAClB;AAAA,IACF,KAAK;AACH,iBAAW,MAAM,IAAI;AACrB;AAAA,EACJ;AACA,EAAAA,OAAM,gBAAgB;AACxB;AAEA,SAAS,YAAY,OAA2B;AAC9C,MAAI,CAAC,SAAS,MAAM,SAAS,EAAG,QAAO;AACvC,QAAM,SAAS,IAAI,YAAY,OAAO,EAAE,OAAO,MAAM,MAAM,GAAG,CAAC,CAAC;AAChE,QAAM,OAAO,MAAM,MAAM,CAAC;AAC1B,MAAI,OAAO,WAAW,OAAO,EAAG,QAAO,IAAI,YAAY,OAAO,EAAE,OAAO,IAAI,EAAE,QAAQ,QAAQ,EAAE;AAC/F,MAAI,OAAO,WAAW,SAAS,EAAG,QAAO,IAAI,YAAY,UAAU,EAAE,OAAO,IAAI,EAAE,QAAQ,QAAQ,EAAE;AACpG,MAAI,OAAO,WAAW,KAAK,EAAG,QAAO,IAAI,YAAY,WAAW,EAAE,OAAO,IAAI,EAAE,QAAQ,QAAQ,EAAE;AACjG,SAAO,IAAI,YAAY,EAAE,OAAO,KAAK,EAAE,QAAQ,QAAQ,EAAE;AAC3D;AAEA,eAAsB,QAAQJ,KAAI;AAChC,MAAI,OAAY;AAChB,MAAI;AACF,WAAO,MAAM,aAAAK,QAAM,MAAML,KAAI,EAAE,aAAa,KAAK,CAAC;AAAA,EACpD,SAAS,GAAG;AACV,QAAI,WAAWA,KAAI,CAAC;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO;AACX,MAAI;AACJ,MAAI,CAAC,MAAM;AACT,QAAI,WAAW,cAAc;AAC7B,WAAO;AAAA,EACT;AACA,MAAI,KAAK,WAAY,UAAS,KAAK;AAAA,WAC1B,KAAK,YAAa,UAAS,YAAY,KAAK,WAAW;AAAA,MAC3D,UAAS;AAEd,MAAI,OAAO,SAAS,EAAG,SAAQ,iBAAiB,UAAU,EAAE;AAC5D,SAAO,KAAK,QAAQ,oBAAoB,qBAAqB;AAC7D,SAAO,KAAK,QAAQ,UAAU,0BAA0B;AACxD,SAAO,KAAK,WAAW,MAAM,MAAM;AACnC,SAAO,KAAK,WAAW,YAAY,MAAM;AACzC,SAAO;AACT;AAEA,eAAe,YAAYA,KAAI;AAC7B,QAAM,YAAY,UAAU,EAAE,eAAe,WAAW;AACxD,QAAM,OAAO,MAAM,QAAQA,GAAE;AAC7B,YAAU,YAAY;AACxB;AAEA,SAAS,UAAUI,QAAO;AACxB,QAAM,SAASA,OAAM,UAAUA,OAAM;AACrC,QAAM,aAAa,UAAU,EAAE,eAAe,YAAY;AAC1D,QAAM,KAAK,UAAU,EAAE,eAAe,eAAe;AACrD,KAAG,kBAAkB;AACrB,aAAW,SAAS,MAAM;AACxB,oBAAgB,OAAO,GAAG,CAAC;AAC3B,qBAAiB,MAAM;AACvB,QAAI,KAAK,qBAAsB,aAAY,UAAU;AAAA,EACvD;AACA,aAAW,MAAM,OAAO;AACxB,MAAI,WAAW,MAAM,YAAY,OAAQ,IAAG,MAAM,YAAY,oBAAoB,OAAO,OAAO,GAAG,GAAG;AACtG,KAAG,MAAM,UAAU;AACnB,KAAG,YAAY;AACf,EAAAA,OAAM,gBAAgB;AACxB;AAEA,SAAS,qBAAqB;AAC5B,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,MAAM,UAAU;AACrB,OAAK,OAAO,UAAU,EAAE,eAAe,YAAY,EAAE;AACrD,OAAK,WAAW;AAChB,WAAS,KAAK,YAAY,IAAI;AAC9B,OAAK,MAAM;AACX,aAAW,MAAM;AACf,QAAI,gBAAgB,KAAK,IAAI;AAC7B,SAAK,WAAW,YAAY,IAAI;AAAA,EAClC,GAAG,CAAC;AACN;AAEA,SAAS,aAAa,YAAY,QAAQ;AACxC,eAAa,QAAQ,aAAa,SAAS,QAAQ,IAAI;AACvD,MAAI,WAAY,YAAW,UAAU,OAAO,wBAAwB,CAAC,CAAC,MAAM;AAC9E;AAEA,SAAS,sBAAsB,OAAO;AACpC,MAAI,MAAM,QAAQ,OAAQ;AAC1B,QAAM,QAAQ,SAAS;AACvB,QAAM,MAAM,SAAS;AACrB,QAAM,MAAM,aAAa;AAC3B;AAEA,SAAS,gBAAgBA,QAAO;AAC9B,QAAM,aAAa,UAAU,EAAE,eAAe,YAAY;AAC1D,eAAa,YAAY,CAAC,WAAW,UAAU,SAAS,sBAAsB,CAAC;AAC/E,EAAAA,OAAM,gBAAgB;AACtB,mBAAiB,CAAC;AACpB;AAEA,SAAS,gBAAgBA,QAAO;AAC9B,QAAM,aAAa,UAAU,EAAE,eAAe,YAAY;AAC1D,QAAMF,SAAQ,UAAU,EAAE,eAAe,eAAe;AACxD,QAAM,WAAW,WAAW,MAAM,YAAY;AAC9C,MAAI,UAAU;AACZ,eAAW,MAAM,UAAU;AAC3B,IAAAA,OAAM,MAAM,YAAY,oBAAoB,MAAM;AAAA,EACpD,OAAO;AACL,eAAW,MAAM,UAAU;AAC3B,IAAAA,OAAM,MAAM,YAAY,oBAAoB,OAAO,WAAW,GAAG,GAAG;AAAA,EACtE;AACA,EAAAE,OAAM,gBAAgB;AACtB,mBAAiB,CAAC;AACpB;AAEA,SAAS,mBAAmBA,QAAO;AACjC,QAAM,aAAa,SAAS,eAAe,YAAY;AACvD,kBAAgB,QAAQ;AACxB,wBAAkB,eAAAE,SAAQ,YAAY,EAAE,WAAW,MAAM,SAAS,KAAK,SAAS,GAAK,WAAW,MAAyB,KAAK,CAAC;AAC/H,EAAAF,OAAM,gBAAgB;AACtB,mBAAiB,CAAC;AACpB;AAEA,SAAS,kBAAkBA,QAAO;AAChC,QAAM,YAAY,UAAU,EAAE,eAAe,WAAW;AACxD,MAAI,UAAU,MAAM,YAAY,UAAU,UAAU,MAAM,YAAY,IAAI;AACxE,cAAU,MAAM,UAAU;AAAA,EAC5B,OAAO;AACL,cAAU,MAAM,UAAU;AAAA,EAC5B;AACA,EAAAA,OAAM,gBAAgB;AACtB,mBAAiB,CAAC;AACpB;AAEA,SAAS,yBAAyBA,QAAO;AACvC,MAAIA,OAAM,WAAW,EAAG;AACxB,MAAIA,OAAM,OAAO,aAAa,SAAS,CAACA,OAAM,OAAO,WAAW,UAAU,SAAS,gBAAgB,GAAG;AACpG,UAAM,eAAe,aAAa,QAAQ,WAAW,KAAK,UAAU;AACpE,iBAAa,UAAU,EAAE,eAAe,YAAY,GAAG,WAAW;AAClE,IAAAA,OAAM,eAAe;AACrB,cAAUA,MAAK;AAAA,EACjB;AACF;AAEA,eAAe,kBAAkB;AAE/B,QAAM,kBAAkB,UAAU,EAAE,iBAAiB,+BAA+B;AACpF,aAAW,kBAAkB,iBAAiB;AAC5C,QAAI,CAAC,eAAe,aAAa,eAAe,EAAG,gBAAe,iBAAiB,SAAS,0BAA0B,IAAI;AAC1H,mBAAe,aAAa,iBAAiB,MAAM;AACnD,mBAAe,iBAAiB,KAAK,EAAE,QAAQ,qBAAqB;AAAA,EACtE;AACF;AAEA,eAAsB,kBAAkB;AACtC,QAAM,KAAK,YAAY,IAAI;AAE3B,QAAMF,SAAQ,SAAS,cAAc,KAAK;AAC1C,EAAAA,OAAM,KAAK;AAEX,qBAAmB,SAAS,cAAc,KAAK;AAC/C,mBAAiB,YAAY;AAE7B,QAAM,aAAa,SAAS,cAAc,KAAK;AAC/C,aAAW,KAAK;AAChB,mBAAiB,YAAY,UAAU;AACvC,wBAAkB,eAAAI,SAAQ,YAAY,EAAE,WAAW,MAAM,SAAS,KAAK,SAAS,GAAK,WAAW,MAAyB,KAAK,CAAC;AAG/H,QAAM,YAAY,SAAS,cAAc,MAAM;AAC/C,YAAU,KAAK;AACf,YAAU,YAAY;AACtB,YAAU,YAAY;AACtB,YAAU,QAAQ;AAClB,YAAU,iBAAiB,SAAS,iBAAiB,IAAI;AAEzD,QAAM,aAAa,SAAS,cAAc,MAAM;AAChD,aAAW,KAAK;AAChB,aAAW,YAAY;AACvB,aAAW,YAAY;AACvB,aAAW,QAAQ;AACnB,aAAW,iBAAiB,SAAS,oBAAoB,IAAI;AAE7D,QAAM,YAAY,SAAS,cAAc,MAAM;AAC/C,YAAU,KAAK;AACf,YAAU,YAAY;AACtB,YAAU,YAAY;AACtB,YAAU,QAAQ;AAClB,YAAU,iBAAiB,SAAS,iBAAiB,IAAI;AAEzD,QAAM,YAAY,SAAS,cAAc,MAAM;AAC/C,YAAU,KAAK;AACf,YAAU,YAAY;AACtB,YAAU,YAAY;AACtB,YAAU,QAAQ;AAClB,YAAU,iBAAiB,SAAS,gBAAgB,IAAI;AAExD,QAAM,gBAAgB,SAAS,cAAc,MAAM;AACnD,gBAAc,KAAK;AACnB,gBAAc,YAAY;AAC1B,gBAAc,YAAY;AAC1B,gBAAc,QAAQ;AACtB,gBAAc,iBAAiB,SAAS,oBAAoB,IAAI;AAEhE,QAAM,aAAa,SAAS,cAAc,MAAM;AAChD,aAAW,KAAK;AAChB,aAAW,YAAY;AACvB,aAAW,YAAY;AACvB,aAAW,QAAQ;AACnB,aAAW,iBAAiB,SAAS,CAAC,QAAQ,WAAW,KAAK,IAAI,GAAG,IAAI;AAEzE,QAAM,uBAAuB,SAAS,cAAc,MAAM;AAC1D,uBAAqB,KAAK;AAC1B,uBAAqB,YAAY;AACjC,uBAAqB,YAAY;AACjC,uBAAqB,QAAQ;AAC7B,uBAAqB,iBAAiB,SAAS,mBAAmB,IAAI;AAGtE,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,YAAU,KAAK;AACf,YAAU,QAAQ;AAGlB,mBAAiB,iBAAiB,aAAa,MAAM;AAAE,kBAAc;AAAA,EAAO,CAAC;AAC7E,mBAAiB,iBAAiB,cAAc,MAAM;AAAE,kBAAc;AAAA,EAAO,GAAG,EAAE,SAAS,KAAK,CAAC;AACjG,mBAAiB,iBAAiB,aAAa,MAAM;AAAE,kBAAc;AAAA,EAAM,CAAC;AAC5E,mBAAiB,iBAAiB,aAAa,MAAM;AAAE,kBAAc;AAAA,EAAM,GAAG,EAAE,SAAS,KAAK,CAAC;AAC/F,mBAAiB,iBAAiB,UAAU,MAAM;AAAE,kBAAc;AAAA,EAAM,CAAC;AACzE,mBAAiB,iBAAiB,WAAW,CAAC,QAAQ,WAAW,GAAG,CAAC;AACrE,mBAAiB,iBAAiB,YAAY,CAAC,QAAQ,WAAW,GAAG,CAAC;AAEtE,QAAM,YAAY,SAAS,cAAc,GAAG;AAC5C,YAAU,YAAY;AACtB,YAAU,YAAY;AACtB,YAAU,iBAAiB,SAAS,MAAM,iBAAiB,EAAE,GAAG,IAAI;AAGpE,QAAM,YAAY,SAAS,cAAc,GAAG;AAC5C,YAAU,YAAY;AACtB,YAAU,YAAY;AACtB,YAAU,iBAAiB,SAAS,MAAM,iBAAiB,CAAC,GAAG,IAAI;AAGnE,QAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,gBAAc,YAAY;AAG1B,EAAAJ,OAAM,YAAY,SAAS;AAC3B,EAAAA,OAAM,YAAY,gBAAgB;AAClC,EAAAA,OAAM,YAAY,SAAS;AAC3B,EAAAA,OAAM,OAAO,aAAa;AAC1B,gBAAc,YAAY,SAAS;AACnC,gBAAc,YAAY,UAAU;AACpC,gBAAc,YAAY,SAAS;AACnC,gBAAc,YAAY,SAAS;AACnC,gBAAc,YAAY,aAAa;AACvC,gBAAc,YAAY,oBAAoB;AAC9C,gBAAc,YAAY,UAAU;AACpC,EAAAA,OAAM,OAAO,SAAS;AAEtB,YAAU,EAAE,YAAYA,MAAK;AAC7B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,mBAAmB,KAAK,MAAM,KAAK,EAAE,CAAC;AAC1C,QAAM,mBAAmB,KAAK,EAAE;AAClC;AAEA,gBAAgB,eAAe;;;ACtVxB,SAAS,WAAW,OAA2B,OAAuB;AAC3E,MAAI,KAAK;AACT,MAAI,KAAK,MAAM;AACf,SAAO,KAAK,IAAI;AACd,UAAM,MAAO,KAAK,OAAQ;AAC1B,QAAI,MAAM,GAAG,EAAE,OAAO,MAAO,MAAK,MAAM;AAAA,QACnC,MAAK;AAAA,EACZ;AACA,SAAO;AACT;AAeA,IAAM,UAAN,MAAc;AAAA,EACZ;AAAA,EAEA,YAAY,OAAiB;AAE3B,SAAK,QAAQ,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,OAAO;AAAA,MAC7C,MAAM,OAAO,IAAI,EAAE,YAAY;AAAA,MAC/B,SAAS,WAAW;AAAA,IACtB,EAAE;AACF,SAAK,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,EACxD;AAAA,EAEA,OAAO,QAAgB,QAAQ,IAAkB;AAC/C,UAAM,QAAQ,OAAO,MAAM,EAAE,YAAY;AAEzC,QAAI,CAAC,MAAO,QAAO,KAAK,MAAM,MAAM,GAAG,KAAK;AAC5C,UAAM,QAAQ,WAAW,KAAK,OAAO,KAAK;AAC1C,UAAM,UAAU,CAAC;AACjB,aAAS,IAAI,OAAO,IAAI,KAAK,MAAM,UAAU,QAAQ,SAAS,OAAO,KAAK;AACxE,UAAI,CAAC,KAAK,MAAM,CAAC,EAAE,KAAK,WAAW,KAAK,EAAG;AAC3C,cAAQ,KAAK,KAAK,MAAM,CAAC,CAAC;AAAA,IAC5B;AAEA,QAAI,QAAQ,WAAW,KAAK,MAAM,UAAU,GAAG;AAC7C,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,UAAU,QAAQ,SAAS,OAAO,KAAK;AACpE,YAAI,KAAK,MAAM,CAAC,EAAE,KAAK,SAAS,KAAK,EAAG,SAAQ,KAAK,KAAK,MAAM,CAAC,CAAC;AAAA,MACpE;AAAA,IACF;AACA,WAAO,QAAQ,MAAM,GAAG,KAAK;AAAA,EAC/B;AACF;AAIO,IAAM,WAAqB;AAAA,EAChC,MAAM,IAAI,QAAQ,CAAC,CAAC;AAAA,EACpB,OAAO,IAAI,QAAQ,CAAC,CAAC;AAAA,EACrB,UAAU,IAAI,QAAQ,CAAC,CAAC;AAAA,EAExB,MAAM,UAAU,MAAM;AACpB,QAAI;AAEF,YAAM,OAAO,MAAM,UAAU,GAAG,OAAO,GAAG,GAAG,IAAI,EAAE;AACnD,UAAI,CAAC,MAAM,GAAI,OAAM,IAAI,MAAM,GAAG,MAAM,MAAM,EAAE;AAChD,aAAO,MAAM,KAAK,KAAK;AAAA,IACzB,SAAS,GAAG;AACV,UAAI,gBAAgB,EAAE,eAAe,MAAM,OAAO,OAAO,CAAC,EAAE,CAAC;AAC7D,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,UAAU;AAEd,UAAM,WAAW,MAAM,KAAK,UAAU,QAAQ;AAC9C,QAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,YAAM,QAAkB,CAAC;AACzB,iBAAW,MAAM,UAAU;AACzB,YAAI,OAAO,OAAO,YAAY,MAAM,UAAU,MAAM,OAAO,GAAG,SAAS,SAAU,OAAM,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;AAC7G,YAAI,OAAO,OAAO,YAAY,MAAM,WAAW,MAAM,OAAO,GAAG,UAAU,YAAY,GAAG,UAAW,GAAyB,KAAM,OAAM,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;AAAA,MACjK;AACA,WAAK,OAAO,IAAI,QAAQ,KAAK;AAAA,IAC/B;AAEA,UAAM,UAAU,MAAM,KAAK,UAAU,aAAa;AAClD,QAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,YAAM,SAAS,MAAM,QAAQ,QAAQ,MAAM,IAAI,QAAQ,SAAS,CAAC;AACjE,WAAK,QAAQ,IAAI,QAAQ,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,OAAO,IAAI,EAAE,EAAE,CAAC;AAAA,IACzE;AAEA,UAAM,SAAS,MAAM,KAAK,UAAU,YAAY;AAChD,QAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAK,WAAW,IAAI;AAAA,QAClB,OACG,OAAO,CAAC,MAAM,OAAO,MAAM,YAAY,KAAK,UAAU,KAAK,OAAO,EAAE,SAAS,QAAQ,EACrF,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;AAAA,MAClC;AAAA,IACF;AACA,QAAI,gBAAgB;AAAA,MAClB,UAAU;AAAA,MACV,MAAM,KAAK,KAAK,MAAM;AAAA,MACtB,OAAO,KAAK,MAAM,MAAM;AAAA,MACxB,UAAU,KAAK,SAAS,MAAM;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EAEA,YAAY,QAAQ,QAAQ,IAAI;AAC9B,WAAO,KAAK,KAAK,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,MAAM,OAAgB,EAAE;AAAA,EAC3F;AAAA,EAEA,iBAAiB,QAAQ,QAAQ,IAAI;AACnC,WAAO,KAAK,MAAM,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,MAAM,QAAiB,EAAE;AAAA,EAC7F;AAAA,EAEA,gBAAgB,QAAQ,QAAQ,IAAI;AAClC,WAAO,KAAK,SAAS,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,MAAM,WAAoB,EAAE;AAAA,EACnG;AACF;;;AC/HA,IAAM,kBAAkB;AAAA,EACtB,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AACN;AAEA,IAAM,iBAAiB;AAAA,EACrB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAGA,IAAM,cAAc;AAAA,EAClB,KAAK,EAAE,OAAO,UAAK,OAAO,KAAK;AAAA;AAAA,EAC/B,MAAM,EAAE,OAAO,UAAK,OAAO,UAAU;AAAA,EACrC,OAAO,EAAE,OAAO,UAAK,OAAO,UAAU;AAAA,EACtC,UAAU,EAAE,OAAO,UAAK,OAAO,UAAU;AAC3C;AAEA,IAAI,SAAS;AAgBb,SAAS,YAAY,OAAuB;AAC1C,MAAI,SAAS,IAAW,QAAO,IAAI,QAAQ,KAAW,QAAQ,CAAC,CAAC;AAChE,MAAI,SAAS,IAAO,QAAO,GAAG,KAAK,MAAM,QAAQ,GAAK,CAAC;AACvD,SAAO,OAAO,KAAK;AACrB;AAOA,IAAI,cAAqC;AACzC,IAAI,cAAsC;AAC1C,IAAM,eAAe;AAAA,EAAC;AAAA,EAAc;AAAA,EAAY;AAAA,EAAc;AAAA,EAC5D;AAAA,EAAc;AAAA,EAAiB;AAAA,EAAe;AAAA,EAC9C;AAAA,EAAW;AAAA,EAAU;AAAW;AAElC,SAAS,eAAe,UAAuC;AAC7D,MAAI,CAAC,aAAa;AAChB,kBAAc,SAAS,cAAc,KAAK;AAC1C,gBAAY,YAAY;AACxB,gBAAY,MAAM,aAAa;AAC/B,gBAAY,MAAM,WAAW;AAC7B,gBAAY,MAAM,WAAW;AAC7B,gBAAY,MAAM,OAAO;AACzB,gBAAY,MAAM,WAAW;AAC7B,kBAAc,SAAS,cAAc,MAAM;AAC3C,gBAAY,cAAc;AAC1B,aAAS,KAAK,YAAY,WAAW;AAAA,EACvC;AACA,QAAM,KAAK,iBAAiB,QAAQ;AACpC,aAAW,KAAK,aAAc,aAAY,MAAM,CAAC,IAAI,GAAG,CAAC;AACzD,cAAY,MAAM,QAAQ,GAAG,SAAS,WAAW;AACjD,cAAY,cAAc,SAAS,MAAM,UAAU,GAAG,SAAS,cAAc;AAC7E,cAAY,YAAY,WAAW;AACnC,QAAM,SAAS,YAAY,YAAY,YAAY;AACnD,SAAO,SAAS,sBAAsB,EAAE,MAAM,SAAS,SAAS;AAClE;AAIA,IAAM,WAAN,MAAe;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAW;AACrB,SAAK,aAAa,KAAK,cAAc,CAAC;AAGtC,SAAK,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,UAAU,OAAO,UAAU,CAAC,CAAC,OAAO;AAAA,MACpE,MAAM,KAAK,YAAY;AAAA,MACvB,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE;AACF,SAAK,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAErD,SAAK,eAAe,CAAC;AACrB,eAAW,OAAO,KAAK,MAAM;AAC3B,UAAI,CAAC,IAAI,WAAW,IAAI,QAAQ,WAAW,EAAG;AAC9C,iBAAW,SAAS,IAAI,SAAS;AAC/B,aAAK,aAAa,KAAK,EAAE,MAAM,MAAM,YAAY,GAAG,SAAS,OAAO,IAAI,CAAC;AAAA,MAC3E;AAAA,IACF;AACA,SAAK,aAAa,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAG7D,SAAK,eAAe,oBAAI,IAAI;AAC5B,SAAK,YAAY,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1D,QAAI,KAAK,gBAAgB,OAAO,KAAK,iBAAiB,UAAU;AAC9D,iBAAW,CAAC,SAAS,SAAS,KAAK,OAAO,QAAQ,KAAK,YAAY,GAAG;AACpE,YAAI,OAAO,YAAY,YAAY,OAAO,cAAc,SAAU;AAClE,aAAK,aAAa,IAAI,QAAQ,YAAY,GAAG,EAAE,WAAW,UAAU,YAAY,GAAG,QAAQ,CAAC;AAAA,MAC9F;AAAA,IACF;AAEA,SAAK,qBAAqB,CAAC,GAAG,KAAK,aAAa,QAAQ,CAAC,EACtD,IAAI,CAAC,CAAC,cAAc,EAAE,WAAW,QAAQ,CAAC,OAAO,EAAE,MAAM,cAAc,SAAS,UAAU,EAAE,EAC5F,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,EAChD;AAAA;AAAA,EAGA,OAAO,QAAgB,QAAQ,IAAiB;AAC9C,UAAM,QAAQ,OAAO,YAAY,EAAE,QAAQ,MAAM,GAAG;AACpD,QAAI,CAAC,MAAO,QAAO,CAAC;AAEpB,UAAM,UAAU,CAAC;AACjB,UAAM,QAAQ,WAAW,KAAK,MAAM,KAAK;AACzC,aAAS,IAAI,OAAO,IAAI,KAAK,KAAK,UAAU,QAAQ,SAAS,QAAQ,GAAG,KAAK;AAC3E,UAAI,CAAC,KAAK,KAAK,CAAC,EAAE,KAAK,WAAW,KAAK,EAAG;AAC1C,cAAQ,KAAK,KAAK,KAAK,CAAC,CAAC;AAAA,IAC3B;AAEA,UAAM,aAAa,WAAW,KAAK,cAAc,KAAK;AACtD,aAAS,IAAI,YAAY,IAAI,KAAK,aAAa,UAAU,QAAQ,SAAS,QAAQ,IAAI,KAAK;AACzF,YAAM,QAAQ,KAAK,aAAa,CAAC;AACjC,UAAI,CAAC,MAAM,KAAK,WAAW,KAAK,EAAG;AACnC,cAAQ,KAAK,EAAE,GAAG,MAAM,KAAK,YAAY,SAAS,cAAc,MAAM,QAAQ,CAAC;AAAA,IACjF;AAEA,QAAI,QAAQ,WAAW,KAAK,MAAM,UAAU,GAAG;AAC7C,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,UAAU,QAAQ,SAAS,QAAQ,GAAG,KAAK;AACvE,YAAI,KAAK,KAAK,CAAC,EAAE,KAAK,SAAS,KAAK,EAAG,SAAQ,KAAK,KAAK,KAAK,CAAC,CAAC;AAAA,MAClE;AACA,eAAS,IAAI,GAAG,IAAI,KAAK,aAAa,UAAU,QAAQ,SAAS,QAAQ,IAAI,KAAK;AAChF,cAAM,QAAQ,KAAK,aAAa,CAAC;AACjC,YAAI,MAAM,KAAK,SAAS,KAAK,EAAG,SAAQ,KAAK,EAAE,GAAG,MAAM,KAAK,YAAY,SAAS,cAAc,MAAM,QAAQ,CAAC;AAAA,MACjH;AAAA,IACF;AAEA,QAAI,KAAK,mBAAmB,SAAS,GAAG;AACtC,YAAM,SAAS,WAAW,KAAK,oBAAoB,KAAK;AACxD,eAAS,IAAI,QAAQ,IAAI,KAAK,mBAAmB,UAAU,QAAQ,SAAS,QAAQ,IAAI,KAAK;AAC3F,cAAM,QAAQ,KAAK,mBAAmB,CAAC;AACvC,YAAI,CAAC,MAAM,KAAK,WAAW,KAAK,EAAG;AACnC,cAAM,eAAe,KAAK,UAAU,IAAI,MAAM,SAAS;AACvD,YAAI,aAAc,SAAQ,KAAK,EAAE,GAAG,cAAc,YAAY,eAAe,aAAa,MAAM,QAAQ,CAAC;AAAA,MAC3G;AAEA,UAAI,MAAM,UAAU,GAAG;AACrB,iBAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,UAAU,QAAQ,SAAS,QAAQ,IAAI,KAAK;AACtF,gBAAM,QAAQ,KAAK,mBAAmB,CAAC;AACvC,cAAI,MAAM,KAAK,SAAS,KAAK,KAAK,CAAC,MAAM,KAAK,WAAW,KAAK,GAAG;AAC/D,kBAAM,eAAe,KAAK,UAAU,IAAI,MAAM,SAAS;AACvD,gBAAI,aAAc,SAAQ,KAAK,EAAE,GAAG,cAAc,YAAY,eAAe,aAAa,MAAM,QAAQ,CAAC;AAAA,UAC3G;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,OAAO,oBAAI,IAAI;AACrB,eAAW,OAAO,SAAS;AACzB,YAAM,WAAW,KAAK,IAAI,IAAI,IAAI;AAClC,UAAI,CAAC,YAAa,SAAS,cAAc,CAAC,IAAI,WAAa,MAAK,IAAI,IAAI,MAAM,GAAG;AAAA,IACnF;AACA,UAAM,SAAS,CAAC,GAAG,KAAK,OAAO,CAAC;AAChC,WAAO,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACvC,WAAO,OAAO,MAAM,GAAG,KAAK;AAAA,EAC9B;AACF;AAIA,IAAM,SAAS;AAAA,EACb,SAAS,oBAAI,IAAI;AAAA;AAAA,EACjB,gBAAgB,EAAE,GAAG,gBAAgB;AAAA,EACrC,eAAe,EAAE,GAAG,eAAe;AAAA,EAEnC,MAAM,cAAc;AAClB,UAAM,UAAU,OAAO,MAAM,wBAAwB,CAAC;AACtD,aAAS,OAAO,MAAM,uBAAuB;AAC7C,QAAI,CAAC,QAAQ;AACX,WAAK,QAAQ,MAAM;AACnB;AAAA,IACF;AACA,UAAM,KAAK,YAAY,IAAI;AAC3B,UAAM,SAAS,QAAQ,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC;AACzD,UAAM,WAAW,CAAC,GAAG,KAAK,QAAQ,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,SAAS,CAAC,CAAC;AAC5E,aAAS,QAAQ,CAAC,MAAM,KAAK,QAAQ,OAAO,CAAC,CAAC;AAC9C,UAAM,QAAQ,IAAI,OAAO,IAAI,OAAO,SAAS;AAC3C,UAAI;AACF,cAAM,OAAO,MAAM,UAAU,GAAG,OAAO,GAAG,iBAAiB,IAAI,EAAE;AACjE,YAAI,CAAC,MAAM,GAAI,OAAM,IAAI,MAAM,GAAG,MAAM,MAAM,EAAE;AAChD,cAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,aAAK,QAAQ,IAAI,MAAM,IAAI,SAAS,IAAI,CAAC;AAEzC,YAAI,KAAK,YAAY;AACnB,iBAAO,QAAQ,KAAK,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,GAAG,MAAM;AACrD,kBAAM,WAAgB;AACtB,gBAAI,SAAS,MAAO,MAAK,eAAe,EAAE,IAAI,SAAS;AACvD,gBAAI,SAAS,KAAM,MAAK,cAAc,EAAE,IAAI,SAAS;AAAA,UACvD,CAAC;AAAA,QACH;AACA,cAAM,KAAK,YAAY,IAAI;AAC3B,YAAI,gBAAgB,EAAE,QAAQ,MAAM,MAAM,KAAK,MAAM,UAAU,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AAC7F,cAAM,oBAAoB,IAAI,IAAI,KAAK,EAAE;AAAA,MAC3C,SAAS,GAAG;AACV,YAAI,gBAAgB,EAAE,QAAQ,MAAM,OAAO,EAAE,CAAC;AAAA,MAChD;AAAA,IACF,CAAC,CAAC;AAAA,EACJ;AAAA,EAEA,UAAU,QAAQ,QAAQ,IAAI;AAC5B,QAAI,KAAK,QAAQ,SAAS,EAAG,QAAO,CAAC;AACrC,UAAM,MAAM,CAAC;AACb,SAAK,QAAQ,QAAQ,CAAC,UAAU;AAC9B,UAAI,KAAK,GAAG,MAAM,OAAO,QAAQ,KAAK,CAAC;AAAA,IACzC,CAAC;AAED,UAAM,OAAO,oBAAI,IAAI;AACrB,QAAI,QAAQ,CAAC,QAAQ;AACnB,YAAM,WAAW,KAAK,IAAI,IAAI,IAAI;AAClC,UAAI,CAAC,YAAY,IAAI,QAAQ,SAAS,MAAO,MAAK,IAAI,IAAI,MAAM,GAAG;AAAA,IACrE,CAAC;AACD,UAAM,UAAU,CAAC,GAAG,KAAK,OAAO,CAAC;AACjC,YAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACxC,WAAO,QAAQ,MAAM,GAAG,KAAK;AAAA,EAC/B;AACF;AAgBA,SAAS,eAAe,UAAU;AAChC,QAAM,EAAE,OAAO,eAAe,IAAI;AAClC,MAAI,mBAAmB,SAAS,aAAc,QAAO;AAErD,MAAI,YAAY;AAChB,SAAO,YAAY,GAAG;AACpB,UAAM,KAAK,MAAM,YAAY,CAAC;AAC9B,QAAI,OAAO,OAAO,OAAO,KAAM;AAC/B;AAAA,EACF;AAEA,SAAO,YAAY,kBAAkB,MAAM,SAAS,MAAM,IAAK;AAC/D,QAAM,UAAU,MAAM,MAAM,WAAW,cAAc;AAErD,QAAM,SAAS,MAAM,MAAM,GAAG,cAAc;AAC5C,QAAM,WAAW,OAAO,YAAY,GAAG;AACvC,QAAM,YAAY,OAAO,YAAY,GAAG;AACxC,MAAI,WAAW,aAAa,YAAY,WAAW;AACjD,UAAM,SAAS,OAAO,MAAM,WAAW,CAAC;AACxC,UAAM,QAAQ,OAAO,QAAQ,GAAG;AAChC,QAAI,QAAQ,GAAG;AAGb,aAAO,EAAE,MAAM,IAAI,OAAO,UAAU,KAAK,gBAAgB,MAAM,OAAO;AAAA,IACxE;AACA,QAAI,OAAO,MAAM,GAAG,KAAK,EAAE,YAAY,MAAM,QAAQ;AACnD,aAAO,EAAE,MAAM,OAAO,MAAM,QAAQ,CAAC,GAAG,OAAO,UAAU,KAAK,gBAAgB,MAAM,OAAO;AAAA,IAC7F;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,WAAW,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,EAAE,SAAS,IAAI,GAAG;AAChE,WAAO,EAAE,MAAM,QAAQ,MAAM,CAAC,GAAG,OAAO,WAAW,KAAK,gBAAgB,MAAM,WAAW;AAAA,EAC3F;AAEA,MAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,WAAO,EAAE,MAAM,QAAQ,MAAM,CAAC,GAAG,OAAO,WAAW,KAAK,gBAAgB,MAAM,SAAS;AAAA,EACzF;AAEA,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,EAAE,MAAM,SAAS,OAAO,WAAW,KAAK,gBAAgB,MAAM,MAAM;AAC7E;AAGA,IAAM,qBAAqB;AAG3B,SAAS,sBAAsB,MAAM;AACnC,SAAO,KAAK,QAAQ,WAAW,MAAM;AACvC;AAQA,SAAS,mBAAmB,UAAU,MAAM,MAAM;AAChD,QAAM,OAAO,eAAe,QAAQ;AACpC,MAAI,CAAC,QAAQ,KAAK,SAAS,KAAM;AACjC,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,SAAS,MAAM,MAAM,GAAG,KAAK,KAAK;AACxC,QAAM,QAAQ,MAAM,MAAM,KAAK,GAAG;AAClC,MAAI;AACJ,MAAI,SAAS,QAAQ;AACnB,gBAAY,SAAS,KAAK,WAAW,KAAK,IAAI;AAAA,EAChD,WAAW,SAAS,YAAY;AAC9B,gBAAY,KAAK,KAAK,WAAW,KAAK,IAAI;AAAA,EAC5C,OAAO;AACL;AAAA,EACF;AACA,WAAS,QAAQ,SAAS,YAAY;AACtC,QAAM,YAAY,OAAO,SAAS,UAAU;AAC5C,WAAS,iBAAiB;AAC1B,WAAS,eAAe;AACxB,MAAI,OAAOK,iBAAgB,WAAY,CAAAA,aAAY,QAAQ;AAC7D;AAGA,SAAS,UAAU,UAAU,SAAS,OAAO,OAAO;AAClD,QAAM,OAAO,eAAe,QAAQ;AACpC,MAAI,CAAC,QAAS,KAAK,SAAS,SAAS,KAAK,SAAS,SAAW;AAC9D,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,SAAS,MAAM,MAAM,GAAG,KAAK,KAAK;AACxC,QAAM,QAAQ,MAAM,MAAM,KAAK,GAAG;AAElC,QAAM,WAAW,OAAO,MAAM,6BAA6B;AAC3D,QAAM,MAAM,WAAW,MAAM;AAC7B,QAAM,iBAAiB,OAAO,SAAS,KAAK,OAAO,QAAQ,EAAE,SAAS,KAAK,CAAC,OAAO,QAAQ,EAAE,SAAS,GAAG;AACzG,QAAM,SAAS,iBAAiB,GAAG,GAAG,MAAM;AAC5C,MAAI,SAAS,GAAG,GAAG;AACnB,MAAI,MAAM,SAAS,KAAK,MAAM,UAAU,EAAE,WAAW,GAAG,EAAG,UAAS;AAGpE,QAAM,kBAAkB,OAAO,MAAM,iCAAiC;AACtE,MAAI,OAAO;AACX,MAAI,SAAS,WAAW,CAAC,gBAAiB,QAAO,KAAK,QAAQ,MAAM,GAAG;AAEvE,MAAI,KAAK,SAAS,YAAY,OAAO,MAAM,8BAA+B,QAAO,IAAI,IAAI;AACzF,QAAM,YAAY,GAAG,MAAM,GAAG,sBAAsB,IAAI,CAAC,GAAG,MAAM;AAClE,WAAS,QAAQ,OAAO,QAAQ,KAAK,OAAO,QAAQ,EAAE,SAAS,IAAI,MAAM,MAAM,YAAY,MAAM,UAAU;AAE3G,QAAM,YAAY,OAAO,QAAQ,EAAE,UAAU,OAAO,QAAQ,EAAE,SAAS,IAAI,IAAI,KAAK,UAAU;AAC9F,WAAS,iBAAiB;AAC1B,WAAS,eAAe;AAExB,MAAI,OAAOA,iBAAgB,WAAY,CAAAA,aAAY,QAAQ;AAC7D;AAIA,IAAM,WAAW;AAAA,EACf,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,SAAS,CAAC;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,gBAAgB;AAAA,EAEhB,OAAO;AACL,SAAK,KAAK,SAAS,cAAc,KAAK;AACtC,SAAK,GAAG,YAAY;AACpB,SAAK,GAAG,MAAM,UAAU;AACxB,SAAK,SAAS,SAAS,cAAc,IAAI;AACzC,SAAK,OAAO,YAAY;AACxB,SAAK,GAAG,YAAY,KAAK,MAAM;AAC/B,aAAS,KAAK,YAAY,KAAK,EAAE;AACjC,SAAK,GAAG,iBAAiB,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC;AAC/D,SAAK,GAAG,iBAAiB,SAAS,CAAC,MAAM;AACvC,YAAM,KAAK,EAAE,OAAO,QAAQ,IAAI;AAChC,UAAI,CAAC,GAAI;AACT,YAAM,MAAM,CAAC,GAAG,KAAK,OAAO,QAAQ,EAAE,QAAQ,EAAE;AAChD,UAAI,OAAO,KAAK,MAAM,KAAK,QAAQ,QAAQ;AACzC,aAAK,gBAAgB;AACrB,aAAK,OAAO;AAAA,MACd;AAAA,IACF,CAAC;AACD,SAAK,iBAAiB,IAAI,eAAe,MAAM;AAC7C,UAAI,KAAK,QAAS,MAAK,SAAS;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAEA,KAAK,SAAS,UAAU,OAAO;AAC7B,QAAI,QAAQ,WAAW,GAAG;AAAE,WAAK,KAAK;AAAG;AAAA,IAAQ;AAEjD,QAAI,KAAK,YAAY,KAAK,aAAa,SAAU,MAAK,KAAK;AAC3D,QAAI,KAAK,aAAa,SAAU,MAAK,gBAAgB,QAAQ,QAAQ;AACrE,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,QAAQ,SAAS;AACtB,SAAK,gBAAgB;AACrB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,GAAG,MAAM,UAAU;AACxB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO;AACL,QAAI,KAAK,SAAU,MAAK,gBAAgB,UAAU,KAAK,QAAQ;AAC/D,SAAK,WAAW;AAChB,SAAK,GAAG,MAAM,UAAU;AACxB,SAAK,UAAU;AACf,SAAK,UAAU,CAAC;AAChB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,SAAS;AACP,UAAM,kBAAkB,OAAO,MAAM,iCAAiC;AACtE,UAAM,YAAY,KAAK,MAAM,YAAY,EAAE,QAAQ,MAAM,GAAG;AAC5D,SAAK,OAAO,gBAAgB;AAC5B,SAAK,QAAQ,QAAQ,CAAC,KAAK,MAAM;AAC/B,YAAM,KAAK,SAAS,cAAc,IAAI;AACtC,UAAI,MAAM,KAAK,cAAe,IAAG,UAAU,IAAI,UAAU;AACzD,YAAM,MAAM,SAAS,cAAc,MAAM;AACzC,UAAI,YAAY;AAChB,YAAM,OAAO,IAAI,QAAQ;AACzB,YAAM,YAAY,YAAY,IAAI,KAAK,YAAY;AACnD,UAAI,MAAM,QAAQ,UAAU,SAAS,OAAO,eAAe,IAAI,QAAQ,KAAK;AAC5E,UAAI,cAAc,UAAU;AAC5B,UAAI,QAAQ,SAAS,QAAS,OAAO,cAAc,IAAI,QAAQ,KAAK,KAAM;AAC1E,YAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,WAAK,YAAY;AAEjB,YAAM,cAAc,SAAS;AAC7B,YAAM,UAAW,eAAe,CAAC,kBAAmB,IAAI,QAAQ,QAAQ,MAAM,GAAG,IAAI,IAAI;AACzF,YAAM,iBAAiB,IAAI,KAAK,QAAQ,SAAS;AACjD,UAAI,kBAAkB,KAAK,UAAU,SAAS,GAAG;AAC/C,cAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,cAAc,QAAQ,MAAM,gBAAgB,iBAAiB,UAAU,MAAM;AAClF,aAAK;AAAA,UACH,SAAS,eAAe,QAAQ,MAAM,GAAG,cAAc,CAAC;AAAA,UACxD;AAAA,UACA,SAAS,eAAe,QAAQ,MAAM,iBAAiB,UAAU,MAAM,CAAC;AAAA,QAC1E;AAAA,MACF,OAAO;AACL,aAAK,cAAc;AAAA,MACrB;AAEA,UAAI,iBAAiB;AACrB,UAAI,IAAI,eAAe,QAAS,kBAAiB,IAAI;AAAA,eAC5C,IAAI,eAAe,cAAe,kBAAiB,IAAI;AAChE,UAAI,gBAAgB;AAClB,cAAM,oBAAqB,eAAe,CAAC,kBAAmB,eAAe,QAAQ,MAAM,GAAG,IAAI;AAClG,cAAM,kBAAkB,eAAe,YAAY;AACnD,cAAM,kBAAkB,gBAAgB,QAAQ,SAAS;AACzD,cAAM,SAAS,IAAI,eAAe,gBAAgB,gBAAgB;AAClE,cAAM,SAAS,IAAI,eAAe,gBAAgB,KAAK;AACvD,aAAK,YAAY,SAAS,eAAe,MAAM,CAAC;AAChD,YAAI,mBAAmB,KAAK,UAAU,SAAS,GAAG;AAChD,gBAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,eAAK,cAAc,kBAAkB,MAAM,iBAAiB,kBAAkB,UAAU,MAAM;AAC9F,eAAK;AAAA,YACH,SAAS,eAAe,kBAAkB,MAAM,GAAG,eAAe,CAAC;AAAA,YACnE;AAAA,YACA,SAAS,eAAe,kBAAkB,MAAM,kBAAkB,UAAU,MAAM,CAAC;AAAA,UACrF;AAAA,QACF,OAAO;AACL,eAAK,YAAY,SAAS,eAAe,iBAAiB,CAAC;AAAA,QAC7D;AACA,YAAI,OAAQ,MAAK,YAAY,SAAS,eAAe,MAAM,CAAC;AAAA,MAC9D;AACA,YAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,YAAM,YAAY;AAClB,YAAM,cAAc,IAAI,QAAQ,IAAI,YAAY,IAAI,KAAK,IAAI;AAC7D,SAAG,OAAO,KAAK,MAAM,KAAK;AAC1B,SAAG,iBAAiB,cAAc,MAAM;AACtC,aAAK,gBAAgB;AACrB,aAAK,gBAAgB;AAAA,MACvB,CAAC;AACD,WAAK,OAAO,YAAY,EAAE;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,WAAW;AACT,QAAI,CAAC,KAAK,SAAU;AACpB,UAAM,OAAO,KAAK,SAAS,sBAAsB;AAEjD,UAAM,eAAe,eAAe,KAAK,QAAQ;AACjD,UAAM,UAAU,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,cAAc,KAAK,MAAM,CAAC;AACtE,UAAM,aAAa,OAAO,cAAc;AACxC,UAAM,aAAa,KAAK,IAAI,KAAK,GAAG,cAAc,GAAG;AACrD,QAAI,cAAc,cAAc,cAAc,UAAU,KAAK,KAAK;AAChE,WAAK,GAAG,MAAM,MAAM,GAAG,UAAU,CAAC;AAAA,IACpC,OAAO;AACL,WAAK,GAAG,MAAM,MAAM,GAAG,UAAU,aAAa,CAAC;AAAA,IACjD;AACA,SAAK,GAAG,MAAM,OAAO,GAAG,KAAK,IAAI;AACjC,SAAK,GAAG,MAAM,QAAQ,GAAG,KAAK,KAAK;AAAA,EACrC;AAAA,EAEA,kBAAkB;AAChB,KAAC,GAAG,KAAK,OAAO,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM;AAC3C,SAAG,UAAU,OAAO,YAAY,MAAM,KAAK,aAAa;AAAA,IAC1D,CAAC;AACD,UAAM,WAAW,KAAK,OAAO,SAAS,KAAK,aAAa;AACxD,QAAI,SAAU,UAAS,eAAe,EAAE,OAAO,UAAU,CAAC;AAAA,EAC5D;AAAA,EAEA,SAAS,KAAK;AACZ,QAAI,KAAK,QAAQ,WAAW,EAAG;AAC/B,QAAI,KAAK,kBAAkB,IAAI;AAC7B,WAAK,gBAAgB,MAAM,IAAI,IAAI,KAAK,QAAQ,SAAS;AAAA,IAC3D,OAAO;AACL,WAAK,iBAAiB,KAAK,gBAAgB,MAAM,KAAK,QAAQ,UAAU,KAAK,QAAQ;AAAA,IACvF;AACA,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,SAAS;AACP,QAAI,KAAK,gBAAgB,KAAK,KAAK,iBAAiB,KAAK,QAAQ,QAAQ;AAEvE,UAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,aAAK,gBAAgB;AACrB,aAAK,gBAAgB;AAAA,MACvB;AACA;AAAA,IACF;AACA,UAAM,SAAS,KAAK,QAAQ,KAAK,aAAa;AAC9C,QAAI,KAAK,UAAU;AACjB,UAAI,OAAO,SAAS,UAAU,OAAO,SAAS,YAAY;AACxD,2BAAmB,KAAK,UAAU,QAAQ,OAAO,IAAI;AAAA,MACvD,OAAO;AAEL,kBAAU,KAAK,UAAU,OAAO,WAAW,OAAO,MAAM,OAAO,IAAI;AAAA,MACrE;AAAA,IACF;AACA,SAAK,KAAK;AAAA,EACZ;AACF;AAIA,IAAI;AACJ,IAAI;AAEJ,SAAS,QAAQ,UAAU;AACzB,MAAI,CAAC,OAAQ;AAEb,MAAI,SAAS,QAAQ,cAAc,IAAK;AACxC,QAAM,WAAW,OAAO,MAAM,0BAA0B;AACxD,QAAM,OAAO,eAAe,QAAQ;AACpC,MAAI,CAAC,MAAM;AACT,aAAS,KAAK;AACd;AAAA,EACF;AAEA,MAAI,YAAY;AAChB,MAAI,KAAK,SAAS,UAAU,KAAK,SAAS,WAAY,aAAY;AAAA,WACzD,KAAK,SAAS,SAAU,aAAY;AAC7C,MAAI,KAAK,KAAK,SAAS,WAAW;AAChC,aAAS,KAAK;AACd;AAAA,EACF;AACA,eAAa,aAAa;AAC1B,kBAAgB,WAAW,MAAM;AAC/B,QAAI;AACJ,QAAI,KAAK,SAAS,QAAQ;AACxB,gBAAU,SAAS,YAAY,KAAK,IAAI;AAAA,IAC1C,WAAW,KAAK,SAAS,YAAY;AACnC,gBAAU,SAAS,gBAAgB,KAAK,IAAI;AAAA,IAC9C,WAAW,KAAK,SAAS,UAAU;AAEjC,gBAAU,OAAO,UAAU,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,kBAAkB;AAAA,IACvF,OAAO;AACL,YAAM,aAAa,OAAO,UAAU,KAAK,IAAI;AAC7C,YAAM,eAAe,SAAS,iBAAiB,KAAK,IAAI;AAExD,gBAAU,CAAC,GAAG,cAAc,GAAG,UAAU;AAAA,IAC3C;AACA,aAAS,KAAK,SAAS,UAAU,KAAK,IAAI;AAAA,EAC5C,GAAG,GAAG;AACR;AAEA,SAAS,UAAU,GAAG;AACpB,MAAI,CAAC,SAAS,QAAS;AACvB,MAAI,EAAE,YAAa;AAGnB,QAAM,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE;AAChD,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AACH,UAAI,YAAa;AACjB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,eAAS,SAAS,CAAC;AACnB;AAAA,IACF,KAAK;AACH,UAAI,YAAa;AACjB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,eAAS,SAAS,EAAE;AACpB;AAAA,IACF,KAAK;AACH,UAAI,YAAa;AACjB,UAAI,SAAS,iBAAiB,GAAG;AAC/B,UAAE,eAAe;AACjB,UAAE,gBAAgB;AAClB,iBAAS,OAAO;AAAA,MAClB;AACA;AAAA,IACF,KAAK;AACH,UAAI,YAAa;AACjB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,eAAS,OAAO;AAChB;AAAA,IACF,KAAK;AACH,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,eAAS,KAAK;AACd;AAAA,IACF;AACE;AAAA,EACJ;AACF;AAGA,SAAS,mBAAmB,UAAU;AACpC,WAAS,iBAAiB,SAAS,MAAM,QAAQ,QAAQ,CAAC;AAC1D,WAAS,iBAAiB,WAAW,SAAS;AAC9C,WAAS,iBAAiB,oBAAoB,MAAM;AAAE,aAAS,QAAQ,YAAY;AAAA,EAAK,CAAC;AACzF,WAAS,iBAAiB,kBAAkB,MAAM;AAAE,WAAO,SAAS,QAAQ;AAAA,EAAW,CAAC;AACxF,WAAS,iBAAiB,WAAW,MAAM;AACzC,QAAI,SAAS,WAAW,SAAS,YAAY,SAAS,aAAa,SAAU,UAAS,KAAK;AAE3F,iBAAa,aAAa;AAC1B,oBAAgB;AAEhB,YAAQ,QAAQ;AAAA,EAClB,CAAC;AACD,WAAS,iBAAiB,YAAY,MAAM;AAE1C,iBAAa,aAAa;AAC1B,oBAAgB,WAAW,MAAM,SAAS,KAAK,GAAG,GAAG;AAAA,EACvD,CAAC;AACH;AAIA,IAAM,aAAa;AAAA,EACjB;AAAA,EAAkB;AAAA,EAClB;AAAA,EAAkB;AAAA,EAClB;AAAA,EAAkB;AAAA,EAClB;AAAA,EAAgB;AAClB;AAIA,SAAS,oBAAoB;AAC3B,QAAM,UAAU,CAAC,GAAG,UAAU,EAAE,iBAAiB,sBAAsB,CAAC;AACxE,WAAS,OAAO,MAAM,uBAAuB;AAC7C,UAAQ,QAAQ,CAAC,QAAQ;AACvB,QAAI,UAAU,OAAO,uBAAuB,MAAM;AAClD,QAAI,UAAU,OAAO,yBAAyB,CAAC,MAAM;AACrD,QAAI,cAAc,UAAU,MAAM;AAChC,eAAS,CAAC;AACV,aAAO,KAAK,sBAAsB,CAAC;AACnC,UAAI,UAAU,OAAO,uBAAuB,MAAM;AAClD,UAAI,UAAU,OAAO,yBAAyB,CAAC,MAAM;AAAA,IACvD;AAAA,EACF,CAAC;AACH;AAKA,IAAI,gCAAgC;AACpC,SAAS,oBAAoB;AAC3B,QAAM,QAAQ,OAAO,yBAAyB,oBAAoB,WAAW,OAAO;AACpF,MAAI,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK;AAC9B,QAAI,CAAC,+BAA+B;AAClC,UAAI,gBAAgB,EAAE,QAAQ,WAAW,QAAQ,yDAAyD,CAAC;AAC3G,sCAAgC;AAAA,IAClC;AACA;AAAA,EACF;AACA,QAAM,WAAW,UAAU,EAAE,iBAAiB,uCAAuC;AACrF,aAAWC,OAAM,UAAU;AACzB,UAAM,WAAWA,IAAG,cAAc,UAAU;AAC5C,QAAI,CAAC,YAAY,SAAS,gBAAiB;AAC3C,aAAS,kBAAkB;AAC3B,WAAO,eAAe,UAAU,SAAS;AAAA,MACvC,IAAI,UAAU;AACZ,cAAM,WAAW,MAAM,IAAI,KAAK,QAAQ;AACxC,cAAM,IAAI,KAAK,UAAU,QAAQ;AACjC,YAAI,aAAa,YAAY,UAAU;AACrC,cAAI;AACF,kBAAM,MAAM,KAAK,MAAM,QAAQ;AAC/B,uBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,GAAG,EAAG,QAAO,KAAK,GAAG,IAAI;AACjE,6BAAiB,uBAAuB;AAAA,UAC1C,QAAQ;AAAA,UAAuD;AAAA,QACjE;AAAA,MACF;AAAA,MACA,MAAM;AAAE,eAAO,MAAM,IAAI,KAAK,QAAQ;AAAA,MAAG;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;AAIA,eAAsB,mBAAmB;AACvC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,UAAU,OAAO,MAAM,wBAAwB,CAAC;AACtD,WAAS,OAAO,MAAM,uBAAuB;AAC7C,MAAI,gBAAgB,EAAE,QAAQ,QAAQ,CAAC;AAEvC,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBpB,WAAS,KAAK,YAAY,KAAK;AAC/B,WAAS,KAAK;AACd,QAAM,OAAO,YAAY;AACzB,WAAS,QAAQ;AAEjB,MAAI,WAAW;AACf,aAAW,QAAQ,CAAC,OAAO;AACzB,UAAM,WAAW,UAAU,EAAE,cAAc,IAAI,EAAE,qBAAqB;AACtE,QAAI,UAAU;AACZ,yBAAmB,QAAQ;AAC3B;AAAA,IACF;AAAA,EACF,CAAC;AAGD,iBAAe,yBAAyB;AACtC,UAAM,YAAY,OAAO,MAAM,uBAAuB;AACtD,UAAM,aAAa,OAAO,MAAM,wBAAwB,CAAC;AACzD,UAAM,cAAc,CAAC,GAAG,OAAO,QAAQ,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG;AAC9D,UAAM,UAAU,CAAC,GAAG,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG;AAC/C,QAAK,gBAAgB,WAAa,WAAW,WAAY;AACvD,UAAI,gBAAgB,EAAE,QAAQ,WAAW,CAAC;AAC1C,YAAM,OAAO,YAAY;AACzB,eAAS;AACT,wBAAkB;AAAA,IACpB;AACA,aAAS,QAAQ;AAAA,EACnB;AACA,mBAAiB,sBAAsB;AAEvC,oBAAkB;AAClB,oBAAkB;AAClB,kBAAgB,iBAAiB;AACjC,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,gBAAgB,EAAE,UAAU,OAAO,OAAO,QAAQ,MAAM,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACvF,QAAM,oBAAoB,KAAK,EAAE;AACnC;;;AC5yBA,IAAI,gBAAyC;AAC7C,IAAM,aAAa,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK;AAC/K,IAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM,CAAC;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,eAAe;AAAA;AAAA,EACf,gBAAgB;AAAA;AAClB;AACA,IAAI;AACJ,IAAM,gBAAgB,kBAAkB;AAExC,eAAe,cAAc;AAC3B,eAAa,aAAa;AAC1B,kBAAgB,WAAW,MAAM;AAC/B,QAAI,eAAe,WAAW,MAAM,WAAW,MAAM;AACrD,UAAM,QAAQ,WAAW,QAAQ,WAAW,IAAI;AAChD,eAAW,SAAS,YAAY,QAAQ,KAAK,WAAW,MAAM;AAC9D,eAAW,IAAI,YAAY,WAAW;AAEtC,eAAW,WAAW;AACtB,eAAW,OAAO,CAAC;AACnB,eAAW,OAAO,WAAW;AAC7B,WAAO,KAAK,YAAY,WAAW;AACnC,aAAS;AAAA,EACX,GAAG,GAAG;AACR;AAEA,eAAe,cAAc;AAC3B,eAAa,aAAa;AAC1B,aAAW,SAAS;AACpB,MAAI,eAAe,WAAW,MAAM;AACpC,QAAM,QAAQ,WAAW,QAAQ,WAAW,MAAM;AAClD,aAAW,SAAS,WAAY,QAAS,WAAW,MAAM;AAC1D,aAAW,IAAI,YAAY,WAAW;AACtC,aAAW,WAAW;AACtB,aAAW,OAAO,CAAC;AACnB,SAAO,KAAK,YAAY,WAAW;AACnC,WAAS;AACX;AAEA,eAAe,gBAAgB;AAC7B,aAAW,OAAO,SAAS,cAAc,KAAK;AAC9C,aAAW,KAAK,YAAY;AAC5B,aAAW,KAAK,KAAK;AACrB,aAAW,KAAK,YAAY;AAC5B,YAAU,EAAE,YAAY,WAAW,IAAI;AACvC,aAAW,MAAM,UAAU,EAAE,eAAe,kBAAkB;AAC9D,MAAI,CAAC,WAAW,KAAK;AACnB,eAAW,MAAM,SAAS,cAAc,KAAK;AAC7C,eAAW,IAAI,YAAY;AAC3B,eAAW,IAAI,KAAK;AACpB,cAAU,EAAE,YAAY,WAAW,GAAG;AAAA,EACxC;AACA,aAAW,IAAI,YAAY,WAAW;AACtC,aAAW,IAAI,aAAa;AAC5B,aAAW,IAAI,UAAU;AACzB,MAAI,OAAO,KAAK,aAAa,OAAQ,YAAW,OAAO;AACvD,MAAI,OAAO,KAAK,aAAa,kBAAmB,YAAW,OAAO;AAClE,MAAI,OAAO,KAAK,aAAa,cAAe,YAAW,OAAO;AAE9D,MAAI,WAAW,SAAS,GAAG;AACzB,QAAI,eAAe;AACjB,gBAAU,EAAE,iBAAiB,cAAc,oBAAoB;AAC/D,gBAAU,EAAE,iBAAiB,YAAY,oBAAoB;AAAA,IAC/D;AACA,cAAU,EAAE,iBAAiB,eAAe,oBAAoB;AAChE,cAAU,EAAE,iBAAiB,cAAc,oBAAoB;AAAA,EACjE;AACA,MAAI,CAAC,cAAe,uBAAsB;AAC5C;AAEA,eAAe,cAAc,SAAS,UAAU;AAC9C,MAAI,WAAW,mBAAmB,WAAW,WAAW,KAAK,UAAU,SAAS,cAAc,GAAG;AAC/F,UAAM,OAAO,WAAW,KAAK,cAAc,wBAAwB;AACnE,QAAI,KAAM,MAAK,MAAM,UAAU;AAC/B,eAAW,KAAK,UAAU,IAAI,kBAAkB;AAChD,eAAW,MAAM;AACf,YAAM,cAAc,WAAW,KAAK,cAAc,eAAe;AACjE,UAAI,YAAa,aAAY,UAAU,IAAI,MAAM;AAAA,IACnD,GAAG,GAAG;AAAA,EACR;AACF;AAEA,eAAe,qBAAqB,GAAG;AACrC,MAAI,EAAE,OAAO,WAAW,EAAE,OAAO,QAAQ,KAAM,aAAY,CAAC;AAC9D;AAEA,eAAe,qBAAqB,GAAG;AACrC,MAAI,EAAE,OAAO,WAAW,EAAE,OAAO,QAAQ,KAAM,aAAY,CAAC;AAC9D;AAEA,eAAe,YAAY,GAAG;AAC5B,MAAI,WAAW,eAAe;AAC5B,iBAAa,WAAW,aAAa;AACrC,eAAW,gBAAgB;AAAA,EAC7B;AAEA,aAAW,KAAK,UAAU,OAAO,kBAAkB;AACnD,aAAW,iBAAiB,EAAE;AAE9B,MAAI,EAAE,OAAO,QAAQ,MAAM;AACzB,UAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASrB,QAAI,UAAU;AAAA;AAAA,aAEL,EAAE,OAAO,WAAW;AAAA,UACvB,EAAE,OAAO,QAAQ,WAAW,eAAe,EAAE;AAAA;AAAA;AAAA,QAG/C,EAAE,OAAO,QAAQ,IAAI;AAAA;AAEzB,QAAI,EAAE,OAAO,QAAQ,SAAU,YAAW,0DAA0D,EAAE,OAAO,QAAQ,QAAQ;AAC7H,QAAI,EAAE,OAAO,QAAQ,QAAQ;AAC3B,YAAM,aAAa,EAAE,OAAO,QAAQ;AACpC,UAAI,aAAa;AACjB,UAAI,eAAe,QAAS,cAAa;AAAA,eAChC,eAAe,SAAU,cAAa;AAC/C,UAAI,YAAY;AACd,mBAAW;AAAA;AAAA;AAAA,gDAG6B,UAAU;AAAA;AAAA;AAAA,MAGpD;AAAA,IACF;AAEA,eAAW,KAAK,YAAY;AAC5B,eAAW,KAAK,UAAU,IAAI,cAAc;AAE5C,QAAI,EAAE,UAAU,OAAO,aAAa,EAAG,YAAW,KAAK,UAAU,IAAI,cAAc;AAAA,QAC9E,YAAW,KAAK,UAAU,OAAO,cAAc;AAEpD,QAAI,EAAE,OAAO,QAAQ,UAAU;AAC7B,YAAM,OAAO,WAAW,KAAK,cAAc,wBAAwB;AACnE,YAAM,eAAe,WAAW,KAAK,cAAc,gBAAgB;AACnE,UAAI,QAAQ,cAAc;AACxB,mBAAW,MAAM;AACf,eAAK,UAAU,IAAI,QAAQ;AAC3B,uBAAa,UAAU,IAAI,SAAS;AAAA,QACtC,GAAG,GAAG;AAAA,MACR;AACA,iBAAW,gBAAgB,WAAW,MAAM,cAAc,EAAE,QAAQ,EAAE,OAAO,QAAQ,QAAQ,GAAG,GAAI;AAAA,IACtG;AAAA,EACF;AACF;AAEA,eAAe,YAAY,GAAG;AAC5B,MAAI,WAAW,eAAe;AAC5B,iBAAa,WAAW,aAAa;AACrC,eAAW,gBAAgB;AAAA,EAC7B;AACA,aAAW,KAAK,UAAU,OAAO,gBAAgB,kBAAkB;AACnE,aAAW,iBAAiB;AAC9B;AAqBA,eAAe,cAAc,gBAAgB,MAAM;AACjD,MAAI,cAAe,iBAAgB,cAAc,MAAM,GAAG,EAAE,CAAC;AAC7D,MAAI,kBAAkB,QAAQ;AAC5B,QAAI;AACF,iBAAW,SAAS,UAAU,aAAa,UAAU,UAAU,SAAS,UAAU,UAAU,CAAC,IAAI,UAAU;AAC3G,iBAAW,SAAS,WAAW,OAAO,MAAM,GAAG,EAAE,CAAC;AAClD,iBAAW,OAAO,WAAW;AAAA,IAC/B,SAAS,GAAG;AACV,iBAAW,SAAS;AACpB,UAAI,aAAa,CAAC;AAAA,IACpB;AAAA,EACF,OAAO;AACL,eAAW,SAAS,iBAAiB;AACrC,eAAW,OAAO,WAAW;AAAA,EAC/B;AACA,MAAI,aAAa,EAAE,MAAM,eAAe,QAAQ,WAAW,OAAO,CAAC;AAEnE,MAAI,OAAY,CAAC;AACjB,MAAI;AACF,QAAI,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,0BAA0B,WAAW,MAAM,OAAO;AAC7F,QAAI,CAAC,OAAO,CAAC,IAAI,IAAI;AACnB,iBAAW,SAAS;AACpB,YAAM,MAAM,UAAU,GAAG,OAAO,OAAO,0BAA0B,WAAW,MAAM,OAAO;AAAA,IAC3F;AACA,WAAO,MAAM,IAAI,KAAK;AAAA,EACxB,QAAQ;AAAA,EAAO;AAEf,MAAI;AACF,UAAM,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,4BAA4B,WAAW,MAAM,OAAO;AACjG,QAAI,OAAO,IAAI,GAAI,MAAK,WAAW,MAAM,IAAI,KAAK;AAAA,EACpD,QAAQ;AAAA,EAAO;AAEf,SAAO;AACT;AAEA,eAAe,mBAAmBC,KAAI,MAAM;AAC1C,MAAIA,IAAG,SAAS,WAAW,KAAKA,IAAG,kBAAkB,UAAU,SAAS,WAAW,EAAG;AACtF,MAAIA,IAAG,cAAc,MAAM,EAAG,CAAAA,MAAKA,IAAG,cAAc,MAAM;AAC1D,MAAIA,IAAG,cAAc,KAAK,EAAG,CAAAA,MAAKA,IAAG,cAAc,KAAK;AACxD,MAAIA,IAAG,UAAU,SAAS,WAAW,EAAG;AACxC,MAAIA,IAAG,QAAQ,UAAU;AACvB,IAAAA,MAAKA,IAAG,qBAAqBA,IAAG,cAAcA,IAAG,QAAQ,QAAQ;AACjE,uBAAmBA,KAAI,IAAI;AAC3B;AAAA,EACF;AACA,EAAAA,IAAG,cAAc;AACnB;AAEA,eAAe,QAAQA,KAAI,OAAO;AAChC,MAAI,WAAW,SAAS,GAAG;AACzB,IAAAA,IAAG,QAAQ,MAAM;AAAA,EACnB,WAAW,WAAW,SAAS,GAAG;AAChC,IAAAA,IAAG,QAAQ,OAAO,MAAM;AACxB,QAAI,MAAM,YAAY,MAAM,SAAS,SAAS,EAAG,CAAAA,IAAG,QAAQ,WAAW,MAAM;AAC7E,QAAI,MAAM,UAAU,MAAM,OAAO,SAAS,EAAG,CAAAA,IAAG,QAAQ,SAAS,MAAM;AAAA,EACzE,OAAO;AAAA,EAEP;AACF;AAuDA,eAAsB,WAAW;AAC/B,MAAI;AACJ,MAAI,eAAsB,CAAC;AAC3B,MAAI,WAAW,SAAU;AACzB,MAAI,OAAO,KAAK,IAAI,EAAE,WAAW,EAAG;AACpC,QAAM,WAAW,CAAC,GAAG,oBAAI,IAAS;AAAA,IAChC,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,QAAQ,CAAC;AAAA,IACzD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,IAAI,CAAC;AAAA,IACrD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,cAAc,CAAC;AAAA,IAC/D,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,oBAAoB,CAAC;AAAA,IACrE,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,gCAAgC,CAAC;AAAA;AAAA,EACnF,CAAC,CAAC;AACF,MAAI,SAAS,WAAW,EAAG;AAC3B,MAAI,WAAW,KAAK,WAAW,GAAG;AAChC,WAAO,MAAM,cAAc,OAAO,KAAK,SAAS;AAChD,mBAAe,OAAO,OAAO,KAAK,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAW,EAAE,KAAK,SAAS,CAAC;AAC7F,UAAM,WAAW,OAAO,OAAO,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAW,EAAE,KAAK,SAAS,CAAC;AAChF,eAAW,OAAO,CAAC,GAAG,cAAc,GAAG,QAAQ;AAAA,EACjD;AACA,MAAI,CAAC,WAAW,KAAM,eAAc;AACpC,MAAI,YAAY;AAChB,MAAI,QAAQ;AACZ,QAAM,KAAK,YAAY,IAAI;AAE3B,aAAWC,OAAM,UAAU;AAEzB,QAAI;AACJ,QAAIA,IAAG,GAAI,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAOA,IAAG,MAAMA,IAAG,GAAG,SAAS,EAAE,EAAE,EAAE;AAC/F,QAAI,CAAC,OAAO;AACV,UAAIA,IAAG,QAAQ,SAAU,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,YAAY,EAAE,KAAK,MAAMA,IAAG,QAAQ,SAAS,YAAY,EAAE,KAAK,CAAC;AAAA,UACjI,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,YAAY,EAAE,KAAK,MAAMA,IAAG,YAAY,YAAY,EAAE,KAAK,CAAC;AAAA,IAC/G;AACA,QAAI,OAAO,WAAW,SAAS,GAAG;AAChC,UAAI,CAACA,IAAG,QAAQ,SAAU,CAAAA,IAAG,QAAQ,WAAWA,IAAG;AACnD,yBAAmBA,KAAI,MAAM,SAAS;AACtC;AAAA,IACF,WAAW,OAAO,SAAS,CAAC,WAAW,WAAY,WAAW,WAAW,MAAO;AAC9E,yBAAmBA,KAAI,MAAM,KAAK;AAAA,IACpC;AAEA,QAAI,OAAO,MAAM,SAAS,GAAG;AAC3B;AACA,cAAQA,KAAI,KAAK;AAAA,IACnB;AAAA,EACF;AACA,aAAW,WAAW;AACtB,aAAW,UAAU;AACrB,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,YAAY,KAAK,EAAE;AAEzB,MAAI,eAAe,aAAa;AAChC,MAAI,YAAY,EAAE,MAAM,WAAW,MAAM,QAAQ,WAAW,QAAQ,UAAU,SAAS,QAAQ,WAAW,OAAO,MAAM,WAAW,KAAK,QAAQ,UAAU,aAAa,QAAQ,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AAE3M;AAGA,eAAe,mBAAmBA,KAAI;AACpC,MAAI,CAAC,WAAW,QAAQ,WAAW,KAAK,WAAW,EAAG;AAItD,QAAM,iBAAiBA,IAAG,YAAY,YACjCA,IAAG,YAAY,QACfA,IAAG,UAAU,SAAS,MAAM,KAC3BA,IAAG,YAAY,WAAWA,IAAG,eAAe,YAAY,WAAWA,IAAG,eAAe,UAAU,SAAS,YAAY,KAAKA,IAAG,QAAQ,WAAW;AACrJ,MAAI,CAAC,eAAgB;AAErB,MAAI;AACJ,MAAIA,IAAG,GAAI,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAOA,IAAG,MAAMA,IAAG,GAAG,SAAS,EAAE,EAAE,EAAE;AAC/F,MAAI,CAAC,OAAO;AACV,QAAIA,IAAG,QAAQ,SAAU,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,YAAY,EAAE,KAAK,MAAMA,IAAG,QAAQ,SAAS,YAAY,EAAE,KAAK,CAAC;AAAA,QACjI,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,YAAY,EAAE,KAAK,MAAMA,IAAG,YAAY,YAAY,EAAE,KAAK,CAAC;AAAA,EAC/G;AAEA,MAAIA,IAAG,eAAeA,IAAG,YAAY,SAAS,KAAK,OAAO,WAAW,SAAS,GAAG;AAC/E,QAAI,CAACA,IAAG,QAAQ,SAAU,CAAAA,IAAG,QAAQ,WAAWA,IAAG;AACnD,uBAAmBA,KAAI,MAAM,SAAS;AAAA,EACxC;AAEA,MAAI,OAAO,MAAM,SAAS,EAAG,SAAQA,KAAI,KAAK;AAChD;AAGA,SAAS,wBAAwB;AAC/B,MAAI,cAAe,eAAc,WAAW;AAE5C,kBAAgB,IAAI,iBAAiB,CAAC,cAAc;AAElD,eAAW,YAAY,WAAW;AAChC,UAAI,SAAS,SAAS,aAAa;AACjC,mBAAW,QAAQ,SAAS,YAAY;AACtC,cAAI,KAAK,aAAa,KAAK,cAAc;AAEvC,+BAAmB,IAAI;AAGvB,kBAAM,WAAW;AAAA,cACf,GAAG,MAAM,KAAU,KAAK,iBAAiB,QAAQ,CAAC;AAAA,cAClD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,IAAI,CAAC;AAAA,cACrD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,IAAI,CAAC;AAAA,cACrD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,IAAI,CAAC;AAAA,cACrD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,OAAO,CAAC;AAAA,cACxD,GAAG,MAAM,KAAU,KAAK,iBAAiB,cAAc,CAAC;AAAA,cACxD,GAAG,MAAM,KAAU,KAAK,iBAAiB,oBAAoB,CAAC;AAAA,cAC9D,GAAG,MAAM,KAAU,KAAK,iBAAiB,gCAAgC,CAAC;AAAA,YAC5E;AAGA,gBAAI,KAAK,YACP,KAAK,QAAQ,QAAQ,KAClB,KAAK,QAAQ,IAAI,KACjB,KAAK,QAAQ,IAAI,KACjB,KAAK,QAAQ,IAAI,KACjB,KAAK,QAAQ,cAAc,KAC3B,KAAK,QAAQ,OAAO,KACpB,KAAK,QAAQ,oBAAoB,KACjC,KAAK,QAAQ,gCAAgC,IAC/C;AACD,uBAAS,KAAK,IAAI;AAAA,YACpB;AAGA,qBAAS,QAAQ,CAACA,QAAO,mBAAmBA,GAAE,CAAC;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,aAAa,UAAU;AAC7B,MAAI,YAAY;AACd,kBAAc,QAAQ,YAAY;AAAA,MAChC,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEO,SAAS,0BAA0B;AACxC,MAAI,eAAe;AACjB,kBAAc,WAAW;AACzB,oBAAgB;AAAA,EAClB;AACF;;;ACvbA,IAAM,kBAAkB,MAAM;AAC5B,MAAI,uBAAuB;AAC3B,QAAM,YAAY,oBAAI,IAA+B;AAErD,QAAM,MAAM,MAAM,KAAK,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC;AAElF,WAAS,gBAAgBC,QAAmB,UAAmB,aAAsC;AACnG,UAAM,OAAOA,OAAM,UAAU,SAAS,KAAK,aAAa,SAAS,gBAAgB;AACjF,UAAM,OAAOA,OAAM,UAAU,SAAS,KAAK,YAAY,SAAS,gBAAgB;AAChF,UAAM,UAAU,UAAU,EAAE,cAAc,eAAe;AACzD,QAAI,QAAS,SAAQ,OAAO;AAC5B,UAAM,cAAc,SAAS,cAAc,KAAK;AAChD,gBAAY,KAAK;AACjB,gBAAY,MAAM,MAAM,GAAG,IAAI;AAC/B,gBAAY,MAAM,OAAO,GAAG,IAAI;AAChC,UAAM,kBAAkB,SAAS,cAAc,IAAI;AACnD,oBAAgB,YAAY;AAC5B,gBAAY,OAAO,eAAe;AAClC,gBAAY,QAAQ,CAAC,UAAU;AAC7B,YAAM,mBAAmB,SAAS,cAAc,GAAG;AACnD,uBAAiB,YAAY,MAAM;AACnC,uBAAiB,iBAAiB,SAAS,MAAM,MAAM,KAAK,CAAC;AAC7D,sBAAgB,OAAO,gBAAgB;AAAA,IACzC,CAAC;AACD,cAAU,EAAE,YAAY,WAAW;AACnC,UAAM,YAAY,YAAY,cAAc;AAC5C,UAAM,aAAa,YAAY,eAAe;AAC9C,UAAM,cAAc,OAAO;AAC3B,UAAM,eAAe,OAAO;AAC5B,QAAK,cAAc,OAAQ,UAAW,aAAY,MAAM,OAAO,GAAG,cAAc,SAAS;AACzF,QAAK,eAAe,OAAQ,WAAY,aAAY,MAAM,MAAM,GAAG,eAAe,UAAU;AAAA,EAC9F;AAEA,WAASC,yBAAwB,uBAA+B,WAAmB,eAA2B,UAAU,OAAe;AACrI,QAAI,eAAe,UAAU,IAAI,qBAAqB;AACtD,QAAI,CAAC,cAAc;AACjB,qBAAe,CAAC;AAChB,gBAAU,IAAI,uBAAuB,YAAY;AAAA,IACnD;AACA,UAAM,UAAU;AAAA,MACd,IAAI,GAAG,qBAAqB,IAAI,IAAI,CAAC;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA;AAAA,IAEF;AACA,iBAAa,KAAK,OAAO;AACzB,WAAO,QAAQ;AAAA,EACjB;AAEA,WAASC,yBAAwB,IAAkB;AACjD,cAAU,QAAQ,CAAC,GAAG,MAAM;AAC1B,UAAI,QAAQ;AACZ,QAAE,QAAQ,CAAC,GAAG,OAAO;AACnB,YAAI,EAAE,OAAO,IAAI;AAAE,kBAAQ;AAAA,QAAI;AAAA,MACjC,CAAC;AACD,UAAI,SAAS,EAAG,GAAE,OAAO,OAAO,CAAC;AAAA,IACnC,CAAC;AAAA,EACH;AAEA,SAAO,0BAA0BD;AACjC,SAAO,0BAA0BC;AAEjC,iBAAeC,+BAA6C;AAC1D,QAAI,qBAAsB;AAC1B,QAAI,iBAAiB;AACrB,cAAU,EAAE,iBAAiB,SAAS,CAAC,MAAa;AAClD,YAAM,aAAa;AACnB,UAAI,CAAC,WAAW,UAAW;AAC3B,YAAM,UAAU,UAAU,EAAE,cAAc,eAAe;AACzD,UAAI,QAAS,SAAQ,OAAO;AAC5B,gBAAU,QAAQ,CAAC,GAAG,MAAM;AAC1B,cAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,OAAO;AAC7C,cAAM,SAAS,WAAW;AAC1B,YAAI,CAAC,OAAQ;AACb,cAAM,UAAU,OAAO,QAAQ,CAAC;AAChC,YAAI,MAAM,SAAS,KAAK,SAAS;AAC/B,0BAAgB,YAAY,SAAS,KAAK;AAC1C,qBAAW,eAAe;AAAA,QAC5B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,cAAU,EAAE,iBAAiB,eAAe,CAAC,MAAa;AACxD,YAAM,aAAa;AACnB,YAAM,UAAU,UAAU,EAAE,cAAc,eAAe;AACzD,UAAI,QAAS,SAAQ,OAAO;AAC5B,gBAAU,QAAQ,CAAC,GAAG,MAAM;AAC1B,cAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO;AAC9C,cAAM,SAAS,WAAW;AAC1B,YAAI,CAAC,OAAQ;AACb,cAAM,UAAU,OAAO,QAAQ,CAAC;AAChC,YAAI,MAAM,SAAS,KAAK,SAAS;AAC/B,0BAAgB,YAAY,SAAS,KAAK;AAC1C,qBAAW,eAAe;AAAA,QAC5B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,2BAAuB;AAAA,EACzB;AACA,SAAO,CAACF,0BAAyBC,0BAAyBC,4BAA2B;AACvF;AAEA,IAAM,sBAAsB,gBAAgB;AAC5C,IAAM,0BAA0B,oBAAoB,CAAC;AACrD,IAAM,0BAA0B,oBAAoB,CAAC;AACrD,IAAM,8BAA8B,oBAAoB,CAAC;AAEzD,IAAI,2BAAkE;AAE/D,IAAM,kBAAkB,CAAC,gBAA8B;AAC5D,MAAI,0BAA0B;AAC5B,QAAI,yBAAyB;AAC7B,kBAAc,wBAAwB;AACtC,+BAA2B;AAAA,EAC7B,OAAO;AACL,UAAM,YAAY,UAAU,EAAE,cAAc,WAAW;AACvD,QAAI,EAAE,qBAAqB,aAAc;AACzC,UAAM,SAAS,MAAM;AACnB,UAAIC,QAAO,SAAS,eAAe,aAAa,GAAG,MAAM,YAAY;AACrE,UAAI,CAACA,OAAM;AAET,cAAM,cAAc,UAAU,cAAc,QAAQ,QAAQ;AAC5D,QAAAA,QAAO,aAAa,UAAU,SAAS,UAAU,KAAK,aAAa,UAAU,SAAS,QAAQ;AAAA,MAChG;AACA,aAAOA;AAAA,IACT;AACA,QAAI,wBAAwB;AAC5B,QAAI,CAAC,OAAO,EAAG,WAAU,MAAM;AAC/B,+BAA2B,YAAY,MAAM;AAC3C,UAAI,CAAC,OAAO,EAAG,WAAU,MAAM;AAAA,IACjC,GAAG,GAAG;AAAA,EACR;AACF;AACA,OAAO,kBAAkB;AAEzB,IAAM,iBAAiB,CAAC,OAAe,UAAwB;AAC7D,QAAM,MAAM,SAAS,eAAe,GAAG,KAAK,IAAI,KAAK,EAAE;AACvD,SAAO,eAAe;AACtB,MAAI,IAAK,KAAI,MAAM;AACrB;AAEA,IAAM,YAAY,YAAY;AAC5B,QAAM,UAAU,IAAI,QAAQ;AAC5B,QAAM,OAAO,KAAK,UAAU,EAAE,SAAS,IAAI,iBAAiB,MAAM,CAAC;AACnE,UAAQ,IAAI,gBAAgB,kBAAkB;AAC9C,QAAM,MAAM,uBAAuB,GAAG,GAAG,QAAQ,QAAQ,EAAE,KAAK;AAChE,QAAMC,MAAK,UAAU,EAAE,cAAc,aAAa,GAAG,iBAAiB;AAEtE,MAAI;AACJ,MAAI;AACJ,QAAM,MAAM,MAAM,uBAAuB,EAAE,QAAQ,QAAQ,SAAS,KAAK,CAAC;AAC1E,MAAI,KAAK,IAAI;AACX,WAAO,MAAM,IAAI,KAAK;AACtB,QAAI,qBAAqB,IAAI;AAC7B,QAAIA,IAAI,CAAAA,IAAG,aAAa;AAAA;AAAA,EAAyB,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,EAChF;AACA,QAAM,MAAMC,WAAU,+CAA+C,EAAE,QAAQ,OAAO,QAAQ,CAAC;AAC/F,MAAI,KAAK,IAAI;AACX,WAAO,MAAM,IAAI,KAAK;AACtB,QAAI,gBAAgB,IAAI;AACxB,QAAID,IAAI,CAAAA,IAAG,aAAa;AAAA;AAAA,EAAoB,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,EAC3E;AACF;AAEA,eAAsB,kBAAkB;AACtC,aAAW,OAAO,CAAC,WAAW,WAAW,WAAW,OAAO,GAAG;AAC5D,4BAAwB,IAAI,GAAG,aAAa,qBAAqB,SAAS;AAC1E,4BAAwB,IAAI,GAAG,aAAa,4BAA4B,MAAM,UAAU,UAAU,UAAU,SAAS,cAAc,IAAI,GAAG,4BAA4B,EAAE,KAAK,CAAC;AAC9K,4BAAwB,IAAI,GAAG,aAAa,oBAAoB,MAAM,gBAAgB,IAAI,GAAG,WAAW,CAAC;AACzG,4BAAwB,IAAI,GAAG,aAAa,wBAAwB,eAAe;AACnF,4BAAwB,IAAI,GAAG,aAAa,oBAAoB,cAAc;AAC9E,4BAAwB,IAAI,GAAG,cAAc,uBAAuB,MAAM,eAAe,KAAK,kBAAkB,GAAG,IAAI;AACvH,4BAAwB,IAAI,GAAG,cAAc,uBAAuB,MAAM,eAAe,KAAK,kBAAkB,GAAG,IAAI;AACvH,4BAAwB,IAAI,GAAG,cAAc,iBAAiB,MAAM,eAAe,KAAK,kBAAkB,GAAG,IAAI;AAAA,EACnH;AAEA,aAAW,OAAO,CAAC,WAAW,WAAW,WAAW,QAAQ,GAAG;AAC7D,4BAAwB,IAAI,GAAG,yBAAyB,sCAAsC,MAAM;AAClG,eAAS,cAAc,kBAAkB,GAAG,sBAAsB,GAAG,MAAM;AAC3E,eAAS,eAAe,aAAa,GAAG,MAAM;AAAA,IAChD,CAAC;AACD,4BAAwB,IAAI,GAAG,yBAAyB,yCAAyC,MAAM;AACrG,eAAS,cAAc,kBAAkB,GAAG,sBAAsB,GAAG,MAAM;AAC3E,eAAS,eAAe,aAAa,GAAG,MAAM;AAAA,IAChD,CAAC;AAAA,EACH;AACA,8BAA4B;AAC9B;;;ACrMO,SAAS,iBAAiB;AAC/B,QAAM,aAAa,MAAM,KAAkB,UAAU,EAAE,iBAAiB,mBAAmB,CAAC;AAC5F,QAAM,SAAkC,CAAC;AACzC,aAAW,QAAQ,CAACE,QAAO;AACzB,UAAM,UAAUA,IAAG,cAA+B,+BAA+B;AACjF,UAAM,OAAO,mBAAmB,cAAc,QAAQ,UAAU,KAAK,IAAI;AACzE,QAAI,CAAC,KAAM;AACX,UAAM,WAAW,MAAM,KAAgBA,IAAG,UAAU;AACpD,UAAM,OAAO,SAAS,OAAO,CAAC,MAAM,aAAa,eAAe,EAAE,MAAM,YAAY,OAAO;AAC3F,QAAI,OAAO,IAAI,MAAM,OAAW,QAAO,IAAI,IAAI,KAAK,SAAS;AAAA,EAC/D,CAAC;AACD,SAAO;AACT;AAEA,eAAsB,gBAAgB;AACpC,QAAM,MAAM,UAAU,EAAE,eAAe,kBAAkB;AACzD,MAAI,CAAC,IAAK;AACV,QAAM,uBAAuB,IAAI,qBAAqB,CAAC,YAAY;AACjE,QAAI,QAAQ,CAAC,EAAE,qBAAqB,GAAG;AAAA,IAAa;AACpD,QAAI,QAAQ,CAAC,EAAE,oBAAoB,EAAG,KAAI,MAAM;AAAA,EAClD,CAAC;AACD,uBAAqB,QAAQ,GAAG;AAClC;AAEA,OAAO,iBAAiB;;;ACtBjB,IAAM,eAAe,YAAY,IAAI;AAC5C,IAAI,mBAAmB;AAEvB,eAAe,gBAAkC;AAC/C,QAAM,OAAO,OAAO,cAAc,OAAO,WAAW,8BAA8B,EAAE;AACpF,QAAM,gBAAiC,CAAC;AACxC,QAAM,MAAM,KAAK,MAAM,OAAO,KAAK,OAAO,CAAC;AAC3C,QAAM,YAAY;AAAA,IAChB,0BAA0B,OAAO,SAAS,OAAO;AAAA,IACjD,0BAA0B,GAAG;AAAA,EAC/B;AACA,aAAWC,QAAO,WAAW;AAC3B,UAAM,MAAM,IAAI,MAAM;AACtB,UAAM,UAAU,IAAI,QAAc,CAAC,SAAS,WAAW;AACrD,UAAI,SAAS,MAAM,QAAQ;AAC3B,UAAI,UAAU,MAAM,OAAO,IAAI,MAAM,4BAA4BA,IAAG,EAAE,CAAC;AAAA,IACzE,CAAC;AACD,QAAI,MAAMA;AACV,kBAAc,KAAK,OAAO;AAAA,EAC5B;AACA,MAAI;AACF,UAAM,QAAQ,IAAI,aAAa;AAC/B,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,UAAM,kBAAkB,GAAG,EAAE;AAC7B,WAAO;AAAA,EACT;AACF;AAEA,SAAS,SAAS,UAA6B;AAC7C,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,MAAM,SAAS,CAAC;AACpB,QAAI,QAAQ,OAAW,OAAM;AAC7B,QAAI,QAAQ,KAAM,OAAM;AACxB,cAAU;AACV,QAAI,OAAO,QAAQ,SAAU,WAAU,KAAK,UAAU,GAAG,EAAE,QAAQ,SAAS,EAAE;AAAA,QACzE,WAAU;AAAA,EACjB;AACA,SAAO;AACT;AAEA,SAAS,aAAmB;AAC1B,MAAI,OAAO,gBAAgB;AACzB,WAAO,iBAAiB;AACxB,UAAM,WAAW;AACjB,UAAM,QAAkB,CAAC;AAEzB,aAAS,IAAI,KAAK,IAAI,GAAG,OAAO,cAAc,SAAS,QAAQ,GAAG,IAAI,OAAO,cAAc,QAAQ,KAAK;AACtG,YAAM,WAAW,OAAO,cAAc,CAAC;AACvC,UAAI,QAAQ;AACZ,UAAI,SAAS,SAAS,QAAS,SAAQ;AAAA,eAC9B,SAAS,SAAS,QAAS,SAAQ;AAC5C,YAAM,OAAO,6CAA6C,KAAK,KAAK,SAAS,EAAE,WAAW,SAAS,SAAS,GAAG,CAAC;AAChH,YAAM,KAAK,IAAI;AAAA,IACjB;AACA,UAAM,cAAc,SAAS,eAAe,WAAW;AACvD,QAAI,YAAa,aAAY,YAAY,MAAM,KAAK,EAAE;AAAA,EACxD;AACA,MAAI,iBAAkB,YAAW,YAAY,GAAG;AAClD;AAEA,eAAsB,eAAe;AACnC,QAAM,SAAS,SAAS,eAAe,QAAQ;AAC/C,MAAI,OAAQ,QAAO,OAAO;AAC1B,MAAI,cAAc;AAClB,QAAM,IAAI,KAAK,MAAM,YAAY,IAAI,IAAI,YAAY;AACrD,MAAI,eAAe,CAAC;AACpB,QAAM,iBAAiB,CAAC;AACxB,UAAQ,GAAG,OAAO,GAAG,QAAQ,EAAE,SAAS,cAAc,CAAC,GAAG,CAAC;AAC3D,qBAAmB;AACrB;AAEA,eAAe,eAAe;AAC5B,QAAM,OAAO,OAAO,cAAc,OAAO,WAAW,8BAA8B,EAAE;AACpF,MAAI,gBAAgB,EAAE,OAAO,OAAO,SAAS,QAAQ,CAAC;AACtD,QAAM,MAAM,KAAK,MAAM,OAAO,KAAK,OAAO,CAAC;AAC3C,QAAM,SAAS;AAAA,yDACwC,OAAO,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA;AAK/E,WAAS,KAAK,mBAAmB,aAAa,MAAM;AACpD,QAAMC,MAAK,MAAM,cAAc;AAC/B,MAAI,CAACA,KAAI;AACP,iBAAa;AACb;AAAA,EACF;AACA,QAAM,QAAQ,yGAAyG,OAAO,SAAS,OAAO,qCAAqC,GAAG,iCAAiC,OAAO,aAAa,SAAS;AACpP,QAAM,WAAW,SAAS,eAAe,QAAQ;AACjD,MAAI,SAAU,UAAS,mBAAmB,cAAc,KAAK;AAE7D,qBAAmB;AACnB,aAAW;AAEX,QAAMC,WAAU,GAAG,OAAO,GAAG,OAAO,EACjC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EACxB,KAAK,CAAC,SAAS;AACd,UAAM,QAAQ,KAAK,QAAQ,SAAS,EAAE;AACtC,UAAM,YAAY,MAAM,MAAM,eAAe;AAC7C,UAAM,WAAW,YAAY,UAAU,CAAC,IAAI;AAC5C,QAAI,UAAW,KAAI,WAAW,EAAE,SAAS,SAAS,CAAC;AAAA,QAC9C,KAAI,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,UAAM,SAAS,SAAS,eAAe,MAAM;AAC7C,QAAI,OAAQ,QAAO,YAAY;AAAA,EACjC,CAAC,EACA,MAAM,CAAC,QAAQ,MAAM,YAAY,GAAG,EAAE,CAAC;AAE1C,MAAI,cAAc;AACpB;AAEA,OAAO,SAAS;;;AClHT,SAAS,kBAAkB;AAChC,MAAI,cAAc;AAClB,QAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,SAAO,KAAK;AACZ,SAAO,YAAY;AACnB,SAAO,cAAc;AACrB,SAAO,QAAQ;AACf,WAAS,KAAK,YAAY,MAAM;AAClC;;;ACeA,OAAO,MAAM;AACb,OAAO,UAAU;AAEjB,IAAM,kBAAsC,CAAC;AAC7C,IAAI,KAAK;AAET,eAAe,cAAc;AAE3B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,KAAK,YAAY,IAAI;AACzB,SAAO,MAAM;AACX,QAAI,KAAK,KAAK,MAAQ;AACpB,UAAI,qBAAqB;AACzB;AAAA,IACF;AACA,QAAI,OAAO,QAAQ,OAAO,KAAK,OAAO,IAAI,EAAE,SAAS,GAAG;AACtD,WAAK,OAAO,KAAK,eAAe,WAAW,+BAA+B,OAAO,OAAO;AACxF,UAAI,IAAI;AACN,YAAI,eAAe,KAAK,MAAM,KAAK,EAAE,CAAC;AACtC,cAAM,eAAe,KAAK,EAAE;AAC5B;AAAA,MACF;AAAA,IACF;AACA,UAAM,MAAM,GAAG;AACf,SAAK,YAAY,IAAI;AAAA,EACvB;AACF;AAEA,eAAe,cAAc;AAC3B,MAAI,aAAa;AACjB,0BAAwB;AACxB,YAAU;AACZ;AAEA,eAAe,gBAAgB;AAC7B,MAAI,YAAY,OAAO,KAAK,OAAO;AACnC,MAAI,OAAO,KAAK,SAAS,SAAS,GAAG;AACnC,WAAO,UAAU,OAAO,KAAK;AAC7B,WAAO,MAAM,GAAG,OAAO,OAAO;AAAA,EAChC;AACA,MAAI,OAAO,EAAE,KAAK,OAAO,IAAI,CAAC;AAChC;AAEA,eAAe,cAAc;AAC3B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,cAAc,KAAK,MAAM,KAAK,YAAY,CAAC;AAC/C,QAAM,cAAc,KAAK,YAAY;AACrC,MAAI,QAAQ;AACZ,MAAI,OAAO,YAAa,OAAM,OAAO,YAAY;AAIjD,kBAAgB,KAAK,WAAW,CAAC;AACjC,kBAAgB,KAAK,cAAc,CAAC;AACpC,kBAAgB,KAAK,kBAAkB,CAAC;AACxC,kBAAgB,KAAK,gBAAgB,CAAC;AACtC,kBAAgB,KAAK,aAAa,CAAC;AACnC,kBAAgB,KAAK,QAAQ,QAAQ,eAAe,CAAC,CAAC;AACtD,kBAAgB,KAAK,QAAQ,QAAQ,aAAa,CAAC,CAAC;AACpD,kBAAgB,KAAK,QAAQ,QAAQ,gBAAgB,CAAC,CAAC;AACvD,kBAAgB,KAAK,QAAQ,QAAQ,YAAY,CAAC,CAAC;AACnD,kBAAgB,KAAK,QAAQ,QAAQ,sBAAsB,CAAC,CAAC;AAC7D,kBAAgB,KAAK,QAAQ,QAAQ,cAAc,CAAC,CAAC;AACrD,kBAAgB,KAAK,QAAQ,QAAQ,eAAe,CAAC,CAAC;AAGtD,QAAM,YAAY;AAClB,QAAM,YAAY;AAClB,QAAM,cAAc;AAEpB,mBAAiB,gBAAgB;AAGjC,MAAI,OAAO,eAAgB,OAAM,OAAO,eAAe;AAGvD,kBAAgB,KAAK,QAAQ,QAAQ,eAAe,CAAC,CAAC;AACtD,kBAAgB,KAAK,QAAQ,QAAQ,mBAAmB,CAAC,CAAC;AAC1D,kBAAgB,KAAK,QAAQ,QAAQ,mBAAmB,CAAC,CAAC;AAC1D,kBAAgB,KAAK,QAAQ,QAAQ,iBAAiB,CAAC,CAAC;AACxD,kBAAgB,KAAK,QAAQ,QAAQ,kBAAkB,CAAC,CAAC;AACzD,kBAAgB,KAAK,QAAQ,QAAQ,aAAa,CAAC,CAAC;AACpD,kBAAgB,KAAK,QAAQ,QAAQ,SAAS,CAAC,CAAC;AAChD,kBAAgB,KAAK,QAAQ,QAAQ,YAAY,CAAC,CAAC;AACnD,kBAAgB,KAAK,QAAQ,QAAQ,YAAY,CAAC,CAAC;AACnD,kBAAgB,KAAK,QAAQ,QAAQ,gBAAgB,CAAC,CAAC;AAEvD,MAAI,OAAO,KAAK,eAAe,SAAU,iBAAgB;AAEzD,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,eAAe,KAAK,MAAM,OAAQ,KAAK,MAAM,GAAO,CAAC;AAEzD,eAAa;AAEb,QAAM,QAAQ,IAAI,eAAe;AACjC,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,gBAAgB,KAAK,MAAM,OAAQ,KAAK,MAAM,GAAO,CAAC;AAC1D,cAAY;AACd;AAEA,WAAW,WAAW;AACtB,UAAU,MAAM,IAAI,SAAS,CAAC;;;ACxHvB,SAAS,iBAAiB,yBAAkC,uBAAgC,YAAgD;AACjJ,QAAM,UAAU,CAAC;AACjB,QAAM,SAAS,CAAC;AAChB,YAAU,EAAE,iBAAiB,oCAAoC,EAAE,QAAQ,CAAC,MAAM;AAChF,QAAI,EAAE,aAAa,kBAAmB;AACtC,QAAI,EAAE,KAAK,WAAW,SAAS,KAAK,CAAC,EAAE,QAAS,SAAQ,KAAK,EAAE,KAAK,UAAU,CAAC,CAAC;AAChF,QAAI,EAAE,KAAK,WAAW,SAAS,KAAK,EAAE,QAAS,QAAO,KAAK,EAAE,KAAK,UAAU,CAAC,CAAC;AAAA,EAChF,CAAC;AACD,gBAAc;AACd,MAAI,qBAAqB,EAAE,SAAS,OAAO,CAAC;AAC5C,SAAO,CAAC,KAAK,UAAU,OAAO,GAAG,KAAK,UAAU,MAAM,GAAG,UAAU;AACrE;AAEO,SAAS,iBAAiB,OAAgB,yBAAkC,YAAqB,YAAyD;AAC/J,QAAM,UAAU,CAAC;AACjB,YAAU,EAAE,iBAAiB,oCAAoC,EAAE,QAAQ,CAAC,MAAM;AAChF,QAAI,EAAE,aAAa,kBAAmB;AACtC,QAAI,EAAE,KAAK,WAAW,SAAS,KAAK,CAAC,EAAE,QAAS,SAAQ,KAAK,EAAE,KAAK,UAAU,CAAC,CAAC;AAAA,EAClF,CAAC;AACD,QAAM,KAAK,SAAS;AACpB,MAAI,qBAAqB,EAAE,QAAQ,CAAC;AACpC,SAAO,CAAC,IAAI,KAAK,UAAU,OAAO,GAAG,YAAY,UAAU;AAC7D;AAEO,SAAS,kBAAkB,QAA8CC,MAAmB;AACjG,SAAO,WAAW;AAClB,SAAO,QAAQ;AACf,SAAO,YAAY;AACnB,QAAM,WAAW,UAAU,EAAE,cAAc,gCAAgC;AAC3E,MAAI,EAAE,oBAAoB,qBAAsB;AAChD,WAAS,QAAQA;AACjB,EAAAC,aAAY,QAAQ;AACpB,MAAI,sBAAsB,EAAE,KAAAD,KAAI,CAAC;AACjC,QAAM,aAAa,UAAU,EAAE,cAAc,2BAA2B;AACxE,MAAI,sBAAsB,YAAa,YAAW,MAAM;AAC1D;AAEO,SAAS,oBAAoB,QAA8CA,MAAmB;AACnG,SAAO,WAAW;AAClB,SAAO,QAAQ;AACf,SAAO,YAAY;AACnB,QAAM,WAAW,UAAU,EAAE,cAAc,gCAAgC;AAC3E,MAAI,EAAE,oBAAoB,qBAAsB;AAChD,WAAS,QAAQA;AACjB,EAAAC,aAAY,QAAQ;AACpB,MAAI,wBAAwB,EAAE,KAAAD,KAAI,CAAC;AACnC,QAAM,eAAe,UAAU,EAAE,cAAc,6BAA6B;AAC5E,MAAI,wBAAwB,YAAa,cAAa,MAAM;AAC9D;AAEO,SAAS,iBAAiB,QAA8CA,MAAmB;AAChG,SAAO,QAAQ;AACf,SAAO,YAAY;AACnB,QAAM,WAAW,UAAU,EAAE,cAAc,gCAAgC;AAC3E,MAAI,EAAE,oBAAoB,qBAAsB;AAChD,WAAS,QAAQA;AACjB,EAAAC,aAAY,QAAQ;AACpB,MAAI,qBAAqB,EAAE,KAAAD,KAAI,CAAC;AAChC,QAAM,YAAY,UAAU,EAAE,cAAc,0BAA0B;AACtE,MAAI,qBAAqB,iBAAkB,WAAU,MAAM;AAC7D;AAEA,OAAO,mBAAmB;AAC1B,OAAO,mBAAmB;AAC1B,OAAO,sBAAsB;AAC7B,OAAO,oBAAoB;AAC3B,OAAO,mBAAmB;;;AChE1B,SAAS,iBAAiB,OAAuD;AAC/E,SAAO,SAAS,OAAO,WAAW,KAAK,CAAC,aAAa,aAAa,YAAY,EAAE,SAAS,MAAM,CAAC,EAAE,IAAI;AACxG;AAEA,SAAS,iBAAiB,SAAkB,OAAuB;AACjE,MAAI,oBAAoB,SAAS,KAAK;AACtC,MAAI,CAAC,iBAAiB,KAAK,EAAG;AAC9B,QAAM,UAAU,MAAM,CAAC;AACvB,UAAQ,cAAc,mEAAmE,GAAG,MAAM;AAClG,QAAM,WAAW,MAAM;AACrB,UAAM,YAAY,QAAQ,cAAc,oBAAoB;AAC5D,QAAI,qBAAqB,kBAAkB;AACzC,UAAI,MAAM,WAAW,GAAG;AACtB,cAAM,KAAK,IAAI,aAAa;AAC5B,WAAG,MAAM,IAAI,OAAO;AACpB,kBAAU,QAAQ,GAAG;AAAA,MACvB,OAAO;AACL,kBAAU,QAAQ;AAAA,MACpB;AACA,gBAAU,cAAc,IAAI,MAAM,QAAQ,CAAC;AAAA,IAC7C;AAAA,EACF;AAEA,MAAI,QAAQ,QAAQ,gBAAgB,GAAG;AACrC,UAAM,WAAW,OAAO;AACxB,WAAO,QAAQ,OAAO,OAA0B,YAA0B;AACxE,YAAM,WAAW,MAAM,SAAS,OAAO,OAAO;AAC9C,UAAI,UAAU,gBAAgB;AAC5B,cAAM,UAAU,MAAM,SAAS,KAAK;AACpC,eAAO,QAAQ;AACf,eAAO,sBAAsB,MAAM,SAAS,CAAC;AAC7C,eAAO,IAAI,SAAS,SAAS;AAAA,UAC3B,QAAQ,SAAS;AAAA,UACjB,YAAY,SAAS;AAAA,UACrB,SAAS,SAAS;AAAA,QACpB,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAAA,EACF,OAAO;AACL,WAAO,sBAAsB,MAAM,SAAS,CAAC;AAAA,EAC/C;AACF;AAEA,OAAO,SAAS,iBAAiB,YAAY,CAAC,MAAM;AAClD,QAAM,SAAS,EAAE,aAAa,EAAE,CAAC;AACjC,QAAM,UAAU,OAAO,QAAQ,uBAAuB;AACtD,MAAI,CAAC,WAAW,OAAO,eAAe,OAAO,YAAY,QAAQ,QAAQ,MAAM,GAAI;AACnF,OAAK,EAAE,cAAc,OAAO,UAAU,KAAK,GAAG;AAC5C,MAAE,gBAAgB;AAClB,MAAE,eAAe;AACjB,MAAE,aAAa,aAAa;AAAA,EAC9B;AACF,CAAC;AAED,OAAO,SAAS,iBAAiB,QAAQ,CAAC,MAAM;AAC9C,QAAM,SAAS,EAAE,aAAa,EAAE,CAAC;AACjC,MAAI,aAAa,GAAG,MAAM;AAC1B,MAAI,CAAC,OAAO,YAAa;AACzB,MAAI,OAAO,YAAY,QAAQ,QAAQ,MAAM,GAAI;AACjD,QAAM,UAAU,OAAO,QAAQ,uBAAuB;AACtD,MAAI,CAAC,QAAS;AACd,OAAK,EAAE,cAAc,OAAO,UAAU,KAAK,GAAG;AAC5C,MAAE,gBAAgB;AAClB,MAAE,eAAe;AACjB,qBAAiB,SAAS,EAAE,aAAa,KAAK;AAAA,EAChD;AACF,CAAC;AAED,OAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,MAAI,cAAc,CAAC;AACnB,QAAM,QAAQ,EAAE,eAAe;AAC/B,MAAI,CAAC,iBAAiB,KAAK,EAAG;AAC9B,QAAM,qBAAqB,CAAC,GAAG,UAAU,EAAE,iBAAiB,uBAAuB,CAAC,EACjF,OAAO,CAACE,QAAO,mBAAmBA,GAAE,CAAC,EACrC,KAAK,CAAC,GAAG,MAAM,OAAO,iBAAiB,CAAC,CAAC,IAAI,OAAO,iBAAiB,CAAC,CAAC,CAAC;AAC3E,MAAI,CAAC,mBAAmB,OAAQ;AAChC,QAAM,sBAAsB,mBAAmB,OAAO,CAACA,QAAOA,IAAG,cAAc,kBAAkB,CAAC,IAAI,CAAC;AACvG,mBAAiB,uBAAuB,mBAAmB,mBAAmB,SAAS,CAAC,GAAG,KAAK;AAClG,CAAC;;;AC7CD,OAAO,UAAU,SAAS,SAAS,OAAqB,MAA+C;AACrG,MAAI,aAAa;AACjB,WAAS,UAAU,GAAG,UAAU,KAAK,QAAQ,UAAW,eAAc,KAAK,OAAO;AAClF,aAAW,OAAO,MAAM;AACtB,UAAM,YAAY,IAAI,GAAG;AACzB,iBAAa,WAAW,QAAQ,IAAI,OAAO,WAAW,GAAG,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC;AAAA,EAC/E;AACA,SAAO;AACT;AAEA,IAAI,cAAwB,CAAC;AAC7B,IAAI,eAAyB,CAAC;AAC9B,IAAI,eAAyB,CAAC;AAC9B,IAAI,eAAyB,CAAC;AAC9B,IAAI,kBAA4B,CAAC;AACjC,IAAI,oBAA8B,CAAC;AAE5B,SAAS,oBAAoB;AAClC,QAAMC,MAAK,UAAU,EAAE,eAAe,eAAe,KAAK,UAAU,EAAE,eAAe,uBAAuB,KAAK,UAAU,EAAE,eAAe,gBAAgB;AAC5J,MAAI,CAACA,IAAI;AACT,EAAAA,IAAG,YAAY;AACjB;AACA,OAAO,oBAAoB;AAE3B,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCzB,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAc1B,eAAsB,eAAe,IAAI;AACvC,MAAI,qBAAqB,EAAE;AAC3B,QAAMA,MAAK,UAAU,EAAE,eAAe,eAAe,KAAK,UAAU,EAAE,eAAe,uBAAuB,KAAK,UAAU,EAAE,eAAe,gBAAgB;AAC5J,MAAI,CAACA,IAAI;AACT,QAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,qBAAqB,UAAU,EAAE,CAAC,EAAE;AAC7E,MAAI,CAAC,OAAO,IAAI,WAAW,KAAK;AAC9B,UAAM,sBAAsB,EAAE,WAAW,MAAM,IAAI,SAAS,SAAS,EAAE;AACvE;AAAA,EACF;AACA,QAAM,YAAY,MAAM,IAAI,KAAK;AACjC,MAAI,uBAAuB,SAAS;AACpC,MAAI,CAAC,aAAa,UAAU,WAAW,EAAG;AAC1C,QAAM,OAAY,UAAU,CAAC;AAE7B,QAAM,eAAe,KAAK,SAAS,IAAI,CAAC,MAAoB,kBAAkB,OAAO;AAAA,IACnF,KAAK,kDAAkD,EAAE,MAAM,CAAC,GAAG,GAAG,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,KAAK,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,EAAE,KAAK,EAAE,EAAE;AAAA,IACtJ,MAAM,EAAE,QAAQ;AAAA,IAChB,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ;AAAA,IAC1B,MAAM,EAAE,QAAQ;AAAA,IAChB,OAAQ,IAAI,KAAK,EAAE,KAAK,EAAG,mBAAmB;AAAA,IAC9C,cAAc,EAAE,gBAAgB;AAAA,IAChC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,OAAO,MAAM,QAAQ,CAAC,CAAC,QAAQ;AAAA,IAC9E,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,GAAG,8CAA8C,EAAE,MAAM,CAAC,GAAG,QAAQ,SAAS;AAAA,IAC3G,MAAM,EAAE,QAAQ;AAAA,EAClB,CAAC,CAAC,EAAE,KAAK,EAAE;AACX,QAAMC,OAAM,YAAY,KAAK,GAAG,+CAA+C,KAAK,QAAQ,SAAS;AACrG,QAAM,UAAU,qCAAqC,KAAK,OAAO,+CAA+C,KAAK,WAAW,SAAS;AACzI,QAAM,SAAS,KAAK,SAAS,IAAI,CAAC,MAAoB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAkB,EAAE,GAAG;AACnG,QAAM,YAAY,iBAAiB,OAAO;AAAA,IACxC,MAAMA;AAAA,IACN,MAAM,KAAK,QAAQ;AAAA,IACnB,MAAM,KAAK,MAAM,KAAK,IAAI,KAAK;AAAA,IAC/B,MAAM,KAAK,OAAO,QAAQ;AAAA,IAC1B,OAAO,KAAK,OAAO,SAAS,KAAK;AAAA,IACjC,cAAc,KAAK,gBAAgB;AAAA,IACnC,WAAW,KAAK,WAAW,SAAS,KAAK;AAAA,IACzC;AAAA,IACA,MAAM,KAAK,QAAQ;AAAA,IACnB,OAAO,OAAO,SAAS,IAAI,OAAO,CAAC,IAAI;AAAA,IACvC,UAAU,gBAAgB;AAAA,EAC5B,CAAC;AACD,EAAAF,IAAG,YAAY;AACjB;AACA,OAAO,iBAAiB;AAEjB,SAAS,mBAAmBE,MAAK,MAAM,MAAM,MAAM,SAAS,WAAW;AAC5E,MAAI,sBAAsB,EAAE,KAAAA,MAAK,MAAM,MAAM,MAAM,SAAS,UAAU,CAAC;AACvE,gBAAc,CAACA,IAAG;AAClB,iBAAe,CAAC,IAAI;AACpB,iBAAe,CAAC,IAAI;AACpB,iBAAe,CAAC,QAAQ,EAAE;AAC1B,oBAAkB,CAAC,WAAW,CAAC;AAC/B,sBAAoB,CAAC,aAAa,CAAC;AACnC,QAAM,mBAAmB,UAAU,EAAE,eAAe,sBAAsB;AAC1E,MAAI,iBAAkB,kBAAiB,MAAM;AAC/C;AACA,OAAO,qBAAqB;AAErB,SAAS,sBAAsB,KAAK;AACzC,MAAI,yBAAyB,GAAG;AAChC,QAAM,QAAQ,UAAU,EAAE,eAAe,sBAAsB;AAC/D,MAAI,CAAC,MAAO;AACZ,QAAM,WAAW,MAAM,iBAAiB,IAAI;AAC5C,gBAAc,CAAC;AACf,iBAAe,CAAC;AAChB,iBAAe,CAAC;AAChB,iBAAe,CAAC;AAChB,oBAAkB,CAAC;AACnB,sBAAoB,CAAC;AACrB,aAAW,WAAW,UAAU;AAC9B,UAAM,SAAS,QAAQ,cAAc,qBAAqB,GAAG,aAAa,SAAS,GAAG,MAAM,gFAAgF;AAC5K,QAAI,CAAC,UAAU,OAAO,SAAS,EAAG;AAClC,gBAAY,KAAK,OAAO,CAAC,CAAC;AAC1B,iBAAa,KAAK,OAAO,CAAC,CAAC;AAC3B,iBAAa,KAAK,OAAO,CAAC,CAAC;AAC3B,iBAAa,KAAK,OAAO,CAAC,CAAC;AAC3B,oBAAgB,KAAK,SAAS,OAAO,CAAC,GAAG,EAAE,CAAC;AAC5C,sBAAkB,KAAK,SAAS,OAAO,CAAC,GAAG,EAAE,CAAC;AAAA,EAChD;AACA,QAAM,mBAAmB,UAAU,EAAE,eAAe,sBAAsB;AAC1E,MAAI,iBAAkB,kBAAiB,MAAM;AAC/C;AACA,OAAO,wBAAwB;AAExB,SAAS,mBAAmB,UAAU,WAAW,WAAW,WAAW,KAAK,KAAK,WAAW,YAAY,WAAW;AACxH,MAAI,sBAAsB,EAAE,UAAU,WAAW,WAAW,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC;AACxG,QAAMF,MAAK,UAAU,EAAE,eAAe,uBAAuB,KAAK,UAAU,EAAE,eAAe,gBAAgB;AAC7G,QAAM,cAAcA,KAAI,aAAa;AACrC,SAAO,CAAC,aAAa,cAAc,cAAc,cAAc,iBAAiB,mBAAmB,WAAW,YAAY,WAAW;AACvI;AACA,OAAO,qBAAqB;AAE5B,IAAI,0BAA0B;AAEvB,SAAS,uBAAuB;AACrC,MAAI,wBAAyB;AAC7B,QAAM,WAAW,UAAU,EAAE,cAAc,6BAA6B;AACxE,QAAM,QAAQ,UAAU,EAAE,cAAc,4BAA4B;AACpE,MAAI,CAAC,YAAY,CAAC,MAAO;AACzB,4BAA0B;AAC1B,WAAS,iBAAiB,SAAS,MAAM;AACvC,UAAM,QAAQ,iBAAiB,GAAG,UAAU,OAAO,iBAAiB,CAAC,CAAC,SAAS,MAAM,KAAK,CAAC;AAAA,EAC7F,CAAC;AACD,QAAM,iBAAiB,SAAS,MAAM;AACpC,aAAS,QAAQ,iBAAiB,GAAG,UAAU,OAAO,iBAAiB,CAAC,CAAC,MAAM,MAAM,KAAK,CAAC;AAAA,EAC7F,CAAC;AACH;AAEA,WAAW,oBAAoB;;;AC7N/B,IAAM,UAAkC;AAAA,EACtC,MAAM;AAAA,EACN,wBAAwB;AAAA,EACxB,+BAA+B;AAAA,EAC/B,sBAAsB;AAAA,EACtB,gCAAgC;AAAA,EAChC,mCAAmC;AAAA,EACnC,kCAAkC;AAAA,EAClC,0BAA0B;AAAA,EAC1B,+BAA+B;AAAA,EAC/B,0CAA0C;AAAA,EAC1C,mCAAmC;AACrC;AAEO,SAAS,gBAAgB,QAA0B;AACxD,QAAM,MAAM,OAAO,WAAW,YAAY,QAAQ,QAAQ,OAAO,QAAQ;AACzE,QAAMG,OAAM,QAAQ,GAAa;AACjC,MAAI,mBAAmB,QAAQA,IAAG;AAClC,MAAIA,KAAK,QAAO,KAAKA,MAAK,QAAQ;AACpC;AAEA,OAAO,kBAAkB;;;AChBzB,IAAM,SAAN,MAAa;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,KAAa,OAAe,KAAa,OAAe,OAAe,MAAc;AAC/F,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,SAAS,KAAK,MAAM,KAAK,SAAS,KAAK,QAAQ,KAAK,IAAI;AAC7D,SAAK,QAAQ,KAAK,MAAM,KAAK,SAAS,KAAK,MAAM,KAAK,MAAM;AAC5D,SAAK,WAAW,KAAK,MAAM,OAAQ,KAAK,MAAM,KAAK,MAAM,IAAI;AAC7D,SAAK,QAAQ,QAAQ,KAAK,KAAK;AAAA,YAAe,KAAK,QAAQ;AAAA,SAAa,IAAI,KAAK,MAAO,KAAK,KAAK,EAAE,eAAe,CAAC;AAAA,OAAU,IAAI,KAAK,MAAO,KAAK,GAAG,EAAE,eAAe,CAAC;AAAA,EAC1K;AAAA,EAEA,eAAuB;AACrB,WAAO,KAAK,MAAM,OAAQ,KAAK,MAAM,KAAK,MAAM,IAAI;AAAA,EACtD;AACF;AAEO,IAAM,YAAN,MAAgB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,WAAwB,MAAuB;AACzD,SAAK,MAAM,KAAK,MAAM,KAAK,CAAC,EAAE,KAAK;AACnC,SAAK,MAAM,KAAK,MAAM,KAAK,KAAK,SAAS,CAAC,EAAE,MAAM,GAAG;AACrD,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,UAAM,MAAM,UAAU,sBAAsB;AAC5C,UAAM,QAAQ,IAAI,QAAQ;AAC1B,SAAK,QAAQ,SAAS,KAAK,MAAM,KAAK;AAGtC,QAAI,OAAiB,CAAC;AACtB,aAAS,IAAI,GAAG,KAAK,KAAK,MAAM,KAAK,KAAK,IAAK,MAAK,KAAK,0BAA0B,KAAK,KAAK,iBAAiB;AAC9G,cAAU,YAAY;AACtB,cAAU,YAAY,uBAAuB,KAAK,KAAK,EAAE,CAAC;AAG1D,WAAO,CAAC;AACR,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,IAAI,GAAG,KAAK;AAChD,YAAM,MAAM,KAAK,KAAK,CAAC;AACvB,YAAM,SAAS,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI;AACvF,YAAM,OAAO;AAAA,QACX,gBAAgB,OAAO,KAAK,yBAAyB,OAAO,MAAM,cAAc,OAAO,KAAK,6BAA6B,OAAO,IAAI,oBAAoB,OAAO,QAAQ;AAAA,QACvK,6BAA6B,OAAO,KAAK,KAAK,OAAO,QAAQ;AAAA,QAC7D,8BAA8B,OAAO,KAAK,KAAK,OAAO,KAAK;AAAA,MAC7D,EAAE,KAAK,EAAE;AACT,WAAK,KAAK,OAAO,IAAI,OAAO;AAAA,IAC9B;AACA,SAAK,UAAU,aAAa,oBAAoB,KAAK,KAAK,EAAE,CAAC;AAAA,EAC/D;AACF;;;ACtDA,IAAM,iBAAiB,CAAC,aAAa,OAAO,IAAI;AAChD,IAAM,UAAU,CAAC,QAAQ,MAAM;AAE/B,eAAsB,iBAAiB;AACrC,MAAI,gBAAgB;AACpB,EAAAC,WAAU,GAAG,OAAO,GAAG,YAAY,EAAE,UAAU,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ;AACpE,QAAI,CAAC,IAAK;AACV,UAAM,WAAW,SAAS,eAAe,kBAAkB;AAC3D,UAAM,QAAQ,SAAS,eAAe,eAAe;AACrD,QAAI,CAAC,YAAY,CAAC,MAAO;AACzB,aAAS,YAAY;AACrB,QAAI,KAAK,EAAE,KAAK,CAAC,YAAY;AAC3B,UAAI,OAAO;AACX,UAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ;AACzB,cAAM,YAAY;AAClB;AAAA,MACF;AAGA,UAAI,OAAO;AACX,iBAAW,SAAS,MAAM;AACxB,cAAMC,MAAK,IAAI,KAAK,MAAO,MAAM,SAAS,EAAE,eAAe;AAC3D,cAAM,WAAW,MAAM,WAAY,MAAM,SAAU,QAAQ,CAAC,IAAI;AAChE,cAAM,UAAU,MAAM,QAAQ,KAAK,IAAI;AACvC,gBAAQ,WAAWA,GAAE,YAAY,MAAM,EAAE,YAAY,MAAM,GAAG,YAAY,MAAM,EAAE,YAAY,QAAQ,YAAY,OAAO;AAAA,MAC3H;AACA,cAAQ;AACR,YAAM,YAAY;AAGlB,UAAI,WAAW;AACf,eAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AACzC,cAAM,IAAI,KAAK,CAAC;AAChB,aAAK,EAAE,QAAQ,aAAa,EAAE,QAAQ,UAAU,EAAE,QAAQ,aAAa,EAAE,QAAQ,YAAa,EAAE,OAAO,SAAU;AAC/G,qBAAW;AACX;AAAA,QACF;AAAA,MACF;AACA,UAAI,YAAY,EAAG,QAAO,KAAK,MAAM,QAAQ;AAG7C,YAAM,KAAsB,CAAC;AAC7B,iBAAW,SAAS,MAAM;AACxB,YAAI,MAAM,OAAO,SAAS;AACxB,gBAAM,QAAQ,MAAM;AACpB,gBAAM,WAAW,KAAK,KAAK,CAAC,MAAO,EAAE,OAAO,MAAM,MAAM,EAAE,OAAO,KAAM;AACvE,gBAAM,MAAM,UAAU,aAAa,KAAK,KAAK,SAAS,CAAC,EAAE;AACzD,cAAI,MAAM,QAAQ,KAAM;AACxB,cAAI,eAAe,KAAK,CAAC,SAAS,MAAM,IAAI,YAAY,EAAE,WAAW,IAAI,CAAC,EAAG,OAAM,OAAO;AAAA,mBACjF,QAAQ,KAAK,CAAC,SAAS,MAAM,IAAI,YAAY,EAAE,WAAW,IAAI,CAAC,EAAG,OAAM,OAAO;AAAA,cACnF,OAAM,OAAO;AAClB,cAAI,SAAS,IAAK,IAAG,KAAK,EAAE,OAAO,KAAK,OAAO,MAAM,KAAK,MAAM,MAAM,KAAK,CAAC;AAAA,QAC9E;AAAA,MACF;AACA,UAAI,CAAC,GAAG,OAAQ;AAEhB,UAAI,UAAU,UAAU,EAAE;AAAA,IAC5B,CAAC;AAAA,EACH,CAAC;AACH;AAEA,OAAO,iBAAiB;;;AC9ExB,IAAM,QAAQ,CAAC,UAAU,UAAU,UAAU,QAAQ,SAAS,QAAQ,OAAO;AAuB7E,SAAS,WAAW,MAAc,MAAuB;AAEvD,QAAM,YAAY,KAAK,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,MAAM,CAAC;AACjE,QAAM,WAAW,KAAK;AACtB,QAAM,aAAa,KAAK,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,QAAQ,CAAC;AACpE,QAAM,eAAe,KAAK,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,UAAU,CAAC;AACxE,MAAI,QAAQ,cAAc,QAAQ;AAAA,eAAkB,aAAa,OAAO,OAAO,eAAe,QAAW,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC,CAAC;AAAA,eAAqB,UAAU;AAAA,iBAAoB,YAAY;AAAA;AAC/N,MAAI,OAAO,cAAc,KAAK,KAAK,IAAI;AACvC,aAAW,SAAS,MAAM;AACxB,QAAI,MAAM,SAAS,EAAG;AACtB,UAAM,QAAQ,MAAM,QAAQ,OAAO,OAAO,eAAe,QAAW,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC,IAAI;AAC9H,UAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,KAAK,MAAM,QAAQ,GAAI,EAAE,eAAe,IAAI;AAChF,YAAQ,SAAS,MAAM,IAAI;AAAA,QAAW,MAAM,IAAI;AAAA,QAAW,IAAI;AAAA,iBAAoB,KAAK;AAAA;AACxF,aAAS,YAAY,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,kBAAqB,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA;AACxF,aAAS,eAAe,MAAM,QAAQ;AAAA,SAAY,MAAM,MAAM;AAAA,YAAe,MAAM,SAAS;AAAA,UAAa,MAAM,OAAO;AAAA;AACtH,aAAS,iBAAiB,MAAM,KAAK,QAAQ,CAAC,CAAC;AAC/C,UAAM,OAAO,KAAK,MAAO,MAAM,OAAO,YAAa,GAAG;AACtD,UAAM,QAAQ,OAAO,IAAI;AACzB,UAAM,MAAM,yCAAyC,KAAK,IAAI,IAAI,kBAAkB,IAAI;AACxF,YAAQ,cAAc,KAAK,gBAAgB,GAAG,KAAK,MAAM,IAAI,YAAY,IAAI,YAAY,KAAK;AAAA,EAChG;AACA,UAAQ;AACR,SAAO;AACT;AAEA,eAAsB,eAAe,cAAwB;AAC3D,MAAI,kBAAkB,YAAY;AAClC,EAAAC,WAAU,GAAG,OAAO,GAAG,kBAAkB,aAAa,KAAK,GAAG,CAAC,IAAI,EAAE,UAAU,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ;AACpG,QAAI,CAAC,IAAK;AACV,UAAM,WAAW,SAAS,eAAe,kBAAkB;AAC3D,UAAM,QAAQ,SAAS,eAAe,eAAe;AACrD,QAAI,CAAC,YAAY,CAAC,MAAO;AACzB,aAAS,YAAY;AACrB,QAAI,KAAK,EAAE,KAAK,CAAC,YAAY;AAC3B,YAAM,OAAO;AACb,UAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ;AACzB,cAAM,YAAY;AAClB;AAAA,MACF;AACA,YAAM,YAAY;AAClB,UAAI,aAAa,SAAS,KAAK,EAAG,gBAAe;AACjD,iBAAW,QAAQ,cAAc;AAC/B,cAAM,WAAW,KAAK,OAAO,CAAC,UAAU,MAAM,SAAS,IAAI;AAC3D,YAAI,SAAS,SAAS,EAAG,OAAM,aAAa,WAAW,MAAM,QAAQ;AAAA,MACvE;AAAA,IAqBF,CAAC;AAAA,EACH,CAAC;AACH;AAEA,OAAO,iBAAiB;;;AC7FxB,IAAI,eAA8B;AAClC,IAAI,gBAA+B;AACnC,IAAI;AAEJ,SAAS,gBAAgB,GAAU,SAAkB,UAAyB;AAC5E,QAAM,EAAE,OAAO,IAAI;AACnB,MAAI,EAAE,kBAAkB,kBAAmB;AAC3C,MAAI,QAAS,gBAAe,OAAO,OAAO,KAAK;AAC/C,MAAI,SAAU,iBAAgB,OAAO,OAAO,KAAK;AACjD,QAAM,aAAa,UAAU,EAAE,cAAc,cAAc;AAC3D,MAAI,EAAE,sBAAsB,aAAc;AAC1C,QAAM,YAAY,WAAW,MAAM,YAAY;AAC/C,MAAI,CAAC,UAAW;AAChB,MAAI,gBAAyC;AAC7C,QAAM,WAAW,cAAc,cAAc;AAC7C,MAAI,aAAa,EAAG,iBAAgB,UAAU,EAAE,cAAc,2CAA2C;AAAA,WAChG,aAAa,EAAG,iBAAgB,UAAU,EAAE,cAAc,4CAA4C;AAAA,WACtG,aAAa,EAAG,iBAAgB,UAAU,EAAE,cAAc,yCAAyC;AAAA,WACnG,aAAa,EAAG,iBAAgB,UAAU,EAAE,cAAc,uCAAuC;AAE1G,MAAI,iBAAiB,gBAAgB,eAAe;AAClD,QAAI,gBAAgB,UAAU,EAAE,cAAc,iBAAiB;AAC/D,QAAI,CAAC,eAAe;AAClB,sBAAgB,SAAS,cAAc,KAAK;AAC5C,oBAAc,KAAK;AACnB,gBAAU,EAAE,YAAY,aAAa;AAAA,IACvC;AAEA,UAAM,iBAAiB,cAAc,sBAAsB;AAC3D,UAAM,gBAAgB,KAAK,IAAI,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,aAAa;AAC/I,UAAM,UAAU,cAAc,eAAe;AAC7C,UAAM,UAAU,cAAc,gBAAgB;AAC9C,UAAM,gBAAiB,eAAe,MAAM,OAAO;AACnD,UAAM,iBAAkB,eAAe,OAAO,OAAO;AACrD,UAAM,oBAAoB,gBAAiB,cAAc,eAAe;AACxE,UAAM,oBAAoB,iBAAkB,cAAc,cAAc;AACxE,UAAM,UAAU,KAAK,IAAI,UAAU,cAAc,UAAU,aAAa;AACxE,UAAM,YAAY,eAAe;AACjC,UAAM,YAAY,gBAAgB;AAClC,UAAM,YAAY,oBAAqB,YAAY;AACnD,UAAM,aAAa,oBAAqB,YAAY;AACpD,UAAM,cAAc;AACpB,UAAM,eAAe;AACrB,kBAAc,MAAM,MAAM,GAAG,SAAS;AACtC,kBAAc,MAAM,OAAO,GAAG,UAAU;AACxC,kBAAc,MAAM,QAAQ,GAAG,WAAW;AAC1C,kBAAc,MAAM,SAAS,GAAG,YAAY;AAE5C,QAAI,eAAgB,cAAa,cAAc;AAC/C,qBAAiB,WAAW,MAAM;AAAE,oBAAc,MAAM,UAAU;AAAA,IAAQ,GAAG,GAAI;AACjF,kBAAc,MAAM,UAAU;AAAA,EAChC;AACF;AAEO,SAAS,sBAA4B;AAC1C,QAAM,gBAAgB,UAAU,EAAE,cAAc,iBAAiB;AACjE,MAAI,yBAAyB,YAAa,eAAc,MAAM,UAAU;AACxE,QAAM,aAAa,UAAU,EAAE,cAAc,cAAc;AAC3D,MAAI,sBAAsB,aAAa;AACrC,UAAM,YAAY,WAAW,MAAM,YAAY;AAC/C,QAAI,WAAW;AACb,YAAM,SAAS,UAAU,EAAE,iBAAiB,OAAO;AACnD,aAAO,QAAQ,CAAC,MAAM;AACpB,YAAI,EAAE,aAAa,qBAAqB,EAAE,EAAE,yBAAyB,aAAc;AACnF,cAAM,UAAU,EAAE,cAAc,OAAO;AACvC,cAAM,WAAW,EAAE,cAAc,OAAO;AACxC,aAAK,WAAW,aAAa,CAAC,EAAE,UAAU,SAAS,aAAa,GAAG;AACjE,YAAE,iBAAiB,SAAS,CAAC,QAAQ;AAAE,4BAAgB,KAAK,SAAS,QAAQ;AAAA,UAAG,CAAC;AACjF,YAAE,UAAU,IAAI,aAAa;AAAA,QAC/B;AACA,YAAI,QAAS,gBAAe,OAAO,EAAE,KAAK;AAC1C,YAAI,SAAU,iBAAgB,OAAO,EAAE,KAAK;AAAA,MAC9C,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,gBAAgB,mBAAmB;;;ACxEnC,IAAM,eAAe;AACrB,IAAM,cAAc;AACpB,IAAM,SAAS,oBAAI,QAAgD;AACnE,IAAM,OAAO,oBAAI,QAAiB;AAElC,SAAS,QAAQ,IAAqC;AACpD,MAAI,CAAC,MAAM,OAAO,KAAM,QAAO;AAC/B,QAAM,QAAQ,GAAG,MAAM,GAAG;AAC1B,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,IAAI,SAAS,MAAM,CAAC,GAAG,EAAE;AAC/B,QAAM,IAAI,SAAS,MAAM,CAAC,GAAG,EAAE;AAC/B,SAAQ,IAAI,KAAK,IAAI,IAAK,CAAC,GAAG,CAAC,IAAI;AACrC;AAEA,SAAS,YAAY,OAAyC;AAC5D,QAAM,MAAM,MAAM,cAAc,oBAAoB,KAAK,MAAM,cAAc,OAAO;AACpF,SAAO,eAAe,mBAAmB,MAAM;AACjD;AAEA,SAAS,UAAU,OAAwB;AACzC,QAAM,MAAM,YAAY,KAAK;AAC7B,SAAO,MAAM,OAAO,IAAI,KAAK,IAAI;AACnC;AAEA,SAAS,WAAW,OAAgB,KAAmB;AACrD,QAAM,MAAM,YAAY,KAAK;AAC7B,MAAI,CAAC,IAAK;AACV,QAAM,OAAO,OAAO,IAAI,IAAI,KAAK;AACjC,QAAM,MAAM,IAAI,QAAQ,KAAK,OAAO,IAAI,GAAG,IAAI;AAC/C,QAAM,MAAM,IAAI,QAAQ,KAAK,OAAO,IAAI,GAAG,IAAI;AAC/C,QAAM,QAAQ,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,MAAM,IAAI,IAAI,IAAI,CAAC;AACxE,MAAI,UAAU,OAAO,IAAI,KAAK,EAAG;AACjC,QAAM,iBAAiB,OAAO,EAAE,QAAQ,CAACC,QAAO;AAC9C,QAAI,EAAEA,eAAc,kBAAmB;AACvC,IAAAA,IAAG,QAAQ,OAAO,KAAK;AACvB,UAAM,IAAI,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC;AAC9C,WAAO,eAAe,GAAG,UAAU,EAAE,OAAOA,IAAG,CAAC;AAChD,IAAAA,IAAG,cAAc,CAAC;AAAA,EACpB,CAAC;AACH;AAEA,SAAS,QAAQ,MAAuB;AACtC,QAAM,MAAM,KAAK,cAAc,OAAO;AACtC,SAAO,eAAe,mBAAmB,IAAI,QAAQ;AACvD;AAEA,SAAS,OAAO,MAA2D;AACzE,MAAI,YAA4B,KAAK;AACrC,WAAS,IAAI,GAAG,IAAI,KAAK,WAAW,KAAK;AACvC,UAAM,QAAQ,UAAU,cAAc,gBAAgB;AACtD,UAAM,SAAS,UAAU,cAAc,iBAAiB;AACxD,QAAI,SAAS,OAAQ,QAAO,EAAE,OAAO,OAAO;AAC5C,gBAAY,UAAU;AAAA,EACxB;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAe,QAAgB,oBAAoB,GAAkB;AAClG,QAAM,kBAAkB;AAAA,IACtB,EAAE,OAAO,OAAO,OAAO,IAAI,EAAE;AAAA,IAC7B,EAAE,OAAO,OAAO,OAAO,IAAI,EAAE;AAAA,IAC7B,EAAE,OAAO,OAAO,OAAO,IAAI,EAAE;AAAA,IAC7B,EAAE,OAAO,QAAQ,OAAO,KAAK,EAAE;AAAA,IAC/B,EAAE,OAAO,SAAS,OAAO,KAAK,GAAG;AAAA,IACjC,EAAE,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA;AAAA,IAChC,EAAE,OAAO,OAAO,OAAO,IAAI,EAAE;AAAA,IAC7B,EAAE,OAAO,OAAO,OAAO,IAAI,EAAE;AAAA,IAC7B,EAAE,OAAO,QAAQ,OAAO,IAAI,GAAG;AAAA,IAC/B,EAAE,OAAO,SAAS,OAAO,KAAK,GAAG;AAAA,IACjC,EAAE,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA,EAClC;AACA,QAAM,cAAc,QAAQ;AAC5B,QAAM,UAAU,gBAAgB,OAAO,CAAC,MAAM,SAAU,KAAK,IAAI,KAAK,QAAQ,WAAW,IAAI,KAAK,IAAI,KAAK,QAAQ,WAAW,IAAI,OAAO,IAAK;AAC9I,QAAM,gBAAgB,SAAS,QAAQ;AACvC,QAAM,iBAAiB,QAAQ,QAAQ;AACvC,QAAM,YAAY,KAAK,IAAI,QAAQ,aAAa;AAChD,QAAM,aAAa,KAAK,IAAI,SAAS,cAAc;AACnD,MAAI,aAAa,qBAAqB,cAAc,kBAAmB,QAAO,QAAQ;AACtF,QAAM,SAAS,QAAQ,QAAQ,QAAQ,CAAC;AACxC,SAAO,GAAG,KAAK;AACjB;AAEA,SAAS,OAAO,MAAe,QAAkC;AAC/D,QAAM,KAAK,QAAQ,QAAQ,IAAI,CAAC;AAChC,QAAM,OAAO,OAAO,IAAI;AACxB,MAAI,CAAC,KAAM;AACX,MAAI,IAAI;AACN,UAAM,CAAC,IAAI,EAAE,IAAI;AACjB,SAAK,IAAI,IAAI;AACb,QAAI,WAAW,SAAU,YAAW,KAAK,OAAQ,UAAU,KAAK,MAAM,IAAI,KAAM,EAAE;AAAA,QAC7E,YAAW,KAAK,QAAS,UAAU,KAAK,KAAK,IAAI,KAAM,EAAE;AAAA,EAChE;AACA,QAAM,OAAO,KAAK,cAAc,MAAM;AACtC,MAAI,KAAM,MAAK,YAAY,sBAAsB,UAAU,KAAK,KAAK,GAAG,UAAU,KAAK,MAAM,CAAC;AAC9F,OAAK,OAAO,IAAI;AAClB;AAEA,SAAS,SAAS,MAAe,QAA4BC,QAAqB;AAChF,MAAI,KAAK,IAAI,IAAI,EAAG;AACpB,eAAa,OAAO,IAAI,IAAI,CAAC;AAC7B,SAAO,IAAI,MAAM,WAAW,MAAM,OAAO,MAAM,MAAM,GAAGA,MAAK,CAAC;AAChE;AAEA,SAAS,MAAM,MAAe,QAAkC;AAC9D,MAAI,KAAK,IAAI,IAAI,EAAG;AACpB,eAAa,OAAO,IAAI,IAAI,CAAC;AAC7B,SAAO,MAAM,MAAM;AACrB;AAEA,SAAS,KAAK,MAAe,OAAgB,QAAkC;AAC7E,QAAM,iBAAiB,OAAO,EAAE,QAAQ,CAACD,QAAO;AAC9C,QAAI,EAAEA,eAAc,qBAAqBA,IAAG,UAAU,SAAS,eAAe,EAAG;AACjF,IAAAA,IAAG,UAAU,IAAI,eAAe;AAChC,IAAAA,IAAG,iBAAiB,SAAS,MAAM,SAAS,MAAM,QAAQ,YAAY,CAAC;AACvE,IAAAA,IAAG,iBAAiB,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC;AAAA,EACzD,CAAC;AACH;AAEO,SAAS,sBAA4B;AAC1C,YAAU,EAAE,iBAAiB,cAAc,EAAE,QAAQ,CAAC,SAAS;AAC7D,UAAM,OAAO,OAAO,IAAI;AACxB,QAAI,CAAC,KAAM;AACX,SAAK,MAAM,KAAK,OAAO,OAAO;AAC9B,SAAK,MAAM,KAAK,QAAQ,QAAQ;AAChC,SAAK,iBAAiB,MAAM,EAAE,QAAQ,CAACA,QAAO;AAC5C,UAAIA,IAAI,CAAAA,IAAG,YAAY;AAAA,IACzB,CAAC;AACD,SAAK,iBAAiB,OAAO,EAAE,QAAQ,CAACA,QAAO;AAC7C,UAAI,EAAEA,eAAc,qBAAqBA,IAAG,UAAU,SAAS,eAAe,EAAG;AACjF,MAAAA,IAAG,UAAU,IAAI,eAAe;AAChC,MAAAA,IAAG,iBAAiB,UAAU,MAAM,MAAM,MAAM,OAAO,CAAC;AACxD,MAAAA,IAAG,iBAAiB,SAAS,MAAM,SAAS,MAAM,SAAS,WAAW,CAAC;AAAA,IACzE,CAAC;AAAA,EACH,CAAC;AACH;AAEA,gBAAgB,mBAAmB;;;AC9I5B,SAAS,mBAAmBE,QAA4B;AAC7D,QAAM,SAAUA,OAAc,kBAAkBA,OAAM,aAAa,EAAE,CAAC;AACtE,MAAI,EAAE,kBAAkB,qBAAsB;AAC9C,MAAI,CAAC,OAAO,QAAQ,yDAAyD,EAAG;AAChF,MAAI,EAAEA,OAAM,WAAWA,OAAM,SAAU;AACvC,QAAM,SAASA,OAAM,QAAQ;AAC7B,QAAM,UAAUA,OAAM,QAAQ;AAC9B,MAAI,CAAC,UAAU,CAAC,QAAS;AACzB,MAAI,EAAE,eAAe,IAAI;AACzB,MAAI,EAAE,aAAa,IAAI;AACvB,MAAI,OAAO,OAAO;AAElB,WAAS,8BAA8B,MAAc,OAAwB;AAC3E,QAAI,mBAAmB,aAAc,QAAO;AAG5C,UAAM,SAAS,KAAK,UAAU,GAAG,cAAc;AAC/C,QAAI,cAAc,OAAO,YAAY,IAAI;AACzC,QAAI,gBAAgB,GAAI,QAAO;AAC/B,QAAI,mBAAmB,OAAO,YAAY,KAAK;AAC/C,WAAO,qBAAqB,MAAM,mBAAmB,aAAa;AAChE,oBAAc,OAAO,YAAY,MAAM,cAAc,CAAC;AACtD,yBAAmB,OAAO,YAAY,OAAO,mBAAmB,CAAC;AAAA,IACnE;AAGA,UAAM,QAAQ,KAAK,UAAU,cAAc;AAC3C,QAAI,aAAa,MAAM,QAAQ,KAAK;AACpC,QAAI,eAAe,GAAI,QAAO;AAC9B,QAAI,iBAAiB,MAAM,QAAQ,IAAI;AACvC,WAAO,mBAAmB,MAAM,aAAa,gBAAgB;AAC3D,mBAAa,MAAM,QAAQ,OAAO,aAAa,CAAC;AAChD,uBAAiB,MAAM,QAAQ,MAAM,iBAAiB,CAAC;AAAA,IACzD;AACA,QAAI,gBAAgB,MAAM,eAAe,GAAI,QAAO;AAGpD,UAAM,eAAe,KAAK,UAAU,cAAc,GAAG,iBAAiB,UAAU;AAChF,UAAM,YAAY,aAAa,YAAY,GAAG;AAC9C,qBAAiB,cAAc;AAC/B,mBAAe,iBAAiB;AAChC,WAAO,kBAAkB,gBAAgB,YAAY;AACrD,WAAO;AAAA,EACT;AAEA,WAAS,oBAA6B;AACpC,QAAI,mBAAmB,aAAc,QAAO;AAC5C,UAAM,aAAa,GAAG,OAAO,KAAK,kBAAkB;AAAA;AAEpD,WAAO,CAAC,WAAW,SAAS,KAAK,iBAAiB,CAAC,CAAC,KAAK,iBAAiB,EAAG;AAE7E,WAAO,CAAC,WAAW,SAAS,KAAK,YAAY,CAAC,KAAK,eAAe,KAAK,OAAQ;AAC/E,WAAO,kBAAkB,gBAAgB,YAAY;AACrD,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,8BAA8B,KAAK,GAAG,KAAK,CAAC,8BAA8B,KAAK,GAAG,EAAG,mBAAkB;AAC5G,EAAAA,OAAM,eAAe;AAErB,MAAI,iBAAiB;AACrB,MAAI,QAAQ,OAAO,KAAK;AAExB,MAAI,iBAAiB,KAAK,KAAK,iBAAiB,CAAC,MAAM,KAAK;AAC1D,qBAAiB;AACjB,YAAQ,OAAO,KAAK;AAAA,EACtB,WAAW,mBAAmB,KAAK,KAAK,iBAAiB,CAAC,MAAM,KAAK;AACnE,WAAO,eAAe,kBAAkB,KAAK,eAAe,CAAC,MAAM,IAAK,iBAAgB;AACxF,QAAI,mBAAmB,aAAc;AACrC,WAAO,GAAG,KAAK,MAAM,GAAG,cAAc,CAAC,IAAI,KAAK,MAAM,gBAAgB,YAAY,CAAC,QAAQ,KAAK,MAAM,YAAY,CAAC;AACnH,sBAAkB;AAClB,oBAAgB;AAAA,EAClB;AACA,QAAM,MAAM,KAAK,MAAM,eAAe,CAAC,EAAE,QAAQ,cAAc,IAAI;AACnE,MAAI,SAAc,WAAW,KAAK,MAAM,eAAe,GAAG,eAAe,IAAI,GAAG,CAAC;AACjF,MAAI,OAAO,MAAM,MAAM,EAAG;AAC1B,YAAU,SAAS,QAAQ,CAAC;AAC5B,WAAS,WAAW,OAAO,YAAY,EAAE,CAAC;AAC1C,MAAI,OAAO,MAAM,EAAE,WAAW,EAAG,WAAU;AAC3C,MAAI,mBAAmB,OAAO,WAAW,GAAG;AAC1C,WAAO,KAAK,MAAM,GAAG,iBAAiB,CAAC,IAAI,KAAK,MAAM,gBAAgB,YAAY,IAAI,KAAK,MAAM,eAAe,CAAC;AACjH;AACA;AAAA,EACF,OAAO;AACL,WAAO,KAAK,MAAM,GAAG,eAAe,CAAC,IAAI,SAAS,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC;AAAA,EACzF;AACA,SAAO,MAAM;AACb,SAAO,QAAQ;AACf,SAAO,iBAAiB;AACxB,SAAO,eAAe;AACtB,EAAAC,aAAY,MAAM;AACpB;AAEA,iBAAiB,WAAW,CAACD,WAAU,mBAAmBA,MAAK,CAAC;;;CC6G/D,SAASE,WAAUC,OAAMC,YAAW;AACrC,GAAC,SAAS,SAAS;AACf,QAAG,OAAO,WAAW,cAAc,OAAO,KAAK;AAC3C,aAAO,CAAC,QAAQ,GAAG,OAAO;AAAA,IAC9B,WAAW,UAAU,CAAC,OAAO,GAAG,WAAW;AACvC,cAAQ,MAAM;AAAA,IAClB;AAAA,EACJ,GACC,SAASC,IAAG;AACT;AAEA,QAAI,eAAe,CAAC,GAChB,aAAa,aAAa,UAAU,SAAS,UAAU,gBAAgB,iBACvE,QAAQ,UAAU,KAAK,KAAK,QAAQ,aAAa,cAAc,UAC/D,cAAc,SAAS,mBACvB,MAAM,KAAK,UAAU,UAAU,QAAQ,KAAK,KAAK,eAAe,YAChE,QAAQ,cAAc,gBAAgB,aAAa,SAAS,aAAa;AAK7E,kBAAc,WAAY;AACtB,aAAO;AAAA;AAAA,QAEH,QAAQ;AAAA,UACJ,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,UACX,uBAAuB;AAAA,UACvB,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,oBAAoB;AAAA,UACpB,kBAAkB;AAAA,UAClB,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB,eAAe;AAAA,UACf,eAAe;AAAA,UACf,oBAAoB;AAAA,UACpB,iBAAiB;AAAA,UACjB,uBAAuB;AAAA,UACvB,qBAAqB;AAAA,UACrB,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,oBAAoB;AAAA,QACxB;AAAA;AAAA,QAEA,MAAM;AAAA,UACF,WAAW;AAAA,UACX,oBAAoB;AAAA,UACpB,oBAAoB;AAAA,UACpB,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,cAAc;AAAA,UACd,WAAW;AAAA,UACX,gBAAgBD;AAAA,UAChB,gBAAgBA;AAAA,UAChB,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB,eAAeA;AAAA,UACf,eAAeA;AAAA,UACf,gBAAgBA;AAAA,UAChB,gBAAgBA;AAAA,UAChB,eAAe,IAAI,SAAS,yEAAyE;AAAA,QACzG;AAAA;AAAA,QAEA,KAAK;AAAA,UACD,UAAU;AAAA,UACV,aAAa;AAAA,UACb,iBAAiB;AAAA,YAAC;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA,YAC1D;AAAA,YAAW;AAAA,YAAW;AAAA,UAAS;AAAA,UACnC,WAAWA;AAAA,UACX,WAAWA;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,eAAeA;AAAA,UACf,eAAeA;AAAA,UACf,gBAAgB;AAAA,UAChB,UAAUA;AAAA,UACV,eAAe,IAAI,SAAS,6EAA6E;AAAA,QAC7G;AAAA;AAAA,QAEA,UAAU;AAAA,UACN,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,cAAc;AAAA,UACd,UAAU,CAAC;AAAA,UACX,eAAe,IAAI,SAAS,6DAA6D;AAAA,UACzF,qBAAqB,EAAE,KAAK,EAAE,MAAM,QAAQ,KAAK,QAAQ,KAAK,MAAM,EAAE;AAAA,QAC1E;AAAA;AAAA,QAEA,UAAU;AAAA,UACN,YAAY;AAAA,UACZ,gBAAgBA;AAAA,UAChB,gBAAgB;AAAA,UAChB,eAAeA;AAAA,UACf,eAAeA;AAAA,UACf,gBAAgB;AAAA,UAChB,eAAe,IAAI,SAAS,+BAA+B;AAAA,QAC/D;AAAA;AAAA,QAEA,QAAQ;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA;AAAA,UACb,kBAAkB;AAAA,UAClB,aAAa,CAAC,WAAW,WAAW,SAAS;AAAA,UAC7C,MAAMA;AAAA;AAAA,UACN,eAAe,IAAI,SAAS,iCAAiC;AAAA,UAC7D,qBAAqB,EAAE,QAAQ,EAAC,GAAG,SAAS,GAAG,eAAe,GAAG,SAAQ,EAAE;AAAA,QAC/E;AAAA;AAAA,QAEA,KAAK;AAAA,UACD,QAAQ;AAAA,UACR,aAAa;AAAA,YAAC;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA,YACtD;AAAA,YAAW;AAAA,YAAW;AAAA,UAAS;AAAA,UACnC,aAAa;AAAA,UACb,aAAa;AAAA,UACb,eAAe,IAAI,SAAS,0EAA0E;AAAA,QAC1G;AAAA;AAAA,QAEA,KAAK;AAAA,UACD,KAAK;AAAA,UACL,cAAc;AAAA,UACd,cAAc;AAAA,UACd,cAAc;AAAA,UACd,kBAAkB;AAAA,UAClB,kBAAkB;AAAA,UAClB,aAAa;AAAA,UACb,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,QAAQA;AAAA,UACR,aAAa;AAAA,UACb,eAAeA;AAAA,UACf,eAAeA;AAAA,UACf,eAAe,IAAI,SAAS,6BAA6B;AAAA,UACzD,2BAA2B;AAAA,UAC3B,qBAAqB,EAAE,QAAQ;AAAA,YAAE,IAAI;AAAA,YAAkB,KAAK;AAAA,YACxD,IAAI;AAAA,YAAkB,IAAI;AAAA,YAAgB,IAAI;AAAA,YAC9C,IAAI;AAAA,YAAgB,IAAI;AAAA,UAAe,EAAE;AAAA,QACjD;AAAA,MACJ;AAAA,IACJ;AAGA,oBAAgB;AA4BhB,kBAAc,WAAuD;AACjE,UAAI,OAAO;AACX,cAAQ,WAAY;AAChB,aAAK,KAAK,MAAM,MAAM,SAAS;AAAA,MACnC;AACA,UAAI,UAAU,SAAS,GAAG;AACtB,YAAI,UAAU,CAAC,GAAG;AACd,gBAAM,YAAYC,GAAE,OAAO,IAAI,UAAU,CAAC,EAAE,GAAG,UAAU,UAAU,SAAS,CAAC,CAAC;AAC9E,gBAAM,SAAS,UAAU,CAAC,EAAE;AAAA,QAChC,OAAO;AACH,gBAAM,YAAY,UAAU,UAAU,SAAS,CAAC;AAAA,QACpD;AACA,YAAI,UAAU,SAAS,GAAG;AACtB,iBAAO,MAAM,UAAU,MAAM,KAAK,WAAW,GAAG,EAAE;AAClD,eAAK,QAAQ,MAAM,SAAS;AAC5B,UAAAA,GAAE,OAAO,MAAMA,IAAG,IAAI;AAAA,QAC1B;AAAA,MACJ,OAAO;AACH,cAAM,YAAY,UAAU,CAAC;AAAA,MACjC;AACA,YAAM,UAAU,MAAM;AACtB,aAAO;AAAA,IACX;AAQA,IAAAA,GAAE,gBAAgB,WAAW,YAAY;AAAA,MACrC,KAAK;AAAA,MACL,QAAQ;AAAA,MAER,MAAM,SAAUC,SAAQ,QAAQ;AAC5B,aAAK,SAASA;AACd,aAAK,SAAS;AAAA,MAClB;AAAA,MAEA,QAAQ,SAAU,UAAU,SAAS,SAAS;AAC1C,YAAIC,QAAO,MACP,SAAS,UACT,OAAOC,QAAO,WAAW,YAAY;AACzC,eAAO,KAAK,OAAO,QAAQ,KAAK,KAAK,WAAY;AAC7C,cAAI;AACJ,UAAAA,SAAQ,UAAU,CAAC;AACnB,sBAAY,UAAU,CAAC;AACvB,kBAAQD,MAAK,OAAO,KAAKC,MAAK;AAC9B,cAAI,OAAO;AACP,mBAAO,MAAM,CAAC;AACd,YAAAA,SAAQ,MAAM,CAAC;AAAA,UACnB,OAAO;AACH,mBAAO;AAAA,UACX;AACA,uBAAa,OAAOA,MAAK;AACzB,cAAI,eAAeJ,YAAW;AAC1B,mBAAO;AAAA,UACX;AACA,cAAI,aAAa,WAAW,QAAQ,SAAS,GAAG;AAC5C,qBAAS,QAAQ,SAAS;AAC1B,gBAAI,OAAO,KAAK;AACZ,qBAAO,QAAQ,SAAS,EAAE,IAAI,UAAU,KAAK;AAAA,YACjD,OAAO;AACH,qBAAO,QAAQ,SAAS,EAAE,UAAU,KAAK;AAAA,YAC7C;AAAA,UACJ;AACA,cAAI,SAAS,UAAU,GAAG;AACtB,gBAAI,QAAQ,IAAI,iBAAiB,GAAG;AAChC,2BAAa,QAAQ,IAAI,iBAAiB,EAAE,UAAU;AAAA,YAC1D,OAAO;AACH,2BAAa;AAAA,gBAAa;AAAA,gBAAY;AAAA,gBAClC,QAAQ,IAAI,uBAAuB;AAAA,gBACnC,QAAQ,IAAI,qBAAqB;AAAA,gBACjC,QAAQ,IAAI,mBAAmB;AAAA,cAAC;AAAA,YACxC;AAAA,UACJ;AACA,iBAAO;AAAA,QACX,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAGD,IAAAC,GAAE,WAAW,SAASC,SAAQ,QAAQ;AAClC,aAAO,IAAI,SAASA,SAAQ,MAAM;AAAA,IACtC;AAEA,cAAU,SAAU,KAAK,KAAK,KAAK;AAC/B,UAAI,MAAM,KAAK;AACX,eAAO;AAAA,MACX;AACA,UAAI,MAAM,KAAK;AACX,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAEA,eAAW,SAAU,QAAQ,GAAG;AAC5B,UAAI;AACJ,UAAI,MAAM,GAAG;AACT,aAAKH,MAAK,MAAM,OAAO,SAAS,CAAC;AACjC,eAAO,OAAO,SAAS,IAAI,OAAO,EAAE,KAAK,OAAO,KAAG,CAAC,IAAI,OAAO,EAAE,KAAK;AAAA,MAC1E,OAAO;AACH,YAAI,OAAO,SAAS,GAAI;AACpB,gBAAM,OAAO,SAAS,IAAI,KAAK;AAC/B,iBAAO,KAAK,KAAK,OAAOA,MAAK,MAAM,EAAE,CAAC,IAAI,OAAOA,MAAK,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAG,CAAC;AAAA,QAC3F,OAAO;AACH,gBAAM,OAAO,SAAS,IAAI,KAAK;AAC/B,iBAAO,KAAK,KAAK,OAAOA,MAAK,MAAM,EAAE,CAAC,IAAI,OAAOA,MAAK,MAAM,EAAE,IAAI,CAAC,KAAK,IAAK,OAAO,KAAG,CAAC;AAAA,QAE5F;AAAA,MACJ;AAAA,IACJ;AAEA,qBAAiB,SAAU,KAAK;AAC5B,UAAI;AACJ,cAAQ,KAAK;AAAA,QACT,KAAK;AACD,gBAAMC;AACN;AAAA,QACJ,KAAK;AACD,gBAAM;AACN;AAAA,QACJ,KAAK;AACD,gBAAM;AACN;AAAA,QACJ,KAAK;AACD,gBAAM;AACN;AAAA,QACJ;AACI,eAAK,WAAW,GAAG;AACnB,cAAI,OAAO,IAAI;AACX,kBAAM;AAAA,UACV;AAAA,MACR;AACA,aAAO;AAAA,IACX;AAEA,sBAAkB,SAAU,MAAM;AAC9B,UAAI,GAAG,SAAS,CAAC;AACjB,WAAK,IAAI,KAAK,QAAQ,OAAM;AACxB,eAAO,CAAC,IAAI,eAAe,KAAK,CAAC,CAAC;AAAA,MACtC;AACA,aAAO;AAAA,IACX;AAEA,aAAS,SAAU,MAAM,QAAQ;AAC7B,UAAI,GAAG,IAAI,SAAS,CAAC;AACrB,WAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,IAAI,KAAK;AACvC,YAAI,KAAK,CAAC,MAAM,QAAQ;AACpB,iBAAO,KAAK,KAAK,CAAC,CAAC;AAAA,QACvB;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAEA,eAAW,SAAU,KAAK;AACtB,aAAO,CAAC,MAAM,WAAW,GAAG,CAAC,KAAK,SAAS,GAAG;AAAA,IAClD;AAEA,mBAAe,SAAU,KAAK,MAAM,WAAW,UAAU,QAAQ;AAC7D,UAAI,GAAG;AACP,aAAO,SAAS,QAAQ,WAAW,GAAG,EAAE,SAAS,IAAI,IAAI,QAAQ,IAAI,GAAG,MAAM,EAAE;AAChF,WAAK,IAAIC,GAAE,QAAQ,KAAK,GAAG,KAAK,IAAI,IAAI,SAAS;AACjD,UAAI,IAAI,IAAI,QAAQ;AAChB,YAAI,CAAC,IAAI;AAAA,MACb;AACA,WAAK,IAAI,IAAI,WAAW,IAAI,GAAG,KAAK,WAAW;AAC3C,YAAI,OAAO,GAAG,GAAG,QAAQ;AAAA,MAC7B;AACA,aAAO,IAAI,KAAK,EAAE;AAAA,IACtB;AAIA,UAAM,SAAU,KAAK,KAAK,YAAY;AAClC,UAAI;AACJ,WAAK,IAAI,IAAI,QAAQ,OAAO;AACxB,YAAI,cAAc,IAAI,CAAC,MAAM,KAAM;AACnC,YAAI,IAAI,CAAC,MAAM,KAAK;AAChB,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAGA,UAAM,SAAU,MAAM;AAClB,UAAI,QAAQ,GAAG;AACf,WAAK,IAAI,KAAK,QAAQ,OAAM;AACxB,iBAAS,OAAO,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,IAAI;AAAA,MACrD;AACA,aAAO;AAAA,IACX;AAEA,kBAAc,SAAU,KAAK;AACzB,aAAOA,GAAE,QAAQ,GAAG,IAAI,MAAM,CAAC,GAAG;AAAA,IACtC;AAGA,aAAS,SAAS,KAAK;AACnB,UAAI,KAAK;AACT,UAAIH,UAAS,kBAAkB;AAC3B,YAAI;AACA,UAAAA,UAAS,iBAAiB,EAAE,UAAU;AACtC;AAAA,QACJ,SAAS,GAAG;AAER,mBAAS;AAAA,QACb;AAAA,MACJ;AACA,YAAMA,UAAS,cAAc,OAAO;AACpC,UAAI,OAAO;AACX,MAAAA,UAAS,qBAAqB,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG;AACxD,UAAI,QAAQ;AACR,QAAAA,UAAS,YAAYA,UAAS,YAAY,SAAS,CAAC,EAAE,UAAU;AAAA,MACpE,OAAO;AACH,YAAK,OAAOA,UAAS,KAAK,MAAM,oBAAoB,WAA8B,cAAc,WAAW,IAAI;AAAA,MACnH;AAAA,IACJ;AAGA,IAAAG,GAAE,GAAG,aAAa,SAAU,OAAO,QAAQ,aAAa,UAAU;AAC9D,UAAI,QAAQ;AACZ,UAAI,gBAAgB,SAAS,KAAK,KAAK,cAAc,IAAI;AACrD,eAAO;AAAA,MACX;AAEA,UAAIA,GAAE,GAAG,UAAU,WAAW,OAAO;AAEjC,eAAO;AAAA,MAEX,WAAWA,GAAE,GAAG,UAAU,WAAWD,YAAW;AAE5C,YAAIK,MAAKP,UAAS,cAAc,QAAQ;AACxC,YAAI,CAAC,EAAEO,IAAG,cAAcA,IAAG,WAAW,IAAI,IAAI;AAE1C,UAAAJ,GAAE,GAAG,UAAU,SAAS,SAASK,QAAOC,SAAQC,SAAQC,WAAU;AAC9D,mBAAO,IAAI,eAAeH,QAAOC,SAAQC,SAAQC,SAAQ;AAAA,UAC7D;AAAA,QACJ,WAAWX,UAAS,cAAc,CAACA,UAAS,WAAW,GAAG;AAEtD,UAAAA,UAAS,WAAW,IAAI,KAAK,iCAAiC,cAAc;AAC5E,UAAAG,GAAE,GAAG,UAAU,SAAS,SAASK,QAAOC,SAAQC,SAAQC,WAAU;AAC9D,mBAAO,IAAI,YAAYH,QAAOC,SAAQC,OAAM;AAAA,UAChD;AAAA,QACJ,OAAO;AAEH,UAAAP,GAAE,GAAG,UAAU,SAAS;AACxB,iBAAO;AAAA,QACX;AAAA,MACJ;AAEA,UAAI,UAAUD,YAAW;AACrB,gBAAQC,GAAE,IAAI,EAAE,WAAW;AAAA,MAC/B;AACA,UAAI,WAAWD,YAAW;AACtB,iBAASC,GAAE,IAAI,EAAE,YAAY;AAAA,MACjC;AAEA,eAASA,GAAE,GAAG,UAAU,OAAO,OAAO,QAAQ,MAAM,QAAQ;AAE5D,iBAAWA,GAAE,IAAI,EAAE,KAAK,eAAe;AACvC,UAAI,UAAU;AACV,iBAAS,eAAe,MAAM;AAAA,MAClC;AACA,aAAO;AAAA,IACX;AAEA,IAAAA,GAAE,GAAG,YAAY,WAAY;AACzB,UAAI,SAAS,KAAK,KAAK,cAAc;AACrC,UAAI,QAAQ;AACR,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AAEA,IAAAA,GAAE,gBAAgB,WAAW,YAAY;AAAA,MACrC,MAAM,SAAU,KAAK;AACjB,YAAI,KAAK,OAAO,YAAY,CAAC;AAC7B,aAAK,OAAO,KAAK;AACb,cAAI,IAAI,eAAe,GAAG,KAAK,OAAO,QAAQ,YAAY,IAAI,QAAQ,GAAG,IAAI,IAAI;AAC7E,oBAAQ,IAAI,MAAM,GAAG;AACrB,kBAAM,CAAC,IAAI,MAAM,CAAC,EAAE,WAAW,IAAI,YAAY,WAAW,MAAM,CAAC,CAAC;AAClE,kBAAM,CAAC,IAAI,MAAM,CAAC,EAAE,WAAW,IAAI,WAAW,WAAW,MAAM,CAAC,CAAC;AACjE,kBAAM,CAAC,IAAI,IAAI,GAAG;AAClB,sBAAU,KAAK,KAAK;AAAA,UACxB;AAAA,QACJ;AACA,aAAK,MAAM;AACX,aAAK,YAAY,aAAa;AAAA,MAClC;AAAA,MAEA,KAAK,SAAU,OAAO;AAClB,YAAI,YAAY,KAAK,WACjB,GAAG,OAAO;AACd,aAAK,SAAS,KAAK,IAAI,KAAK,OAAOD,YAAW;AAC1C,iBAAO;AAAA,QACX;AACA,YAAI,WAAW;AACX,eAAK,IAAI,UAAU,QAAQ,OAAM;AAC7B,oBAAQ,UAAU,CAAC;AACnB,gBAAI,MAAM,CAAC,KAAK,SAAS,MAAM,CAAC,KAAK,OAAO;AACxC,qBAAO,MAAM,CAAC;AAAA,YAClB;AAAA,UACJ;AAAA,QACJ;AACA,eAAOA;AAAA,MACX;AAAA,IACJ,CAAC;AAGD,IAAAC,GAAE,YAAY,SAAS,KAAK;AACxB,aAAO,IAAI,SAAS,GAAG;AAAA,IAC3B;AAEA,mBAAe,YAAY;AAAA,MACvB,MAAM,SAAUI,KAAI,SAAS;AACzB,YAAI,MAAMJ,GAAEI,GAAE;AACd,aAAK,MAAM;AACX,aAAK,UAAU;AACf,aAAK,eAAe;AACpB,aAAK,eAAe;AACpB,aAAK,KAAKA;AACV,aAAK,SAAS,CAAC;AACf,aAAK,UAAU;AACf,aAAK,OAAO;AACZ,aAAK,kBAAkB,CAAC,QAAQ,IAAI,iBAAiB;AACrD,aAAK,mBAAmB,CAAC,QAAQ,IAAI,kBAAkB;AAAA,MAC3D;AAAA,MAEA,mBAAmB,SAAU,IAAI;AAC7B,aAAK,OAAO,KAAK,EAAE;AACnB,YAAI,KAAK,MAAM;AACX,eAAK,cAAc;AAAA,QACvB;AAAA,MACJ;AAAA,MAEA,gBAAgB,SAAU,QAAQ;AAC9B,YAAI,UAAUJ,GAAE,OAAO,MAAM;AAC7B,aAAK,SAAS;AACd,aAAK,UAAU;AACf,gBAAQ,WAAWA,GAAE,MAAM,KAAK,YAAY,IAAI,CAAC;AACjD,gBAAQ,WAAWA,GAAE,MAAM,KAAK,YAAY,IAAI,CAAC;AACjD,gBAAQ,MAAMA,GAAE,MAAM,KAAK,YAAY,IAAI,CAAC;AAAA,MAChD;AAAA,MAEA,OAAO,SAAU,eAAe;AAC5B,aAAK,SAAS,CAAC;AACf,YAAI,KAAK,WAAW,eAAe;AAC/B,eAAK,QAAQ,OAAO;AACpB,eAAK,UAAUD;AAAA,QACnB;AAAA,MACJ;AAAA,MAEA,YAAY,SAAU,GAAG;AACrB,YAAI,aAAaC,GAAE,MAAM,gBAAgB;AACzC,mBAAW,gBAAgB;AAC3B,mBAAW,aAAa,KAAK;AAC7B,aAAK,IAAI,QAAQ,UAAU;AAAA,MAC/B;AAAA,MAEA,YAAY,SAAU,GAAG;AACrB,QAAAA,GAAEH,UAAS,IAAI,EAAE,OAAO,eAAe;AACvC,QAAAG,GAAEH,UAAS,IAAI,EAAE,KAAK,iBAAiBG,GAAE,MAAM,KAAK,WAAW,IAAI,CAAC;AACpE,aAAK,OAAO;AACZ,aAAK,eAAe,EAAE;AACtB,aAAK,eAAe,EAAE;AACtB,aAAK,YAAY,EAAE;AACnB,YAAI,CAAC,KAAK,WAAW,KAAK,iBAAiB;AACvC,eAAK,UAAU,IAAI,QAAQ,KAAK,OAAO;AACvC,eAAK,QAAQ,eAAe,EAAE,OAAO,EAAE,KAAK;AAAA,QAChD;AACA,aAAK,cAAc;AAAA,MACvB;AAAA,MAEA,YAAY,WAAY;AACpB,QAAAA,GAAEH,UAAS,IAAI,EAAE,OAAO,eAAe;AACvC,YAAI,SAAS,KAAK,QACb,UAAU,OAAO,QACjB,eAAe,OACf,IAAI;AACT,aAAK,OAAO;AACZ,aAAK,YAAY;AAEjB,YAAI,KAAK,SAAS;AACd,eAAK,QAAQ,OAAO;AACpB,eAAK,UAAU;AAAA,QACnB;AAEA,aAAK,IAAI,GAAG,IAAI,SAAS,KAAK;AAC1B,eAAK,OAAO,CAAC;AACb,cAAI,GAAG,qBAAqB,GAAG;AAC3B,2BAAe;AAAA,UACnB;AAAA,QACJ;AAEA,YAAI,cAAc;AACd,eAAK,OAAO,OAAO;AAAA,QACvB;AAAA,MACJ;AAAA,MAEA,WAAW,SAAU,GAAG;AACpB,aAAK,eAAe,EAAE;AACtB,aAAK,eAAe,EAAE;AACtB,aAAK,YAAY,EAAE;AACnB,YAAI,KAAK,SAAS;AACd,eAAK,QAAQ,eAAe,EAAE,OAAO,EAAE,KAAK;AAAA,QAChD;AACA,aAAK,cAAc;AAAA,MACvB;AAAA,MAEA,eAAe,WAAY;AACvB,YAAI,SAAS,KAAK,QACb,UAAU,OAAO,QACjB,eAAe,OACf,SAAS,KAAK,QAAQ,OAAO,GAC7B,SAAS,KAAK,eAAe,OAAO,MACpC,SAAS,KAAK,eAAe,OAAO,KACpC,aAAa,IAAI,GAAG,QAAQ;AACjC,YAAI,CAAC,KAAK,MAAM;AACZ;AAAA,QACJ;AACA,aAAK,IAAI,GAAG,IAAI,SAAS,KAAK;AAC1B,eAAK,OAAO,CAAC;AACb,mBAAS,GAAG,mBAAmB,KAAK,WAAW,QAAQ,MAAM;AAC7D,cAAI,QAAQ;AACR,2BAAe;AAAA,UACnB;AAAA,QACJ;AACA,YAAI,cAAc;AACd,wBAAcG,GAAE,MAAM,uBAAuB;AAC7C,sBAAY,aAAa,KAAK;AAC9B,eAAK,IAAI,QAAQ,WAAW;AAC5B,cAAI,KAAK,SAAS;AACd,0BAAc;AACd,iBAAK,IAAI,GAAG,IAAI,SAAS,KAAK;AAC1B,mBAAK,OAAO,CAAC;AACb,6BAAe,GAAG,wBAAwB;AAAA,YAC9C;AACA,iBAAK,QAAQ,WAAW,WAAW;AAAA,UACvC;AACA,cAAI,CAAC,KAAK,kBAAkB;AACxB,iBAAK,OAAO,OAAO;AAAA,UACvB;AAAA,QACJ;AACA,YAAI,WAAW,MAAM;AACjB,eAAK,WAAW;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ,CAAC;AAGD,cAAU,YAAY;AAAA,MAClB,WAAW;AAAA,MAKX,MAAM,SAAU,SAAS;AACrB,YAAI,mBAAmB,QAAQ,IAAI,oBAAoB,YAAY,GAC/D,eAAe,KAAK,WACpB;AACJ,aAAK,YAAY,QAAQ,IAAI,kBAAkB,KAAKH,UAAS;AAC7D,aAAK,iBAAiB,QAAQ,IAAI,kBAAkB,EAAE;AACtD,aAAK,iBAAiB,QAAQ,IAAI,kBAAkB,EAAE;AAEtD,QAAAG,GAAE,aAAa,EAAE,OAAO;AACxB,QAAAA,GAAE,aAAa,EAAE,OAAO;AACxB,aAAK,UAAUA,GAAE,UAAU;AAAA,UACvB,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,SAAS;AAAA,QACb,CAAC;AACD,aAAK,UAAUA,GAAE,UAAU;AAAA,UACvB,IAAI;AAAA,UACJ,SAAS;AAAA,QACb,CAAC,EAAE,SAAS,KAAK,SAAS;AAE1B,iBAAS,KAAK,QAAQ,OAAO;AAC7B,aAAK,aAAa,OAAO;AACzB,aAAK,YAAY,OAAO;AACxB,aAAK,SAAS;AACd,QAAAA,GAAE,MAAM,EAAE,OAAO,uBAAuB;AACxC,QAAAA,GAAE,MAAM,EAAE,KAAK,yBAAyBA,GAAE,MAAM,KAAK,kBAAkB,IAAI,CAAC;AAC5E,aAAK,iBAAiB;AAAA,MAC1B;AAAA,MAEA,kBAAkB,WAAY;AAC1B,aAAK,YAAYA,GAAE,MAAM,EAAE,UAAU;AACrC,aAAK,aAAaA,GAAE,MAAM,EAAE,WAAW;AACvC,aAAK,cAAc,KAAK,aAAaA,GAAE,MAAM,EAAE,MAAM;AACrD,aAAK,eAAe;AAAA,MACxB;AAAA,MAEA,SAAS,SAAU,SAAS;AACxB,aAAK,QAAQ,KAAK,OAAO,EAAE,SAAS,KAAK,SAAS;AAClD,aAAK,QAAQ,KAAK,QAAQ,MAAM,IAAI;AACpC,aAAK,SAAS,KAAK,QAAQ,OAAO;AAClC,aAAK,QAAQ,OAAO;AAAA,MACxB;AAAA,MAEA,YAAY,SAAU,SAAS;AAC3B,YAAI,CAAC,SAAS;AACV,eAAK,QAAQ,IAAI,cAAc,QAAQ;AACvC,eAAK,SAAS;AACd;AAAA,QACJ;AACA,aAAK,QAAQ,OAAO;AACpB,aAAK,QAAQ,KAAK,OAAO,EACpB,IAAI;AAAA,UACD,SAAS,KAAK;AAAA,UACd,UAAU,KAAK;AAAA,UACf,cAAc;AAAA,QAClB,CAAC;AACL,YAAI,KAAK,QAAQ;AACb,eAAK,SAAS;AACd,eAAK,eAAe;AAAA,QACxB;AAAA,MACJ;AAAA,MAEA,gBAAgB,SAAU,GAAG,GAAG;AAC5B,YAAI,MAAMD,YAAW;AACjB,cAAI,KAAK,WAAWA,YAAW;AAC3B;AAAA,UACJ;AACA,cAAI,KAAK,SAAS,KAAK;AACvB,cAAI,KAAK,SAAS,KAAK;AAAA,QAE3B,OAAO;AACH,eAAK,SAAS,IAAI,IAAI,KAAK;AAC3B,eAAK,SAAS,IAAI,IAAI,KAAK;AAAA,QAC/B;AACA,YAAI,CAAC,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,QAAQ;AAC5C;AAAA,QACJ;AAEA,aAAK,KAAK,SAAS,KAAK;AACxB,aAAK,KAAK;AAEV,YAAI,IAAI,KAAK,WAAW;AACpB,cAAI,KAAK;AAAA,QACb;AACA,YAAI,IAAI,KAAK,YAAY;AACrB,cAAI,KAAK;AAAA,QACb,WAAW,IAAI,KAAK,QAAQ,KAAK,aAAa;AAC1C,cAAI,KAAK,cAAc,KAAK;AAAA,QAChC;AAEA,aAAK,QAAQ,IAAI;AAAA,UACb,QAAQ;AAAA,UACR,OAAO;AAAA,QACX,CAAC;AAAA,MACL;AAAA,MAEA,QAAQ,WAAY;AAChB,aAAK,QAAQ,OAAO;AACpB,aAAK,QAAQ,OAAO;AACpB,aAAK,UAAU,KAAK,UAAUA;AAC9B,QAAAC,GAAE,MAAM,EAAE,OAAO,uBAAuB;AAAA,MAC5C;AAAA,IACJ,CAAC;AAED,iBAAa,WAAW;AACpB,aAAO,aAAa;AAAA,IACxB;AAEA,IAAAA,GAAE,UAAU;AAEZ,cAAU,CAAC;AACX,IAAAA,GAAE,GAAG,YAAY,SAAU,YAAY,aAAa;AAChD,aAAO,KAAK,KAAK,WAAY;AACzB,YAAI,UAAU,IAAIA,GAAE,GAAG,UAAU,QAAQ,MAAM,WAAW,GACrD,QAAQA,GAAE,IAAI,GACd,QAAQ;AACb,iBAAS,WAAY;AACjB,cAAI,QAAQ,OAAO,QAAQ,KAAK,UAAU,IAAI;AAC9C,cAAI,eAAe,UAAU,eAAeD,YAAW;AACnD,mBAAO,KAAK,aAAa,QAAQ,IAAI,oBAAoB,CAAC;AAC1D,gBAAI,SAASA,cAAa,SAAS,MAAM;AACrC,qBAAO,MAAM,KAAK;AAAA,YACtB;AACA,qBAAS,KAAK,QAAQ,6BAA6B,EAAE,EAAE,MAAM,GAAG;AAAA,UACpE,OAAO;AACH,qBAAS;AAAA,UACb;AAEA,kBAAQ,QAAQ,IAAI,OAAO,MAAM,SAAS,OAAO,SAAS,QAAQ,IAAI,uBAAuB,IAAI,QAAQ,IAAI,OAAO;AACpH,cAAI,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAClC,gBAAI,CAAC,QAAQ,IAAI,WAAW,KAAK,CAACC,GAAE,KAAK,MAAM,cAAc,GAAG;AAE5D,oBAAMH,UAAS,cAAc,MAAM;AACnC,kBAAI,YAAY;AAChB,oBAAM,KAAK,GAAG;AACd,uBAASG,GAAE,GAAG,EAAE,YAAY,KAAKA,GAAE,GAAG,EAAE,OAAO;AAC/C,cAAAA,GAAE,GAAG,EAAE,OAAO;AACd,oBAAM;AAAA,YACV;AAAA,UACJ,OAAO;AACH,qBAAS,QAAQ,IAAI,QAAQ;AAAA,UACjC;AAEA,cAAI,CAAC,QAAQ,IAAI,oBAAoB,GAAG;AACpC,uBAAWA,GAAE,KAAK,MAAM,eAAe;AACvC,gBAAI,CAAC,UAAU;AACX,yBAAW,IAAI,aAAa,MAAM,OAAO;AACzC,cAAAA,GAAE,KAAK,MAAM,iBAAiB,QAAQ;AAAA,YAC1C,WAAW,CAAC,QAAQ,IAAI,WAAW,GAAG;AAClC,uBAAS,MAAM;AAAA,YACnB;AAAA,UACJ,OAAO;AACH,uBAAW;AAAA,UACf;AAEA,cAAI,QAAQ,IAAI,WAAW,KAAK,CAACA,GAAE,KAAK,MAAM,cAAc,GAAG;AAC3D,gBAAI,CAACA,GAAE,KAAK,MAAM,gBAAgB,GAAG;AACjC,oBAAM,oFAAoF;AAC1F,cAAAA,GAAE,KAAK,MAAM,kBAAkB,IAAI;AAAA,YACvC;AACA;AAAA,UACJ;AAEA,eAAK,IAAIA,GAAE,GAAG,UAAU,QAAQ,IAAI,MAAM,CAAC,EAAE,MAAM,QAAQ,SAAS,OAAO,MAAM;AAEjF,aAAG,OAAO;AAEV,cAAI,UAAU;AACV,qBAAS,kBAAkB,EAAE;AAAA,UACjC;AAAA,QACJ;AACA,YAAKA,GAAE,IAAI,EAAE,KAAK,KAAK,CAAC,QAAQ,IAAI,oBAAoB,KAAKA,GAAE,IAAI,EAAE,GAAG,SAAS,KAAM,CAACA,GAAE,IAAI,EAAE,QAAQ,MAAM,EAAE,QAAQ;AACpH,cAAI,CAAC,QAAQ,IAAI,WAAW,KAAKA,GAAE,KAAK,MAAM,cAAc,GAAG;AAE3D,iBAAK,IAAI,QAAQ,QAAQ,GAAG,KAAK;AAC7B,kBAAI,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,MAAM;AAC3B,wBAAQ,OAAO,IAAI,GAAG,CAAC;AAAA,cAC3B;AAAA,YACJ;AAAA,UACJ;AACA,kBAAQ,KAAK,CAAC,MAAM,MAAM,CAAC;AAC3B,UAAAA,GAAE,KAAK,MAAM,gBAAgB,IAAI;AAAA,QACrC,OAAO;AACH,iBAAO,KAAK,IAAI;AAAA,QACpB;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,IAAAA,GAAE,GAAG,UAAU,WAAW,YAAY;AAGtC,IAAAA,GAAE,4BAA4B,WAAY;AACtC,UAAII,KAAI,GAAG;AACX,UAAI,OAAO,CAAC;AACZ,WAAK,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;AAC1C,QAAAA,MAAK,QAAQ,CAAC,EAAE,CAAC;AACjB,YAAIJ,GAAEI,GAAE,EAAE,GAAG,UAAU,KAAK,CAACJ,GAAEI,GAAE,EAAE,QAAQ,EAAE,GAAG,SAAS,GAAG;AACxD,kBAAQ,CAAC,EAAE,CAAC,EAAE,KAAKA,GAAE;AACrB,UAAAJ,GAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,GAAG,gBAAgB,KAAK;AAC3C,eAAK,KAAK,CAAC;AAAA,QACf,WAAW,CAACA,GAAEI,GAAE,EAAE,QAAQ,MAAM,EAAE,UAAU,CAACJ,GAAE,KAAKI,KAAI,cAAc,GAAG;AAKrE,UAAAJ,GAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,GAAG,gBAAgB,KAAK;AAC3C,eAAK,KAAK,CAAC;AAAA,QACf;AAAA,MACJ;AACA,WAAK,IAAI,KAAK,QAAQ,GAAG,KAAK;AAC1B,gBAAQ,OAAO,KAAK,IAAI,CAAC,GAAG,CAAC;AAAA,MACjC;AAAA,IACJ;AAMA,IAAAA,GAAE,GAAG,UAAU,UAAU,YAAY;AAAA,MACjC,MAAM,SAAU,KAAK,aAAa;AAC9B,YAAI,iBAAiB,UAAU,MAAM;AACrC,aAAK,cAAc,cAAc,eAAe,CAAC;AACjD,aAAK,MAAM;AACX,aAAK,cAAc,CAAC;AACpB,mBAAWA,GAAE,GAAG,UAAU;AAC1B,eAAO,SAAS;AAChB,aAAK,mBAAmB,YAAY,qBAAqB,YAAY,oBAAoB,KAAK;AAE9F,wBAAgB,KAAK,cAAc,MAAM;AACzC,YAAI,kBAAkB,cAAc;AAChC,4BAAkB,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,QAC5D,OAAO;AACH,4BAAkB,SAAS,aAAa;AAAA,QAC5C;AACA,aAAK,gBAAgBA,GAAE,OAAO,CAAC,GAAG,MAAM,iBAAiB,WAAW;AAAA,MACxE;AAAA,MAGA,eAAe,SAAU,KAAK;AAC1B,YAAI,SAAS,KAAK,kBACd,KAAK,GAAG,OAAO;AACnB,YAAI,WAAW,SAAS,WAAWD,YAAW;AAC1C,iBAAO;AAAA,QACX;AACA,YAAI,KAAK,YAAY,eAAe,GAAG,GAAG;AACtC,gBAAM,KAAK,YAAY;AAAA,QAC3B,OAAO;AACH,gBAAM,KAAK,IAAI,aAAa,SAAS,GAAG;AACxC,cAAI,QAAQA,cAAa,QAAQ,MAAM;AACnC,kBAAM;AAAA,UACV,WAAW,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK;AACjC,kBAAM,IAAI,OAAO,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,GAAG;AAC7C,iBAAK,IAAI,IAAI,QAAQ,OAAM;AACvB,kBAAI,CAAC,IAAI,eAAe,IAAI,CAAC,EAAE,QAAQ,kBAAkB,EAAE,CAAC;AAAA,YAChE;AAAA,UACJ,WAAW,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK;AACjC,oBAAQ,IAAI,OAAO,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,GAAG;AAC/C,kBAAM,CAAC;AACP,iBAAK,IAAI,MAAM,QAAQ,OAAM;AACzB,uBAAS,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC;AAC9B,kBAAI,OAAO,CAAC,EAAE,QAAQ,kBAAkB,EAAE,CAAC,IAAI,eAAe,OAAO,CAAC,EAAE,QAAQ,kBAAkB,EAAE,CAAC;AAAA,YACzG;AAAA,UACJ,OAAO;AACH,kBAAM,eAAe,GAAG;AAAA,UAC5B;AACA,eAAK,YAAY,MAAM;AAAA,QAC3B;AACA,eAAO;AAAA,MACX;AAAA,MAEA,KAAK,SAAU,KAAK,YAAY;AAC5B,YAAI,YAAY,KAAK,cAAc,GAAG,GAClC;AACJ,YAAI,cAAc,cAAc;AAC5B,iBAAO;AAAA,QACX;AACA,gBAAQ,SAAS,KAAK,cAAc,GAAG,OAAOA,aAAY,aAAa;AAAA,MAC3E;AAAA,IACJ,CAAC;AAGD,IAAAC,GAAE,GAAG,UAAU,QAAQ,YAAY;AAAA,MAC/B,UAAU;AAAA,MAEV,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,aAAK,KAAKA;AACV,aAAK,MAAMJ,GAAEI,GAAE;AACf,aAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,QAAQ;AACb,aAAK,SAAS;AACd,aAAK,gBAAgBL;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA,MAKA,YAAY,WAAY;AACpB,YAAI,cAAc,CAAC,KAAK,QAAQ,IAAI,oBAAoB;AACxD,YAAI,EAAE,KAAK,SAAS,KAAK,IAAI,WAAW,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,IAAI,WAAW,GAAG,WAAW,IAAI;AAC3G,eAAK,WAAW;AAAA,QACpB,OAAO;AACH,eAAK,cAAc,KAAK,OAAO;AAC/B,eAAK,eAAe,KAAK,OAAO;AAAA,QACpC;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAKA,QAAQ,WAAY;AAChB,YAAI,KAAK,UAAU;AACf,eAAK,GAAG,YAAY;AACpB,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,SAAU,GAAG,GAAG;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA,MAKA,oBAAoB,SAAUK,KAAI,GAAG,GAAG;AACpC,YAAI,gBAAgB,KAAK,eACrB,mBAAmB,CAAC,KAAK,QAAQ,IAAI,kBAAkB,GACvD;AACJ,YAAI,IAAI,KAAK,eAAe,IAAI,KAAK,gBAAgB,IAAI,KAAK,IAAI,GAAG;AACjE,iBAAO;AAAA,QACX;AACA,oBAAY,KAAK,UAAUA,KAAI,GAAG,CAAC;AACnC,YAAI,kBAAkB,WAAW;AAC7B,cAAI,kBAAkBL,cAAa,kBAAkB;AACjD,iBAAK,gBAAgB;AAAA,UACzB;AACA,eAAK,gBAAgB;AACrB,cAAI,cAAcA,cAAa,kBAAkB;AAC7C,iBAAK,gBAAgB;AAAA,UACzB;AACA,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AAAA;AAAA;AAAA;AAAA,MAKA,sBAAsB,WAAY;AAC9B,YAAI,KAAK,kBAAkBA,YAAW;AAClC,eAAK,gBAAgB;AACrB,eAAK,gBAAgBA;AACrB,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AAAA,MAEA,iBAAiB,WAAY;AACzB,aAAK,gBAAgB,IAAI;AAAA,MAC7B;AAAA,MAEA,iBAAiB,WAAY;AACzB,aAAK,gBAAgB,KAAK;AAAA,MAC9B;AAAA,MAEA,iBAAiB,SAAU,WAAY;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA,MAKxC,yBAAyB,WAAY;AACjC,YAAI,UAAU,KAAK,SACf,SAAS,IACT,UAAU,CAAC,GACX,QAAQ,SAAS,WAAW,QAAQ,MAAM,GAC1C,YAAY,eAAe,WAAW,IACtC,WAAWE,SAAQ,UAAU;AACjC,YAAI,KAAK,kBAAkBF,YAAW;AAClC,iBAAO;AAAA,QACX;AACA,iBAAS,KAAK,uBAAuB;AACrC,oBAAY,QAAQ,IAAI,kBAAkB;AAC1C,YAAI,WAAW;AACX,iBAAO,UAAU,MAAM,SAAS,MAAM;AAAA,QAC1C;AACA,YAAI,QAAQ,IAAI,mBAAmB,GAAG;AAClC,oBAAU,+BAA+B,QAAQ,IAAI,mBAAmB,IAAI;AAAA,QAChF;AACA,kBAAU,KAAK,QAAQ,IAAI,eAAe;AAC1C,YAAI,CAAC,SAAS;AACV,iBAAO;AAAA,QACX;AACA,YAAI,CAACC,GAAE,QAAQ,OAAO,GAAG;AACrB,oBAAU,CAAC,OAAO;AAAA,QACtB;AACA,YAAI,CAACA,GAAE,QAAQ,MAAM,GAAG;AACpB,mBAAS,CAAC,MAAM;AAAA,QACpB;AACA,qBAAa,KAAK,QAAQ,IAAI,wBAAwB;AACtD,wBAAgB,KAAK,QAAQ,IAAI,2BAA2B;AAC5D,YAAI,cAAc,eAAe;AAE7B,sBAAY,CAAC;AACb,eAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,iBAAK,OAAO,CAAC,EAAE,aAAa;AAC5B,iBAAK,IAAIA,GAAE,QAAQ,IAAI,UAAU,MAAM,IAAI;AACvC,wBAAU,CAAC,IAAI,OAAO,CAAC;AAAA,YAC3B;AAAA,UACJ;AACA,mBAAS;AAAA,QACb;AACA,oBAAY,QAAQ;AACpB,mBAAW,OAAO;AAClB,aAAK,IAAI,GAAG,IAAI,WAAW,KAAK;AAC5B,UAAAC,UAAS,QAAQ,CAAC;AAClB,cAAI,OAAOA,YAAW,UAAU;AAC5B,YAAAA,UAAS,IAAI,SAASA,OAAM;AAAA,UAChC;AACA,mBAASA,QAAO,UAAU;AAC1B,eAAK,IAAI,GAAG,IAAI,UAAU,KAAK;AAC3B,gBAAI,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,QAAQ,IAAI,iBAAiB,GAAG;AACtD,cAAAD,GAAE,OAAO,OAAO,CAAC,GAAG;AAAA,gBAChB,QAAQ,QAAQ,IAAI,eAAe;AAAA,gBACnC,QAAQ,QAAQ,IAAI,eAAe;AAAA,cACvC,CAAC;AACD,qBAAOC,QAAO,OAAO,OAAO,CAAC,GAAG,QAAQ,IAAI,qBAAqB,GAAG,OAAO;AAC3E,sBAAQ,KAAK,iBAAiB,SAAS,OAAO,OAAO,QAAQ;AAAA,YACjE;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,QAAQ,QAAQ;AAChB,iBAAO,SAAS,QAAQ,KAAK,IAAI;AAAA,QACrC;AACA,eAAO;AAAA,MACX;AAAA,MAEA,wBAAwB,WAAY;AAAA,MAAC;AAAA,MAErC,oBAAoB,SAAU,OAAO,SAAS;AAC1C,YAAI,iBAAiB,QAAQ,IAAI,gBAAgB,GAC7C,UAAU,QAAQ,IAAI,kBAAkB,GACxC,OAAO,MAAM,QAAQ;AACzB,YAAI,gBAAgB;AAChB,iBAAO;AAAA,QACX;AACA,YAAI,SAAS;AAET,kBAAQ,qCAAqC,KAAK,KAAK,KAAK,8CAA8C,KAAK,KAAK;AACpH,cAAI,OAAO;AACP,qBAAS,CAAC;AACV,mBAAO,MAAM,WAAW,IAAI,KAAK;AACjC,iBAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACpB,qBAAO,CAAC,IAAI,QAAQH,MAAK,MAAM,SAAS,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,OAAO,GAAG,GAAG,GAAG;AAAA,YACvF;AACA,mBAAO,SAAS,OAAO,KAAK,GAAG,IAAI;AAAA,UACvC;AAAA,QAEJ;AACA,eAAO;AAAA,MACX;AAAA,IAEJ,CAAC;AAED,wBAAoB;AAAA,MAChB,iBAAiB,SAAU,WAAW;AAClC,YAAI,gBAAgB,KAAK,eACrB,SAAS,KAAK,QACd,WAAW,KAAK,aAAa,aAAa,GAC1C;AAEJ,YAAI,UAAU;AACV,sBAAY,KAAK,aAAa,eAAe,SAAS;AACtD,cAAIE,GAAE,QAAQ,SAAS,KAAKA,GAAE,QAAQ,QAAQ,GAAG;AAC7C,mBAAO,kBAAkB,UAAU,SAAS;AAC5C,iBAAK,aAAa,aAAa,IAAIA,GAAE,IAAI,WAAW,SAAU,UAAU;AACpE,qBAAO,SAAS;AAAA,YACpB,CAAC;AAAA,UACL,OAAO;AACH,mBAAO,iBAAiB,UAAU,SAAS;AAC3C,iBAAK,aAAa,aAAa,IAAI,UAAU;AAAA,UACjD;AAAA,QACJ;AAAA,MACJ;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,SAAS,KAAK,QACd,SAAS,KAAK,QACd,eAAe,KAAK,cACpB,QAAQ,KAAK,GAAG;AAEpB,YAAI,CAAC,KAAK,IAAI,OAAO,OAAO,KAAK,IAAI,GAAG;AACpC;AAAA,QACJ;AACA,aAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,mBAAS,KAAK,aAAa,CAAC;AAC5B,cAAI,QAAQ;AACR,gBAAIA,GAAE,QAAQ,MAAM,GAAG;AACnB,oBAAM,CAAC;AACP,mBAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,uBAAO,CAAC,EAAE,OAAO;AACjB,oBAAI,KAAK,OAAO,CAAC,EAAE,EAAE;AAAA,cACzB;AACA,2BAAa,CAAC,IAAI;AAAA,YACtB,OAAO;AACH,qBAAO,OAAO;AACd,2BAAa,CAAC,IAAI,OAAO;AAAA,YAC7B;AAAA,UACJ,OAAO;AAEH,yBAAa,CAAC,IAAI;AAAA,UACtB;AAAA,QACJ;AACA,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ;AAKA,IAAAA,GAAE,GAAG,UAAU,OAAO,OAAO,YAAYA,GAAE,GAAG,UAAU,OAAO;AAAA,MAC3D,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,aAAK,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAC9D,aAAK,WAAW,CAAC;AACjB,aAAK,YAAY,CAAC;AAClB,aAAK,UAAU,CAAC;AAChB,aAAK,UAAU,CAAC;AAChB,aAAK,UAAU,CAAC;AAChB,aAAK,mBAAmB;AACxB,aAAK,cAAc;AACnB,aAAK,WAAW;AAAA,MACpB;AAAA,MAEA,WAAW,SAAUA,KAAI,GAAG,GAAG;AAC3B,YAAI,GACA,YAAY,KAAK;AACrB,aAAK,IAAI,UAAU,QAAQ,OAAM;AAC7B,cAAI,UAAU,CAAC,MAAM,QAAQ,KAAK,UAAU,CAAC,EAAE,CAAC,KAAK,KAAK,UAAU,CAAC,EAAE,CAAC,GAAG;AACvE,mBAAO,UAAU,CAAC,EAAE,CAAC;AAAA,UACzB;AAAA,QACJ;AACA,eAAOL;AAAA,MACX;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK;AACzB,eAAO;AAAA,UACH,QAAQ,KAAK,QAAQ,aAAa,MAAM;AAAA,UACxC,GAAG,KAAK,QAAQ,aAAa;AAAA,UAC7B,GAAG,KAAK,QAAQ,aAAa;AAAA,UAC7B,OAAO,KAAK,QAAQ,IAAI,WAAW;AAAA,UACnC,WAAW,KAAK,QAAQ,IAAI,WAAW;AAAA,UACvC,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,iBAAiB,WAAY;AACzB,YAAI,gBAAgB,KAAK,eACrB,SAAS,KAAK,QACd,SAAS,KAAK,SAAS,aAAa,GACpC,UAAU,KAAK,SACf,aAAa,QAAQ,IAAI,YAAY,GACrC,qBAAqB,QAAQ,IAAI,oBAAoB,GACrD,qBAAqB,QAAQ,IAAI,oBAAoB,GACrD,eAAe;AAEnB,YAAI,CAAC,QAAQ;AACT;AAAA,QACJ;AACA,YAAI,cAAc,oBAAoB;AAClC,0BAAgB,OAAO;AAAA,YAAW,OAAO,CAAC;AAAA,YAAG,OAAO,CAAC;AAAA,YACjD;AAAA,YAAYA;AAAA,YAAW;AAAA,UAAkB;AAC7C,eAAK,kBAAkB,cAAc;AACrC,iBAAO,iBAAiB,KAAK,aAAa,aAAa;AAAA,QAC3D;AACA,YAAI,oBAAoB;AACpB,0BAAgB,OAAO;AAAA,YAAS,OAAO,CAAC;AAAA,YAAG,KAAK;AAAA,YAAW,OAAO,CAAC;AAAA,YAC/D,KAAK,YAAY,KAAK;AAAA,YAAc;AAAA,UAAkB;AAC1D,eAAK,kBAAkB,cAAc;AACrC,iBAAO,iBAAiB,KAAK,aAAa,aAAa;AAAA,QAC3D;AAAA,MACJ;AAAA,MAEA,iBAAiB,WAAY;AACzB,YAAI,SAAS,KAAK;AAClB,YAAI,KAAK,iBAAiB;AACtB,iBAAO,cAAc,KAAK,eAAe;AACzC,eAAK,kBAAkB;AAAA,QAC3B;AACA,YAAI,KAAK,iBAAiB;AACtB,iBAAO,cAAc,KAAK,eAAe;AACzC,eAAK,kBAAkB;AAAA,QAC3B;AAAA,MACJ;AAAA,MAEA,YAAY,WAAY;AACpB,YAAI,SAAS,KAAK,QACd,WAAW,OAAO,QAClB,UAAU,KAAK,SACf,UAAU,KAAK,SACf,UAAU,KAAK,SACf,GAAG,KAAK,OAAO,SAAS;AAC5B,aAAK,IAAI,GAAG,IAAI,UAAU,KAAK;AAC3B,gBAAM,OAAO,CAAC;AACd,kBAAQ,OAAO,OAAO,CAAC,MAAO;AAC9B,oBAAU,OAAO,OAAO,CAAC,MAAO,YAAY,OAAO,CAAC,aAAa;AACjE,eAAK,SAAS,OAAO,CAAC,EAAE,MAAM,GAAG;AACjC,cAAI,SAAS,GAAG,WAAW,GAAG;AAC1B,oBAAQ,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;AAC1B,oBAAQ,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;AAC1B,oBAAQ,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;AAAA,UAC9B,WAAW,SAAS;AAChB,oBAAQ,KAAK,IAAI,CAAC,CAAC;AACnB,oBAAQ,KAAK,IAAI,CAAC,CAAC;AACnB,oBAAQ,KAAK,IAAI,CAAC,CAAC;AAAA,UACvB,OAAO;AACH,oBAAQ,KAAK,CAAC;AACd,gBAAI,OAAO,CAAC,MAAM,QAAQ,OAAO,CAAC,MAAM,QAAQ;AAC5C,sBAAQ,KAAK,IAAI;AAAA,YACrB,OAAO;AACH,sBAAQ,KAAK,OAAO,GAAG,CAAC;AACxB,sBAAQ,KAAK,OAAO,GAAG,CAAC;AAAA,YAC5B;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,KAAK,QAAQ,IAAI,SAAS,GAAG;AAC7B,oBAAU,KAAK,QAAQ,IAAI,SAAS;AAAA,QACxC;AAEA,aAAK,OAAO,KAAK,UAAUD,MAAK,IAAI,MAAMA,OAAM,OAAO;AACvD,aAAK,OAAO,KAAK,UAAUA,MAAK,IAAI,MAAMA,OAAM,OAAO;AAEvD,aAAK,OAAOA,MAAK,IAAI,MAAMA,OAAM,OAAO;AACxC,aAAK,OAAOA,MAAK,IAAI,MAAMA,OAAM,OAAO;AAExC,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,UAAU;AAAA,MAEnB;AAAA,MAEA,qBAAqB,WAAY;AAC7B,YAAI,UAAU,KAAK,SACf,iBAAiB,QAAQ,IAAI,gBAAgB,GAC7C,iBAAiB,QAAQ,IAAI,gBAAgB;AAEjD,YAAI,mBAAmBC,YAAW;AAC9B,cAAI,iBAAiB,KAAK,MAAM;AAC5B,iBAAK,OAAO;AAAA,UAChB;AACA,cAAI,iBAAiB,KAAK,MAAM;AAC5B,iBAAK,OAAO;AAAA,UAChB;AAAA,QACJ;AACA,YAAI,QAAQ,IAAI,eAAe,MAAMA,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,KAAK,OAAO;AAC3H,eAAK,OAAO,QAAQ,IAAI,eAAe;AAAA,QAC3C;AACA,YAAI,QAAQ,IAAI,eAAe,MAAMA,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,KAAK,OAAO;AAC3H,eAAK,OAAO,QAAQ,IAAI,eAAe;AAAA,QAC3C;AACA,YAAI,QAAQ,IAAI,gBAAgB,MAAMA,eAAc,QAAQ,IAAI,iBAAiB,KAAK,QAAQ,IAAI,gBAAgB,IAAI,KAAK,OAAO;AAC9H,eAAK,OAAO,QAAQ,IAAI,gBAAgB;AAAA,QAC5C;AACA,YAAI,QAAQ,IAAI,gBAAgB,MAAMA,eAAc,QAAQ,IAAI,iBAAiB,KAAK,QAAQ,IAAI,gBAAgB,IAAI,KAAK,OAAO;AAC9H,eAAK,OAAO,QAAQ,IAAI,gBAAgB;AAAA,QAC5C;AAAA,MAEJ;AAAA,MAEA,iBAAiB,SAAU,YAAY,WAAW,cAAc,aAAa,QAAQ;AACjF,YAAI,iBAAiB,KAAK,QAAQ,IAAI,gBAAgB,GAClD,iBAAiB,KAAK,QAAQ,IAAI,gBAAgB,GAClD,OAAO,YAAYD,MAAK,MAAM,eAAgB,iBAAiB,iBAAiB,KAAK,QAAQ,OAAQ,GACrG,SAASA,MAAK,MAAO,gBAAgB,iBAAiB,kBAAmB,MAAM;AACnF,aAAK,OAAO,SAAS,YAAY,MAAM,aAAa,QAAQC,YAAW,KAAK,QAAQ,IAAI,kBAAkB,CAAC,EAAE,OAAO;AAAA,MACxH;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,UAAU,KAAK,SACf,SAAS,KAAK,QACd,cAAc,KAAK,aACnB,eAAe,KAAK,cACpB,WAAW,KAAK,UAChB,aAAa,QAAQ,IAAI,YAAY,GACrC,YAAY,KAAK,WACjB,QAAQ,QAAQ,UAChB,WAAW,YACX,QAAQ,MAAM,OAAO,GAAG,GAAG,OAAO,MAAM,UACxC,MAAM,MAAM,WAAW,YAAY,YAAY,MAC/C,YAAY,gBAAgB,OAAO,SAAS,SAAS;AAEzD,YAAI,CAAC,KAAK,OAAO,OAAO,KAAK,IAAI,GAAG;AAChC;AAAA,QACJ;AAEA,aAAK,WAAW;AAChB,aAAK,oBAAoB;AAEzB,kBAAU,KAAK;AACf,kBAAU,KAAK;AAEf,YAAI,CAAC,KAAK,QAAQ,UAAU,KAAK,QAAQ,SAAS,GAAG;AAEjD;AAAA,QACJ;AAEA,oBAAY,aAAa;AAEzB,iBAAS,KAAK,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,KAAK;AAC5D,iBAAS,KAAK,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,KAAK;AAC5D,mBAAW,KAAK,QAAQ,SAAS;AAEjC,YAAI,eAAe,cAAe,aAAa,KAAM,eAAgB,aAAa,IAAK;AACnF,uBAAa;AAAA,QACjB;AACA,YAAI,YAAY;AAEZ,2BAAiB,QAAQ,IAAI,oBAAoB,KAAM,CAAC,QAAQ,IAAI,oBAAoB;AACxF,cAAI,kBAAkB,QAAQ,IAAI,cAAc,KAAM,QAAQ,IAAI,WAAW,KAAK,QAAQ,QAAQ,MAAM,KAAK,MAAO;AAChH,4BAAgBD,MAAK,KAAK,UAAU;AAAA,UACxC;AACA,cAAI,kBAAkB,QAAQ,IAAI,cAAc,KAAM,QAAQ,IAAI,WAAW,KAAK,QAAQ,QAAQ,MAAM,KAAK,MAAO;AAChH,4BAAgBA,MAAK,KAAK,UAAU;AACpC,yBAAaA,MAAK,KAAK,UAAU;AAAA,UACrC;AACA,cAAI,mBACG,QAAQ,IAAI,cAAc,KAAK,QAAQ,IAAI,cAAc,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,QAAQ,CAAC,MAAM,KAAK,OAAQ;AAC3H,0BAAcA,MAAK,KAAK,UAAU;AAClC,2BAAeA,MAAK,KAAK,UAAU;AAAA,UACvC;AACA,cAAI,kBAAkB,QAAQ,IAAI,WAAW,MACxC,QAAQ,IAAI,cAAc,KAAK,QAAQ,IAAI,cAAc,MACrD,QAAQ,QAAQ,MAAM,KAAK,QAAQ,QAAQ,QAAQ,MAAM,KAAK,QAAQ;AAC3E,2BAAeA,MAAK,KAAK,UAAU;AAAA,UACvC;AAAA,QACJ;AAGA;AAEA,YAAI,QAAQ,IAAI,gBAAgB,MAAMC,cAAa,CAAC,QAAQ,IAAI,iBAAiB,GAAG;AAChF,eAAK,gBAAgB,YAAY,WAAW,cAAc,aAAa,MAAM;AAAA,QACjF;AAEA,eAAO,CAAC;AACR,gBAAQ,CAAC,IAAI;AACb,eAAO,OAAO;AACd,oBAAY,QAAQ;AACpB,aAAK,IAAI,GAAG,IAAI,WAAW,KAAK;AAC5B,cAAI,QAAQ,CAAC;AACb,kBAAQ,QAAQ,IAAI,CAAC;AACrB,cAAI,QAAQ,CAAC;AACb,iBAAO,aAAaD,MAAK,OAAO,IAAI,KAAK,SAAS,cAAc,OAAO;AACvE,qBAAW,IAAI,YAAY,IAAI,aAAaA,MAAK,OAAO,QAAQ,KAAK,SAAS,cAAc,OAAO,IAAI;AACvG,iBAAO,QAAS,WAAW,QAAQ;AACnC,oBAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;AAClC,iBAAO;AACP,cAAI,MAAM,MAAM;AACZ,gBAAI,GAAG;AACH,kBAAI,QAAQ,IAAI,CAAC,MAAM,MAAM;AACzB,uBAAO,CAAC;AACR,sBAAM,KAAK,IAAI;AAAA,cACnB;AACA,uBAAS,KAAK,IAAI;AAAA,YACtB;AAAA,UACJ,OAAO;AACH,gBAAI,IAAI,KAAK,MAAM;AACf,kBAAI,KAAK;AAAA,YACb;AACA,gBAAI,IAAI,KAAK,MAAM;AACf,kBAAI,KAAK;AAAA,YACb;AACA,gBAAI,CAAC,KAAK,QAAQ;AAEd,mBAAK,KAAK,CAAC,MAAM,YAAY,YAAY,CAAC;AAAA,YAC9C;AACA,qBAAS,CAAC,MAAM,YAAYA,MAAK,MAAM,eAAgB,iBAAiB,IAAI,KAAK,QAAQ,OAAQ,CAAC;AAClG,iBAAK,KAAK,MAAM;AAChB,qBAAS,KAAK,MAAM;AAAA,UACxB;AAAA,QACJ;AAEA,qBAAa,CAAC;AACd,qBAAa,CAAC;AACd,eAAO,MAAM;AACb,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,iBAAO,MAAM,CAAC;AACd,cAAI,KAAK,QAAQ;AACb,gBAAI,QAAQ,IAAI,WAAW,GAAG;AAC1B,mBAAK,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC,GAAI,YAAY,YAAa,CAAC;AAChE,yBAAW,KAAK,KAAK,MAAM,CAAC,CAAC;AAC7B,mBAAK,IAAI;AAAA,YACb;AAGA,gBAAI,KAAK,SAAS,GAAG;AAEjB,mBAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAAA,YACrC;AACA,uBAAW,KAAK,IAAI;AAAA,UACxB;AAAA,QACJ;AAGA,eAAO,WAAW;AAClB,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,iBAAO;AAAA,YAAU,WAAW,CAAC;AAAA,YACzB,QAAQ,IAAI,WAAW;AAAA,YAAG,QAAQ,IAAI,WAAW;AAAA,UAAC,EAAE,OAAO;AAAA,QACnE;AAEA,YAAI,QAAQ,IAAI,gBAAgB,MAAMC,cAAa,QAAQ,IAAI,iBAAiB,GAAG;AAC/E,eAAK,gBAAgB,YAAY,WAAW,cAAc,aAAa,MAAM;AAAA,QACjF;AAEA,eAAO,WAAW;AAClB,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,iBAAO;AAAA,YAAU,WAAW,CAAC;AAAA,YAAG,QAAQ,IAAI,WAAW;AAAA,YAAGA;AAAA,YACtD,QAAQ,IAAI,WAAW;AAAA,UAAC,EAAE,OAAO;AAAA,QACzC;AAEA,YAAI,cAAc,QAAQ,IAAI,YAAY,GAAG;AACzC,uBAAa,QAAQ,IAAI,YAAY;AACrC,cAAI,WAAW,QAAQA,YAAW;AAC9B,yBAAa,IAAI,SAAS,UAAU;AAAA,UACxC;AACA,eAAK,IAAI,GAAG,IAAI,WAAW,KAAK;AAC5B,oBAAQ,WAAW,IAAI,QAAQ,CAAC,CAAC;AACjC,gBAAI,OAAO;AACP,qBAAO;AAAA,gBAAW,aAAaD,MAAK,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,cAAc,OAAO;AAAA,gBACvF,YAAYA,MAAK,MAAM,eAAgB,iBAAiB,QAAQ,CAAC,IAAI,KAAK,QAAQ,OAAQ;AAAA,gBAC1F;AAAA,gBAAYC;AAAA,gBACZ;AAAA,cAAK,EAAE,OAAO;AAAA,YACtB;AAAA,UACJ;AAAA,QAEJ;AACA,YAAI,cAAc,QAAQ,IAAI,WAAW,KAAK,QAAQ,QAAQ,MAAM,MAAM;AACtE,iBAAO;AAAA,YAAW,aAAaD,MAAK,OAAO,QAAQ,QAAQ,SAAS,CAAC,IAAI,KAAK,SAAS,cAAc,OAAO;AAAA,YACxG,YAAYA,MAAK,MAAM,eAAgB,iBAAiB,QAAQ,QAAQ,IAAI,KAAK,QAAQ,OAAQ;AAAA,YACjG;AAAA,YAAYC;AAAA,YACZ,QAAQ,IAAI,WAAW;AAAA,UAAC,EAAE,OAAO;AAAA,QACzC;AACA,YAAI,KAAK,SAAS,KAAK,SAAS;AAC5B,cAAI,cAAc,QAAQ,IAAI,cAAc,GAAG;AAC3C,gBAAI,QAAQC,GAAE,QAAQ,KAAK,SAAS,OAAO,CAAC;AAC5C,mBAAO;AAAA,cAAW,aAAaF,MAAK,OAAO,IAAI,KAAK,SAAS,cAAc,OAAO;AAAA,cAC9E,YAAYA,MAAK,MAAM,eAAgB,iBAAiB,KAAK,UAAU,KAAK,QAAQ,OAAQ;AAAA,cAC5F;AAAA,cAAYC;AAAA,cACZ,QAAQ,IAAI,cAAc;AAAA,YAAC,EAAE,OAAO;AAAA,UAC5C;AACA,cAAI,cAAc,QAAQ,IAAI,cAAc,GAAG;AAC3C,gBAAI,QAAQC,GAAE,QAAQ,KAAK,SAAS,OAAO,CAAC;AAC5C,mBAAO;AAAA,cAAW,aAAaF,MAAK,OAAO,IAAI,KAAK,SAAS,cAAc,OAAO;AAAA,cAC9E,YAAYA,MAAK,MAAM,eAAgB,iBAAiB,KAAK,UAAU,KAAK,QAAQ,OAAQ;AAAA,cAC5F;AAAA,cAAYC;AAAA,cACZ,QAAQ,IAAI,cAAc;AAAA,YAAC,EAAE,OAAO;AAAA,UAC5C;AAAA,QACJ;AAEA,aAAK,cAAc,OAAO,eAAe;AACzC,aAAK,YAAY;AACjB,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ,CAAC;AAKD,IAAAC,GAAE,GAAG,UAAU,MAAM,MAAM,YAAYA,GAAE,GAAG,UAAU,OAAO,mBAAmB;AAAA,MAC5E,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,YAAI,WAAW,SAAS,QAAQ,IAAI,UAAU,GAAG,EAAE,GAC/C,aAAa,SAAS,QAAQ,IAAI,YAAY,GAAG,EAAE,GACnD,gBAAgB,QAAQ,IAAI,eAAe,GAC3C,gBAAgB,QAAQ,IAAI,eAAe,GAC3C,iBAAiB,QAAQ,IAAI,gBAAgB,GAC7C,WAAW,UACX,WAAW,WACX,eAAe,UAAU,UAAU,aACnC,WAAW,GAAG,MAAM,OAAO,UAAU,aAAa,KAAK,KAAK,SAAS,SACrE,SAAS,OAAO,GAAG,MAAM,OAAO,KAAK,SAAS,UAAU;AAC5D,YAAI,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAG7D,aAAK,IAAI,GAAG,OAAO,OAAO,QAAQ,IAAI,MAAM,KAAK;AAC7C,gBAAM,OAAO,CAAC;AACd,0BAAgB,OAAO,QAAS,YAAY,IAAI,QAAQ,GAAG,IAAI;AAC/D,cAAI,iBAAiBJ,GAAE,QAAQ,GAAG,GAAG;AACjC,sBAAU;AACV,gBAAI,eAAe;AACf,oBAAM,OAAO,CAAC,IAAI,gBAAgB,IAAI,MAAM,GAAG,CAAC;AAAA,YACpD;AACA,kBAAM,OAAO,KAAK,IAAI;AACtB,uBAAWF,MAAK,IAAI,MAAMA,OAAM,GAAG;AACnC,uBAAWA,MAAK,IAAI,MAAMA,OAAM,GAAG;AACnC,gBAAI,WAAW,UAAU;AACrB,yBAAW;AAAA,YACf;AACA,gBAAI,WAAW,UAAU;AACrB,yBAAW;AAAA,YACf;AAAA,UACJ;AAAA,QACJ;AAEA,aAAK,UAAU;AACf,aAAK,eAAe,CAAC;AACrB,aAAK,WAAW;AAChB,aAAK,aAAa;AAClB,aAAK,gBAAgB,WAAW;AAChC,aAAK,QAAQ,QAAS,OAAO,SAAS,YAAc,OAAO,SAAS,KAAK;AAEzE,aAAK,WAAW;AAEhB,YAAI,gBAAgB;AAChB,oBAAU,kBAAkBC,aAAY,YAAY;AACpD,oBAAU,kBAAkBA,aAAY,WAAW;AAAA,QACvD;AAEA,oBAAY,CAAC;AACb,sBAAc,UAAU,CAAC,IAAI;AAC7B,YAAI,cAAc,CAAC;AACnB,YAAI,iBAAiB,CAAC;AACtB,aAAK,IAAI,GAAG,OAAO,OAAO,QAAQ,IAAI,MAAM,KAAK;AAC7C,cAAI,SAAS;AACT,oBAAQ,OAAO,CAAC;AAChB,mBAAO,CAAC,IAAI,QAAQ,CAAC;AACrB,wBAAY,CAAC,IAAI;AACjB,wBAAY,CAAC,IAAI,eAAe,CAAC,IAAI;AACrC,iBAAK,IAAI,GAAG,OAAO,MAAM,QAAQ,IAAI,MAAM,KAAK;AAC5C,oBAAM,MAAM,CAAC,IAAI,iBAAiB,QAAQ,MAAM,CAAC,GAAG,SAAS,OAAO,IAAI,MAAM,CAAC;AAC/E,kBAAI,QAAQ,MAAM;AACd,oBAAI,MAAM,GAAG;AACT,8BAAY,CAAC,KAAK;AAAA,gBACtB;AACA,oBAAI,WAAW,KAAK,WAAW,GAAG;AAC9B,sBAAI,MAAM,GAAG;AACT,mCAAe,CAAC,KAAKD,MAAK,IAAI,GAAG;AAAA,kBACrC,OAAO;AACH,gCAAY,CAAC,KAAK;AAAA,kBACtB;AAAA,gBACJ,OAAO;AACH,8BAAY,CAAC,KAAKA,MAAK,IAAI,OAAO,MAAM,IAAI,WAAW,SAAS;AAAA,gBACpE;AACA,0BAAU,KAAK,GAAG;AAAA,cACtB;AAAA,YACJ;AAAA,UACJ,OAAO;AACH,kBAAM,iBAAiB,QAAQ,OAAO,CAAC,GAAG,SAAS,OAAO,IAAI,OAAO,CAAC;AACtE,kBAAM,OAAO,CAAC,IAAI,eAAe,GAAG;AACpC,gBAAI,QAAQ,MAAM;AACd,wBAAU,KAAK,GAAG;AAAA,YACtB;AAAA,UACJ;AAAA,QACJ;AACA,aAAK,MAAM,MAAMA,MAAK,IAAI,MAAMA,OAAM,SAAS;AAC/C,aAAK,MAAM,MAAMA,MAAK,IAAI,MAAMA,OAAM,SAAS;AAC/C,aAAK,WAAW,WAAW,UAAUA,MAAK,IAAI,MAAMA,OAAM,WAAW,IAAI;AACzE,aAAK,WAAW,WAAW,UAAUA,MAAK,IAAI,MAAMA,OAAM,SAAS,IAAI;AAEvE,YAAI,QAAQ,IAAI,eAAe,MAAMC,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,MAAM;AACrH,gBAAM,QAAQ,IAAI,eAAe;AAAA,QACrC;AACA,YAAI,QAAQ,IAAI,eAAe,MAAMA,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,MAAM;AACrH,gBAAM,QAAQ,IAAI,eAAe;AAAA,QACrC;AAEA,aAAK,WAAW,WAAW,QAAQ,IAAI,YAAY,IAAI;AACvD,YAAI,OAAO,KAAK,OAAO,KAAK,UAAU;AAClC,wBAAc;AAAA,QAClB,WAAW,YAAY,OAAO;AAC1B,wBAAc;AAAA,QAClB,WAAW,MAAM,GAAG;AAChB,wBAAc;AAAA,QAClB,OAAO;AACH,wBAAc;AAAA,QAClB;AACA,aAAK,cAAc;AAEnB,gBAAQ,UAAWD,MAAK,IAAI,MAAMA,OAAM,WAAW,IAAIA,MAAK,IAAI,MAAMA,OAAM,cAAc,IAAK,MAAM;AAIrG,aAAK,iBAAkB,YAAY,MAAM,IAAK,KAAK,eAAe,IAAI,KAAK,eAAe;AAE1F,YAAI,MAAM,aAAa;AACnB,qBAAY,WAAW,OAAO,IAAK,WAAW;AAC9C,qBAAW,WAAW,eAAe,QAAQ,KAAK;AAClD,cAAI,YAAYA,MAAK,KAAK,OAAO,GAAG;AAChC,iBAAK,kBAAkB;AACvB,sBAAUA,MAAK,KAAK,OAAO;AAAA,UAC/B;AAAA,QACJ,OAAO;AACH,oBAAU,KAAK;AAAA,QACnB;AACA,aAAK,UAAU;AAEf,YAAIE,GAAE,QAAQ,QAAQ,IAAI,UAAU,CAAC,GAAG;AACpC,eAAK,kBAAkB,QAAQ,IAAI,UAAU;AAC7C,eAAK,kBAAkB;AAAA,QAC3B,OAAO;AACH,eAAK,kBAAkB;AACvB,eAAK,kBAAkB,QAAQ,IAAI,UAAU;AAC7C,cAAI,KAAK,mBAAmB,KAAK,gBAAgB,QAAQD,YAAW;AAChE,iBAAK,kBAAkB,IAAI,SAAS,KAAK,eAAe;AAAA,UAC5D;AAAA,QACJ;AAEA,aAAK,QAAQ;AAAA,MACjB;AAAA,MAEA,WAAW,SAAUK,KAAI,GAAG,GAAG;AAC3B,YAAI,SAASN,MAAK,MAAM,IAAI,KAAK,aAAa;AAC9C,eAAQ,SAAS,KAAK,UAAU,KAAK,OAAO,SAAUC,aAAY;AAAA,MACtE;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK,eACrB,SAAS,YAAY,KAAK,OAAO,aAAa,CAAC,GAC/C,SAAS,CAAC,GACV,OAAO;AACX,aAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,kBAAQ,OAAO,CAAC;AAChB,iBAAO,KAAK;AAAA,YACR,QAAQ,UAAU;AAAA,YAClB;AAAA,YACA,OAAO,KAAK,UAAU,GAAG,OAAO,aAAa;AAAA,YAC7C,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL;AACA,eAAO;AAAA,MACX;AAAA,MAEA,WAAW,SAAU,UAAU,OAAO,UAAU;AAC5C,YAAI,kBAAkB,KAAK,iBACvB,kBAAkB,KAAK,iBACvB,UAAU,KAAK,SACf,OAAO;AACX,YAAI,KAAK,SAAS;AACd,kBAAQ,QAAQ,IAAI,iBAAiB;AAAA,QACzC,OAAO;AACH,kBAAS,QAAQ,IAAK,QAAQ,IAAI,aAAa,IAAI,QAAQ,IAAI,UAAU;AAAA,QAC7E;AACA,YAAI,UAAU,KAAK,QAAQ,IAAI,WAAW,MAAMA,YAAW;AACvD,kBAAQ,QAAQ,IAAI,WAAW;AAAA,QACnC;AACA,YAAI,oBAAoB,WAAW,gBAAgB,IAAI,KAAK,IAAI;AAC5D,kBAAQ;AAAA,QACZ,WAAW,mBAAmB,gBAAgB,SAAS,UAAU;AAC7D,kBAAQ,gBAAgB,QAAQ;AAAA,QACpC;AACA,eAAOC,GAAE,QAAQ,KAAK,IAAI,MAAM,WAAW,MAAM,MAAM,IAAI;AAAA,MAC/D;AAAA;AAAA;AAAA;AAAA,MAKA,cAAc,SAAU,UAAU,WAAW;AACzC,YAAI,OAAO,KAAK,OAAO,QAAQ,GAC3B,UAAU,KAAK,SACf,cAAc,KAAK,aACnB,SAAS,CAAC,GACV,QAAQ,KAAK,OACb,UAAU,KAAK,SACf,SAAS,KAAK,QACd,IAAI,WAAW,KAAK,eACpB,iBAAiB,KAAK,gBACtB,UAAU,KAAK,SACf,GAAG,QAAQ,OAAO,QAAQ,YAAY,GAAG,UAAU,KAAK,YAAY;AAExE,eAAOA,GAAE,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACrC,mBAAW,KAAK;AAChB,cAAM,KAAK,CAAC;AACZ,iBAAS,IAAI,MAAM,IAAI;AACvB,iBAAS,IAAI,aAAa,MAAM,IAAI;AAEpC,YAAI,QAAQ;AACR,cAAI,QAAQ,IAAI,WAAW,GAAG;AAC1B,oBAAQ,YAAY,QAAQ,IAAI,WAAW,IAAI,KAAK,mBAAmB,QAAQ,IAAI,WAAW,GAAG,OAAO;AACxG,gBAAK,UAAU,IAAK,UAAU,IAAI;AAClC,mBAAO,OAAO,SAAS,GAAG,GAAG,KAAK,WAAW,GAAG,GAAG,OAAO,KAAK;AAAA,UACnE,OAAO;AACH,mBAAOD;AAAA,UACX;AAAA,QACJ;AACA,qBAAa;AACb,aAAK,IAAI,GAAG,IAAI,UAAU,KAAK;AAC3B,gBAAM,KAAK,CAAC;AAEZ,cAAI,WAAW,QAAQ,aAAa;AAChC,gBAAI,CAAC,UAAU,YAAY;AACvB;AAAA,YACJ;AACA,yBAAa;AAAA,UACjB;AAEA,cAAI,QAAQ,GAAG;AACX,qBAASD,MAAK,MAAM,kBAAmBA,MAAK,IAAI,MAAM,WAAW,IAAI,MAAO,IAAI;AAAA,UACpF,OAAO;AACH,qBAAS;AAAA,UACb;AACA,cAAI,MAAM,eAAgB,QAAQ,eAAe,YAAY,GAAI;AAC7D,gBAAI;AACJ,0BAAc;AAAA,UAClB,OAAO;AACH,gBAAI,UAAU;AACd,uBAAW;AAAA,UACf;AACA,kBAAQ,KAAK,UAAU,GAAG,KAAK,QAAQ;AACvC,cAAI,WAAW;AACX,oBAAQ,KAAK,mBAAmB,OAAO,OAAO;AAAA,UAClD;AACA,iBAAO,KAAK,OAAO,SAAS,GAAG,GAAG,KAAK,WAAW,GAAG,SAAS,GAAG,OAAO,KAAK,CAAC;AAAA,QAClF;AACA,YAAI,OAAO,WAAW,GAAG;AACrB,iBAAO,OAAO,CAAC;AAAA,QACnB;AACA,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAKD,IAAAE,GAAE,GAAG,UAAU,WAAW,WAAW,YAAYA,GAAE,GAAG,UAAU,OAAO,mBAAmB;AAAA,MACtF,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,YAAI,WAAW,SAAS,QAAQ,IAAI,UAAU,GAAG,EAAE,GAC/C,aAAa,SAAS,QAAQ,IAAI,YAAY,GAAG,EAAE;AACvD,iBAAS,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAElE,aAAK,eAAe,CAAC;AACrB,aAAK,WAAW;AAChB,aAAK,aAAa;AAClB,aAAK,gBAAgB,WAAW;AAChC,aAAK,SAASJ,GAAE,IAAI,QAAQ,MAAM;AAClC,aAAK,QAAQ,QAAS,OAAO,SAAS,YAAc,OAAO,SAAS,KAAK;AAEzE,YAAIA,GAAE,QAAQ,QAAQ,IAAI,UAAU,CAAC,GAAG;AACpC,eAAK,kBAAkB,QAAQ,IAAI,UAAU;AAC7C,eAAK,kBAAkB;AAAA,QAC3B,OAAO;AACH,eAAK,kBAAkB;AACvB,eAAK,kBAAkB,QAAQ,IAAI,UAAU;AAC7C,cAAI,KAAK,mBAAmB,KAAK,gBAAgB,QAAQD,YAAW;AAChE,iBAAK,kBAAkB,IAAI,SAAS,KAAK,eAAe;AAAA,UAC5D;AAAA,QACJ;AACA,aAAK,WAAW;AAAA,MACpB;AAAA,MAEA,WAAW,SAAUK,KAAI,GAAG,GAAG;AAC3B,eAAON,MAAK,MAAM,IAAI,KAAK,aAAa;AAAA,MAC5C;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK;AACzB,eAAO;AAAA,UACH,QAAQ,KAAK,OAAO,aAAa,MAAMC;AAAA,UACvC,OAAO,KAAK,OAAO,aAAa;AAAA,UAChC,OAAO,KAAK,UAAU,KAAK,OAAO,aAAa,GAAG,aAAa;AAAA,UAC/D,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,WAAW,SAAU,OAAO,UAAU;AAClC,YAAI,SAAS,KAAK,QACd,UAAU,KAAK,SACf,kBAAkB,KAAK,iBACvB,kBAAkB,KAAK,iBACvB,OAAO;AAEX,YAAI,oBAAoB,WAAW,gBAAgB,IAAI,KAAK,IAAI;AAC5D,kBAAQ;AAAA,QACZ,WAAW,mBAAmB,gBAAgB,SAAS,UAAU;AAC7D,kBAAQ,gBAAgB,QAAQ;AAAA,QACpC,WAAW,OAAO,QAAQ,IAAI,GAAG;AAC7B,kBAAQ,QAAQ,IAAI,aAAa;AAAA,QACrC,WAAW,OAAO,QAAQ,IAAI,GAAG;AAC7B,kBAAQ,QAAQ,IAAI,aAAa;AAAA,QACrC,OAAO;AACH,kBAAQ,QAAQ,IAAI,cAAc;AAAA,QACtC;AACA,eAAO;AAAA,MACX;AAAA,MAEA,cAAc,SAAU,UAAU,WAAW;AACzC,YAAI,SAAS,KAAK,QACd,UAAU,KAAK,SACf,SAAS,KAAK,QACd,cAAc,QAAQ,YACtB,GAAG,GAAG;AAEV,uBAAe,OAAO;AACtB,qBAAaD,MAAK,MAAM,eAAe,CAAC;AAExC,YAAI,WAAW,KAAK;AACpB,YAAI,OAAO,QAAQ,IAAI,GAAG;AACtB,cAAI;AACJ,mBAAS,aAAa;AAAA,QAC1B,WAAW,OAAO,QAAQ,IAAI,GAAG;AAC7B,cAAI;AACJ,mBAAS,aAAa;AAAA,QAC1B,OAAO;AACH,cAAI,aAAa;AACjB,mBAAS;AAAA,QACb;AACA,gBAAQ,KAAK,UAAU,OAAO,QAAQ,GAAG,QAAQ;AACjD,YAAI,UAAU,MAAM;AAChB;AAAA,QACJ;AACA,YAAI,WAAW;AACX,kBAAQ,KAAK,mBAAmB,OAAO,OAAO;AAAA,QAClD;AACA,eAAO,OAAO,SAAS,GAAG,GAAG,KAAK,WAAW,GAAG,SAAS,GAAG,OAAO,KAAK;AAAA,MAC5E;AAAA,IACJ,CAAC;AAKD,IAAAE,GAAE,GAAG,UAAU,WAAW,WAAW,YAAYA,GAAE,GAAG,UAAU,OAAO,mBAAmB;AAAA,MACtF,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,iBAAS,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAElE,aAAK,eAAe,CAAC;AACrB,aAAK,SAAS,SAASJ,GAAE,IAAI,QAAQ,MAAM;AAC3C,aAAK,MAAMF,MAAK,IAAI,MAAMA,OAAM,MAAM;AACtC,aAAK,MAAMA,MAAK,IAAI,MAAMA,OAAM,MAAM;AACtC,aAAK,QAAQ,KAAK,MAAM,KAAK;AAC7B,aAAK,QAAQ,QAAQ,QAAQ,IAAI,OAAO,MAAM,SAAS,OAAO,SAAS,IAAI,KAAK;AAChF,aAAK,WAAWA,MAAK,MAAM,QAAQ,OAAO,MAAM;AAChD,aAAK,YAAY,QAAQ,OAAO;AAChC,YAAI,QAAQ,IAAI,eAAe,MAAMC,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,KAAK,MAAM;AAC1H,eAAK,MAAM,QAAQ,IAAI,eAAe;AAAA,QAC1C;AACA,YAAI,QAAQ,IAAI,eAAe,MAAMA,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,KAAK,MAAM;AAC1H,eAAK,MAAM,QAAQ,IAAI,eAAe;AAAA,QAC1C;AACA,aAAK,WAAW;AAChB,YAAI,KAAK,QAAQ;AACb,eAAK,aAAa,QAAQ,IAAI,YAAY,MAAM,SAASD,MAAK,MAAM,KAAK,eAAe,GAAG,IAAI,QAAQ,IAAI,YAAY;AAAA,QAC3H;AAAA,MACJ;AAAA,MAEA,WAAW,SAAUM,KAAI,GAAG,GAAG;AAC3B,eAAON,MAAK,MAAM,IAAI,KAAK,SAAS;AAAA,MACxC;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK;AACzB,eAAO;AAAA,UACH,QAAQ,KAAK,OAAO,aAAa,MAAMC;AAAA,UACvC,OAAO,KAAK,OAAO,aAAa;AAAA,UAChC,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,cAAc,SAAU,UAAU,WAAW;AACzC,YAAI,SAAS,KAAK,QACd,UAAU,KAAK,SACf,MAAM,KAAK,KACX,MAAM,KAAK,KACX,QAAQ,KAAK,OACb,WAAW,KAAK,UAChB,SAAS,KAAK,QACd,eAAe,KAAK,cACpB,aAAa,KAAK,YAClB,UAAU,eAAe,YACzB,MAAM,KAAK,OAAO;AAEtB,cAAM,QAAQ,OAAO,QAAQ,GAAG,KAAK,GAAG;AACxC,YAAI,WAAW;AACf,eAAOD,MAAK,MAAM,UAAU,YAAY,MAAM,OAAO,MAAM;AAC3D,gBAAS,QAAQ,IAAI,gBAAgB,KAAK,MAAM,QAAQ,IAAI,gBAAgB,IAAK,QAAQ,IAAI,gBAAgB,IAAI,QAAQ,IAAI,WAAW;AACxI,YAAI,WAAW;AACX,kBAAQ,KAAK,mBAAmB,OAAO,OAAO;AAAA,QAClD;AACA,eAAO,OAAO,SAAS,GAAG,MAAM,GAAG,OAAO,YAAY,KAAK;AAAA,MAC/D;AAAA,IACJ,CAAC;AAKD,IAAAE,GAAE,GAAG,UAAU,SAAS,SAAS,YAAYA,GAAE,GAAG,UAAU,OAAO;AAAA,MAC/D,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,YAAI,KAAK,KAAK;AACd,eAAO,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAGhE,aAAK,SAAS,SAAS,gBAAgB,MAAM;AAE7C,eAAO,OAAO,MAAM;AACpB,aAAK,CAAC,IAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC;AAC7C,aAAK,CAAC,IAAI,OAAO,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC;AAC/C,cAAMN,MAAK,IAAI,MAAMA,OAAM,MAAM;AACjC,cAAMA,MAAK,IAAI,MAAMA,OAAM,MAAM;AACjC,YAAI,QAAQ,IAAI,MAAM,MAAMC,YAAW;AACnC,gBAAM,MAAM,IAAI,MAAM;AAAA,QAC1B,OAAO;AACH,gBAAM,QAAQ,IAAI,MAAM;AAAA,QAC5B;AACA,aAAK,MAAM;AACX,aAAK,MAAM;AACX,aAAK,QAAQ,MAAM;AACnB,aAAK,SAAS,CAAC;AACf,aAAK,cAAc,CAAC;AACpB,aAAK,aAAa,CAAC;AACnB,aAAK,QAAQ,QAAQ,QAAQ,IAAI,OAAO,MAAM,SAAS,UAAU;AACjE,aAAK,SAAS,KAAK,IAAI,WAAW,OAAO,QAAQ,QAAQ,IAAI,WAAW,CAAC;AACzE,YAAI,CAAC,OAAO,QAAQ;AAChB,eAAK,WAAW;AAAA,QACpB;AACA,aAAK,WAAW;AAAA,MACpB;AAAA,MAEA,WAAW,SAAUK,KAAI,GAAG,GAAG;AAC3B,YAAI,UAAU,KAAK,OAAO,WAAWA,KAAI,GAAG,CAAC;AAC7C,eAAQ,YAAYL,cAAa,KAAK,OAAO,OAAO,MAAMA,aAAa,KAAK,OAAO,OAAO,IAAIA;AAAA,MAClG;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK;AACzB,eAAO;AAAA,UACH,UAAU,cAAc,OAAO,GAAG,CAAC;AAAA,UACnC,OAAO,KAAK,OAAO,cAAc,OAAO,CAAC,CAAC;AAAA,UAC1C,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,iBAAiB,SAAU,WAAW;AAClC,YAAI,gBAAgB,KAAK,eACrB,UAAU,KAAK,YAAY,aAAa,GACxC;AACJ,eAAO,KAAK,OAAO,OAAO;AAC1B,gBAAQ,cAAc,OAAO,GAAG,CAAC,GAAG;AAAA,UAChC,KAAK;AACD,oBAAQ,KAAK,YAAY,cAAc,OAAO,CAAC,GAAG,SAAS;AAC3D;AAAA,UACJ,KAAK;AACD,oBAAQ,KAAK,kBAAkB,SAAS;AACxC;AAAA,UACJ,KAAK;AACD,oBAAQ,KAAK,aAAa,SAAS;AACnC;AAAA,QACR;AACA,aAAK,YAAY,aAAa,IAAI,MAAM;AACxC,aAAK,OAAO,MAAM,EAAE,IAAI;AACxB,aAAK,OAAO,iBAAiB,SAAS,KAAK;AAAA,MAC/C;AAAA,MAEA,aAAa,SAAU,IAAI,WAAW;AAClC,YAAI,WAAW,KAAK,OAAO,EAAE,GACzB,aAAaD,MAAK,MAAM,KAAK,gBAAgB,WAAW,KAAK,OAAO,KAAK,MAAM,GAC/E,QAAQ,KAAK,QAAQ,IAAI,aAAa,EAAE,KAAK,CAAC;AAClD,YAAI,WAAW;AACX,kBAAQ,KAAK,mBAAmB,OAAO,KAAK,OAAO;AAAA,QACvD;AACA,eAAO,KAAK,OAAO,SAAS,GAAG,GAAG,aAAa,GAAG,KAAK,eAAe,GAAG,OAAO,KAAK;AAAA,MACzF;AAAA,MAEA,mBAAmB,SAAU,WAAW;AACpC,YAAI,UAAU,KAAK,OAAO,CAAC,GACvB,YAAYA,MAAK,MAAM,KAAK,gBAAgB,UAAU,KAAK,OAAO,KAAK,MAAM,GAC7E,QAAQ,KAAK,QAAQ,IAAI,kBAAkB;AAC/C,YAAI,WAAW;AACX,kBAAQ,KAAK,mBAAmB,OAAO,KAAK,OAAO;AAAA,QACvD;AACA,eAAO,KAAK,OAAO;AAAA,UAAS;AAAA,UAAGA,MAAK,MAAM,KAAK,eAAe,GAAG;AAAA,UAAG,YAAY;AAAA,UAC5EA,MAAK,MAAM,KAAK,eAAe,GAAG,IAAI;AAAA,UAAG;AAAA,UAAO;AAAA,QAAK;AAAA,MAC7D;AAAA,MAEA,cAAc,SAAU,WAAW;AAC/B,YAAI,YAAY,KAAK,OAAO,CAAC,GACzB,IAAIA,MAAK,MAAM,KAAK,gBAAgB,YAAY,KAAK,OAAO,KAAK,SAAU,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAE,GAC/G,YAAYA,MAAK,MAAM,KAAK,eAAe,GAAI,GAC/C,eAAe,KAAK,eAAgB,YAAY,GAChD,QAAQ,KAAK,QAAQ,IAAI,aAAa;AAC1C,YAAI,WAAW;AACX,kBAAQ,KAAK,mBAAmB,OAAO,KAAK,OAAO;AAAA,QACvD;AACA,eAAO,KAAK,OAAO,SAAS,GAAG,WAAW,KAAK,QAAQ,IAAI,aAAa,IAAI,GAAG,eAAe,GAAG,OAAO,KAAK;AAAA,MACjH;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,OAAO,KAAK,OAAO,QACnB,SAAS,KAAK,QACd,GAAG;AACP,YAAI,CAAC,OAAO,OAAO,OAAO,KAAK,IAAI,GAAG;AAClC;AAAA,QACJ;AACA,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,kBAAQ,KAAK,YAAY,CAAC,EAAE,OAAO;AACnC,eAAK,OAAO,MAAM,EAAE,IAAI,MAAM;AAC9B,eAAK,YAAY,MAAM,CAAC,IAAI,MAAM;AAAA,QACtC;AACA,YAAI,KAAK,OAAO,CAAC,MAAM,MAAM;AACzB,kBAAQ,KAAK,kBAAkB,EAAE,OAAO;AACxC,eAAK,OAAO,MAAM,EAAE,IAAI;AACxB,eAAK,YAAY,KAAK,MAAM;AAAA,QAChC;AACA,YAAI,KAAK,OAAO,CAAC,MAAM,MAAM;AACzB,kBAAQ,KAAK,aAAa,EAAE,OAAO;AACnC,eAAK,OAAO,MAAM,EAAE,IAAI;AACxB,eAAK,YAAY,KAAK,MAAM;AAAA,QAChC;AACA,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ,CAAC;AAKD,IAAAE,GAAE,GAAG,UAAU,MAAM,MAAM,YAAYA,GAAE,GAAG,UAAU,OAAO;AAAA,MACzD,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,YAAI,QAAQ,GAAG;AAEf,YAAI,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAE7D,aAAK,SAAS,CAAC;AACf,aAAK,cAAc,CAAC;AACpB,aAAK,SAAS,SAASJ,GAAE,IAAI,QAAQ,MAAM;AAE3C,YAAI,QAAQ,IAAI,OAAO,MAAM,QAAQ;AACjC,eAAK,QAAQ,KAAK;AAAA,QACtB;AAEA,YAAI,OAAO,SAAS,GAAG;AACnB,eAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,qBAAS,OAAO,CAAC;AAAA,UACrB;AAAA,QACJ;AACA,aAAK,QAAQ;AACb,aAAK,WAAW;AAChB,aAAK,SAASF,MAAK,MAAMA,MAAK,IAAI,KAAK,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,MAC9E;AAAA,MAEA,WAAW,SAAUM,KAAI,GAAG,GAAG;AAC3B,YAAI,UAAU,KAAK,OAAO,WAAWA,KAAI,GAAG,CAAC;AAC7C,eAAQ,YAAYL,cAAa,KAAK,OAAO,OAAO,MAAMA,aAAa,KAAK,OAAO,OAAO,IAAIA;AAAA,MAClG;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK;AACzB,eAAO;AAAA,UACH,QAAQ,KAAK,OAAO,aAAa,MAAMA;AAAA,UACvC,OAAO,KAAK,OAAO,aAAa;AAAA,UAChC,SAAS,KAAK,OAAO,aAAa,IAAI,KAAK,QAAQ;AAAA,UACnD,OAAO,KAAK,QAAQ,IAAI,aAAa,EAAE,gBAAgB,KAAK,QAAQ,IAAI,aAAa,EAAE,MAAM;AAAA,UAC7F,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,iBAAiB,SAAU,WAAW;AAClC,YAAI,gBAAgB,KAAK,eACpB,WAAW,KAAK,YAAY,eAAe,SAAS,GACpD,UAAU,KAAK,YAAY,aAAa;AAC7C,eAAO,KAAK,OAAO,OAAO;AAC1B,aAAK,OAAO,iBAAiB,SAAS,QAAQ;AAC9C,aAAK,YAAY,aAAa,IAAI,SAAS;AAC3C,aAAK,OAAO,SAAS,EAAE,IAAI;AAAA,MAC/B;AAAA,MAEA,aAAa,SAAU,UAAU,WAAW;AACxC,YAAI,SAAS,KAAK,QACd,UAAU,KAAK,SACf,SAAS,KAAK,QACd,cAAc,QAAQ,IAAI,aAAa,GACvC,SAAS,QAAQ,IAAI,QAAQ,GAC7B,SAAS,IAAID,MAAK,IAClB,SAAS,KAAK,QACd,QAAQ,KAAK,OACb,OAAO,SAAU,IAAEA,MAAK,MAAK,SAAO,OAAO,GAC3C,OAAO,KAAK,GAAG,MAAM;AAEzB,eAAO,OAAO;AACd,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,kBAAQ;AACR,gBAAM;AACN,cAAI,QAAQ,GAAG;AACX,kBAAM,OAAQ,UAAU,OAAO,CAAC,IAAI;AAAA,UACxC;AACA,cAAI,aAAa,GAAG;AAChB,oBAAQ,QAAQ,IAAI,aAAa,EAAE,IAAI,QAAQ,IAAI,aAAa,EAAE,MAAM;AACxE,gBAAI,WAAW;AACX,sBAAQ,KAAK,mBAAmB,OAAO,OAAO;AAAA,YAClD;AAEA,mBAAO,OAAO,aAAa,QAAQ,QAAQ,SAAS,aAAa,OAAO,KAAKC,YAAW,KAAK;AAAA,UACjG;AACA,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,SAAS,KAAK,QACd,SAAS,KAAK,QACd,UAAU,KAAK,SACf,SAAS,KAAK,QACd,cAAc,QAAQ,IAAI,aAAa,GACvC,aAAa,QAAQ,IAAI,YAAY,GACrC,OAAO;AAEX,YAAI,CAAC,IAAI,OAAO,OAAO,KAAK,IAAI,GAAG;AAC/B;AAAA,QACJ;AACA,YAAI,aAAa;AACb,iBAAO;AAAA,YAAW;AAAA,YAAQ;AAAA,YAAQD,MAAK,MAAM,SAAU,cAAc,CAAE;AAAA,YACnE,QAAQ,IAAI,aAAa;AAAA,YAAGC;AAAA,YAAW;AAAA,UAAW,EAAE,OAAO;AAAA,QACnE;AACA,aAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,cAAI,OAAO,CAAC,GAAG;AACX,oBAAQ,KAAK,YAAY,CAAC,EAAE,OAAO;AACnC,iBAAK,YAAY,CAAC,IAAI,MAAM;AAC5B,iBAAK,OAAO,MAAM,EAAE,IAAI;AAAA,UAC5B;AAAA,QACJ;AACA,YAAI,YAAY;AACZ,iBAAO;AAAA,YAAW;AAAA,YAAQ;AAAA,YAAQ,SAAS;AAAA,YAAY,QAAQ,IAAI,YAAY;AAAA,YAC3E,QAAQ,IAAI,YAAY;AAAA,YAAG;AAAA,UAAC,EAAE,OAAO;AAAA,QAC7C;AACA,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ,CAAC;AAKD,IAAAC,GAAE,GAAG,UAAU,MAAM,MAAM,YAAYA,GAAE,GAAG,UAAU,OAAO;AAAA,MACzD,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,YAAI,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAC7D,aAAK,SAASJ,GAAE,IAAI,QAAQ,MAAM;AAClC,aAAK,QAAQ,QAAQ,IAAI,OAAO,MAAM,SAAS,UAAU;AACzD,aAAK,WAAW;AAChB,YAAI,CAAC,KAAK,OAAO,QAAQ;AACrB,eAAK,WAAW;AAAA,QACpB;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,WAAY;AACnB,eAAO;AAAA,MACX;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,SAAS;AAAA,UACT,EAAE,OAAO,MAAM,OAAO,KAAK,UAAU,CAAC,EAAE;AAAA,UACxC,EAAE,OAAO,OAAO,OAAO,KAAK,UAAU,CAAC,EAAE;AAAA,UACzC,EAAE,OAAO,MAAM,OAAO,KAAK,UAAU,CAAC,EAAE;AAAA,QAC5C;AACA,YAAI,KAAK,aAAaD,YAAW;AAC7B,iBAAO,KAAK,EAAE,OAAO,MAAM,OAAO,KAAK,SAAQ,CAAC;AAAA,QACpD;AACA,YAAI,KAAK,aAAaA,YAAW;AAC7B,iBAAO,KAAK,EAAE,OAAO,MAAM,OAAO,KAAK,SAAQ,CAAC;AAAA,QACpD;AACA,YAAI,KAAK,aAAaA,YAAW;AAC7B,iBAAO,KAAK,EAAE,OAAO,MAAM,OAAO,KAAK,SAAQ,CAAC;AAAA,QACpD;AACA,YAAI,KAAK,aAAaA,YAAW;AAC7B,iBAAO,KAAK,EAAE,OAAO,MAAM,OAAO,KAAK,SAAQ,CAAC;AAAA,QACpD;AACA,eAAO;AAAA,MACX;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,SAAS,KAAK,QACd,SAAS,KAAK,QACd,OAAO,OAAO,QACd,UAAU,KAAK,SACf,cAAc,KAAK,aACnB,eAAe,KAAK,cACpB,WAAW,QAAQ,IAAI,eAAe,MAAMA,aAAYD,MAAK,IAAI,MAAMA,OAAM,MAAM,IAAI,QAAQ,IAAI,eAAe,GAClH,WAAW,QAAQ,IAAI,eAAe,MAAMC,aAAYD,MAAK,IAAI,MAAMA,OAAM,MAAM,IAAI,QAAQ,IAAI,eAAe,GAClH,aAAa,GACb,UAAU,UAAU,KAAK,IAAI,IAAI,IAAI,UAAU,UAAU,GACzD,MAAM;AAEV,YAAI,CAAC,IAAI,OAAO,OAAO,KAAK,IAAI,GAAG;AAC/B;AAAA,QACJ;AAEA,YAAI,QAAQ,IAAI,KAAK,GAAG;AACpB,cAAI,QAAQ,IAAI,cAAc,KAAK,OAAO,SAAS,GAAG;AAClD,uBAAW,OAAO,CAAC;AACnB,uBAAW,OAAO,CAAC;AACnB,iBAAK,OAAO,CAAC;AACb,iBAAK,OAAO,CAAC;AACb,iBAAK,OAAO,CAAC;AACb,uBAAW,OAAO,CAAC;AACnB,uBAAW,OAAO,CAAC;AAAA,UACvB,OAAO;AACH,uBAAW,OAAO,CAAC;AACnB,iBAAK,OAAO,CAAC;AACb,iBAAK,OAAO,CAAC;AACb,iBAAK,OAAO,CAAC;AACb,uBAAW,OAAO,CAAC;AAAA,UACvB;AAAA,QACJ,OAAO;AACH,iBAAO,KAAK,SAAU,GAAG,GAAG;AAAE,mBAAO,IAAI;AAAA,UAAG,CAAC;AAC7C,eAAK,SAAS,QAAQ,CAAC;AACvB,eAAK,SAAS,QAAQ,CAAC;AACvB,eAAK,SAAS,QAAQ,CAAC;AACvB,gBAAM,KAAK;AACX,cAAI,QAAQ,IAAI,cAAc,GAAG;AAC7B,uBAAW,WAAWC;AACtB,iBAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,kBAAI,aAAaA,cAAa,OAAO,CAAC,IAAI,KAAM,MAAM,QAAQ,IAAI,YAAY,GAAI;AAC9E,2BAAW,OAAO,CAAC;AAAA,cACvB;AACA,kBAAI,OAAO,CAAC,IAAI,KAAM,MAAM,QAAQ,IAAI,YAAY,GAAI;AACpD,2BAAW,OAAO,CAAC;AAAA,cACvB;AAAA,YACJ;AACA,uBAAW,OAAO,CAAC;AACnB,uBAAW,OAAO,OAAO,CAAC;AAAA,UAC9B,OAAO;AACH,uBAAW,OAAO,CAAC;AACnB,uBAAW,OAAO,OAAO,CAAC;AAAA,UAC9B;AAAA,QACJ;AACA,aAAK,YAAY,CAAC,IAAI,IAAI,EAAE;AAC5B,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,WAAW;AAEhB,mBAAW,eAAe,WAAW,WAAW;AAChD,YAAI,QAAQ,IAAI,cAAc,GAAG;AAC7B,uBAAaD,MAAK,KAAK,QAAQ,IAAI,YAAY,CAAC;AAChD,yBAAe,IAAIA,MAAK,KAAK,QAAQ,IAAI,YAAY,CAAC;AACtD,qBAAW,eAAe,WAAW,WAAW;AAChD,cAAI,WAAW,UAAU;AACrB,mBAAO;AAAA,eAAY,WAAW,YAAY,WAAW;AAAA,cACjD,eAAe;AAAA,cACf,QAAQ,IAAI,YAAY;AAAA,cACxB,QAAQ,IAAI,kBAAkB;AAAA,cAC9B,QAAQ,IAAI,kBAAkB;AAAA,YAAC,EAAE,OAAO;AAAA,UAChD;AACA,cAAI,WAAW,UAAU;AACrB,mBAAO;AAAA,eAAY,WAAW,YAAY,WAAW;AAAA,cACjD,eAAe;AAAA,cACf,QAAQ,IAAI,YAAY;AAAA,cACxB,QAAQ,IAAI,kBAAkB;AAAA,cAC9B,QAAQ,IAAI,kBAAkB;AAAA,YAAC,EAAE,OAAO;AAAA,UAChD;AAAA,QACJ;AAGA,eAAO;AAAA,UACHA,MAAK,OAAO,KAAK,YAAY,WAAW,UAAU;AAAA,UAClDA,MAAK,MAAM,eAAe,GAAG;AAAA,UAC7BA,MAAK,OAAO,KAAK,MAAM,QAAQ;AAAA,UAC/BA,MAAK,MAAM,eAAe,GAAG;AAAA,UAC7B,QAAQ,IAAI,cAAc;AAAA,UAC1B,QAAQ,IAAI,cAAc;AAAA,QAAC,EAAE,OAAO;AAExC,eAAO;AAAA,UACHA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACxDA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3BA,MAAK,OAAO,KAAK,YAAY,WAAW,UAAU;AAAA,UAClDA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3B,QAAQ,IAAI,WAAW;AAAA,QAAC,EAAE,OAAO;AACrC,eAAO;AAAA,UACHA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACxDA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3BA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACxDA,MAAK,MAAM,eAAe,eAAe,CAAC;AAAA,UAC1C,QAAQ,IAAI,cAAc;AAAA,QAAC,EAAE,OAAO;AAExC,eAAO;AAAA,UAASA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACpEA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3BA,MAAK,OAAO,KAAK,YAAY,WAAW,UAAU;AAAA,UAClDA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3B,QAAQ,IAAI,WAAW;AAAA,QAAC,EAAE,OAAO;AACrC,eAAO;AAAA,UACHA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACxDA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3BA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACxDA,MAAK,MAAM,eAAe,eAAe,CAAC;AAAA,UAC1C,QAAQ,IAAI,cAAc;AAAA,QAAC,EAAE,OAAO;AAExC,eAAO;AAAA,UACHA,MAAK,OAAO,KAAK,YAAY,WAAW,UAAU;AAAA,UAClDA,MAAK,MAAM,eAAe,GAAG;AAAA,UAC7BA,MAAK,OAAO,KAAK,YAAY,WAAW,UAAU;AAAA,UAClDA,MAAK,MAAM,eAAe,GAAG;AAAA,UAC7B,QAAQ,IAAI,aAAa;AAAA,QAAC,EAAE,OAAO;AACvC,YAAI,QAAQ,IAAI,QAAQ,GAAG;AACvB,iBAAOA,MAAK,KAAK,QAAQ,IAAI,YAAY,CAAC;AAC1C,iBAAO;AAAA,YACHA,MAAK,OAAO,QAAQ,IAAI,QAAQ,IAAI,YAAY,WAAW,UAAU;AAAA,YACrEA,MAAK,MAAO,eAAe,IAAK,IAAI;AAAA,YACpCA,MAAK,OAAO,QAAQ,IAAI,QAAQ,IAAI,YAAY,WAAW,UAAU;AAAA,YACrEA,MAAK,MAAO,eAAe,IAAK,IAAI;AAAA,YACpC,QAAQ,IAAI,aAAa;AAAA,UAAC,EAAE,OAAO;AACvC,iBAAO;AAAA,YACHA,MAAK,OAAO,QAAQ,IAAI,QAAQ,IAAI,YAAY,WAAW,aAAa,IAAI;AAAA,YAC5EA,MAAK,MAAM,eAAe,CAAC;AAAA,YAC3BA,MAAK,OAAO,QAAQ,IAAI,QAAQ,IAAI,YAAY,WAAW,aAAa,IAAI;AAAA,YAC5EA,MAAK,MAAM,eAAe,CAAC;AAAA,YAC3B,QAAQ,IAAI,aAAa;AAAA,UAAC,EAAE,OAAO;AAAA,QAC3C;AACA,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ,CAAC;AAKD,aAAS,YAAY;AAAA,MACjB,MAAM,SAAU,QAAQ,IAAI,MAAM,MAAM;AACpC,aAAK,SAAS;AACd,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,OAAO;AAAA,MAChB;AAAA,MACA,QAAQ,WAAY;AAChB,aAAK,OAAO,YAAY,IAAI;AAC5B,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAED,mBAAe,YAAY;AAAA,MACvB,UAAU;AAAA,MAEV,MAAM,SAAU,OAAO,QAAQ,QAAQ;AACnC,YAAI,CAAC,OAAO;AACR;AAAA,QACJ;AACA,aAAK,QAAQ;AACb,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,cAAc;AACnB,YAAI,OAAO,CAAC,GAAG;AACX,mBAAS,OAAO,CAAC;AAAA,QACrB;AACA,QAAAE,GAAE,KAAK,QAAQ,gBAAgB,IAAI;AAAA,MACvC;AAAA,MAEA,UAAU,SAAU,IAAI,IAAI,IAAI,IAAI,WAAW,WAAW;AACtD,eAAO,KAAK,UAAU,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,WAAW,SAAS;AAAA,MACpE;AAAA,MAEA,WAAW,SAAU,MAAM,WAAW,WAAW,WAAW;AACxD,eAAO,KAAK,UAAU,SAAS,CAAC,MAAM,WAAW,WAAW,SAAS,CAAC;AAAA,MAC1E;AAAA,MAEA,YAAY,SAAU,GAAG,GAAG,QAAQ,WAAW,WAAW,WAAW;AACjE,eAAO,KAAK,UAAU,UAAU,CAAC,GAAG,GAAG,QAAQ,WAAW,WAAW,SAAS,CAAC;AAAA,MACnF;AAAA,MAEA,cAAc,SAAU,GAAG,GAAG,QAAQ,YAAY,UAAU,WAAW,WAAW;AAC9E,eAAO,KAAK,UAAU,YAAY,CAAC,GAAG,GAAG,QAAQ,YAAY,UAAU,WAAW,SAAS,CAAC;AAAA,MAChG;AAAA,MAEA,UAAU,SAAU,GAAG,GAAG,OAAO,QAAQ,WAAW,WAAW;AAC3D,eAAO,KAAK,UAAU,QAAQ,CAAC,GAAG,GAAG,OAAO,QAAQ,WAAW,SAAS,CAAC;AAAA,MAC7E;AAAA,MAEA,YAAY,WAAY;AACpB,eAAO,KAAK;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA,MAKA,gBAAgB,WAAY;AACxB,eAAO,KAAK;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA,MAKA,OAAO,WAAY;AACf,cAAM,uBAAuB;AAAA,MACjC;AAAA,MAEA,SAAS,SAAUI,KAAI,QAAQ;AAC3B,QAAAJ,GAAE,MAAM,EAAE,KAAKI,GAAE;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA,MAKA,qBAAqB,SAAU,OAAO,QAAQ,QAAQ;AAElD,YAAI;AACJ,gBAAQ,KAAK,SAAS,KAAK,MAAM;AACjC,YAAI,OAAO;AACP,eAAK,cAAc,MAAM,CAAC;AAAA,QAC9B,OAAO;AACH,eAAK,cAAcJ,GAAE,MAAM,EAAE,OAAO;AAAA,QACxC;AACA,gBAAQ,KAAK,SAAS,KAAK,KAAK;AAChC,YAAI,OAAO;AACP,eAAK,aAAa,MAAM,CAAC;AAAA,QAC7B,OAAO;AACH,eAAK,aAAaA,GAAE,MAAM,EAAE,MAAM;AAAA,QACtC;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,SAAU,WAAW,WAAW;AACvC,YAAI,KAAK;AACT,kBAAU,QAAQ,EAAE;AACpB,eAAO,IAAI,OAAO,MAAM,IAAI,WAAW,SAAS;AAAA,MACpD;AAAA;AAAA;AAAA;AAAA,MAKA,aAAa,SAAU,OAAO;AAC1B,cAAM,6BAA6B;AAAA,MACvC;AAAA;AAAA;AAAA;AAAA,MAKA,kBAAkB,SAAU,SAAS,OAAO;AACxC,cAAM,kCAAkC;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA,MAKA,kBAAkB,SAAU,SAAS,OAAO;AACxC,cAAM,kCAAkC;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA,MAKA,eAAe,SAAU,SAAS;AAC9B,cAAM,+BAA+B;AAAA,MACzC;AAAA;AAAA;AAAA;AAAA,MAKA,YAAY,SAAUI,KAAI,GAAG,GAAG;AAC5B,cAAM,4BAA4B;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA,MAKA,QAAQ,WAAY;AAChB,cAAM,wBAAwB;AAAA,MAClC;AAAA,IACJ,CAAC;AAED,qBAAiB,YAAY,cAAc;AAAA,MACvC,MAAM,SAAU,OAAO,QAAQ,QAAQ,UAAU;AAC7C,uBAAe,OAAO,KAAK,KAAK,MAAM,OAAO,QAAQ,MAAM;AAC3D,aAAK,SAASP,UAAS,cAAc,QAAQ;AAC7C,YAAI,OAAO,CAAC,GAAG;AACX,mBAAS,OAAO,CAAC;AAAA,QACrB;AACA,QAAAG,GAAE,KAAK,QAAQ,gBAAgB,IAAI;AACnC,QAAAA,GAAE,KAAK,MAAM,EAAE,IAAI,EAAE,SAAS,gBAAgB,OAAc,QAAgB,eAAe,MAAM,CAAC;AAClG,aAAK,QAAQ,KAAK,QAAQ,MAAM;AAChC,aAAK,oBAAoB,OAAO,QAAQ,KAAK,MAAM;AACnD,aAAK,OAAO,QAAQ,KAAK;AACzB,aAAK,OAAO,SAAS,KAAK;AAC1B,aAAK,WAAW;AAChB,aAAK,SAAS,CAAC;AACf,aAAK,WAAW,CAAC;AACjB,aAAK,uBAAuBD;AAC5B,QAAAC,GAAE,KAAK,MAAM,EAAE,IAAI,EAAC,OAAO,KAAK,YAAY,QAAQ,KAAK,YAAW,CAAC;AAAA,MACzE;AAAA,MAEA,aAAa,SAAU,WAAW,WAAW,WAAW;AACpD,YAAI,UAAU,KAAK,OAAO,WAAW,IAAI;AACzC,YAAI,cAAcD,YAAW;AACzB,kBAAQ,cAAc;AAAA,QAC1B;AACA,gBAAQ,YAAY,cAAcA,aAAY,IAAI;AAClD,YAAI,cAAcA,YAAW;AACzB,kBAAQ,YAAY;AAAA,QACxB;AACA,eAAO;AAAA,MACX;AAAA,MAEA,OAAO,WAAY;AACf,YAAI,UAAU,KAAK,YAAY;AAC/B,gBAAQ,UAAU,GAAG,GAAG,KAAK,YAAY,KAAK,WAAW;AACzD,aAAK,SAAS,CAAC;AACf,aAAK,WAAW,CAAC;AACjB,aAAK,uBAAuBA;AAAA,MAChC;AAAA,MAEA,YAAY,SAAU,SAAS,MAAM,WAAW,WAAW,WAAW;AAClE,YAAI,UAAU,KAAK,YAAY,WAAW,WAAW,SAAS,GAC1D,GAAG;AACP,gBAAQ,UAAU;AAClB,gBAAQ,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG;AACjD,aAAK,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,MAAM,KAAK;AAC3C,kBAAQ,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG;AAAA,QACrD;AACA,YAAI,cAAcA,YAAW;AACzB,kBAAQ,OAAO;AAAA,QACnB;AACA,YAAI,cAAcA,YAAW;AACzB,kBAAQ,KAAK;AAAA,QACjB;AACA,YAAI,KAAK,YAAYA,cAAa,KAAK,YAAYA,cAC/C,QAAQ,cAAc,KAAK,SAAS,KAAK,OAAO,GAAG;AACnD,eAAK,uBAAuB;AAAA,QAChC;AAAA,MACJ;AAAA,MAEA,aAAa,SAAU,SAAS,GAAG,GAAG,QAAQ,WAAW,WAAW,WAAW;AAC3E,YAAI,UAAU,KAAK,YAAY,WAAW,WAAW,SAAS;AAC9D,gBAAQ,UAAU;AAClB,gBAAQ,IAAI,GAAG,GAAG,QAAQ,GAAG,IAAID,MAAK,IAAI,KAAK;AAC/C,YAAI,KAAK,YAAYC,cAAa,KAAK,YAAYA,cAC/C,QAAQ,cAAc,KAAK,SAAS,KAAK,OAAO,GAAG;AACnD,eAAK,uBAAuB;AAAA,QAChC;AACA,YAAI,cAAcA,YAAW;AACzB,kBAAQ,OAAO;AAAA,QACnB;AACA,YAAI,cAAcA,YAAW;AACzB,kBAAQ,KAAK;AAAA,QACjB;AAAA,MACJ;AAAA,MAEA,eAAe,SAAU,SAAS,GAAG,GAAG,QAAQ,YAAY,UAAU,WAAW,WAAW;AACxF,YAAI,UAAU,KAAK,YAAY,WAAW,SAAS;AACnD,gBAAQ,UAAU;AAClB,gBAAQ,OAAO,GAAG,CAAC;AACnB,gBAAQ,IAAI,GAAG,GAAG,QAAQ,YAAY,UAAU,KAAK;AACrD,gBAAQ,OAAO,GAAG,CAAC;AACnB,gBAAQ,UAAU;AAClB,YAAI,cAAcA,YAAW;AACzB,kBAAQ,OAAO;AAAA,QACnB;AACA,YAAI,WAAW;AACX,kBAAQ,KAAK;AAAA,QACjB;AACA,YAAI,KAAK,YAAYA,cAAa,KAAK,YAAYA,cAC/C,QAAQ,cAAc,KAAK,SAAS,KAAK,OAAO,GAAG;AACnD,eAAK,uBAAuB;AAAA,QAChC;AAAA,MACJ;AAAA,MAEA,WAAW,SAAU,SAAS,GAAG,GAAG,OAAO,QAAQ,WAAW,WAAW;AACrE,eAAO,KAAK,WAAW,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,SAAS;AAAA,MACpI;AAAA,MAEA,aAAa,SAAU,OAAO;AAC1B,aAAK,OAAO,MAAM,EAAE,IAAI;AACxB,aAAK,SAAS,KAAK,MAAM,EAAE;AAC3B,aAAK,cAAc,MAAM;AACzB,eAAO,MAAM;AAAA,MACjB;AAAA,MAEA,kBAAkB,SAAU,SAAS,OAAO;AACxC,YAAI,WAAW,KAAK,UAChB;AACJ,aAAK,OAAO,MAAM,EAAE,IAAI;AACxB,aAAK,IAAI,SAAS,QAAQ,OAAM;AAC5B,cAAI,SAAS,CAAC,KAAK,SAAS;AACxB,qBAAS,CAAC,IAAI,MAAM;AAAA,UACxB;AAAA,QACJ;AACA,eAAO,KAAK,OAAO,OAAO;AAAA,MAC9B;AAAA,MAEA,mBAAmB,SAAU,UAAU,QAAQ;AAC3C,YAAI,WAAW,KAAK,UAChB,WAAW,CAAC,GACZ,KAAK,GAAG;AAEZ,aAAK,IAAI,SAAS,QAAQ,OAAM;AAC5B,mBAAS,SAAS,CAAC,CAAC,IAAI;AAAA,QAC5B;AACA,aAAK,IAAI,SAAS,QAAQ,OAAM;AAC5B,gBAAM,SAAS,CAAC;AAChB,cAAI,SAAS,GAAG,GAAG;AACf,qBAAS,OAAO,GAAG,CAAC;AACpB,mBAAO,KAAK,OAAO,GAAG;AACtB,oBAAQ;AAAA,UACZ;AAAA,QACJ;AACA,aAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,mBAAS,OAAO,OAAO,GAAG,OAAO,CAAC,EAAE,EAAE;AACtC,eAAK,OAAO,OAAO,CAAC,EAAE,EAAE,IAAI,OAAO,CAAC;AAAA,QACxC;AAAA,MAEJ;AAAA,MAEA,kBAAkB,SAAU,SAAS,OAAO;AACxC,YAAI,WAAW,KAAK,UAChB;AACJ,aAAK,IAAI,SAAS,QAAQ,OAAM;AAC5B,cAAI,SAAS,CAAC,MAAM,SAAS;AACzB,qBAAS,OAAO,IAAI,GAAG,GAAG,MAAM,EAAE;AAClC,iBAAK,OAAO,MAAM,EAAE,IAAI;AACxB;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MAEA,eAAe,SAAU,SAAS;AAC9B,YAAI,WAAW,KAAK,UAChB;AACJ,aAAK,IAAI,SAAS,QAAQ,OAAM;AAC5B,cAAI,SAAS,CAAC,MAAM,SAAS;AACzB,qBAAS,OAAO,GAAG,CAAC;AACpB;AAAA,UACJ;AAAA,QACJ;AACA,eAAO,KAAK,OAAO,OAAO;AAAA,MAC9B;AAAA,MAEA,YAAY,SAAUK,KAAI,GAAG,GAAG;AAC5B,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,OAAO;AACZ,eAAO,KAAK;AAAA,MAChB;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,WAAW,KAAK,UAChB,SAAS,KAAK,QACdK,cAAa,SAAS,QACtB,UAAU,KAAK,YAAY,GAC3B,SAAS,OAAO;AACpB,gBAAQ,UAAU,GAAG,GAAG,KAAK,YAAY,KAAK,WAAW;AACzD,aAAK,IAAI,GAAG,IAAIA,aAAY,KAAK;AAC7B,oBAAU,SAAS,CAAC;AACpB,kBAAQ,OAAO,OAAO;AACtB,eAAK,UAAU,MAAM,IAAI,EAAE,MAAM,MAAM,MAAM,IAAI;AAAA,QACrD;AACA,YAAI,CAAC,KAAK,UAAU;AAEhB,eAAK,SAAS,CAAC;AACf,eAAK,WAAW,CAAC;AAAA,QACrB;AAAA,MACJ;AAAA,IAEJ,CAAC;AAED,kBAAc,YAAY,cAAc;AAAA,MACpC,MAAM,SAAU,OAAO,QAAQ,QAAQ;AACnC,YAAI;AACJ,oBAAY,OAAO,KAAK,KAAK,MAAM,OAAO,QAAQ,MAAM;AACxD,YAAI,OAAO,CAAC,GAAG;AACX,mBAAS,OAAO,CAAC;AAAA,QACrB;AACA,QAAAT,GAAE,KAAK,QAAQ,gBAAgB,IAAI;AACnC,aAAK,SAASH,UAAS,cAAc,MAAM;AAC3C,QAAAG,GAAE,KAAK,MAAM,EAAE,IAAI,EAAE,SAAS,gBAAgB,UAAU,YAAY,UAAU,UAAU,OAAc,QAAgB,QAAQ,OAAO,SAAS,OAAO,eAAe,MAAK,CAAC;AAC1K,aAAK,QAAQ,KAAK,QAAQ,MAAM;AAChC,aAAK,oBAAoB,OAAO,QAAQ,KAAK,MAAM;AACnD,aAAK,OAAO,QAAQ,KAAK;AACzB,aAAK,OAAO,SAAS,KAAK;AAC1B,kBAAU,2CAA2C,KAAK,aAAa,MAAM,KAAK,cAAc,mDACtC,KAAK,aAAa,eAAe,KAAK,cAAc;AAC9G,aAAK,OAAO,mBAAmB,aAAa,OAAO;AACnD,aAAK,QAAQA,GAAE,KAAK,MAAM,EAAE,SAAS,EAAE,CAAC;AACxC,aAAK,WAAW;AAChB,aAAK,YAAY;AAAA,MACrB;AAAA,MAEA,YAAY,SAAU,SAAS,MAAM,WAAW,WAAW,WAAW;AAClE,YAAI,QAAQ,CAAC,GACT,SAAS,QAAQ,MAAM,QAAQ,KAAK,MAAM;AAC9C,aAAK,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,MAAM,KAAK;AAC3C,gBAAM,CAAC,IAAI,KAAM,KAAK,CAAC,EAAE,CAAC,IAAK,MAAO,KAAK,CAAC,EAAE,CAAC;AAAA,QACnD;AACA,kBAAU,MAAM,OAAO,GAAG,CAAC;AAC3B,oBAAY,cAAcD,aAAY,IAAI;AAC1C,iBAAS,cAAcA,aAAY,sBAAsB,oBAAoB,YAAY,sBAAsB,YAAY;AAC3H,eAAO,cAAcA,aAAY,oBAAoB,iBAAiB,YAAY;AAClF,iBAAS,MAAM,CAAC,MAAM,MAAM,MAAM,SAAS,CAAC,IAAI,OAAO;AACvD,cAAM,2CAA2C,KAAK,aAAa,MAAM,KAAK,cAAc,oBACrE,UAAU,OAC5B,SACA,OACD,uDAAuD,KAAK,cAAc,cAAc,KAAK,aAAa,0CAC5F,UAAU,QAAQ,MAAM,KAAK,IAAI,IAAI,MAAM,SAAS;AAEtE,eAAO;AAAA,MACX;AAAA,MAEA,aAAa,SAAU,SAAS,GAAG,GAAG,QAAQ,WAAW,WAAW,WAAW;AAC3E,YAAI,QAAQ,MAAM;AAClB,aAAK;AACL,aAAK;AACL,iBAAS,cAAcA,aAAY,sBAAsB,oBAAoB,YAAY,sBAAsB,YAAY;AAC3H,eAAO,cAAcA,aAAY,oBAAoB,iBAAiB,YAAY;AAClF,cAAM,0BACiB,UAAU,OAC7B,SACA,OACA,mCAAmC,IAAI,cAAc,IAAI,eAAgB,SAAS,IAAK,gBAAiB,SAAS,IAAK;AAC1H,eAAO;AAAA,MAEX;AAAA,MAEA,eAAe,SAAU,SAAS,GAAG,GAAG,QAAQ,YAAY,UAAU,WAAW,WAAW;AACxF,YAAI,OAAO,QAAQ,QAAQ,MAAM,MAAM,QAAQ,MAAM;AACrD,YAAI,eAAe,UAAU;AACzB,iBAAO;AAAA,QACX;AACA,YAAK,WAAW,eAAiB,IAAID,MAAK,IAAK;AAC3C,uBAAa;AACb,qBAAY,IAAIA,MAAK;AAAA,QACzB;AAEA,iBAAS,IAAIA,MAAK,MAAMA,MAAK,IAAI,UAAU,IAAI,MAAM;AACrD,iBAAS,IAAIA,MAAK,MAAMA,MAAK,IAAI,UAAU,IAAI,MAAM;AACrD,eAAO,IAAIA,MAAK,MAAMA,MAAK,IAAI,QAAQ,IAAI,MAAM;AACjD,eAAO,IAAIA,MAAK,MAAMA,MAAK,IAAI,QAAQ,IAAI,MAAM;AAEjD,YAAI,WAAW,QAAQ,WAAW,MAAM;AACpC,cAAK,WAAW,aAAcA,MAAK,IAAI;AAEnC,mBAAO;AAAA,UACX;AAEA,mBAAS,OAAO,IAAI;AACpB,mBAAS,OAAO;AAAA,QACpB;AAEA,YAAI,WAAW,QAAQ,WAAW,QAAS,WAAW,aAAcA,MAAK,IAAI;AACzE,iBAAO;AAAA,QACX;AAEA,gBAAQ,CAAC,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,QAAQ,QAAQ,MAAM,IAAI;AACnF,iBAAS,cAAcC,aAAY,sBAAsB,sCAAsC,YAAY;AAC3G,eAAO,cAAcA,aAAY,oBAAoB,iBAAiB,YAAY;AAClF,cAAM,2CAA2C,KAAK,aAAa,MAAM,KAAK,cAAc,oBACrE,UAAU,OAC5B,SACA,OACD,uDAAuD,KAAK,cAAc,cAAc,KAAK,aAAa,0CAC5F,IAAI,MAAM,IAAI,SAAS,MAAM,KAAK,IAAI,IAAI;AAE5D,eAAO;AAAA,MACX;AAAA,MAEA,WAAW,SAAU,SAAS,GAAG,GAAG,OAAO,QAAQ,WAAW,WAAW;AACrE,eAAO,KAAK,WAAW,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,SAAS;AAAA,MACpI;AAAA,MAEA,OAAO,WAAY;AACf,aAAK,MAAM,YAAY;AAAA,MAC3B;AAAA,MAEA,aAAa,SAAU,OAAO;AAC1B,YAAI,MAAM,KAAK,UAAU,MAAM,IAAI,EAAE,MAAM,MAAM,MAAM,IAAI;AAC3D,YAAI,KAAK,UAAU;AACf,eAAK,MAAM,mBAAmB,aAAa,GAAG;AAAA,QAClD,OAAO;AACH,eAAK,aAAa;AAAA,QACtB;AACA,aAAK,cAAc,MAAM;AACzB,eAAO,MAAM;AAAA,MACjB;AAAA,MAEA,kBAAkB,SAAU,SAAS,OAAO;AACxC,YAAI,WAAWC,GAAE,cAAc,OAAO,GAClC,MAAM,KAAK,UAAU,MAAM,IAAI,EAAE,MAAM,MAAM,MAAM,IAAI;AAC3D,iBAAS,CAAC,EAAE,YAAY;AAAA,MAC5B;AAAA,MAEA,mBAAmB,SAAU,UAAU,QAAQ;AAE3C,YAAI,WAAWA,GAAE,cAAc,SAAS,CAAC,CAAC,GACtC,UAAU,IACV,OAAO,OAAO,QACd;AACJ,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,qBAAW,KAAK,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,MAAM,OAAO,CAAC,EAAE,IAAI;AAAA,QACxE;AACA,iBAAS,CAAC,EAAE,YAAY;AACxB,aAAK,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAClC,UAAAA,GAAE,cAAc,SAAS,CAAC,CAAC,EAAE,OAAO;AAAA,QACxC;AAAA,MACJ;AAAA,MAEA,kBAAkB,SAAU,SAAS,OAAO;AACxC,YAAI,WAAWA,GAAE,cAAc,OAAO,GACjC,MAAM,KAAK,UAAU,MAAM,IAAI,EAAE,MAAM,MAAM,MAAM,IAAI;AAC5D,iBAAS,CAAC,EAAE,mBAAmB,YAAY,GAAG;AAAA,MAClD;AAAA,MAEA,eAAe,SAAU,SAAS;AAC9B,YAAI,WAAWA,GAAE,cAAc,OAAO;AACtC,aAAK,MAAM,YAAY,SAAS,CAAC,CAAC;AAAA,MACtC;AAAA,MAEA,YAAY,SAAUI,KAAI,GAAG,GAAG;AAC5B,YAAI,UAAUA,IAAG,GAAG,OAAO,CAAC;AAC5B,eAAO;AAAA,MACX;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,CAAC,KAAK,UAAU;AAEhB,eAAK,MAAM,YAAY,KAAK;AAC5B,eAAK,WAAW;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EAEL,CAAC;AAAE,GAAE,UAAU,IAAI;;;ACh/FnB,IAAI,cAAqD;AACzD,IAAM,YAA+C,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE;AAEzE,eAAe,eAAe,KAAa,MAA6B;AACtE,QAAM,SAAS;AACf,QAAM,gBAAgB,EAAE,UAAU;AAAA,IAChC,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,EACZ,CAAC;AACD,QAAM,sBAAsB,EAAE,MAAM,OAAO,QAAQ,SAAS,UAAU,OAAO,YAAY,OAAO,eAAe,GAAG,eAAe,KAAK,UAAU,UAAU;AAC1J,QAAM,qBAAqB,EAAE,MAAM,OAAO,QAAQ,SAAS,UAAU,OAAO,YAAY,OAAO,eAAe,GAAG,eAAe,KAAK,UAAU,eAAe,WAAW,KAAK;AAC9K,MAAI,UAAU,KAAK,SAAS,OAAQ,WAAU,KAAK,MAAM;AACzD,YAAU,KAAK,KAAK,IAAI;AACxB,MAAI,UAAU,IAAI,SAAS,OAAQ,WAAU,IAAI,MAAM;AACvD,YAAU,IAAI,KAAK,GAAG;AACtB,IAAE,WAAW,EAAE,UAAU,UAAU,MAAM,mBAAmB;AAC5D,IAAE,WAAW,EAAE,UAAU,UAAU,KAAK,kBAAkB;AAC5D;AAEA,eAAe,YAA2B;AACxC,QAAM,QAAQ,SAAS,eAAe,KAAK;AAC3C,QAAM,WAAW,SAAS,eAAe,WAAW;AACpD,MAAI,CAAC,SAAS,CAAC,SAAU;AACzB,MAAI;AACF,UAAM,MAAM,MAAMM,WAAU,GAAG,OAAO,GAAG,UAAU;AACnD,QAAI,CAAC,OAAO,CAAC,IAAI,IAAI;AACnB,oBAAc,WAAW;AACzB,YAAM,MAAM,UAAU;AACtB;AAAA,IACF;AACA,UAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,QAAI,CAAC,MAAM;AACT,oBAAc,WAAW;AACzB,YAAM,MAAM,UAAU;AACtB;AAAA,IACF;AACA,UAAM,WAAW,SAAS,cAAc,OAAO;AAC/C,QAAI,CAAC,SAAU;AACf,QAAI,MAAM,EAAE,MAAM,CAAC,EAAE;AACrB,QAAI,MAAM,QAAQ,IAAI,KAAK,KAAK,UAAU,EAAG,OAAM,KAAK,CAAC;AACzD,QAAI,OAAO,wDAAwD,IAAI,QAAQ,SAAS;AACxF,eAAW,QAAQ,OAAO,QAAQ,IAAI,IAAI,EAAG,SAAQ,4CAA4C,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC;AAC3H,aAAS,YAAY;AACrB,QAAI,IAAI,SAAS,IAAI,MAAM,WAAW,EAAG,gBAAe,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;AAClF,UAAM,MAAM,UAAU;AAAA,EACxB,SAAS,GAAG;AACV,UAAM,aAAa,CAAC;AACpB,kBAAc,WAAW;AACzB,UAAM,MAAM,UAAU;AAAA,EACxB;AACF;AAEA,eAAsB,WAA0B;AAC9C,QAAM,QAAQ,SAAS,eAAe,KAAK;AAC3C,MAAI,CAAC,MAAO;AACZ,QAAM,MAAM,UAAU;AACtB,MAAI,YAAa,eAAc,WAAW;AAC1C,QAAM,WAAW,OAAO,MAAM,eAAe;AAC7C,MAAI,mBAAmB,QAAQ;AAC/B,gBAAc,YAAY,WAAW,QAAQ;AAC7C,YAAU;AACZ;AAEA,OAAO,WAAW;AAElB,eAAsB,aAA4B;AAChD,gBAAc,WAAW;AACzB,QAAM,QAAQ,SAAS,eAAe,KAAK;AAC3C,MAAI,MAAO,OAAM,MAAM,UAAU;AACnC;AAEA,OAAO,aAAa;", + "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet ok = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 120000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n ok = window.opts.theme_type === 'Modern' ? 'uiux_separator_appearance' in window.opts : true;\n if (ok) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nasync function initStartup() {\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], + "mappings": "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", "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "ok", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "ok", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] } diff --git a/ui/progressBar.ts b/ui/progressBar.ts index b87a706b6..f1881fbd7 100644 --- a/ui/progressBar.ts +++ b/ui/progressBar.ts @@ -126,6 +126,7 @@ export function requestProgress(id_task = 'undefined', progressEl = null, galler const initLivePreview = () => { if (!parentGallery) return; + debug('initLivePreview', { el: galleryEl, parent: parentGallery }); const footers = Array.from(gradioApp().querySelectorAll('.gallery_footer')); for (const footer of footers) { if (footer.id !== 'gallery_footer') footer.style.display = 'none'; // remove all footers @@ -182,7 +183,7 @@ export function requestProgress(id_task = 'undefined', progressEl = null, galler const previewVisible = () => { try { - return !galleryEl?.closest('.section')?.classList.contains('minimize'); + return galleryEl ? !galleryEl.closest('.section')?.classList.contains('minimize') : true; } catch { return true; } diff --git a/ui/ui.ts b/ui/ui.ts index 88e9a6804..01a7689dc 100644 --- a/ui/ui.ts +++ b/ui/ui.ts @@ -341,7 +341,7 @@ function submit_framepack(...args) { function submit_ltx(...args) { const id = randomId(); log('submitFramepack', id); - requestProgress(id, null, null); + requestProgress(id, null, gradioApp().getElementById('ltx_output_video')); window.submit_state = ''; args[0] = id; return args; @@ -350,7 +350,7 @@ function submit_ltx(...args) { function submit_minimax(...args) { const id = randomId(); log('submitMiniMax', id); - requestProgress(id, null, null); + requestProgress(id, null, gradioApp().getElementById('minimax_output_video')); window.submit_state = ''; args[0] = id; return args; From cf1f72137720b5fc32a03a535c2c788f4d58a2e5 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 31 Aug 2026 17:18:20 +0200 Subject: [PATCH 114/270] fix typo Signed-off-by: Vladimir Mandic --- modules/ui_definitions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 1751b3a65..abf3f623b 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -72,7 +72,7 @@ def create_settings(cmd_opts): default_hfcache_dir = os.environ.get("SD_HFCACHEDIR", None) or os.path.join(paths.models_path, 'huggingface') default_checkpoint = list_checkpoint_titles()[0] if len(list_checkpoint_titles()) > 0 else "model.safetensors" - default_xetcache_dir = os.environ.get("HF_XET_CACHE ", None) or os.path.join(paths.models_path, 'xet') + default_xetcache_dir = os.environ.get("HF_XET_CACHE", None) or os.path.join(paths.models_path, 'xet') default_onnx_execution_provider, default_onnx_execution_providers = list_onnx_providers() From f9cc197c572fb48f54e09229b0394592f2d15556 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 1 Sep 2026 09:58:24 +0200 Subject: [PATCH 115/270] improve network type/version mapping Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 3 +- modules/lora/network.py | 14 +++++++-- modules/transformer_cache.py | 6 ++-- modules/ui_extra_networks_checkpoints.py | 38 ++++++++++++++++-------- pyproject.toml | 1 + 5 files changed, 44 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3352b50c9..883bd51c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2026-08-31 +## Update for 2026-09-01 - **LoRA** - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions @@ -44,6 +44,7 @@ - detailer handling of stop/skip/pause - cleanup dead rife code, thanks @Anai-Guo - lumina-dimoo attention-kwargs, thanks @Anai-Guo + - improve network type/version lookup ## Update for 2026-08-26 diff --git a/modules/lora/network.py b/modules/lora/network.py index fed18dd2e..bfbf29bfa 100644 --- a/modules/lora/network.py +++ b/modules/lora/network.py @@ -76,6 +76,10 @@ class NetworkOnDisk: return 'anima' if base.startswith('qwen'): return 'qwen' + if base.startswith('krea2'): + return 'krea2' + if base.startswith('minimax'): + return 'minimax' if arch.startswith("stable-diffusion-v1"): return 'sd1' @@ -83,7 +87,7 @@ class NetworkOnDisk: return 'xl' if arch.startswith("stable-cascade"): return 'sc' - if arch.startswith("flux2") or "klein" in arch: + if arch.startswith("flux2") or arch.startswith("flux-2") or ("klein" in arch): return 'f2' if arch.startswith("flux"): return 'f1' @@ -91,12 +95,18 @@ class NetworkOnDisk: return 'hv' if arch.startswith("chroma"): return 'chroma' + if arch.startswith('wan'): + return 'wan' + if arch.startswith('anima'): + return 'anima' + if arch.startswith('krea2'): + return 'krea2' if "v1-5" in str(self.metadata.get('ss_sd_model_name', "")): return 'sd1' if str(self.metadata.get('ss_v2', "")) == "True": return 'sd2' - if 'klein' in self.name.lower() or 'klein' in self.fullname.lower(): + if 'klein' in self.name.lower() or ('klein' in self.fullname.lower()): return 'f2' if 'flux' in self.name.lower(): return 'f1' diff --git a/modules/transformer_cache.py b/modules/transformer_cache.py index 6b6b9842f..0fa1a1bc4 100644 --- a/modules/transformer_cache.py +++ b/modules/transformer_cache.py @@ -10,11 +10,13 @@ debug = log.trace if os.environ.get('SD_PROCESS_DEBUG', None) is not None else l def get_transformers(): if not shared.sd_loaded: - return None + return [] + modules = [] for module_name in get_module_names(shared.sd_model): module = getattr(shared.sd_model, module_name, None) if (module is not None) and ('transformer' in module_name or 'Transformer' in module.__class__.__name__): - yield module + modules.append(module) + return modules def set_cache(p: processing.StableDiffusionProcessing): diff --git a/modules/ui_extra_networks_checkpoints.py b/modules/ui_extra_networks_checkpoints.py index b03e0b700..56eb1b3bf 100644 --- a/modules/ui_extra_networks_checkpoints.py +++ b/modules/ui_extra_networks_checkpoints.py @@ -17,11 +17,14 @@ version_map = { "SDXL 1.0": "SD XL", "SDXL Hyper": "SD XL", "StableDiffusion": "SD 1.5", + "StableDiffusion2": "SD 2.1", + "SD-v21": "SD 2.1", "StableDiffusion3": "SD 3", "StableDiffusionXL": "SD XL", "WanToVideo": "Wan", "WanVACE": "Wan", - "Z": "Z-Image", + "ZImage": "Z-Image", + "Z-Image": "Z-Image", "Glm": "GLM-Image", "Krea2": "Krea 2", "AnimaTextTo": "Anima", @@ -30,6 +33,7 @@ version_map = { "Flux2Klein": "Flux 2 Klein", "Flux2KleinKV": "Flux 2 Klein", "MiniMaxH3": "MiniMax H3", + "MiniMax_H3": "MiniMax H3", } class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): @@ -149,6 +153,25 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): log.debug(f'Networks: type="reference" {count}') return models + def get_version(self, checkpoint, record): + info = self.find_version(checkpoint, record['info']) + if 'baseModel' in info: + version = info.get("baseModel", "") + elif '_class_name' in record['info']: + cls = record['info']['_class_name'] + if isinstance(cls, list): + cls = cls[-1] + version = cls.replace('Pipeline', '').replace('Image', '').replace('Modular', '') + else: + version = '' + version = version_map.get(version, version) + if len(version.strip()) == 0: # no match => check if version is part of the key in version_map + for key in version_map.keys(): + if key.lower() in record['name'].lower(): + version = version_map[key] + break + return version + def create_item(self, name): record = None try: @@ -167,18 +190,7 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): } record['info'] = self.find_info(checkpoint.filename) record['description'] = self.find_description(checkpoint.filename, record['info']) - version = self.find_version(checkpoint, record['info']) - if 'baseModel' in version: - record['version'] = version.get("baseModel", "") - elif '_class_name' in record['info']: - cls = record['info']['_class_name'] - if isinstance(cls, list): - cls = cls[-1] - record['version'] = cls.replace('Pipeline', '').replace('Image', '').replace('Modular', '') - else: - record['version'] = '' - record['version'] = version_map.get(record['version'], record['version']) - + record['version'] = self.get_version(checkpoint, record) except Exception as e: log.error(f'Networks error: type=model file="{name}" {e}') if os.environ.get('SD_EN_DEBUG', None) is not None: diff --git a/pyproject.toml b/pyproject.toml index eb2da6328..53d33f768 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -169,6 +169,7 @@ main.ignore-patterns=[ ".*_arch.py$", ".*_model_arch.py*", ".*_model_arch_v2.py$", + ".*\\.pyi$", ] main.ignored-modules="" main.jobs=4 From 7c1e985ee7f41670defb9ff38bca81be2b23ebdc Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 1 Sep 2026 13:17:03 +0200 Subject: [PATCH 116/270] minimax unpack latents Signed-off-by: Vladimir Mandic --- pipelines/minimax/__init__.py | 0 pipelines/minimax/minimax_latents.py | 37 ++++++++++++++++++++++++++++ pipelines/model_minimax.py | 37 +--------------------------- 3 files changed, 38 insertions(+), 36 deletions(-) create mode 100644 pipelines/minimax/__init__.py create mode 100644 pipelines/minimax/minimax_latents.py diff --git a/pipelines/minimax/__init__.py b/pipelines/minimax/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/pipelines/minimax/minimax_latents.py b/pipelines/minimax/minimax_latents.py new file mode 100644 index 000000000..576befc37 --- /dev/null +++ b/pipelines/minimax/minimax_latents.py @@ -0,0 +1,37 @@ +import diffusers + + +def unpack_latents(latents, components: diffusers.modular_pipelines.ModularPipeline, state: diffusers.modular_pipelines.BlockState): + from diffusers.modular_pipelines.minimax_h3.modular_pipeline import align_num_frames, video_latent_num_frames + from modules import processing_callbacks + frames = getattr(processing_callbacks.p, 'frames', 1) + width = getattr(processing_callbacks.p, 'width', 1024) + height = getattr(processing_callbacks.p, 'height', 1024) + if frames <= 0 or width <= 0 or height <= 0: + return latents + num_frames = align_num_frames(frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) + num_latent_frames = video_latent_num_frames(num_frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) + latent_height = height // components.vae_spatial_compression_ratio + latent_width = width // components.vae_spatial_compression_ratio + patch_t, patch_h, patch_w = components.patch_size + channels = components.vae_latent_channels + rows = state.latents[state.num_condition_video_rows :] + rows = rows.reshape( + -1, + num_latent_frames // patch_t, + latent_height // patch_h, + latent_width // patch_w, + channels, + patch_t, + patch_h, + patch_w, + ) + rows = rows.permute(0, 4, 1, 5, 2, 6, 3, 7) + latents = rows.reshape( + -1, + channels, + num_latent_frames, + latent_height, + latent_width, + ).contiguous() + return latents diff --git a/pipelines/model_minimax.py b/pipelines/model_minimax.py index 53ae78930..964f8629a 100644 --- a/pipelines/model_minimax.py +++ b/pipelines/model_minimax.py @@ -3,42 +3,6 @@ from modules import shared, devices, sd_models from modules.logger import log -def unpack_latents(latents, components: diffusers.modular_pipelines.ModularPipeline, state: diffusers.modular_pipelines.BlockState): - from diffusers.modular_pipelines.minimax_h3.modular_pipeline import align_num_frames, video_latent_num_frames - from modules import processing_callbacks - frames = getattr(processing_callbacks.p, 'frames', 1) - width = getattr(processing_callbacks.p, 'width', 1024) - height = getattr(processing_callbacks.p, 'height', 1024) - if frames <= 0 or width <= 0 or height <= 0: - return latents - num_frames = align_num_frames(frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) - num_latent_frames = video_latent_num_frames(num_frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) - latent_height = height // components.vae_spatial_compression_ratio - latent_width = width // components.vae_spatial_compression_ratio - patch_t, patch_h, patch_w = components.patch_size - channels = components.vae_latent_channels - rows = state.latents[state.num_condition_video_rows :] - rows = rows.reshape( - -1, - num_latent_frames // patch_t, - latent_height // patch_h, - latent_width // patch_w, - channels, - patch_t, - patch_h, - patch_w, - ) - rows = rows.permute(0, 4, 1, 5, 2, 6, 3, 7) - latents = rows.reshape( - -1, - channels, - num_latent_frames, - latent_height, - latent_width, - ).contiguous() - return latents - - def load_minimax(checkpoint_info, diffusers_load_config = None, workflow: str | None = None): from modules.video_models import video_load from modules.modular_load import load_modular_pipe @@ -75,6 +39,7 @@ def load_minimax(checkpoint_info, diffusers_load_config = None, workflow: str | if hasattr(pipe, 'vae') and hasattr(pipe.vae, 'enable_tiling'): pipe.vae.enable_tiling() + from pipelines.minimax.minimax_latents import unpack_latents pipe.custom_unpack_latents = unpack_latents # add a helper to unpack the video latents from the block state devices.torch_gc() return pipe From 49de7e9c8669b4799624b6888cea14314c741fb9 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 1 Sep 2026 14:44:59 +0200 Subject: [PATCH 117/270] reduce circular imports and improve lora tags Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/sd_samplers.py | 4 ++++ modules/shared.py | 22 +++++++++++----------- modules/ui_definitions.py | 16 ++++++++-------- modules/ui_extra_networks_lora.py | 11 +++++++++++ 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 883bd51c5..795a8802a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ - cleanup dead rife code, thanks @Anai-Guo - lumina-dimoo attention-kwargs, thanks @Anai-Guo - improve network type/version lookup + - cleanup lora tags ## Update for 2026-08-26 diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py index e205ee9c8..d086bb8c8 100644 --- a/modules/sd_samplers.py +++ b/modules/sd_samplers.py @@ -46,6 +46,10 @@ def list_samplers(): return all_samplers +def get_samplers(): + return all_samplers + + def find_sampler_config(name): if name is not None and name != 'None': config = all_samplers_map.get(name, None) diff --git a/modules/shared.py b/modules/shared.py index b08e1d44e..c4fead304 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -108,8 +108,8 @@ if not files_cache.do_cache_folders: def list_checkpoint_titles(): - import modules.sd_models # pylint: disable=W0621 - return modules.sd_models.checkpoint_titles() + from modules.sd_models import checkpoint_titles # pylint: disable=W0621 + return checkpoint_titles() list_checkpoint_tiles = list_checkpoint_titles # alias for legacy typo @@ -124,24 +124,24 @@ def is_url(string): def refresh_checkpoints(): - import modules.sd_models # pylint: disable=W0621 - return modules.sd_models.list_models() + from modules.sd_models import list_models # pylint: disable=W0621 + return list_models() def refresh_vaes(): - import modules.sd_vae # pylint: disable=W0621 - modules.sd_vae.refresh_vae_list() + from modules.sd_vae import refresh_vae_list # pylint: disable=W0621 + refresh_vae_list() def refresh_upscalers(): - import modules.modelloader # pylint: disable=W0621 - modules.modelloader.load_upscalers() + from modules.modelloader import load_upscalers # pylint: disable=W0621 + load_upscalers() def list_samplers(): - import modules.sd_samplers # pylint: disable=W0621 - modules.sd_samplers.set_samplers() - return modules.sd_samplers.all_samplers + from modules.sd_samplers import set_samplers, get_samplers # pylint: disable=W0621 + set_samplers() + return get_samplers() log.debug('Initializing: settings') diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index abf3f623b..03aa08036 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -26,23 +26,23 @@ def list_onnx_providers(): def list_checkpoint_titles(): - import modules.sd_models # pylint: disable=redefined-outer-name - return modules.sd_models.checkpoint_titles() + from modules.sd_models import checkpoint_titles # pylint: disable=redefined-outer-name + return checkpoint_titles() def refresh_checkpoints(): - import modules.sd_models # pylint: disable=redefined-outer-name - return modules.sd_models.list_models() + from modules.sd_models import list_models # pylint: disable=redefined-outer-name + return list_models() def refresh_vaes(): - import modules.sd_vae # pylint: disable=redefined-outer-name - modules.sd_vae.refresh_vae_list() + from modules.sd_vae import refresh_vae_list # pylint: disable=redefined-outer-name + refresh_vae_list() def refresh_upscalers(): - import modules.modelloader # pylint: disable=redefined-outer-name - modules.modelloader.load_upscalers() + from modules.modelloader import load_upscalers # pylint: disable=redefined-outer-name + load_upscalers() def list_samplers(): diff --git a/modules/ui_extra_networks_lora.py b/modules/ui_extra_networks_lora.py index 8a1c11c98..0c3b0cace 100644 --- a/modules/ui_extra_networks_lora.py +++ b/modules/ui_extra_networks_lora.py @@ -55,9 +55,20 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage): tags[tag] = 0 except Exception: pass + + # cleanup tags: remove model names, bad words, and special characters + model_words = ['ltx', 'minimax', 'h3', 'sdxl', 'klein', 'wan', 'flux', 'qwen', 'vace', 'lcm', 'slider'] + bad_words = ['concept', 'style', 'styles', 'base model', 'video', 'audio', 'turbo', 'distill', 'assets', 'action', 'enhancer', 'detail', 'tool', 'dir', 'all'] + bad_parts = ['lora', 'comfyui', 't2i', 'i2i', 't2v', 'i2v', 'steps'] bad_chars = [';', ':', '<', ">", "*", '?', '\'', '\"', '(', ')', '[', ']', '{', '}', '\\', '/'] clean_tags = {} for k, v in tags.items(): + if k in bad_words: + continue + if any(k.startswith(s) for s in model_words): + continue + if any(s in k for s in bad_parts): + continue tag = ''.join(i for i in k if i not in bad_chars).strip() clean_tags[tag] = v From df495a0f8d4744ced335af7c128148ab87440550 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 1 Sep 2026 17:38:49 +0200 Subject: [PATCH 118/270] minimax native lora handler Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 6 +- TODO.md | 3 +- modules/lora/lora_load.py | 1 + modules/lora/lora_overrides.py | 1 + modules/lora/native_adapter.py | 33 ++-- modules/sd_checkpoint.py | 2 +- modules/sd_hijack_accelerate.py | 2 + modules/shared.py | 8 +- pipelines/minimax/minimax_lora.py | 271 ++++++++++++++++++++++++++++++ scripts/xyz/xyz_grid_classes.py | 4 + scripts/xyz/xyz_grid_shared.py | 16 +- scripts/xyz_grid.py | 7 +- scripts/xyz_grid_on.py | 7 +- wiki | 2 +- 14 files changed, 337 insertions(+), 26 deletions(-) create mode 100644 pipelines/minimax/minimax_lora.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 795a8802a..69ebcf39b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - multi-network stack modes can significantly improve lora quality when using multiple loras at once - per-block strength + - native support for **MiniMax** - **Attention** - *TODO*: see [Attention docs](https://vladmandic.github.io/sdnext-docs/Attention) for details and usage instructions *note*: attention now has its own settings section in *settings -> cross attention* @@ -34,10 +35,12 @@ - intercept and profiling hooks - on-demand convert standard model on-demand - **Other** - - Video Preview: TAESD support for MiniMax + - Video Preview: TAESD support for **MiniMax** - new optional transformer hooks: *settings -> compute add-ons* *PAG: Perturbed attention guidance, PAB: Pyramid attention broadcast, FBC: First Block Cache, FC: Faster Cache, LS: Layer Skip, MC: Mag Cache, TS: TaylorSeer* *note*: compatibility of different methods varies across different models +- **Wiki/Docs**: + - [MiniMax](https://vladmandic.github.io/sdnext-docs/MiniMax) updated with LoRA, Turbo and other improvements - **Fixes** - unnecessary secondary prompt if same - js fetch exception handling @@ -46,6 +49,7 @@ - lumina-dimoo attention-kwargs, thanks @Anai-Guo - improve network type/version lookup - cleanup lora tags + - xyz grid apply bool values ## Update for 2026-08-26 diff --git a/TODO.md b/TODO.md index ce8e2af6b..2dc2085a6 100644 --- a/TODO.md +++ b/TODO.md @@ -2,14 +2,13 @@ ## Short-term -- MiniMax LoRA: native loader for MiniMax-H3: fl2va, ref2va, pruned, @CalamitousFelicitousness -- MiniMax TAESD: unpack latents, @vladmandic - MiniMax: Create pre-quants for MiniMax-H3-Turbo, MiniMax-H3-Pruned-Turbo - Benchmark tool productize: @CalamitousFelicitousness - Control tab verify overrides handling, @vladmandic - LTX: Create pre-quant for LTX-2.5 - LTX: Implement LTX2DFRPipeline - ROCm: v10 +- Video: unify execution path for ui and api ## Issues diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index d0241761c..d8c150fec 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -28,6 +28,7 @@ NATIVE_DISPATCH = { 'f2': 'pipelines.flux.flux2_lora', 'anima': 'pipelines.anima.anima_lora', 'krea2': 'pipelines.krea2.krea2_lora', + 'minimaxh3': 'pipelines.minimax.minimax_lora', } diff --git a/modules/lora/lora_overrides.py b/modules/lora/lora_overrides.py index 305d1e0e6..c7141d06f 100644 --- a/modules/lora/lora_overrides.py +++ b/modules/lora/lora_overrides.py @@ -32,6 +32,7 @@ allow_native = [ 'anima', 'ernieimage', 'krea2', + 'minimaxh3', ] diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index ba44cd27e..4cfe155d9 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -33,7 +33,7 @@ from dataclasses import dataclass import torch -from modules import shared, sd_models, sd_models_utils +from modules.sd_models import read_state_dict # pylint: disable=unused-import from modules.logger import log from modules.lora import ( lora_convert, network, network_boft, network_full, network_glora, @@ -248,6 +248,7 @@ def has_marker(state_dict, markers): def resolve_mapping(): + from modules import shared """Ensure ``network_layer_mapping`` is populated, return it (or empty dict).""" sd_model = getattr(shared.sd_model, "pipe", shared.sd_model) lora_convert.assign_network_names_to_compvis_modules(sd_model) @@ -451,11 +452,6 @@ def group_by_suffixes(state_dict, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, return groups -# Surface ``sd_models.read_state_dict`` here so loader modules don't have to -# import ``sd_models`` directly; keeps the per-arch wrapper imports compact. -read_state_dict = sd_models.read_state_dict - - def resolve_group_targets(resolve_targets, prefix_used, base): """Map a parsed ``(prefix_used, base)`` group to ``[(diffusers_path, chunk), ...]``. @@ -566,6 +562,7 @@ def try_load_lora(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=(), bare_diffusers_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, + group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): """Generic LoRA loader (handles DoRA via the universal ``finalize_updown`` hook). @@ -579,7 +576,7 @@ def try_load_lora(name, network_on_disk, lora_scale, *, mapping = resolve_mapping() net = new_network(name, network_on_disk) - groups = group_by_suffixes( + groups = group_by_suffixes_fn( state_dict, LORA_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, @@ -660,6 +657,7 @@ def try_load_lokr(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=(), bare_diffusers_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, + group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): """Generic LoKR loader. @@ -677,7 +675,7 @@ def try_load_lokr(name, network_on_disk, lora_scale, *, mapping = resolve_mapping() net = new_network(name, network_on_disk) - groups = group_by_suffixes( + groups = group_by_suffixes_fn( state_dict, LOKR_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, @@ -741,6 +739,7 @@ def try_load_loha(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=(), bare_diffusers_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, + group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): """Generic LoHA (Hadamard product) loader. @@ -757,7 +756,7 @@ def try_load_loha(name, network_on_disk, lora_scale, *, mapping = resolve_mapping() net = new_network(name, network_on_disk) - groups = group_by_suffixes( + groups = group_by_suffixes_fn( state_dict, LOHA_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, @@ -810,6 +809,7 @@ def try_load_oft(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=(), bare_diffusers_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, + group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): """Generic OFT/BOFT loader. @@ -832,7 +832,7 @@ def try_load_oft(name, network_on_disk, lora_scale, *, mapping = resolve_mapping() net = new_network(name, network_on_disk) - groups = group_by_suffixes( + groups = group_by_suffixes_fn( state_dict, OFT_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, @@ -870,6 +870,7 @@ def try_load_ia3(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=(), bare_diffusers_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, + group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): """Generic IA3 loader. @@ -891,7 +892,7 @@ def try_load_ia3(name, network_on_disk, lora_scale, *, mapping = resolve_mapping() net = new_network(name, network_on_disk) - groups = group_by_suffixes( + groups = group_by_suffixes_fn( state_dict, IA3_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, @@ -925,6 +926,7 @@ def try_load_glora(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=(), bare_diffusers_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, + group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): """Generic GLoRA loader. @@ -942,7 +944,7 @@ def try_load_glora(name, network_on_disk, lora_scale, *, mapping = resolve_mapping() net = new_network(name, network_on_disk) - groups = group_by_suffixes( + groups = group_by_suffixes_fn( state_dict, GLORA_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, @@ -976,6 +978,7 @@ def try_load_norm(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=(), bare_diffusers_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, + group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): # pylint: disable=unused-argument """Generic Norm (LayerNorm / RMSNorm weight + bias delta) loader. @@ -996,7 +999,7 @@ def try_load_norm(name, network_on_disk, lora_scale, *, mapping = resolve_mapping() net = new_network(name, network_on_disk) - groups = group_by_suffixes( + groups = group_by_suffixes_fn( state_dict, NORM_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, @@ -1041,6 +1044,7 @@ def try_load_full(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=(), bare_diffusers_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, + group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): """Generic Full (full-rank weight delta) loader. @@ -1057,7 +1061,7 @@ def try_load_full(name, network_on_disk, lora_scale, *, mapping = resolve_mapping() net = new_network(name, network_on_disk) - groups = group_by_suffixes( + groups = group_by_suffixes_fn( state_dict, FULL_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, @@ -1114,6 +1118,7 @@ def try_load_chain(name, network_on_disk, lora_scale, family_loaders): tuple of partial-applied generic loaders, each already bound to the arch's ``resolve_targets`` and prefix tuples. """ + from modules import sd_models_utils sd_models_utils.state_dict_cache.enable() net = None mismatch = 0 diff --git a/modules/sd_checkpoint.py b/modules/sd_checkpoint.py index 1b961e5f9..783186ed4 100644 --- a/modules/sd_checkpoint.py +++ b/modules/sd_checkpoint.py @@ -122,7 +122,7 @@ def setup_model(): # sd_hijack_accelerate.hijack_torch_conv() -def checkpoint_titles(use_short=False): +def checkpoint_titles(use_short=False) -> list[str]: def convert(name): return int(name) if name.isdigit() else name.lower() diff --git a/modules/sd_hijack_accelerate.py b/modules/sd_hijack_accelerate.py index f7e625543..6ffd83e91 100644 --- a/modules/sd_hijack_accelerate.py +++ b/modules/sd_hijack_accelerate.py @@ -60,8 +60,10 @@ def torch_conv_forward(self, input, weight, bias): # pylint: disable=redefined-b bias = bias.to(weight.dtype) return F.conv2d(input, weight, bias, self.stride, self.padding, self.dilation, self.groups) + def hijack_torch_conv(): torch.nn.modules.conv.Conv2d._conv_forward = torch_conv_forward # pylint: disable=protected-access + def restore_torch_conv(): torch.nn.modules.conv.Conv2d._conv_forward = orig_torch_conv # pylint: disable=protected-access diff --git a/modules/shared.py b/modules/shared.py index c4fead304..a3a40f643 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -108,8 +108,12 @@ if not files_cache.do_cache_folders: def list_checkpoint_titles(): - from modules.sd_models import checkpoint_titles # pylint: disable=W0621 - return checkpoint_titles() + try: + from modules.sd_models import checkpoint_titles # pylint: disable=W0621 + return checkpoint_titles() + except Exception as err: + log.error(f'Checkpoints: {err}') + return [] list_checkpoint_tiles = list_checkpoint_titles # alias for legacy typo diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py new file mode 100644 index 000000000..035f4d90e --- /dev/null +++ b/pipelines/minimax/minimax_lora.py @@ -0,0 +1,271 @@ +"""MiniMax H3 native adapter loader. + +MiniMax H3 is a modular video pipeline with a transformer and a text encoder. +This loader routes transformer keys to ``lora_transformer_`` and text-encoder +keys to ``lora_te_`` when native LoRAs are applied. +""" + +import re + +from modules.lora import native_adapter + + +KNOWN_PREFIXES = ( + "diffusion_model.text_encoders.", + "diffusion_model.text_encoder.", + "diffusion_model.transformer.", + "diffusion_model.blocks.", + "diffusion_model.transformer_blocks.", + "diffusion_model.token_refiner.", + "diffusion_model.token_refiner.refiner_blocks.", + "diffusion_model.final_layer.", + "diffusion_model.video_patch_proj.", + "diffusion_model.audio_patch_proj.", + "diffusion_model.condition_proj.", + "diffusion_model.time_embedder.proj_in.", + "diffusion_model.time_embedder.proj_out.", + "diffusion_model.model.language_model.", + "text_encoders.", + "text_encoder.", + "model.language_model.", + "transformer.", + "transformer_blocks.", + "blocks.", + "token_refiner.", + "token_refiner.refiner_blocks.", + "final_layer.", + "video_patch_proj.", + "audio_patch_proj.", + "condition_proj.", + "time_embedder.proj_in.", + "time_embedder.proj_out.", +) + native_adapter.KNOWN_PREFIXES_DEFAULT + + +# Re-export for tests / compatibility +LORA_SUFFIXES = native_adapter.LORA_SUFFIXES +LOKR_SUFFIXES = native_adapter.LOKR_SUFFIXES +LOHA_SUFFIXES = native_adapter.LOHA_SUFFIXES +OFT_SUFFIXES = native_adapter.OFT_SUFFIXES +IA3_SUFFIXES = native_adapter.IA3_SUFFIXES +GLORA_SUFFIXES = native_adapter.GLORA_SUFFIXES +NORM_SUFFIXES = native_adapter.NORM_SUFFIXES +FULL_SUFFIXES = native_adapter.FULL_SUFFIXES + +LORA_MARKERS = native_adapter.LORA_MARKERS +LOKR_MARKERS = native_adapter.LOKR_MARKERS +LOHA_MARKERS = native_adapter.LOHA_MARKERS +OFT_MARKERS = native_adapter.OFT_MARKERS +IA3_MARKERS = native_adapter.IA3_MARKERS +GLORA_MARKERS = native_adapter.GLORA_MARKERS +NORM_MARKERS = native_adapter.NORM_MARKERS +FULL_MARKERS = native_adapter.FULL_MARKERS + +SUFFIX_NORMALIZE = native_adapter.SUFFIX_NORMALIZE +BARE_DIFFUSERS_PREFIX_USED = native_adapter.BARE_DIFFUSERS_PREFIX_USED +has_marker = native_adapter.has_marker + + +MINIMAX_EXTRA_SUFFIXES = (".lora_down", ".lora_up", ".lora_A", ".lora_B") +MINIMAX_LORA_SUFFIXES = native_adapter.LORA_SUFFIXES + MINIMAX_EXTRA_SUFFIXES +MINIMAX_SUFFIX_NORMALIZE = { + "lora_down": "lora_down.weight", + "lora_up": "lora_up.weight", + "lora_A": "lora_down.weight", + "lora_B": "lora_up.weight", +} + + +def normalize_mini_max_suffix(suffix: str) -> str: + return MINIMAX_SUFFIX_NORMALIZE.get(suffix, suffix) + + +def _unflatten_lora_unet_key(key: str) -> str | None: + if not key.startswith("lora_unet_"): + return None + module_key, _, suffix = key[len("lora_unet_"):].partition(".") + if not suffix: + return None + + patterns = [ + (r"blocks_(\d+)_attn_out_proj", r"blocks.\1.attn.out_proj"), + (r"blocks_(\d+)_attn_qkv_proj", r"blocks.\1.attn.qkv_proj"), + (r"blocks_(\d+)_mlp_fc1", r"blocks.\1.mlp.fc1"), + (r"blocks_(\d+)_mlp_fc2", r"blocks.\1.mlp.fc2"), (r"token_refiner_blocks_(\d+)_attn_out_proj", r"token_refiner.blocks.\1.attn.out_proj"), + (r"token_refiner_blocks_(\d+)_attn_qkv_proj", r"token_refiner.blocks.\1.attn.qkv_proj"), + (r"token_refiner_blocks_(\d+)_mlp_fc1", r"token_refiner.blocks.\1.mlp.fc1"), + (r"token_refiner_blocks_(\d+)_mlp_fc2", r"token_refiner.blocks.\1.mlp.fc2"), ] + + for pattern, replacement in patterns: + if re.fullmatch(pattern, module_key): + return f"{re.sub(pattern, replacement, module_key)}.{suffix}" + + return None + + +def parse_key(key, suffixes): + """MiniMax-bound :func:`native_adapter.parse_key`.""" + unflattened = _unflatten_lora_unet_key(key) + if unflattened is not None: + key = unflattened + parsed = native_adapter.parse_key(key, suffixes, prefixes=KNOWN_PREFIXES) + if parsed is None: + return None + prefix_used, base, suffix = parsed + return prefix_used, base, normalize_mini_max_suffix(suffix) + + +def group_by_suffixes(state_dict, suffixes, *, prefixes=None, bare_prefixes=(), bare_diffusers_prefixes=()): # pylint: disable=unused-argument + """MiniMax-bound :func:`native_adapter.group_by_suffixes`.""" + groups: dict[tuple, dict[str, object]] = {} + for key, value in state_dict.items(): + parsed = parse_key(key, suffixes) + if parsed is None: + continue + prefix_used, base, suffix = parsed + slot = groups.get((prefix_used, base)) + if slot is None: + slot = {} + groups[(prefix_used, base)] = slot + slot[suffix] = value + return groups + + +def _split_qkv(base, target_prefix): + if not base.endswith(".attn.qkv_proj"): + return [] + stem = base[: -len(".attn.qkv_proj")] + return [ + (f"{target_prefix}.{stem}.attn.{k}", native_adapter.ChunkSpec(idx=i, total=3)) + for i, k in enumerate(("to_q", "to_k", "to_v")) + ] + + +def _transformer_block_targets(target_prefix, base): + if base.endswith(".attn.qkv_proj"): + return _split_qkv(base, target_prefix) + if base.endswith(".attn.out_proj"): + stem = base[: -len(".attn.out_proj")] + return [(f"{target_prefix}.{stem}.attn.to_out.0", None)] + if base.endswith(".mlp.fc1"): + stem = base[: -len(".mlp.fc1")] + return [(f"{target_prefix}.{stem}.ff.net.0.proj", None)] + if base.endswith(".mlp.fc2"): + stem = base[: -len(".mlp.fc2")] + return [(f"{target_prefix}.{stem}.ff.net.2", None)] + return [(f"{target_prefix}.{base}", None)] + + +def resolve_targets(prefix_used, base): + """Return ``[(diffusers_path, ChunkSpec | None), ...]`` for MiniMax keys.""" + if prefix_used == "diffusion_model.": + if base.startswith("transformer."): + return [(base[len("transformer."):], None)] + if base.startswith("text_encoder."): + return [(base[len("text_encoder."):], None)] + if base.startswith("text_encoders."): + return [(base[len("text_encoders."):], None)] + return [(base, None)] + if prefix_used in ("diffusion_model.transformer.", "transformer.", "lora_transformer_"): + return [(base, None)] + if prefix_used in ("diffusion_model.transformer_blocks.", "transformer_blocks."): + return [(f"transformer_blocks.{base}", None)] + if prefix_used in ("diffusion_model.blocks.", "blocks."): + return _transformer_block_targets("transformer_blocks", base) + if prefix_used in ("diffusion_model.token_refiner.refiner_blocks.", "token_refiner.refiner_blocks."): + return [(f"token_refiner.refiner_blocks.{base}", None)] + if prefix_used in ("diffusion_model.token_refiner.", "token_refiner."): + if base.startswith("blocks."): + return _transformer_block_targets("token_refiner.refiner_blocks", base[len("blocks."):]) + return [(f"token_refiner.refiner_{base}", None)] + if prefix_used in ("diffusion_model.final_layer.", "final_layer."): + if base == "adaln_proj.linear": + return [("norm_out.linear", None)] + return [(base, None)] + if prefix_used in ("diffusion_model.video_patch_proj.", "video_patch_proj."): + return [("proj_in." + base.split(".", 1)[1], None)] if "." in base else [("proj_in", None)] + if prefix_used in ("diffusion_model.audio_patch_proj.", "audio_patch_proj."): + return [("audio_proj_in." + base.split(".", 1)[1], None)] if "." in base else [("audio_proj_in", None)] + if prefix_used in ("diffusion_model.condition_proj.", "condition_proj."): + return [("context_embedder." + base.split(".", 1)[1], None)] if "." in base else [("context_embedder", None)] + if prefix_used in ("diffusion_model.time_embedder.proj_in.", "time_embedder.proj_in."): + return [("time_embedder.linear_1." + base.split(".", 1)[1], None)] if "." in base else [("time_embedder.linear_1", None)] + if prefix_used in ("diffusion_model.time_embedder.proj_out.", "time_embedder.proj_out."): + return [("time_embedder.linear_2." + base.split(".", 1)[1], None)] if "." in base else [("time_embedder.linear_2", None)] + if prefix_used in ( + "diffusion_model.text_encoder.", + "diffusion_model.text_encoders.", + "text_encoder.", + "text_encoders.", + "lora_te_", + ): + return [(base, None)] + if prefix_used in ("lora_unet_", "lycoris_"): + return [(base, None)] + return [] + + +def network_prefix_for(prefix_used): + """Choose the network prefix for a parsed MiniMax group.""" + if prefix_used == "lora_te_": + return "lora_te_" + if prefix_used in ( + "text_encoder.", + "text_encoders.", + "diffusion_model.text_encoder.", + "diffusion_model.text_encoders.", + ): + return "lora_te_" + return "lora_transformer_" + + +_BIND_KWARGS = dict( + resolve_targets=resolve_targets, + prefixes=KNOWN_PREFIXES, + network_prefix=network_prefix_for, + group_by_suffixes_fn=group_by_suffixes, + arch_name="minimaxh3", +) + + +def try_load_lora(name, network_on_disk, lora_scale): + return native_adapter.try_load_lora(name, network_on_disk, lora_scale, **_BIND_KWARGS) + + +def try_load_lokr(name, network_on_disk, lora_scale): + return native_adapter.try_load_lokr(name, network_on_disk, lora_scale, **_BIND_KWARGS) + + +def try_load_loha(name, network_on_disk, lora_scale): + return native_adapter.try_load_loha(name, network_on_disk, lora_scale, **_BIND_KWARGS) + + +def try_load_oft(name, network_on_disk, lora_scale): + return native_adapter.try_load_oft(name, network_on_disk, lora_scale, **_BIND_KWARGS) + + +def try_load_ia3(name, network_on_disk, lora_scale): + return native_adapter.try_load_ia3(name, network_on_disk, lora_scale, **_BIND_KWARGS) + + +def try_load_glora(name, network_on_disk, lora_scale): + return native_adapter.try_load_glora(name, network_on_disk, lora_scale, **_BIND_KWARGS) + + +def try_load_norm(name, network_on_disk, lora_scale): + return native_adapter.try_load_norm(name, network_on_disk, lora_scale, **_BIND_KWARGS) + + +def try_load_full(name, network_on_disk, lora_scale): + return native_adapter.try_load_full(name, network_on_disk, lora_scale, **_BIND_KWARGS) + + +def try_load(name, network_on_disk, lora_scale): + """Run every MiniMax family loader, merge any that match.""" + return native_adapter.try_load_chain( + name, network_on_disk, lora_scale, + family_loaders=( + try_load_lora, try_load_lokr, try_load_loha, try_load_oft, + try_load_ia3, try_load_glora, try_load_norm, try_load_full, + ), + ) diff --git a/scripts/xyz/xyz_grid_classes.py b/scripts/xyz/xyz_grid_classes.py index c4947b835..047ab37bb 100644 --- a/scripts/xyz/xyz_grid_classes.py +++ b/scripts/xyz/xyz_grid_classes.py @@ -111,6 +111,7 @@ class SharedSettingsStackHelper(): todo_ratio = None teacache_thresh = None extra_networks_default_multiplier = None + lora_force_diffusers = None lora_stack_mode = None lora_stack_density = None lora_stack_alpha = None @@ -148,6 +149,7 @@ class SharedSettingsStackHelper(): self.sd_unet = shared.opts.sd_unet self.sd_text_encoder = shared.opts.sd_text_encoder self.extra_networks_default_multiplier = shared.opts.extra_networks_default_multiplier + self.lora_force_diffusers = shared.opts.lora_force_diffusers self.lora_stack_mode = shared.opts.lora_stack_mode self.lora_stack_density = shared.opts.lora_stack_density self.lora_stack_alpha = shared.opts.lora_stack_alpha @@ -165,6 +167,7 @@ class SharedSettingsStackHelper(): shared.opts.data["disable_apply_metadata"] = self.disable_apply_metadata shared.opts.data["disable_apply_params"] = self.disable_apply_params shared.opts.data["extra_networks_default_multiplier"] = self.extra_networks_default_multiplier + shared.opts.data["lora_force_diffusers"] = self.lora_force_diffusers shared.opts.data["lora_stack_mode"] = self.lora_stack_mode shared.opts.data["lora_stack_density"] = self.lora_stack_density shared.opts.data["lora_stack_alpha"] = self.lora_stack_alpha @@ -232,6 +235,7 @@ axis_options = [ AxisOption("[Network] LoRA stack density", float, apply_setting("lora_stack_density"), cost=0.6), AxisOption("[Network] LoRA stack ramp", float, apply_setting("lora_stack_alpha"), cost=0.6), AxisOption("[Network] LoRA stack discrepancy", float, apply_setting("lora_stack_discrepancy"), cost=0.6), + AxisOption("[Network] LoRA force diffusers", bool, apply_setting("lora_force_diffusers"), cost=0.6, choices=lambda: [False, True]), AxisOption("[Network] Styles", str, apply_styles, choices=lambda: [s.name for s in shared.prompt_styles.styles.values()]), AxisOption("[Param] Width", int, apply_field("width")), AxisOption("[Param] Height", int, apply_field("height")), diff --git a/scripts/xyz/xyz_grid_shared.py b/scripts/xyz/xyz_grid_shared.py index 34e9d971f..fb90d4258 100644 --- a/scripts/xyz/xyz_grid_shared.py +++ b/scripts/xyz/xyz_grid_shared.py @@ -72,10 +72,20 @@ def apply_setting(field): def fun(p, x, xs): t = type(shared.opts.get(field)) if t == bool: - if isinstance(x, str): - x = x.lower() in ['true', 't', 'yes', 'y'] - if isinstance(x, int) or isinstance(x, float): + if isinstance(x, bool): + x = bool(x) + elif isinstance(x, str): + x = x.lower() in ['true', 't', 'yes', 'y', 'on'] + elif isinstance(x, int) or isinstance(x, float): x = x > 0 + else: + x = False + elif t == int: + x = int(x) + elif t == float: + x = float(x) + elif t == str: + x = str(x) log.debug(f'XYZ grid apply setting: {field}={t}:{x}') shared.opts.data[field] = x return fun diff --git a/scripts/xyz_grid.py b/scripts/xyz_grid.py index 83b8db79d..66d697f5d 100644 --- a/scripts/xyz_grid.py +++ b/scripts/xyz_grid.py @@ -220,13 +220,18 @@ class XYZGridScript(scripts_manager.Script): valslist = [x for x in valslist_ext if x not in valslist] elif opt.type == str_permutations: # pylint: disable=comparison-with-callable valslist = list(permutations(valslist)) - valslist = [opt.type(x) for x in valslist] + elif opt.type == bool: + valslist = [str(x).strip().lower() in ['true', 't', 'yes', 'y', '1', 'on'] for x in valslist] + else: + valslist = [opt.type(x) for x in valslist] # Confirm options are valid before starting if opt.confirm: opt.confirm(p, valslist) return valslist def parse_axis(x_type, x_values, x_values_dropdown): + if x_type is None: + x_type = 0 x_opt = None if isinstance(x_type, str): x_opt = [o for o in self.current_axis_options if o.label.lower() == x_type.lower()] diff --git a/scripts/xyz_grid_on.py b/scripts/xyz_grid_on.py index 12260e003..7fef27dc8 100644 --- a/scripts/xyz_grid_on.py +++ b/scripts/xyz_grid_on.py @@ -236,13 +236,18 @@ class XYZGridScript(scripts_manager.Script): valslist = [x for x in valslist_ext if x not in valslist] elif opt.type == str_permutations: # pylint: disable=comparison-with-callable valslist = list(permutations(valslist)) - valslist = [opt.type(x) for x in valslist] + elif opt.type == bool: + valslist = [str(x).strip().lower() in ['true', 't', 'yes', 'y', '1', 'on'] for x in valslist] + else: + valslist = [opt.type(x) for x in valslist] # Confirm options are valid before starting if opt.confirm: opt.confirm(p, valslist) return valslist def parse_axis(x_type, x_values, x_values_dropdown): + if x_type is None: + x_type = 0 x_opt = None if isinstance(x_type, str): x_opt = [o for o in self.current_axis_options if o.label.lower() == x_type.lower()] diff --git a/wiki b/wiki index 1f45008c0..b134e420f 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 1f45008c0de4e929211f182febe9666d3390a34e +Subproject commit b134e420f364e73e9cc86eeaa83ead8d87e93a07 From f895b72863d0764fbad29a00d265eec11bfe508e Mon Sep 17 00:00:00 2001 From: nan Date: Wed, 2 Sep 2026 00:13:20 +0800 Subject: [PATCH 119/270] Fix VDM trailing timestep spacing --- modules/schedulers/scheduler_vdm.py | 2 +- test/test-vdm-scheduler.py | 39 +++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 test/test-vdm-scheduler.py diff --git a/modules/schedulers/scheduler_vdm.py b/modules/schedulers/scheduler_vdm.py index 8afc3ae80..6e27304e9 100644 --- a/modules/schedulers/scheduler_vdm.py +++ b/modules/schedulers/scheduler_vdm.py @@ -191,7 +191,7 @@ class VDMScheduler(SchedulerMixin, ConfigMixin): if self.config.timestep_spacing in ["linspace", "leading"]: timesteps = np.linspace(0, 1, num_steps, endpoint=self.config.timestep_spacing == "linspace")[::-1] elif self.config.timestep_spacing == "trailing": - timesteps = np.arange(1, 0, -1 / num_steps) - 1 / num_steps + timesteps = np.linspace(1, 0, num_steps, endpoint=False) else: raise ValueError( f"`{self.config.timestep_spacing}` timestep spacing is not supported." diff --git a/test/test-vdm-scheduler.py b/test/test-vdm-scheduler.py new file mode 100644 index 000000000..413c20ee7 --- /dev/null +++ b/test/test-vdm-scheduler.py @@ -0,0 +1,39 @@ +import os +import sys + +import pytest +import torch + + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))) + +from modules.schedulers.scheduler_vdm import VDMScheduler + + +def _assert_timestep_spacing(spacing: str, num_steps: int) -> None: + scheduler = VDMScheduler(timestep_spacing=spacing) + scheduler.set_timesteps(num_steps) + timesteps = scheduler.timesteps + + if spacing == "leading": + expected = torch.arange(num_steps - 1, -1, -1, dtype=timesteps.dtype) / num_steps + else: + expected = torch.arange(num_steps, 0, -1, dtype=timesteps.dtype) / num_steps + + assert len(timesteps) == num_steps + assert torch.all((0 <= timesteps) & (timesteps <= 1)) + if num_steps > 1: + assert torch.all(timesteps[1:] < timesteps[:-1]) + torch.testing.assert_close(timesteps, expected, rtol=0, atol=1e-7) + + +@pytest.mark.parametrize("spacing", ["leading", "trailing"]) +@pytest.mark.parametrize("num_steps", [1, 2, 4, 49, 1000]) +def test_timestep_spacing(spacing: str, num_steps: int) -> None: + _assert_timestep_spacing(spacing, num_steps) + + +if __name__ == "__main__": + for test_spacing in ("leading", "trailing"): + for test_num_steps in (1, 2, 4, 49, 1000): + _assert_timestep_spacing(test_spacing, test_num_steps) From c06aa5b8c3f6ac382c97caf8a1be2371f83c5ecb Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 1 Sep 2026 20:26:49 +0200 Subject: [PATCH 120/270] update changelog and todo Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + TODO.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69ebcf39b..5a61d5d52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ - improve network type/version lookup - cleanup lora tags - xyz grid apply bool values + - vdm scheduler fix steps, thanks @zjn20030811 ## Update for 2026-08-26 diff --git a/TODO.md b/TODO.md index 2dc2085a6..72034c0c5 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,6 @@ ## Short-term - MiniMax: Create pre-quants for MiniMax-H3-Turbo, MiniMax-H3-Pruned-Turbo -- Benchmark tool productize: @CalamitousFelicitousness - Control tab verify overrides handling, @vladmandic - LTX: Create pre-quant for LTX-2.5 - LTX: Implement LTX2DFRPipeline @@ -24,6 +23,7 @@ - Lightweight scheduler/queue manager, @vladmandic - Integrate natural language image search: [ImageDB](https://github.com/vladmandic/imagedb), @vladmandic - Support cloud providers, @CalamitousFelicitousness +- Benchmark tool productize: @CalamitousFelicitousness ### Roadmap From 186afd4bac8ede295cbe4afd941404182a153cd1 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 2 Sep 2026 10:58:59 +0200 Subject: [PATCH 121/270] update openvino, refactor compile overrides, fix lora load Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 24 ++++++++------ installer.py | 4 +-- modules/api/api.py | 2 +- modules/api/docs.py | 5 +-- modules/attention/router.py | 2 +- modules/lora/lora_convert.py | 5 +-- modules/lora/lora_diffusers.py | 15 +++++---- modules/lora/lora_load.py | 4 +-- modules/sd_models.py | 3 ++ modules/sd_models_compile.py | 60 +++++++++++++++++++++++++--------- modules/sd_offload.py | 2 +- modules/ui_settings.py | 10 ------ webui.py | 2 +- 13 files changed, 84 insertions(+), 54 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a61d5d52..d917c9976 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2026-09-01 +## Update for 2026-09-02 - **LoRA** - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions @@ -34,23 +34,27 @@ - implement progress and preview - intercept and profiling hooks - on-demand convert standard model on-demand +- **Compute** + - openvino: update `openvino==2026.3.1` with `torch==2.13.0` - **Other** - Video Preview: TAESD support for **MiniMax** - new optional transformer hooks: *settings -> compute add-ons* *PAG: Perturbed attention guidance, PAB: Pyramid attention broadcast, FBC: First Block Cache, FC: Faster Cache, LS: Layer Skip, MC: Mag Cache, TS: TaylorSeer* *note*: compatibility of different methods varies across different models + - remove `/redocs` as `/docs` are primary api docs - **Wiki/Docs**: - [MiniMax](https://vladmandic.github.io/sdnext-docs/MiniMax) updated with LoRA, Turbo and other improvements - **Fixes** - - unnecessary secondary prompt if same - - js fetch exception handling - - detailer handling of stop/skip/pause - - cleanup dead rife code, thanks @Anai-Guo - - lumina-dimoo attention-kwargs, thanks @Anai-Guo - - improve network type/version lookup - - cleanup lora tags - - xyz grid apply bool values - - vdm scheduler fix steps, thanks @zjn20030811 + - prompt: unnecessary secondary prompt if same + - ui: js fetch exception handling + - detailer: handling of stop/skip/pause + - rife: cleanup dead code, thanks @Anai-Guo + - lumina-dimoo: attention-kwargs, thanks @Anai-Guo + - network: improve type/version lookup + - lora: cleanup tags + - xyz grid: apply bool values + - vdm scheduler: fix steps, thanks @zjn20030811 + - openvino: optimize recompile checks and lora loading ## Update for 2026-08-26 diff --git a/installer.py b/installer.py index e21e5dcbb..42f8ae462 100644 --- a/installer.py +++ b/installer.py @@ -808,10 +808,10 @@ def install_openvino(): if sys.platform == 'darwin': torch_command = os.environ.get('TORCH_COMMAND', 'torch==2.11.0 torchvision==0.26.0') else: - torch_command = os.environ.get('TORCH_COMMAND', 'torch==2.11.0+cpu torchvision==0.26.0 --index-url https://download.pytorch.org/whl/cpu') + torch_command = os.environ.get('TORCH_COMMAND', 'torch==2.13.0+cpu torchvision==0.28.0 --index-url https://download.pytorch.org/whl/cpu') if not (args.skip_all or args.skip_requirements): - install(os.environ.get('OPENVINO_COMMAND', 'openvino==2026.2.1'), 'openvino') + install(os.environ.get('OPENVINO_COMMAND', 'openvino==2026.3.1'), 'openvino') ts('openvino', t_start) return torch_command diff --git a/modules/api/api.py b/modules/api/api.py index ee32648d3..5b018d1e3 100644 --- a/modules/api/api.py +++ b/modules/api/api.py @@ -29,7 +29,7 @@ class Api: self.router = APIRouter() if shared.cmd_opts.docs: docs.create_docs(app) - docs.create_redocs(app) + # docs.create_redocs(app) self.app = app self.queue_lock = queue_lock self.generate = generate.APIGenerate(queue_lock) diff --git a/modules/api/docs.py b/modules/api/docs.py index 208bf3a56..584b91b11 100644 --- a/modules/api/docs.py +++ b/modules/api/docs.py @@ -1,8 +1,6 @@ import json from starlette.responses import HTMLResponse from fastapi import FastAPI -from fastapi.openapi.docs import get_redoc_html, swagger_ui_default_parameters -from fastapi.encoders import jsonable_encoder def get_swagger_ui_html(*, @@ -16,6 +14,8 @@ def get_swagger_ui_html(*, init_oauth: dict | None = None, swagger_ui_parameters: dict | None = None, ) -> HTMLResponse: + from fastapi.encoders import jsonable_encoder + from fastapi.openapi.docs import swagger_ui_default_parameters current_swagger_ui_parameters = swagger_ui_default_parameters.copy() if swagger_ui_parameters: current_swagger_ui_parameters.update(swagger_ui_parameters) @@ -79,6 +79,7 @@ def create_docs(app: FastAPI): def create_redocs(app: FastAPI): + from fastapi.openapi.docs import get_redoc_html @app.get("/redocs", include_in_schema=False) # override for the default fastapi redocs route async def custom_redoc_html(): res = get_redoc_html( diff --git a/modules/attention/router.py b/modules/attention/router.py index e1e7d80a1..10d3aab0b 100644 --- a/modules/attention/router.py +++ b/modules/attention/router.py @@ -142,7 +142,7 @@ def reapply() -> None: compiled = getattr(shared, 'compiled_model_state', None) if compiled is not None and getattr(compiled, 'is_compiled', False): torch._dynamo.reset() # pylint: disable=protected-access - log.debug('Attention: dynamo reset, compiled model resident') + log.debug('Attention: dynamo=reset compiled model resident') def report() -> dict: diff --git a/modules/lora/lora_convert.py b/modules/lora/lora_convert.py index 48c1b09b3..2c5455c00 100644 --- a/modules/lora/lora_convert.py +++ b/modules/lora/lora_convert.py @@ -136,8 +136,9 @@ class KeyConvert: sd_module = shared.sd_model.network_layer_mapping.get(flat_key, None) if sd_module is not None: key = flat_key - if debug and sd_module is None: - raise RuntimeError(f"LoRA key not found in network_layer_mapping: key={key} mapping={shared.sd_model.network_layer_mapping.keys()}") + if sd_module is None: + if debug: + raise RuntimeError(f"LoRA key not found in network_layer_mapping: key={key} mapping={shared.sd_model.network_layer_mapping.keys()}") return key, sd_module diff --git a/modules/lora/lora_diffusers.py b/modules/lora/lora_diffusers.py index e8321f8a0..96c6d110f 100644 --- a/modules/lora/lora_diffusers.py +++ b/modules/lora/lora_diffusers.py @@ -54,27 +54,30 @@ def load_per_module(sd_model: diffusers.DiffusionPipeline, filename: str, adapte def load_diffusers(name: str, network_on_disk: network.NetworkOnDisk, lora_scale:float=shared.opts.extra_networks_default_multiplier, lora_module=None, reason: str = '') -> network.Network | None: t0 = time.time() name = name.replace(".", "_") + reason = 'unknown' if reason is None or len(reason) == 0 else reason sd_model: diffusers.DiffusionPipeline = getattr(shared.sd_model, "pipe", shared.sd_model) - log.debug(f'Network load: type=LoRA name="{name}" file="{network_on_disk.filename}" detected={network_on_disk.sd_version} method=diffusers reason={reason or "unknown"} scale={lora_scale} fuse={lora_overrides.fuse_native()}:{shared.opts.lora_fuse_diffusers}') + log.debug(f'Network load: type=LoRA name="{name}" file="{network_on_disk.filename}" detected={network_on_disk.sd_version} method=diffusers reason="{reason}" scale={lora_scale} fuse={lora_overrides.fuse_native()}:{shared.opts.lora_fuse_diffusers}') if not hasattr(sd_model, 'load_lora_weights'): - log.error(f'Network load: type=LoRA class={sd_model.__class__} does not implement load lora') + log.error(f'Network load: type=LoRA class={sd_model.__class__} method=diffusersdoes not implement load lora') return None try: if lora_module is not None and isinstance(lora_module, list) and len(lora_module) > 0: name = load_per_module(sd_model, network_on_disk.filename, adapter_name=name, lora_modules=lora_module) sd_model._lora_partial = True # pylint: disable=protected-access else: + if shared.sd_model_type in ['sd', 'sdxl']: # skip te to avoid errors when lora does not have te to start with + diffusers.loaders.lora_pipeline._load_lora_into_text_encoder = lambda *args, **kwargs: None # pylint: disable=protected-access sd_model.load_lora_weights(network_on_disk.filename, adapter_name=name) except Exception as e: if 'already in use' in str(e): pass else: if 'following keys have not been correctly renamed' in str(e): - log.error(f'Network load: type=LoRA name="{name}" diffusers unsupported format') + log.error(f'Network load: type=LoRA name="{name}" method=diffusers unsupported format') elif 'object has no attribute' in str(e): - log.error(f'Network load: type=LoRA name="{name}" diffusers empty module') + log.error(f'Network load: type=LoRA name="{name}" method=diffusers empty module') else: - log.error(f'Network load: type=LoRA name="{name}" {e}') + log.error(f'Network load: type=LoRA name="{name}" method=diffusers {e}') if l.debug: errors.display(e, "LoRA") return None @@ -84,7 +87,7 @@ def load_diffusers(name: str, network_on_disk: network.NetworkOnDisk, lora_scale list_adapters = sd_model.get_list_adapters() list_adapters = [adapter for adapters in list_adapters.values() for adapter in adapters] if name not in list_adapters: - log.error(f'Network load: type=LoRA name="{name}" adapters={list_adapters} not loaded') + log.error(f'Network load: type=LoRA name="{name}" method=diffusers adapters={list_adapters} not loaded') else: diffuser_loaded.append(name) diffuser_scales.append(lora_scale) diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index d8c150fec..eb867b326 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -183,7 +183,7 @@ def maybe_recompile_model(names, te_multipliers): backup_cuda_compile = shared.opts.cuda_compile backup_scheduler = getattr(sd_model, "scheduler", None) sd_models.unload_model_weights(op='model') - shared.opts.cuda_compile = [] + shared.opts.cuda_compile = ['LoRA'] # if its empty, it will be overridden by set_openvino_overrides() to ['Model'] which is not what we want sd_models.reload_model_weights(op='model') shared.sd_model = sd_models.set_diffuser_pipe(shared.sd_model, current_task) shared.opts.cuda_compile = backup_cuda_compile @@ -354,7 +354,7 @@ def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=Non log.debug(f'Network load: type=LoRA loaded={[n.name for n in l.loaded_networks]} cache={list(lora_cache)} fuse={lora_overrides.fuse_native()}:{shared.opts.lora_fuse_diffusers}') if recompile_model: - log.info("Network load: type=LoRA recompiling model") + log.info("Network load: type=LoRA model recompile required") if shared.compiled_model_state is not None: backup_lora_model = shared.compiled_model_state.lora_model else: diff --git a/modules/sd_models.py b/modules/sd_models.py index 53cc42347..37ad35067 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -1070,6 +1070,8 @@ def load_diffuser(checkpoint_info: CheckpointInfo | None = None, op='model', rev try: if shared.opts.ipex_optimize: sd_model = sd_models_compile.ipex_optimize(sd_model) + if shared.cmd_opts.use_openvino or devices.backend == 'openvino': + sd_models_compile.set_openvino_overrides() if (shared.opts.cuda_compile_backend != 'none') and len(shared.opts.cuda_compile) > 0: if 'components' in shared.opts.cuda_compile_options: @@ -1596,6 +1598,7 @@ def unload_model_weights(op='model'): shared.compiled_model_state.compiled_cache.clear() shared.compiled_model_state.req_cache.clear() shared.compiled_model_state.partitioned_modules.clear() + # shared.compiled_model_state = None if (op == 'model' or op == 'dict') and model_data.sd_model: log.debug(f'Current {op}: {memory_stats()}') if not ('Model' in shared.opts.cuda_compile and (shared.opts.cuda_compile_backend == "openvino_fx" or shared.opts.cuda_compile_backend == "openvino")): diff --git a/modules/sd_models_compile.py b/modules/sd_models_compile.py index a6c4acf54..287006a61 100644 --- a/modules/sd_models_compile.py +++ b/modules/sd_models_compile.py @@ -8,10 +8,11 @@ from installer import setup_logging debug = os.environ.get('SD_COMPILE_DEBUG', None) is not None debug_log = log.trace if debug else lambda *args, **kwargs: None +deepcache_worker = None +log_once = False -#Used by OpenVINO, can be used with TensorRT or Olive -class CompiledModelState: +class CompiledModelState: # Used by OpenVINO, can be used with TensorRT or Olive def __init__(self): self.is_compiled = False self.model_hash_str = "" @@ -29,9 +30,6 @@ class CompiledModelState: self.partitioned_modules = {} -deepcache_worker = None - - def ipex_optimize(sd_model, apply_to_components=True, op="Model"): try: t0 = time.time() @@ -205,19 +203,25 @@ def compile_stablefast(sd_model): def compile_torch(sd_model, apply_to_components=True, op="Model"): try: - t0 = time.time() + global log_once # pylint: disable=global-statement + t0 = time.perf_counter() import torch._dynamo # pylint: disable=unused-import,redefined-outer-name torch._dynamo.reset() # pylint: disable=protected-access - log.debug(f"{op} compile: task=torch available={torch._dynamo.list_backends()}") # pylint: disable=protected-access is_repeated = hasattr(sd_model, 'compile_repeated_blocks') and 'repeated' in shared.opts.cuda_compile_options and not sd_model.__class__.__name__.startswith("Autoencoder") - log.debug(f"{op} compile: options={shared.opts.cuda_compile_options} mode={shared.opts.cuda_compile_mode} backend={shared.opts.cuda_compile_backend} repeated={is_repeated} components={apply_to_components} targets={shared.opts.cuda_compile}") + if not log_once: + log_once = True + log.debug(f"{op} compile: task=torch available={torch._dynamo.list_backends()}") # pylint: disable=protected-access + log.debug(f"{op} compile: options={shared.opts.cuda_compile_options} mode={shared.opts.cuda_compile_mode} backend={shared.opts.cuda_compile_backend} repeated={is_repeated} components={apply_to_components} targets={shared.opts.cuda_compile}") compiled_components = [] def torch_compile_model(model, op=None, sd_model=None): # pylint: disable=unused-argument - setup_logging() # compile messes with logging so reset is needed - log.debug(f"Compile: cls={sd_model.__class__.__name__} apply") name = model.__class__.__name__ if callable(model) else model.__name__ + if 'OptimizedModule' in name: + log.warning('Model compile: task=torch model is already compiled') + return model + log.debug(f"Model compile: cls={name} apply") + setup_logging() # compile messes with logging so reset is needed compiled_components.append(name) if is_repeated: model.compile_repeated_blocks( @@ -228,14 +232,17 @@ def compile_torch(sd_model, apply_to_components=True, op="Model"): ) elif hasattr(model, 'device') and model.device.type != "meta": return_device = model.device - model = torch.compile(model.to(devices.device), + model = model.to(devices.device) + model = torch.compile( + model, mode=shared.opts.cuda_compile_mode, backend=shared.opts.cuda_compile_backend, fullgraph='fullgraph' in shared.opts.cuda_compile_options, dynamic='dynamic' in shared.opts.cuda_compile_options, ).to(return_device) else: - model = torch.compile(model, + model = torch.compile( + model, mode=shared.opts.cuda_compile_mode, backend=shared.opts.cuda_compile_backend, fullgraph='fullgraph' in shared.opts.cuda_compile_options, @@ -287,7 +294,8 @@ def compile_torch(sd_model, apply_to_components=True, op="Model"): sd_model("dummy prompt") except Exception: pass - t1 = time.time() + + t1 = time.perf_counter() log.info(f"{op} compile: task=torch components={compiled_components} time={t1-t0:.2f}") except Exception as e: log.warning(f"{op} compile: task=torch {e}") @@ -329,23 +337,43 @@ def compile_diffusers(sd_model, apply_to_components=True, op="Model"): log.warning(f'{op} compile enabled but no backend specified') return sd_model t0 = time.time() - log.info(f"{op} compile: pipeline={sd_model.__class__.__name__} backend={shared.opts.cuda_compile_backend} options={shared.opts.cuda_compile_options}") + log.info(f"{op} compile: component={sd_model.__class__.__name__} backend={shared.opts.cuda_compile_backend} options={shared.opts.cuda_compile_options}") if shared.opts.cuda_compile_backend == 'onediff': sd_model = compile_onediff(sd_model) + log.debug(f"{op} compile: task=onediff time={time.time()-t0:.2f}") elif shared.opts.cuda_compile_backend == 'stable-fast': sd_model = compile_stablefast(sd_model) + log.debug(f"{op} compile: task=stablefast time={time.time()-t0:.2f}") elif shared.opts.cuda_compile_backend == 'deep-cache': sd_model = compile_deepcache(sd_model) + log.debug(f"{op} compile: task=deepcache time={time.time()-t0:.2f}") elif shared.opts.cuda_compile_backend == 'pruna': sd_model = compile_pruna(sd_model) + log.debug(f"{op} compile: task=pruna time={time.time()-t0:.2f}") else: check_deepcache(False) sd_model = compile_torch(sd_model, apply_to_components=apply_to_components, op=op) - t1 = time.time() - log.debug(f"{op} compile: time={t1-t0:.2f}") return sd_model +def set_openvino_overrides(): + if "Model" not in shared.opts.cuda_compile: + if 'LoRA' in shared.opts.cuda_compile: + shared.opts.cuda_compile = [] + else: + shared.opts.cuda_compile.append("Model") + log.warning("OpenVINO: compile=Model setting override") + if shared.opts.cuda_compile_backend != shared.opts.openvino_compile_backend: + shared.opts.cuda_compile_backend = shared.opts.openvino_compile_backend + log.warning(f"OpenVINO: backend={shared.opts.openvino_compile_backend} setting override") + if shared.opts.diffusers_offload_mode != "none": + shared.opts.diffusers_offload_mode = "none" + log.warning("OpenVINO: offload=None setting override") + if not shared.opts.lora_force_diffusers: + shared.opts.lora_force_diffusers = True + log.warning("OpenVINO: lora=diffusers setting override") + + def openvino_recompile_model(p, hires=False, refiner=False): # recompile if a parameter changes # pylint: disable=unused-argument if (shared.opts.cuda_compile_backend == "openvino_fx" or shared.opts.cuda_compile_backend == "openvino") and ('Model' in shared.opts.cuda_compile): compile_height = p.height if not hires and hasattr(p, 'height') else p.hr_upscale_to_y diff --git a/modules/sd_offload.py b/modules/sd_offload.py index 95e4fc261..a6f1bcafb 100644 --- a/modules/sd_offload.py +++ b/modules/sd_offload.py @@ -106,7 +106,7 @@ def set_diffuser_offload(sd_model, op:str='model', quiet:bool=False, force:bool= process_timer.add('offload', time.time() - t0) return - if shared.opts.diffusers_offload_mode == "none": + if shared.opts.diffusers_offload_mode == "none" and devices.backend != "openvino": log.warning('Offload: type=none "use balanced offload with model type set not to offload"') apply_none_offload(sd_model, quiet=quiet) diff --git a/modules/ui_settings.py b/modules/ui_settings.py index 216895788..af3874d93 100644 --- a/modules/ui_settings.py +++ b/modules/ui_settings.py @@ -135,16 +135,6 @@ def run_settings(*args): from modules.onnx_impl import install_olive, initialize_onnx_pipelines install_olive() initialize_onnx_pipelines() - if shared.cmd_opts.use_openvino: - if "Model" not in shared.opts.cuda_compile: - log.warning("OpenVINO: Overriding Torch Compile Model") - shared.opts.cuda_compile.append("Model") - if shared.opts.cuda_compile_backend != shared.opts.openvino_compile_backend: - log.warning(f"OpenVINO: Overriding Torch Compile backend={shared.opts.openvino_compile_backend}") - shared.opts.cuda_compile_backend = shared.opts.openvino_compile_backend - if shared.opts.diffusers_offload_mode != "none": - log.warning("OpenVINO: Overriding diffusers_offload_mode=none") - shared.opts.diffusers_offload_mode = "none" if shared.opts.sd_backend != "diffusers": log.error('Legacy option: backend=original is no longer supported') shared.opts.sd_backend = "diffusers" diff --git a/webui.py b/webui.py index 547142c00..70b1595d7 100644 --- a/webui.py +++ b/webui.py @@ -448,7 +448,7 @@ def start_ui(): log.info(f'Public URL: {proto}://{public_ip}:{shared.cmd_opts.port}') if shared.cmd_opts.docs: log.info(f'API docs: {local_url[:-1]}/docs') # pylint: disable=unsubscriptable-object - log.info(f'API redocs: {local_url[:-1]}/redocs') # pylint: disable=unsubscriptable-object + # log.info(f'API redocs: {local_url[:-1]}/redocs') # pylint: disable=unsubscriptable-object if share_url is not None: log.info(f'Share URL: {share_url}') if getattr(shared.cmd_opts, 'enso', False): From b57d526b5bf74bf01acd68f6c93c2a43ca0b145f Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 4 Sep 2026 07:52:46 +0200 Subject: [PATCH 122/270] update numpy/scripy and add SD_SKIP_AUTOTUNE Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 10 +++++++--- constraints.txt | 2 +- installer.py | 12 ++++++------ modules/sd_hijack_triton.py | 6 ++++++ requirements.txt | 8 ++++---- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d917c9976..acd7fa139 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2026-09-02 +## Update for 2026-09-04 - **LoRA** - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions @@ -36,11 +36,15 @@ - on-demand convert standard model on-demand - **Compute** - openvino: update `openvino==2026.3.1` with `torch==2.13.0` -- **Other** - - Video Preview: TAESD support for **MiniMax** + - add `SD_SKIP_AUTOTUNE` env variable to skip triton autotune and use default config for all triton kernels + *note*: this may improve initial generate time, but may also reduce performance on some models - new optional transformer hooks: *settings -> compute add-ons* *PAG: Perturbed attention guidance, PAB: Pyramid attention broadcast, FBC: First Block Cache, FC: Faster Cache, LS: Layer Skip, MC: Mag Cache, TS: TaylorSeer* *note*: compatibility of different methods varies across different models + - update `numpy` and `scipy` frozen requirements as required by new compute drivers + *note*: this may break compatibility with some legacy packages, so report any finidings +- **Other** + - Video Preview: TAESD support for **MiniMax** - remove `/redocs` as `/docs` are primary api docs - **Wiki/Docs**: - [MiniMax](https://vladmandic.github.io/sdnext-docs/MiniMax) updated with LoRA, Turbo and other improvements diff --git a/constraints.txt b/constraints.txt index a14553032..1eb39948b 100644 --- a/constraints.txt +++ b/constraints.txt @@ -1,3 +1,3 @@ fastapi==0.124.4 -numpy==2.1.2 +numpy==2.5.2 Pillow==12.2.0 diff --git a/installer.py b/installer.py index 42f8ae462..95b6fc85a 100644 --- a/installer.py +++ b/installer.py @@ -1277,10 +1277,8 @@ def install_pydantic(): def install_scipy(): - if args.new or (sys.version_info >= (3, 14)): - install('scipy==1.17.1', ignore=True, quiet=True) - else: - install('scipy==1.14.1', ignore=True, quiet=True) + # install('scipy==1.14.1', ignore=True, quiet=True) + install('scipy==1.18.1', ignore=True, quiet=True) def install_opencv(): @@ -1311,7 +1309,6 @@ def install_insightface(): def install_optional(): t_start = time.time() log.info('Installing optional requirements...') - install('pillow-heif') install('addict') install('yapf') install('--no-build-isolation git+https://github.com/Disty0/BasicSR@23c1fb6f5c559ef5ce7ad657f2fa56e41b121754', 'basicsr', ignore=True, quiet=True) @@ -1322,11 +1319,14 @@ def install_optional(): install('Cython', ignore=True, quiet=True) install('gguf', ignore=True, quiet=True) install('hf_transfer', ignore=True, quiet=True) - install('hf_xet', ignore=True, quiet=True) install('nvidia-ml-py', ignore=True, quiet=True) + install('pillow-heif') install('pillow-jxl-plugin==1.3.7', ignore=True, quiet=True) install('ultralytics==8.4.67', ignore=True, quiet=True) install('open-clip-torch', no_deps=True, quiet=True) + install('runai_model_streamer', ignore=True, quiet=True) + install('facexlib', ignore=True, quiet=True) + install('omegaconf', ignore=True, quiet=True) install('git+https://github.com/tencent-ailab/IP-Adapter.git', 'ip_adapter', ignore=True, quiet=True) # install('git+https://github.com/openai/CLIP.git', 'clip', quiet=True, no_build_isolation=True) ts('optional', t_start) diff --git a/modules/sd_hijack_triton.py b/modules/sd_hijack_triton.py index 28bb6530a..94aeba161 100644 --- a/modules/sd_hijack_triton.py +++ b/modules/sd_hijack_triton.py @@ -171,6 +171,12 @@ def run_hook(orig): if hasattr(arg, 'dtype'): key += (str(arg.dtype),) needs_benchmark = len(self.configs) > 1 and key not in self.cache + import os + skip_autotune = os.environ.get('SD_SKIP_AUTOTUNE', None) is not None + if needs_benchmark and skip_autotune: + log.trace('Autotune: skip') + self.cache[key] = self.configs[0] # pre-seed the cache so orig() takes its cache-hit path and skips the sweep + needs_benchmark = False if needs_benchmark: try: total = len(self.prune_configs(kwargs)) diff --git a/requirements.txt b/requirements.txt index 0e99da630..89a95dbdf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,15 +32,15 @@ requests==2.34.2 tqdm==4.70.0 accelerate==1.14.0 einops==0.8.2 -huggingface_hub==1.28.0 +huggingface_hub==1.30.0 hf_xet==1.6.0 -numpy==2.1.2 +numpy==2.5.2 pandas==2.3.1 -protobuf==7.36.0 +protobuf==7.36.1 pytorch_lightning==2.6.5 urllib3==1.26.19 Pillow==12.2.0 -timm==1.0.28 +timm==1.0.29 pyparsing==3.3.2 typing-extensions==4.16.0 sentencepiece==0.2.1 From 1a47736c66182718238306dbaa3bb8c87e0be568 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 4 Sep 2026 09:49:12 +0200 Subject: [PATCH 123/270] fix model-recompile keep state Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 13 +++++++++++++ modules/history.py | 2 +- modules/intel/openvino/__init__.py | 10 +++++----- modules/logger.py | 9 ++++++++- modules/lora/extra_networks_lora.py | 14 ++++++++------ modules/lora/lora_load.py | 12 ++++++++++-- modules/processing_diffusers.py | 4 ++-- modules/processing_vae.py | 2 +- modules/sd_hijack_modular.py | 2 +- modules/sd_hijack_triton.py | 3 +-- modules/sd_models_compile.py | 15 +++++++++++---- modules/shared_state.py | 2 +- modules/vae/sd_vae_remote.py | 2 +- scripts/pulid/pulid_sdxl.py | 10 +++++----- 14 files changed, 68 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index acd7fa139..ad851ae10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ ## Update for 2026-09-04 +### Highlights for 2026-09-04 + +All-about-optimizations: +- improved LoRA performance and quality, especially with quantized models +- newly structured attention mechanisms +- modular pipelines with new guidance +- support for different caching stacks +- compute updates across the board + +### Details for 2026-09-04 + - **LoRA** - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions *note*: lora now has its own settings section in *settings -> lora* @@ -59,6 +70,8 @@ - xyz grid: apply bool values - vdm scheduler: fix steps, thanks @zjn20030811 - openvino: optimize recompile checks and lora loading + - log: ansi color handling + - compile: keep model compiled state ## Update for 2026-08-26 diff --git a/modules/history.py b/modules/history.py index f98fea1b2..797c5a3b2 100644 --- a/modules/history.py +++ b/modules/history.py @@ -36,7 +36,7 @@ class Item: def __str__(self): if self.latent is not None: - return f'Item(ts="{self.name}" ops={self.ops} latent={self.latent.shape} size={self.size})' + return f'Item(ts="{self.name}" ops={self.ops} latent={list(self.latent.shape)} size={self.size})' elif self.images is not None: return f'Item(ts="{self.name}" ops={self.ops} images={len(self.images) if isinstance(self.images, list) else self.images})' else: diff --git a/modules/intel/openvino/__init__.py b/modules/intel/openvino/__init__.py index 85f46e78b..f779743ee 100644 --- a/modules/intel/openvino/__init__.py +++ b/modules/intel/openvino/__init__.py @@ -251,14 +251,14 @@ def openvino_compile(gm: GraphModule, *example_inputs, model_hash_str: str | Non hints = {} if shared.opts.openvino_accuracy == "performance": - hints[ov_hints.execution_mode] = ov_hints.ExecutionMode.PERFORMANCE + hints[ov_hints.execution_mode] = ov_hints.ExecutionMode.PERFORMANCE # pylint: disable=c-extension-no-member elif shared.opts.openvino_accuracy == "accuracy": - hints[ov_hints.execution_mode] = ov_hints.ExecutionMode.ACCURACY + hints[ov_hints.execution_mode] = ov_hints.ExecutionMode.ACCURACY # pylint: disable=c-extension-no-member if model_hash_str is not None: hints['CACHE_DIR'] = shared.opts.openvino_cache_path + '/blob' core.set_property(hints) - log.debug(f'OpenVINO compile: device={device} backend={shared.opts.cuda_compile_backend} hints={hints} file="{file_name}"') + log.debug(f'OpenVINO compile cache: device={device} backend={shared.opts.cuda_compile_backend} accuracy={shared.opts.openvino_accuracy} hints={hints} hash={model_hash_str} file="{file_name}"') compiled_model = core.compile_model(om, device) return compiled_model @@ -274,9 +274,9 @@ def openvino_compile_cached_model(cached_model_path, *example_inputs): hints = {'CACHE_DIR': shared.opts.openvino_cache_path + '/blob'} if shared.opts.openvino_accuracy == "performance": - hints[ov_hints.execution_mode] = ov_hints.ExecutionMode.PERFORMANCE + hints[ov_hints.execution_mode] = ov_hints.ExecutionMode.PERFORMANCE # pylint: disable=c-extension-no-member elif shared.opts.openvino_accuracy == "accuracy": - hints[ov_hints.execution_mode] = ov_hints.ExecutionMode.ACCURACY + hints[ov_hints.execution_mode] = ov_hints.ExecutionMode.ACCURACY # pylint: disable=c-extension-no-member core.set_property(hints) device = get_device() diff --git a/modules/logger.py b/modules/logger.py index a1826b571..91f9b2327 100644 --- a/modules/logger.py +++ b/modules/logger.py @@ -237,8 +237,15 @@ def setup_logging(debug=None, trace=None, filename=None): "inspect.value.border": "black", "traceback.border.syntax_error": "dark_red", "logging.level.info": "blue_violet", - "logging.level.debug": "purple4", + "logging.level.debug": "orchid", "logging.level.trace": "dark_blue", + "repr.attrib_name": "bright_cyan", + "repr.attrib_value": "orchid", + "repr.str": "sandy_brown", + "repr.number": "bright_green", + "repr.bool_true": "bright_green", + "repr.bool_false": "bright_red", + "repr.values": "bright_cyan", }) Padding.__rich_console__ = override_padding diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index 81015af01..e85771e3f 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -54,7 +54,7 @@ def prompt(p): all_tags = list(set(all_tags)) all_tags = [t for t in all_tags if t not in p.prompt] if len(all_tags) > 0: - log.debug(f"Network load: type=LoRA tags={all_tags} max={shared.opts.lora_apply_tags} apply") + log.debug(f"Network tags: type=LoRA tags={all_tags} max={shared.opts.lora_apply_tags} apply") all_tags = ', '.join(all_tags) p.extra_generation_params["LoRA tags"] = all_tags if '_tags_' in p.prompt: @@ -163,7 +163,7 @@ def unload_diffusers(): pass if hasattr(shared.sd_model, "unload_lora_weights"): try: - shared.sd_model.unload_lora_weights() # fails for non-CLIP models + shared.sd_model.unload_lora_weights() except Exception: pass @@ -248,7 +248,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): if hasattr(sd_model, 'disable_lora'): try: sd_model.disable_lora() - log.info('Network unload: type=LoRA mode=diffusers') + log.info('Network unload: type=LoRA method=diffusers disable') except Exception as e: log.error(f'Network unload: type=LoRA {e}') sd_models.set_diffuser_offload(shared.sd_model, op="model") @@ -275,13 +275,15 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): if len(l.loaded_networks) > 0 and (len(networks.applied_layers) > 0 or load_method=='diffusers' or load_method=='nunchaku') and step == 0: infotext(p) prompt(p) - if has_changed and len(include) == 0: # print only once + sd_model = shared.sd_model.pipe if hasattr(shared.sd_model, 'pipe') else shared.sd_model + if len(include) == 0: # print only once actual_method = 'native' if any(len(n.modules) > 0 for n in l.loaded_networks) else load_method stack = lora_stack.signature() if actual_method == 'native' else 'sum' # non-native paths always combine as sum - log.info(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} load={load_method}({load_reason}) method={actual_method} mode={networks.effective_mode()} stack={stack} te={te_multipliers} unet={unet_multipliers} time={l.timer.summary} reason="{reason}"') + log.info(f'Network status: type=LoRA networks={[n.name for n in l.loaded_networks]} method={actual_method}({load_reason}) mode={networks.effective_mode()} stack={stack} te={te_multipliers} unet={unet_multipliers} time={l.timer.summary} changed={has_changed} reason="{reason}"') - def deactivate(self, p, force=False): + def deactivate(self, p, force=False): # pylint: disable=unused-argument if len(lora_diffusers.diffuser_loaded) > 0 and (shared.opts.lora_force_reload or force): + log.debug(f'Network unload: type=LoRA method=diffusers loaded={len(lora_diffusers.diffuser_loaded)} opts={shared.opts.lora_force_reload} force={force}') unload_diffusers() if force: networks.network_deactivate() diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index eb867b326..7b9a0f918 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -177,18 +177,26 @@ def maybe_recompile_model(names, te_multipliers): else: recompile_model = True shared.compiled_model_state.lora_model = [] + if l.debug: + log.debug(f'Model recompile check: task={sd_models.get_diffusers_task(shared.sd_model)} recompile={recompile_model} load={skip_lora_load}') if recompile_model: current_task = sd_models.get_diffusers_task(shared.sd_model) log.debug(f'Compile: task={current_task} force model reload') backup_cuda_compile = shared.opts.cuda_compile backup_scheduler = getattr(sd_model, "scheduler", None) + backup_loaded_loras = getattr(sd_model, "loaded_loras", None) # reload below replaces shared.sd_model with a new pipe object sd_models.unload_model_weights(op='model') shared.opts.cuda_compile = ['LoRA'] # if its empty, it will be overridden by set_openvino_overrides() to ['Model'] which is not what we want sd_models.reload_model_weights(op='model') shared.sd_model = sd_models.set_diffuser_pipe(shared.sd_model, current_task) shared.opts.cuda_compile = backup_cuda_compile + new_sd_model = getattr(shared.sd_model, "pipe", shared.sd_model) # scheduler/cache must be reapplied to the new object, not the discarded one if backup_scheduler is not None: - sd_model.scheduler = backup_scheduler + new_sd_model.scheduler = backup_scheduler + if backup_loaded_loras is not None: + new_sd_model.loaded_loras = backup_loaded_loras + from modules import processing_diffusers # pylint: disable=import-outside-toplevel + processing_diffusers.orig_pipeline = shared.sd_model # otherwise process_diffusers() restores the pre-recompile pipeline once generation ends return recompile_model, skip_lora_load @@ -334,7 +342,7 @@ def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=Non try: if shared.opts.lora_fuse_diffusers and not lora_overrides.disable_fuse(): sd_model.fuse_lora(adapter_names=lora_diffusers.diffuser_loaded, lora_scale=1.0, fuse_unet=True, fuse_text_encoder=True) # diffusers with fuse uses fixed scale since later apply does the scaling - sd_model.unload_lora_weights() + # sd_model.unload_lora_weights() # optionally unload fused lora as we dont need it, but it may cause issues with some models l.timer.activate += time.time() - t1 except Exception as e: log.error(f'Network load: type=LoRA action=fuse {str(e)}') diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index e46aa785c..fcc33037a 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -79,7 +79,7 @@ def process_pre(p: processing.StableDiffusionProcessing, phase: str | None = Non modular_guiders.set_guider(p, phase) else: try: - log.info(f'Processing modifiers: phase={phase} apply') + log.info(f'Processing: modifiers=apply phase={phase}') from modules import ipadapter, sd_hijack_freeu, para_attention, teacache, hidiffusion, ras, pag, cfgzero, transformer_cache, token_merge, linfusion, cachedit # apply-with-unapply # sd_hijack_compile.install() @@ -112,7 +112,7 @@ def process_post(p: processing.StableDiffusionProcessing): else: try: from modules import ipadapter, hidiffusion, ras, pag, cfgzero, token_merge, linfusion, cachedit - log.info('Processing modifiers: unapply') + log.info('Processing: modifiers=unapply') sd_models_compile.check_deepcache(enable=False) ipadapter.unapply(shared.sd_model, unload=getattr(p, 'ip_adapter_unload', False)) token_merge.remove_token_merging(shared.sd_model) diff --git a/modules/processing_vae.py b/modules/processing_vae.py index 4b36e4788..34f13c405 100644 --- a/modules/processing_vae.py +++ b/modules/processing_vae.py @@ -396,7 +396,7 @@ def reprocess(gallery): latent, index = shared.history.selected if latent is None or gallery is None: return None - log.info(f'Reprocessing: latent={latent.shape}') + log.info(f'Reprocessing: latent={list(latent.shape)}') reprocessed = vae_decode(latent, shared.sd_model, output_type='pil') outputs = [] for i0, i1 in zip(gallery, reprocessed, strict=False): diff --git a/modules/sd_hijack_modular.py b/modules/sd_hijack_modular.py index cba1cf993..4f4b7ed72 100644 --- a/modules/sd_hijack_modular.py +++ b/modules/sd_hijack_modular.py @@ -27,7 +27,7 @@ def modular_step(components: diffusers.modular_pipelines.ModularPipeline, state: shared.state.current_latent = state.latents lora_stack.on_step(shared.state.sampling_step) if debug: - log.trace(f'Modular step: step={shared.state.sampling_step} latent={state.latents.shape}') + log.trace(f'Modular step: step={shared.state.sampling_step} latent={list(state.latents.shape)}') if shared.state.interrupted or shared.state.skipped: raise AssertionError('Interrupted...') if shared.state.paused: diff --git a/modules/sd_hijack_triton.py b/modules/sd_hijack_triton.py index 94aeba161..2fad5ba3c 100644 --- a/modules/sd_hijack_triton.py +++ b/modules/sd_hijack_triton.py @@ -1,3 +1,4 @@ +import os import time import math from typing import Any @@ -171,10 +172,8 @@ def run_hook(orig): if hasattr(arg, 'dtype'): key += (str(arg.dtype),) needs_benchmark = len(self.configs) > 1 and key not in self.cache - import os skip_autotune = os.environ.get('SD_SKIP_AUTOTUNE', None) is not None if needs_benchmark and skip_autotune: - log.trace('Autotune: skip') self.cache[key] = self.configs[0] # pre-seed the cache so orig() takes its cache-hit path and skips the sweep needs_benchmark = False if needs_benchmark: diff --git a/modules/sd_models_compile.py b/modules/sd_models_compile.py index 287006a61..594b77449 100644 --- a/modules/sd_models_compile.py +++ b/modules/sd_models_compile.py @@ -357,21 +357,28 @@ def compile_diffusers(sd_model, apply_to_components=True, op="Model"): def set_openvino_overrides(): + overrides = [] if "Model" not in shared.opts.cuda_compile: if 'LoRA' in shared.opts.cuda_compile: shared.opts.cuda_compile = [] else: shared.opts.cuda_compile.append("Model") - log.warning("OpenVINO: compile=Model setting override") + overrides.append("compile=model") if shared.opts.cuda_compile_backend != shared.opts.openvino_compile_backend: shared.opts.cuda_compile_backend = shared.opts.openvino_compile_backend - log.warning(f"OpenVINO: backend={shared.opts.openvino_compile_backend} setting override") + overrides.append(f"backend={shared.opts.openvino_compile_backend}") if shared.opts.diffusers_offload_mode != "none": shared.opts.diffusers_offload_mode = "none" - log.warning("OpenVINO: offload=None setting override") + overrides.append("offload=none") if not shared.opts.lora_force_diffusers: shared.opts.lora_force_diffusers = True - log.warning("OpenVINO: lora=diffusers setting override") + overrides.append("lora=diffusers") + if not shared.opts.lora_fuse_diffusers: + shared.opts.lora_fuse_native = False + shared.opts.lora_fuse_diffusers = True + overrides.append("lora=fuse") + if len(overrides) > 0: + log.warning(f"OpenVINO setting override: {overrides}") def openvino_recompile_model(p, hires=False, refiner=False): # recompile if a parameter changes # pylint: disable=unused-argument diff --git a/modules/shared_state.py b/modules/shared_state.py index 4c0a31e07..0eaa6c68b 100644 --- a/modules/shared_state.py +++ b/modules/shared_state.py @@ -63,7 +63,7 @@ class State: status += 'oom ' if self.oom else '' status += 'api ' if self.api else '' fn = f'{sys._getframe(3).f_code.co_name}:{sys._getframe(2).f_code.co_name}' # pylint: disable=protected-access - return f'State: ts={self.job_timestamp} job={self.job} jobs={self.job_no+1}/{self.job_count}/{self.total_jobs} step={self.sampling_step}/{self.sampling_steps} preview={self.preview_job}/{self.id_live_preview}/{self.current_image_sampling_step} status="{status.strip()}" image={self.current_image} latent={self.current_latent.shape if self.current_latent is not None else None} fn={fn}' + return f'State: ts={self.job_timestamp} job={self.job} jobs={self.job_no+1}/{self.job_count}/{self.total_jobs} step={self.sampling_step}/{self.sampling_steps} preview={self.preview_job}/{self.id_live_preview}/{self.current_image_sampling_step} status="{status.strip()}" image={self.current_image} latent={list(self.current_latent.shape) if self.current_latent is not None else None} fn={fn}' @property def sampling_step(self): diff --git a/modules/vae/sd_vae_remote.py b/modules/vae/sd_vae_remote.py index 835b37f69..ae98ac081 100644 --- a/modules/vae/sd_vae_remote.py +++ b/modules/vae/sd_vae_remote.py @@ -180,5 +180,5 @@ def remote_encode(images: list[Image.Image], model_type: str | None = None): else: return images t1 = time.time() - log.debug(f'Encode: type="remote" model={model_type} mode={shared.opts.remote_vae_type} image={images} latent={tensors.shape} time={t1-t0:.3f}s') + log.debug(f'Encode: type="remote" model={model_type} mode={shared.opts.remote_vae_type} image={images} latent={list(tensors.shape)} time={t1-t0:.3f}s') return tensors diff --git a/scripts/pulid/pulid_sdxl.py b/scripts/pulid/pulid_sdxl.py index a36283be3..6e3561bfb 100644 --- a/scripts/pulid/pulid_sdxl.py +++ b/scripts/pulid/pulid_sdxl.py @@ -327,7 +327,7 @@ class StableDiffusionXLPuLIDPipeline: return_image_latents=False, ) latents = latents[0] - debug(f'PulID noise: op=inpaint latent={latents.shape} image={image} mask={mask_image} dtype={latents.dtype}') + debug(f'PulID noise: op=inpaint latent={list(latents.shape)} image={image} mask={mask_image} dtype={latents.dtype}') else: # img2img latents = self.pipe.prepare_latents(image, None, # timestep (not needed) @@ -338,10 +338,10 @@ class StableDiffusionXLPuLIDPipeline: None, # generator False, # add_noise ) - debug(f'PulID noise: op=img2img latent={latents.shape} image={image} dtype={latents.dtype}') + debug(f'PulID noise: op=img2img latent={list(latents.shape)} image={image} dtype={latents.dtype}') else: latents = torch.zeros_like(noise) - debug(f'PulID noise: op=txt2img latent={latents.shape} dtype={latents.dtype}') + debug(f'PulID noise: op=txt2img latent={list(latents.shape)} dtype={latents.dtype}') return latents, noise def __call__( @@ -379,7 +379,7 @@ class StableDiffusionXLPuLIDPipeline: # latents latent, noise = self.init_latent(seed, size, image, mask_image, strength, width, height) noisy_latent = latent + noise * sigmas[0].to(noise) - debug(f'PulID noisy: latent={noisy_latent.shape} dtype={noisy_latent.dtype}') + debug(f'PulID noisy: latent={list(noisy_latent.shape)} dtype={noisy_latent.dtype}') ( prompt_embeds, @@ -425,7 +425,7 @@ class StableDiffusionXLPuLIDPipeline: # process output latents = latents.to(dtype=self.pipe.vae.dtype, device=self.device) - debug(f'PulID output: latent={latents.shape} dtype={latents.dtype}') + debug(f'PulID output: latent={list(latents.shape)} dtype={latents.dtype}') if output_type == 'latent': images = self.pipe.image_processor.postprocess(latents, output_type='latent') elif output_type == 'np': From 32852b006b72692d9c539c7fa7367cad83954646 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 4 Sep 2026 09:54:19 +0200 Subject: [PATCH 124/270] fix lint Signed-off-by: Vladimir Mandic --- modules/loader.py | 2 +- modules/rocm.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/loader.py b/modules/loader.py index 275febfae..3a9689930 100644 --- a/modules/loader.py +++ b/modules/loader.py @@ -34,7 +34,7 @@ try: import numpy.random # pylint: disable=W0611,C0411 # this causes failure if numpy version changed def obj2sctype(obj): return np.dtype(obj).type - if np.__version__.startswith('2.'): # monkeypatch for np==1.2 compatibility + if str(np.__version__).startswith('2.'): # monkeypatch for np==1.2 compatibility np.obj2sctype = obj2sctype # noqa: NPY201 np.bool8 = np.bool np.float_ = np.float64 # noqa: NPY201 diff --git a/modules/rocm.py b/modules/rocm.py index 8966cddbe..9a3299b4f 100644 --- a/modules/rocm.py +++ b/modules/rocm.py @@ -215,7 +215,7 @@ def get_version() -> str | None: return f'{arr[0]}.{arr[1]}' if len(arr) >= 2 else None elif isinstance(environment, PythonPackageEnvironment): # If rocm-sdk package is installed, the hip library may be used by PyTorch. - ver = ctypes.c_int() + ver = ctypes.c_int(0) environment.hip.hipRuntimeGetVersion(ctypes.byref(ver)) major = ver.value // 10000000 minor = (ver.value // 100000) % 100 From 653fbf4d5186f37e0516dec2a4354de4dbe0f551 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 4 Sep 2026 10:08:07 +0200 Subject: [PATCH 125/270] update cuda backend to torch==2.14+cuda==13.2 Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + TODO.md | 1 + installer.py | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad851ae10..4f6a633e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ All-about-optimizations: - intercept and profiling hooks - on-demand convert standard model on-demand - **Compute** + - cuda: update `torch==2.14.0` with `cuda==13.2` - openvino: update `openvino==2026.3.1` with `torch==2.13.0` - add `SD_SKIP_AUTOTUNE` env variable to skip triton autotune and use default config for all triton kernels *note*: this may improve initial generate time, but may also reduce performance on some models diff --git a/TODO.md b/TODO.md index 72034c0c5..d8ef871fe 100644 --- a/TODO.md +++ b/TODO.md @@ -8,6 +8,7 @@ - LTX: Implement LTX2DFRPipeline - ROCm: v10 - Video: unify execution path for ui and api +- Torch: update ipex, rocm to torch==2.14 ## Issues diff --git a/installer.py b/installer.py index 95b6fc85a..73aa1fa01 100644 --- a/installer.py +++ b/installer.py @@ -647,7 +647,7 @@ def install_cuda(): if args.use_nightly: cmd = os.environ.get('TORCH_COMMAND', '--upgrade --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/cu132 --extra-index-url https://download.pytorch.org/whl/nightly/cu130') else: - cmd = os.environ.get('TORCH_COMMAND', 'torch==2.13.0+cu132 torchvision==0.28.0+cu132 --index-url https://download.pytorch.org/whl/cu132') + cmd = os.environ.get('TORCH_COMMAND', 'torch==2.14.0+cu132 torchvision==0.29.0+cu132 --index-url https://download.pytorch.org/whl/cu132') return cmd From 0dbe27c371c6aae1afb079e5d52ca44a60cfb1ee Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 4 Sep 2026 15:47:06 +0200 Subject: [PATCH 126/270] fix prompt caching Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/sd_hijack_te.py | 29 +++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f6a633e8..08582e5b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,6 +73,7 @@ All-about-optimizations: - openvino: optimize recompile checks and lora loading - log: ansi color handling - compile: keep model compiled state + - prompt: cache checks when cfg changes ## Update for 2026-08-26 diff --git a/modules/sd_hijack_te.py b/modules/sd_hijack_te.py index 06826cd33..ccb6c7eec 100644 --- a/modules/sd_hijack_te.py +++ b/modules/sd_hijack_te.py @@ -11,29 +11,39 @@ class PromptCache: self.id = None self.max = 16 - def get(self, prompt): + @staticmethod + def _hashable(val): + if isinstance(val, list): + return tuple(val) + return val + + def get(self, prompt, negative_prompt=None, cfg_enabled=None): if self.id != id(shared.sd_model): self.cache.clear() self.id = id(shared.sd_model) log.debug(f'Encode: prompt cache activate id={self.id} depth={len(self.cache)}') + prompt = self._hashable(prompt) + negative_prompt = self._hashable(negative_prompt) if (isinstance(prompt, list) and len(prompt) == 1 and isinstance(prompt[0], str)): - cached = self.cache.get(prompt[0], None) + cached = self.cache.get((prompt[0], negative_prompt, cfg_enabled), None) elif isinstance(prompt, str): - cached = self.cache.get(prompt, None) + cached = self.cache.get((prompt, negative_prompt, cfg_enabled), None) else: cached = None if cached: log.debug(f'Encode: prompt="{prompt}" cache={len(self.cache)} hit') return cached - def set(self, prompt, encoded): + def set(self, prompt, encoded, negative_prompt=None, cfg_enabled=None): if len(self.cache) >= self.max: oldest_key = next(iter(self.cache)) del self.cache[oldest_key] + prompt = self._hashable(prompt) + negative_prompt = self._hashable(negative_prompt) if (isinstance(prompt, list) and len(prompt) == 1 and isinstance(prompt[0], str)): - self.cache[prompt[0]] = encoded + self.cache[(prompt[0], negative_prompt, cfg_enabled)] = encoded elif isinstance(prompt, str): - self.cache[prompt] = encoded + self.cache[(prompt, negative_prompt, cfg_enabled)] = encoded prompt_cache = PromptCache() @@ -61,7 +71,10 @@ def hijack_encode_prompt(*args, **kwargs): if patch_prompt: args_copy[0] = res - cached = prompt_cache.get(prompt) + # cache key must include cfg-affecting kwargs since encode_prompt output (e.g. negative_prompt_embeds) depends on them + negative_prompt = kwargs.get('negative_prompt', None) + cfg_enabled = kwargs.get('do_classifier_free_guidance', None) + cached = prompt_cache.get(prompt, negative_prompt, cfg_enabled) if cached is not None: res = cached else: @@ -71,7 +84,7 @@ def hijack_encode_prompt(*args, **kwargs): res = shared.sd_model.orig_encode_prompt(*args_copy, **kwargs) else: res = shared.sd_model.encode_prompt(*args_copy, **kwargs) - prompt_cache.set(prompt, res) + prompt_cache.set(prompt, res, negative_prompt, cfg_enabled) if hasattr(shared.sd_model, 'after_prompt_encode'): log.debug(f'Encode: prompt="{prompt}" op=after') From 6b92f2ba036fc3a28003466759cc972fae15eaa9 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 4 Sep 2026 22:15:17 +0100 Subject: [PATCH 127/270] feat(model): add anima 2.9b as a base reference model Anima-2.9B is a depth-expanded finetune of Anima 1.0 Base carrying 40 transformer blocks against the base repo's 28. The reference entry points at the Diffusers conversion. Single-file releases load through the native loader: TransformerSpec gains an infer_config hook, the Anima spec uses it to size num_layers to the block indices in the file, and model_anima routes a checkpoint-selected safetensors through the loader with the remaining components from the base repo. --- data/reference-base.json | 8 ++ ...sness--Anima-2.9B-Preview-v1-Diffusers.jpg | Bin 0 -> 54594 bytes pipelines/anima/__init__.py | 16 +++ pipelines/model_anima.py | 34 +++-- pipelines/native_transformer.py | 19 ++- test/test-anima-native-adapters.py | 7 + test/test-native-transformer.py | 131 ++++++++++++++++++ 7 files changed, 200 insertions(+), 15 deletions(-) create mode 100644 models/Reference/CalamitousFelicitousness--Anima-2.9B-Preview-v1-Diffusers.jpg diff --git a/data/reference-base.json b/data/reference-base.json index 5ad8fad56..39f430c3b 100644 --- a/data/reference-base.json +++ b/data/reference-base.json @@ -296,6 +296,14 @@ "date": "2026 July", "size": 4.99 }, + "Anima 2.9B Preview v1": { + "path": "CalamitousFelicitousness/Anima-2.9B-Preview-v1-Diffusers", + "preview": "CalamitousFelicitousness--Anima-2.9B-Preview-v1-Diffusers.jpg", + "desc": "Anima 2.9B preview v1 by Gazingstars, a depth-expanded fine-tune of Anima 1.0 Base: the transformer is grown from 28 to 40 layers and trained on 1.7M additional anime and illustration samples with mixed tag and natural-language captions. Same Qwen3-0.6B text encoder, LLM adapter and VAE as Anima 1.0.", + "extras": "sampler: Default, cfg_scale: 4.0, steps: 30", + "date": "2026 August", + "size": 7.32 + }, "Meituan LongCat Image": { "path": "meituan-longcat/LongCat-Image", "preview": "meituan-longcat--LongCat-Image.jpg", diff --git a/models/Reference/CalamitousFelicitousness--Anima-2.9B-Preview-v1-Diffusers.jpg b/models/Reference/CalamitousFelicitousness--Anima-2.9B-Preview-v1-Diffusers.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a403db0794b3fe243c336d1aad40a0ea2e6d5a43 GIT binary patch literal 54594 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 dict: + """Derive ``num_layers`` from the highest transformer block index in the file.""" + indices = [int(m.group(1)) for key in state_dict if (m := BLOCK_INDEX.match(key))] + if not indices: + return {} + return {'num_layers': max(indices) + 1} + + ANIMA_SPEC = TransformerSpec( cls=diffusers.CosmosTransformer3DModel, converter=convert_cosmos_transformer_checkpoint_to_diffusers, @@ -37,4 +52,5 @@ ANIMA_SPEC = TransformerSpec( 'unsupported Cosmos 1.0 structure', ), ), + infer_config=infer_config, ) diff --git a/pipelines/model_anima.py b/pipelines/model_anima.py index cbf10885c..c3e20dc66 100644 --- a/pipelines/model_anima.py +++ b/pipelines/model_anima.py @@ -1,9 +1,11 @@ +import os import importlib.util import transformers import diffusers from modules import shared, devices, sd_models, model_quant, sd_hijack_te, sd_hijack_vae, errors from modules.logger import log from pipelines import generic +from pipelines.generic_map import transformers_map def _import_from_file(module_name, file_path): @@ -13,17 +15,18 @@ def _import_from_file(module_name, file_path): return mod -def init_transformer_component(repo_id, diffusers_load_config, adapter_cls): +def init_transformer_component(repo_id, diffusers_load_config, adapter_cls, local_file=None): """Load (transformer, llm_adapter_or_none). - If the UNET dropdown points at a valid safetensors, route through - :mod:`pipelines.native_transformer` with :data:`pipelines.anima.ANIMA_SPEC`, - which extracts any bundled ``llm_adapter`` weights inline with the - transformer. Otherwise fall back to :func:`generic.load_transformer` and - return ``None`` for the adapter so the caller loads it from the base repo. + A UNET dropdown selection, else ``local_file`` (a single-file checkpoint), + goes through :mod:`pipelines.native_transformer`, which also extracts a + bundled ``llm_adapter``. Without either, the transformer comes from the base + repo and the adapter is ``None`` for the caller to load. """ + from modules import sd_unet from pipelines import native_transformer - local_file = native_transformer.resolve_path() + override = native_transformer.resolve_path() + local_file = override or local_file if local_file is not None: from pipelines.anima import ANIMA_SPEC try: @@ -31,11 +34,13 @@ def init_transformer_component(repo_id, diffusers_load_config, adapter_cls): local_file, repo_id, ANIMA_SPEC, diffusers_load_config, sibling_classes={'llm_adapter': adapter_cls}, ) - return transformer, siblings.get('llm_adapter') except Exception as e: log.error(f'Load model: type=Anima custom transformer="{local_file}": {e}') errors.display(e, 'Load') return None, None + if override is not None: + sd_unet.loaded_unet = shared.opts.sd_unet + return transformer, siblings.get('llm_adapter') transformer = generic.load_transformer( repo_id, cls_name=diffusers.CosmosTransformer3DModel, @@ -51,9 +56,15 @@ def load_anima(checkpoint_info, diffusers_load_config=None): repo_id = sd_models.path_to_repo(checkpoint_info) sd_models.hf_auth_check(checkpoint_info) + # single-file checkpoint: transformer (and bundled llm_adapter) from the file, everything else from the base repo + local_file = None + if repo_id is not None and os.path.isfile(repo_id) and repo_id.lower().endswith('.safetensors'): + local_file = repo_id + repo_id = transformers_map['AnimaTextToImagePipeline'] + load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config, allow_quant=False) load_args.pop('cache_dir', None) - log.debug(f'Load model: type=Anima repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') + log.debug(f'Load model: type=Anima repo="{repo_id}" file="{local_file}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') if repo_id is None or repo_id.lower() == 'none': return None @@ -69,9 +80,8 @@ def load_anima(checkpoint_info, diffusers_load_config=None): diffusers.pipelines.auto_pipeline.AUTO_INPAINT_PIPELINES_MAPPING["anima"] = AnimaInpaintPipeline generic.set_pipeline('Anima', AnimaTextToImagePipeline) - # UNET dropdown (shared.opts.sd_unet) may redirect the transformer to a - # community file that bundles both the transformer and the llm_adapter. - transformer, llm_adapter = init_transformer_component(repo_id, diffusers_load_config, modeling_llm_adapter.AnimaLLMAdapter) + # UNET dropdown or single-file checkpoint may bundle transformer and llm_adapter + transformer, llm_adapter = init_transformer_component(repo_id, diffusers_load_config, modeling_llm_adapter.AnimaLLMAdapter, local_file=local_file) if transformer is None: return None text_encoder = generic.load_text_encoder( diff --git a/pipelines/native_transformer.py b/pipelines/native_transformer.py index fc844bf5e..3c77d01cd 100644 --- a/pipelines/native_transformer.py +++ b/pipelines/native_transformer.py @@ -28,9 +28,10 @@ Algorithm: in a Cosmos 2.0 loader). 5. Partition off sibling component keys (e.g. Anima's bundled ``llm_adapter.*``). 6. Run the spec's converter if present (else pass through unchanged). -7. Fetch ``/config.json`` from the base repo, instantiate via - ``cls.from_config``, ``load_state_dict(strict=False)``, validate, dtype-cast, - quantize, and offload-place. +7. Fetch ``/config.json`` from the base repo, apply the spec's + ``infer_config`` overrides, instantiate via ``cls.from_config``, + ``load_state_dict(strict=False)``, validate, dtype-cast, quantize, and + offload-place. 8. Repeat the build for each populated sibling (no converter, no quant by default; sibling weights are read raw from the bundled file). @@ -134,6 +135,11 @@ class TransformerSpec: ``converter_handles_quant`` runs the converter before comfy_quant detection; such converters must translate marker/scale sidecar keys along with the weights. Float-oriented converters keep the default. + + ``infer_config`` receives the transformer state dict after prefix strip and + sibling partition, before the converter, and returns config overrides + merged over the base repo config (e.g. ``num_layers`` of a depth-expanded + finetune). """ cls: type @@ -146,6 +152,7 @@ class TransformerSpec: acceptable_missing: tuple[str, ...] = DEFAULT_ACCEPTABLE_MISSING zero_init_missing: tuple[str, ...] = () forbidden_markers: tuple[tuple[str, str], ...] = () + infer_config: Callable[[dict], dict] | None = None def make_default_spec(cls: type) -> TransformerSpec: @@ -296,6 +303,12 @@ def load( effective_dtype = dtype if dtype is not None else devices.dtype transformer_cfg = fetch_component_config(repo_id, spec.subfolder) + if spec.infer_config is not None: + inferred = spec.infer_config(transformer_sd) + overrides = {k: v for k, v in inferred.items() if transformer_cfg.get(k) != v} + if overrides: + log.info(f'Load model: type={spec.cls.__name__} native_transformer config={overrides}') + transformer_cfg = {**transformer_cfg, **overrides} transformer = build_component( component_name="transformer", state_dict=transformer_sd, diff --git a/test/test-anima-native-adapters.py b/test/test-anima-native-adapters.py index e2923ad32..08eae0963 100644 --- a/test/test-anima-native-adapters.py +++ b/test/test-anima-native-adapters.py @@ -821,6 +821,10 @@ def test_cosmos_rename_full_coverage(): ('blocks_0_adaln_modulation_cross_attn_2', 'transformer_blocks_0_norm2_linear_2'), ('blocks_0_adaln_modulation_mlp_1', 'transformer_blocks_0_norm3_linear_1'), ('blocks_0_adaln_modulation_mlp_2', 'transformer_blocks_0_norm3_linear_2'), + # Depth-expanded checkpoints (Anima-2.9B carries 40 blocks) + ('blocks_39_self_attn_q_proj', 'transformer_blocks_39_attn1_to_q'), + ('blocks_39_cross_attn_output_proj', 'transformer_blocks_39_attn2_to_out_0'), + ('blocks_39_mlp_layer2', 'transformer_blocks_39_ff_net_2'), ] for src, expected in cases: got = A.cosmos_rename_flat(src) @@ -837,6 +841,9 @@ def test_resolve_targets_per_prefix(): assert A.resolve_targets('diffusion_model.', 'blocks.0.self_attn.q_proj') == [ ('transformer_blocks_0_attn1_to_q', None), ] + assert A.resolve_targets('diffusion_model.', 'blocks.39.cross_attn.k_proj') == [ + ('transformer_blocks_39_attn2_to_k', None), + ] assert A.resolve_targets('diffusion_model.llm_adapter.', 'input_proj') == [ ('input_proj', None), ] diff --git a/test/test-native-transformer.py b/test/test-native-transformer.py index 84775b51e..d45cac649 100644 --- a/test/test-native-transformer.py +++ b/test/test-native-transformer.py @@ -843,6 +843,7 @@ def test_transformer_spec_defaults(): assert spec.acceptable_missing == ('rope.', 'pos_embedder.', 'learnable_pos_embed.') assert spec.ignored_prefixes == ('cond_stage_model.', 'conditioner.', 'first_stage_model.', 'text_encoders.', 'vae.') assert spec.forbidden_markers == () + assert spec.infer_config is None def test_sibling_spec_defaults(): @@ -903,6 +904,23 @@ class MockKwargsTransformer(MockMiniTransformer): return cls(dim=config['dim']) +class MockLayeredTransformer(torch.nn.Module): + """Depth comes from config, mirroring ``num_layers`` on real DiTs.""" + + @classmethod + def from_config(cls, config: dict) -> 'MockLayeredTransformer': + return cls(dim=config['dim'], num_layers=config['num_layers']) + + def __init__(self, dim: int, num_layers: int): + super().__init__() + self.blocks = torch.nn.ModuleList([torch.nn.Linear(dim, dim) for _ in range(num_layers)]) + + +def infer_num_layers(state_dict: dict) -> dict: + indices = [int(k.split('.')[1]) for k in state_dict if k.startswith('blocks.')] + return {'num_layers': max(indices) + 1} if indices else {} + + def write_fixture(state_dict_keys: dict, fd: int, path: str, metadata: dict | None = None) -> str: os.close(fd) safetensors.torch.save_file(state_dict_keys, path, metadata=metadata) @@ -1012,6 +1030,51 @@ def test_load_forwards_kwargs_to_from_config(): os.unlink(path) +def test_load_infer_config_sizes_module_to_file(): + """A file deeper than the base config loads only with the hook; without it + the extra block is an arch mismatch.""" + fd, path = tempfile.mkstemp(suffix='.safetensors') + try: + dim = 8 + file_layers = 3 + raw = {} + for i in range(file_layers): + raw[f'model.diffusion_model.blocks.{i}.weight'] = torch.randn(dim, dim) + raw[f'model.diffusion_model.blocks.{i}.bias'] = torch.zeros(dim) + write_fixture(raw, fd, path) + + orig_fetch = nt.fetch_component_config + nt.fetch_component_config = lambda repo, sub: {'dim': dim, 'num_layers': 2} + from modules import model_quant + orig_get_dit = model_quant.get_dit_args + orig_get_qtype = model_quant.get_quant_type + orig_do_post = model_quant.do_post_load_quant + model_quant.get_dit_args = lambda *a, **k: ({}, {}) + model_quant.get_quant_type = lambda *a, **k: None + model_quant.do_post_load_quant = lambda *a, **k: None + + try: + try: + nt.load(local_file=path, repo_id='fake/repo', spec=nt.TransformerSpec(cls=MockLayeredTransformer), diffusers_cfg={}) + raise AssertionError('expected OverrideArchMismatch without infer_config') + except nt.OverrideArchMismatch: + pass + spec = nt.TransformerSpec(cls=MockLayeredTransformer, infer_config=infer_num_layers) + transformer, _ = nt.load(local_file=path, repo_id='fake/repo', spec=spec, diffusers_cfg={}) + finally: + nt.fetch_component_config = orig_fetch + model_quant.get_dit_args = orig_get_dit + model_quant.get_quant_type = orig_get_qtype + model_quant.do_post_load_quant = orig_do_post + + assert len(transformer.blocks) == file_layers + loaded_w = transformer.blocks[2].weight.detach().cpu() + assert torch.allclose(loaded_w, raw['model.diffusion_model.blocks.2.weight'].to(loaded_w.dtype)) + finally: + if os.path.exists(path): + os.unlink(path) + + def test_load_end_to_end_with_sibling_partition(): """Bundled-sibling case: file carries both transformer and sibling weights, sibling_classes supplies the runtime sibling class, partition routes each @@ -2204,6 +2267,61 @@ def test_build_component_comfy_preempts_sdnq_fresh_quant(): assert component.in_proj.weight.dtype == torch.int8 +# ============================================================ +# anima config inference (depth-expanded checkpoints) +# ============================================================ + +def anima_block_keys(count: int, prefix: str = 'blocks') -> dict: + sd = {} + for i in range(count): + sd[f'{prefix}.{i}.self_attn.q_proj.weight'] = torch.zeros(2, 2) + sd[f'{prefix}.{i}.mlp.layer2.weight'] = torch.zeros(2, 2) + return sd + + +def test_anima_infer_config_counts_cosmos_blocks(): + """40-block file reports num_layers=40; adapter ``blocks.N`` keys and + top-level tensors do not count.""" + from pipelines import anima + sd = anima_block_keys(40) + sd['llm_adapter.blocks.5.self_attn.q_proj.weight'] = torch.zeros(2, 2) + sd['x_embedder.proj.1.weight'] = torch.zeros(2, 2) + sd['final_layer.linear.weight'] = torch.zeros(2, 2) + assert anima.infer_config(sd) == {'num_layers': 40} + + +def test_anima_infer_config_matches_base_depth(): + from pipelines import anima + assert anima.infer_config(anima_block_keys(28)) == {'num_layers': 28} + + +def test_anima_infer_config_diffusers_layout(): + """Files already in diffusers key layout count ``transformer_blocks.N``.""" + from pipelines import anima + assert anima.infer_config(anima_block_keys(40, prefix='transformer_blocks')) == {'num_layers': 40} + + +def test_anima_infer_config_comfy_sidecars_do_not_inflate(): + """Per-block quant sidecars share the block index and do not change the count.""" + from pipelines import anima + sd = anima_block_keys(40) + for i in range(40): + sd[f'blocks.{i}.self_attn.q_proj.weight_scale'] = torch.zeros(2, 1) + sd[f'blocks.{i}.self_attn.q_proj.comfy_quant'] = torch.zeros(8, dtype=torch.uint8) + assert anima.infer_config(sd) == {'num_layers': 40} + + +def test_anima_infer_config_no_blocks_returns_empty(): + from pipelines import anima + assert anima.infer_config({'x_embedder.proj.1.weight': torch.zeros(2, 2)}) == {} + assert anima.infer_config({}) == {} + + +def test_anima_spec_registers_infer_config(): + from pipelines import anima + assert anima.ANIMA_SPEC.infer_config is anima.infer_config + + # ============================================================ # Run # ============================================================ @@ -2353,6 +2471,7 @@ def run_all(): for fn in [ test_load_end_to_end_with_bfl_prefix_no_converter, test_load_forwards_kwargs_to_from_config, + test_load_infer_config_sizes_module_to_file, test_load_end_to_end_with_sibling_partition, test_load_raises_on_missing_sibling_class, test_load_rejects_non_safetensors, @@ -2401,6 +2520,18 @@ def run_all(): ]: run_test(cat, fn) + log.warning('=== anima config inference ===') + cat = category('anima') + for fn in [ + test_anima_infer_config_counts_cosmos_blocks, + test_anima_infer_config_matches_base_depth, + test_anima_infer_config_diffusers_layout, + test_anima_infer_config_comfy_sidecars_do_not_inflate, + test_anima_infer_config_no_blocks_returns_empty, + test_anima_spec_registers_infer_config, + ]: + run_test(cat, fn) + log.warning('=== Results ===') total_passed = 0 total_failed = 0 From 5875cdd29e8ab634d9b48ca5ce63c890756fe524 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 5 Sep 2026 02:24:04 +0100 Subject: [PATCH 128/270] feat(lora): remap anima 1.0 lora block indices onto depth-expanded checkpoints Anima 2.9B interleaves twelve new blocks among the 28 of Anima 1.0, so a block index trained against 1.0 names a different block on the expanded model. Every such key still resolves, since blocks 0 to 27 exist either way, so the mismatch was silent. The Anima loader now shifts base-depth indices onto the blocks that carry those weights, keyed by (base depth, expanded depth) and applied only when the transformer is expanded and the LoRA stays inside the base depth. Transformer keys move; llm_adapter and text encoder keys keep their own numbering. --- pipelines/anima/anima_lora.py | 68 ++++++++++++++++ test/test-anima-native-adapters.py | 125 +++++++++++++++++++++++++++-- 2 files changed, 188 insertions(+), 5 deletions(-) diff --git a/pipelines/anima/anima_lora.py b/pipelines/anima/anima_lora.py index cea98faa8..bc7d9c7ab 100644 --- a/pipelines/anima/anima_lora.py +++ b/pipelines/anima/anima_lora.py @@ -33,8 +33,10 @@ the standard ``NetworkWeights.w`` slots rather than being baked into the factor weights at load time. """ +import re from collections import OrderedDict +from modules.logger import log from modules.lora import native_adapter @@ -178,12 +180,78 @@ def network_prefix_for(prefix_used): return "lora_transformer_" +# === Depth-expanded checkpoint block remap === +# +# Anima 2.9B grows the 28-block DiT to 40 by interleaving new blocks among the +# originals, so a block index trained against 1.0 no longer names the same +# block. Keyed by (base depth, expanded depth) rather than by model name, so +# any Anima transformer of a listed depth picks up the table. + +BLOCK_EXPANSIONS = { + (28, 40): (2, 5, 8, 11, 14, 17, 21, 24, 27, 30, 33, 36), +} + +BLOCK_INDEX = re.compile(r"^blocks([._])(\d+)(?=[._])") + + +def expansion_map(base_depth, expanded_depth): + """Map each base-model block index to its position in the expanded model.""" + inserted = set(BLOCK_EXPANSIONS[(base_depth, expanded_depth)]) + return dict(enumerate(n for n in range(expanded_depth) if n not in inserted)) + + +def transformer_depth(): + """Block count of the loaded transformer, or 0 when there is nothing to read.""" + from modules import shared + pipe = getattr(shared.sd_model, "pipe", shared.sd_model) + blocks = getattr(getattr(pipe, "transformer", None), "transformer_blocks", None) + return len(blocks) if blocks is not None else 0 + + +def block_index(base): + """Leading ``blocks.N`` / ``blocks_N`` index of a parsed key, else None.""" + m = BLOCK_INDEX.match(base) + return int(m.group(2)) if m is not None else None + + +def remap_blocks(groups): + """Shift base-depth block indices onto the blocks that carry those weights. + + A LoRA whose highest block index fits inside the base depth was trained on + the unexpanded model. Only transformer keys move: llm_adapter and text + encoder keys carry their own unrelated numbering. + """ + indices = [i for (prefix, base) in groups + if network_prefix_for(prefix) == "lora_transformer_" and (i := block_index(base)) is not None] + if not indices: + return groups + depth = transformer_depth() + match = next(((b, e) for (b, e) in BLOCK_EXPANSIONS if e == depth and max(indices) < b), None) + if match is None: + return groups + table = expansion_map(*match) + out = {} + for (prefix, base), w in groups.items(): + i = block_index(base) if network_prefix_for(prefix) == "lora_transformer_" else None + if i is not None: + base = BLOCK_INDEX.sub(rf"blocks\g<1>{table[i]}", base) + out[(prefix, base)] = w + log.info(f'Network load: arch=anima block remap {match[0]}->{match[1]} keys={len(indices)}') + return out + + +def group_by_suffixes_remapped(state_dict, suffixes, **kwargs): + """Group by suffix, then remap block indices for depth-expanded transformers.""" + return remap_blocks(native_adapter.group_by_suffixes(state_dict, suffixes, **kwargs)) + + # === Native loaders (thin wrappers over native_adapter generics) === _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=ANIMA_PREFIXES, network_prefix=network_prefix_for, + group_by_suffixes_fn=group_by_suffixes_remapped, arch_name="anima", ) diff --git a/test/test-anima-native-adapters.py b/test/test-anima-native-adapters.py index 08eae0963..dcdff5059 100644 --- a/test/test-anima-native-adapters.py +++ b/test/test-anima-native-adapters.py @@ -205,10 +205,10 @@ def build_cosmos_block(): return block -def build_mock_transformer(): +def build_mock_transformer(n_blocks=N_BLOCKS): """Mirror diffusers' Cosmos2TransformerModel top-level layout.""" transformer = _Holder() - transformer.transformer_blocks = torch.nn.ModuleList([build_cosmos_block() for _ in range(N_BLOCKS)]) + transformer.transformer_blocks = torch.nn.ModuleList([build_cosmos_block() for _ in range(n_blocks)]) # Time embedding transformer.time_embed = _Holder() @@ -338,13 +338,14 @@ class _MockAnimaSdModel: self.__class__.__name__ = 'AnimaTextToImagePipeline' -def install_mock_pipe(): +def install_mock_pipe(n_blocks=N_BLOCKS): """Set shared.sd_model to a mock exposing an Anima-shaped 3-component pipeline. Each test re-installs so stamped ``network_layer_name`` attributes from - prior tests do not leak across runs. + prior tests do not leak across runs. ``n_blocks`` sizes the DiT, which the + depth-expansion block remap reads. """ - transformer = build_mock_transformer() + transformer = build_mock_transformer(n_blocks) llm_adapter = build_mock_llm_adapter() text_encoder = build_mock_text_encoder() pipe = _MockAnimaPipeline(transformer, llm_adapter, text_encoder) @@ -1342,6 +1343,107 @@ def test_dora_square_weight_1d_defaults_to_per_input(): return True +# ============================================================ +# Tests - depth-expanded checkpoint block remap +# ============================================================ + +CAT_REMAP = category('remap') + +BASE_DEPTH = 28 +EXPANDED_DEPTH = 40 + + +def sd_lora_kohya_block(index): + """Kohya transformer LoRA on self_attn.q_proj at an arbitrary block index.""" + stem = f'lora_unet_blocks_{index}_self_attn_q_proj' + return { + f'{stem}.lora_down.weight': torch.randn(RANK, HIDDEN), + f'{stem}.lora_up.weight': torch.randn(HIDDEN, RANK), + f'{stem}.alpha': torch.tensor(float(RANK)), + } + + +def _load_at_depth(try_fn, state_dict, n_blocks, name='test'): + install_mock_pipe(n_blocks) + with TempLora(state_dict, name=name) as nod: + return try_fn(name, nod, lora_scale=1.0) + + +def test_expansion_map_matches_manifest(): + """The 28->40 table skips the author's insertion positions in order.""" + table = A.expansion_map(BASE_DEPTH, EXPANDED_DEPTH) + inserted = set(A.BLOCK_EXPANSIONS[(BASE_DEPTH, EXPANDED_DEPTH)]) + assert len(table) == BASE_DEPTH + assert set(table.values()).isdisjoint(inserted), 'no base block may land on an inserted block' + assert (table[0], table[1], table[2], table[27]) == (0, 1, 3, 39) + assert list(table.values()) == sorted(table.values()), 'order must be preserved' + return True + + +def test_expansion_map_covers_every_base_block_uniquely(): + """All base indices land on distinct blocks inside the expanded depth.""" + table = A.expansion_map(BASE_DEPTH, EXPANDED_DEPTH) + assert len(set(table.values())) == BASE_DEPTH + assert max(table.values()) < EXPANDED_DEPTH + return True + + +def test_remap_binds_last_base_block_to_top_of_expanded(): + """A 1.0 LoRA on block 27 binds to block 39 of a 40-block transformer.""" + net = _load_at_depth(A.try_load_lora, sd_lora_kohya_block(27), EXPANDED_DEPTH) + assert net is not None and len(net.modules) == 1, f'got {net.modules if net else None}' + assert 'lora_transformer_transformer_blocks_39_attn1_to_q' in net.modules + return True + + +def test_remap_leaves_blocks_before_first_insertion(): + """Blocks 0 and 1 precede the first insertion, so they do not move.""" + for i in (0, 1): + net = _load_at_depth(A.try_load_lora, sd_lora_kohya_block(i), EXPANDED_DEPTH) + assert f'lora_transformer_transformer_blocks_{i}_attn1_to_q' in net.modules + return True + + +def test_no_remap_on_base_depth_model(): + """A 28-block transformer matches no expansion entry, so indices pass through.""" + net = _load_at_depth(A.try_load_lora, sd_lora_kohya_block(1), BASE_DEPTH) + assert 'lora_transformer_transformer_blocks_1_attn1_to_q' in net.modules + return True + + +def test_no_remap_when_lora_is_native_to_expanded_depth(): + """A LoRA reaching past the base depth was trained on the expanded model.""" + sd = sd_lora_kohya_block(5) + sd.update(sd_lora_kohya_block(39)) + net = _load_at_depth(A.try_load_lora, sd, EXPANDED_DEPTH) + assert 'lora_transformer_transformer_blocks_5_attn1_to_q' in net.modules + assert 'lora_transformer_transformer_blocks_39_attn1_to_q' in net.modules + return True + + +def test_remap_leaves_adapter_and_te_indices_alone(): + """llm_adapter blocks and text encoder layers carry unrelated numbering.""" + install_mock_pipe(EXPANDED_DEPTH) + out = A.remap_blocks({ + ('lora_unet_', 'blocks_27_self_attn_q_proj'): {}, + ('diffusion_model.llm_adapter.', 'blocks.1.self_attn.q_proj'): {}, + ('lora_te_', 'layers_1_self_attn_q_proj'): {}, + }) + assert ('lora_unet_', 'blocks_39_self_attn_q_proj') in out + assert ('diffusion_model.llm_adapter.', 'blocks.1.self_attn.q_proj') in out + assert ('lora_te_', 'layers_1_self_attn_q_proj') in out + return True + + +def test_remap_handles_dotted_bfl_keys(): + """BFL keys arrive dotted rather than underscore-flattened.""" + install_mock_pipe(EXPANDED_DEPTH) + out = A.remap_blocks({('diffusion_model.', 'blocks.27.self_attn.q_proj'): {}}) + assert ('diffusion_model.', 'blocks.39.self_attn.q_proj') in out + return True + + + # ============================================================ # Test runner # ============================================================ @@ -1417,6 +1519,19 @@ def run_tests(): ]: run_test(CAT_MATH, fn) + log.warning('=== depth-expanded block remap ===') + for fn in [ + test_expansion_map_matches_manifest, + test_expansion_map_covers_every_base_block_uniquely, + test_remap_binds_last_base_block_to_top_of_expanded, + test_remap_leaves_blocks_before_first_insertion, + test_no_remap_on_base_depth_model, + test_no_remap_when_lora_is_native_to_expanded_depth, + test_remap_leaves_adapter_and_te_indices_alone, + test_remap_handles_dotted_bfl_keys, + ]: + run_test(CAT_REMAP, fn) + elapsed = time.time() - t0 log.warning('=== Results ===') total_pass = 0 From 0455a9acaffe3378d6c86d3f630f0390dd722d89 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 09:49:28 +0200 Subject: [PATCH 129/270] reorder startup Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 15 ++++++++++----- modules/attention/dispatcher.py | 4 ++-- modules/attention/registry.py | 6 ++++++ modules/loader.py | 16 +++++++--------- modules/sd_hijack_triton.py | 3 ++- modules/shared.py | 5 ++++- modules/ui_definitions.py | 1 + 7 files changed, 32 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08582e5b6..73c7025c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-09-04 +## Update for 2026-09-05 -### Highlights for 2026-09-04 +### Highlights for 2026-09-05 All-about-optimizations: - improved LoRA performance and quality, especially with quantized models @@ -11,8 +11,11 @@ All-about-optimizations: - support for different caching stacks - compute updates across the board -### Details for 2026-09-04 +### Details for 2026-09-05 +- **Models** + - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) + expanded version of Anima 2B - **LoRA** - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions *note*: lora now has its own settings section in *settings -> lora* @@ -48,9 +51,11 @@ All-about-optimizations: - **Compute** - cuda: update `torch==2.14.0` with `cuda==13.2` - openvino: update `openvino==2026.3.1` with `torch==2.13.0` - - add `SD_SKIP_AUTOTUNE` env variable to skip triton autotune and use default config for all triton kernels + - option to skip triton autotune and use default config for all triton kernels + in *settings -> compute settings* *note*: this may improve initial generate time, but may also reduce performance on some models - - new optional transformer hooks: *settings -> compute add-ons* + - new optional transformer hooks + in *settings -> compute add-ons* *PAG: Perturbed attention guidance, PAB: Pyramid attention broadcast, FBC: First Block Cache, FC: Faster Cache, LS: Layer Skip, MC: Mag Cache, TS: TaylorSeer* *note*: compatibility of different methods varies across different models - update `numpy` and `scipy` frozen requirements as required by new compute drivers diff --git a/modules/attention/dispatcher.py b/modules/attention/dispatcher.py index ad5082d2c..94c817949 100644 --- a/modules/attention/dispatcher.py +++ b/modules/attention/dispatcher.py @@ -111,9 +111,9 @@ def set_attention_dispatcher(pipe): current = a._AttentionBackendRegistry.get_active_backend() # pylint: disable=protected-access log.debug(f'Attention dispatcher: target={attn} previous={prev[0].value} active={current[0]} list={backends}') elif len(attn) > 0: - log.warning(f'Attention dispatcher: active={prev[0].value} list={backends} target={attn} not found') + log.warning(f'Attention dispatcher: active={prev[0].value} kernels={backends} target={attn} not found') else: - log.debug(f'Attention dispatcher: active={prev[0].value} list={backends}') + log.debug(f'Attention dispatcher: active={prev[0].value} kernels={backends}') def list_dispatcher_backends() -> list: diff --git a/modules/attention/registry.py b/modules/attention/registry.py index 2403cde85..c4455cd99 100644 --- a/modules/attention/registry.py +++ b/modules/attention/registry.py @@ -69,6 +69,9 @@ class AttentionBackend: def available_on(self, platform: Platform) -> bool: return self.platforms is None or platform.backend in self.platforms + def __repr__(self) -> str: + return f'AttentionBackend(name="{self.name}" label="{self.label}" priority={self.priority} terminal={self.terminal} platforms={list(self.platforms) if self.platforms is not None else []} options={self.options} caps={list(self.caps)})' + class Registry: def __init__(self): @@ -98,5 +101,8 @@ class Registry: def with_cap(self, cap: str) -> list[AttentionBackend]: return [backend for backend in self.ordered() if cap in backend.caps] + def __repr__(self) -> str: + return f'Registry(backends={list(self.backends.keys())})' + registry = Registry() diff --git a/modules/loader.py b/modules/loader.py index 3a9689930..b0960f7d4 100644 --- a/modules/loader.py +++ b/modules/loader.py @@ -133,13 +133,6 @@ if ".dev" in torch.__version__ or "+git" in torch.__version__: torch.__version__ = re.search(r'[\d.]+[\d]', torch.__version__).group(0) timer.startup.record("torch") -try: - from modules.sd_hijack_triton import install as install_autotune_report # pylint: disable=ungrouped-imports - install_autotune_report() -except Exception as e: - log.warning(f'Triton logging: {e}') -timer.startup.record("triton") - try: import bitsandbytes # pylint: disable=unused-import _bnb = True @@ -201,8 +194,6 @@ except Exception as e: _onnx = False timer.startup.record("onnx") -timer.startup.record("fastapi") - import gradio # pylint: disable=W0611,C0411 timer.startup.record("gradio") errors.install([gradio]) @@ -237,6 +228,13 @@ diffusers.utils.import_utils._sdnq_available = True # pylint: disable=protected- diffusers.utils.import_utils._sdnq_version = sdnq.__version__ # pylint: disable=protected-access timer.startup.record("sdnq") +try: + from modules.sd_hijack_triton import install as install_autotune_report # pylint: disable=ungrouped-imports + install_autotune_report() +except Exception as e: + log.warning(f'Triton logging: {e}') +timer.startup.record("triton") + try: import pillow_jxl # pylint: disable=W0611,C0411 except Exception: diff --git a/modules/sd_hijack_triton.py b/modules/sd_hijack_triton.py index 2fad5ba3c..cdd66f8c7 100644 --- a/modules/sd_hijack_triton.py +++ b/modules/sd_hijack_triton.py @@ -156,6 +156,7 @@ def run_hook(orig): """Report the register use of the config a sweep just chose. n_regs and n_spills are filled in when the driver loads the binary, so they exist only once the kernel has run, not at compile.""" def wrapped(self, *args, **kwargs): + from modules import shared session = status['session'] if session is not None: stop_progress(session) @@ -172,7 +173,7 @@ def run_hook(orig): if hasattr(arg, 'dtype'): key += (str(arg.dtype),) needs_benchmark = len(self.configs) > 1 and key not in self.cache - skip_autotune = os.environ.get('SD_SKIP_AUTOTUNE', None) is not None + skip_autotune = (os.environ.get('SD_SKIP_AUTOTUNE', None) is not None) or shared.opts.triton_skip_autotune if needs_benchmark and skip_autotune: self.cache[key] = self.configs[0] # pre-seed the cache so orig() takes its cache-hit path and skips the sweep needs_benchmark = False diff --git a/modules/shared.py b/modules/shared.py index a3a40f643..246105c8d 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -10,8 +10,8 @@ from typing import TYPE_CHECKING import gradio as gr from installer import print_dict # pylint: disable=unused-import from modules.logger import log -log.debug('Initializing: shared module') +log.debug('Initializing: shared module') import modules.memmon import modules.paths as paths from modules.json_helpers import readfile # pylint: disable=W0611 @@ -19,6 +19,9 @@ from modules.shared_helpers import listdir, req # pylint: disable=W0611 from modules import errors, devices, shared_state, cmd_args, theme, history, files_cache # pylint: disable=unused-import from modules.memstats import memory_stats # pylint: disable=unused-import +# main entry point that triggers package imports +from modules import loader # pylint: disable=unused-import + log.debug('Initializing: pipelines') from modules import shared_items # pylint: disable=unused-import from modules.caption.openclip import get_clip_models, refresh_clip_models # pylint: disable=unused-import diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 03aa08036..66088e8a8 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -287,6 +287,7 @@ def create_settings(cmd_opts): "diffusers_fuse_projections": OptionInfo(False, "Fused projections"), "torch_expandable_segments": OptionInfo(False, "Expandable segments"), "torch_sync": OptionInfo(True, "Force synchronize"), + "triton_skip_autotune": OptionInfo(False, "Skip Triton autotune", gr.Checkbox), "cudnn_enabled": OptionInfo("default", "cuDNN enabled", gr.Radio, {"choices": ["default", "true", "false"]}), "cudnn_benchmark": OptionInfo(devices.backend != "rocm", "cuDNN full-depth benchmark"), "cudnn_benchmark_limit": OptionInfo(10, "cuDNN benchmark limit", gr.Slider, {"minimum": 0, "maximum": 100, "step": 1}), From 1e5592ba2e6b49780f87f97aefd1a699a6f0e7c8 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 10:01:55 +0200 Subject: [PATCH 130/270] cleanup logging Signed-off-by: Vladimir Mandic --- modules/attention/router.py | 2 +- modules/attention/sparse/stage.py | 13 +++++++++---- modules/devices.py | 8 +++++--- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/modules/attention/router.py b/modules/attention/router.py index 10d3aab0b..cd08ee81c 100644 --- a/modules/attention/router.py +++ b/modules/attention/router.py @@ -120,7 +120,7 @@ def build_sparse_stage(plan: Plan): return None built = sparse_stage.make_stage(options) if built is not None: - log.info(f'Sparse attention: backend={capable[0]} budget={options.budget:.0%} gate={options.min_tokens} schedule={options.schedule_steps}x+{options.schedule_bump:.0%}') + log.info(f'Attention: sparse=True type={capable[0]} budget={options.budget:.0%} gate={options.min_tokens} schedule={options.schedule_steps}x+{options.schedule_bump:.0%}') return built diff --git a/modules/attention/sparse/stage.py b/modules/attention/sparse/stage.py index 8336e70eb..b272ed67a 100644 --- a/modules/attention/sparse/stage.py +++ b/modules/attention/sparse/stage.py @@ -7,6 +7,9 @@ from modules.attention import context from modules.attention.sparse import layout as layout_mod from modules.attention.sparse.selector import BlockSelection, SparseSpec, block_count, radial_blocks, schedule, select_blocks + +debug = os.environ.get('SD_ATTN_DEBUG', None) is not None + # SD_SPARSE_PATTERN=radial replaces the content aware selection with a static band around the # diagonal at the same density: the control the selector has to beat, and the fallback if it does not pattern = os.environ.get('SD_SPARSE_PATTERN', 'adaptive').strip().lower() @@ -123,8 +126,8 @@ def make_stage(options: StageOptions): from modules import shared hit = match_exclusion(state.model_key, getattr(shared, 'sd_model_type', None), options.exclude) excluded[state.model_key] = hit - if hit: # an enabled setting that cannot act says so rather than doing nothing quietly - log.info(f'Sparse attention: "{hit}" is on the exclusion list; attention stays dense') + if hit and debug: # an enabled setting that cannot act says so rather than doing nothing quietly + log.trace(f'Sparse attention: "{hit}" is on the exclusion list; attention stays dense') return len(hit) > 0 def decline(reason: str): @@ -142,7 +145,8 @@ def make_stage(options: StageOptions): if attn_mask is not None and 'masked_block' not in caps: # flex would need a mask_mod to combine the two if 'masked' not in notified: # an enabled setting that cannot act says so rather than doing nothing quietly notified.add('masked') - log.info('Sparse attention: this model passes an attention mask and the serving backend cannot combine it with a block selection; attention stays dense') + if debug: + log.trace('Sparse attention: this model passes an attention mask and the serving backend cannot combine it with a block selection; attention stays dense') return decline('masked') if query.device.type == 'cpu' or query.dim() != 4: return decline('unsupported tensor') @@ -152,7 +156,8 @@ def make_stage(options: StageOptions): if seq_q < options.min_tokens: if seq_q not in inactive: # an enabled setting that cannot act says so rather than doing nothing quietly inactive.add(seq_q) - log.info(f'Sparse attention: inactive at tokens={seq_q}, below the minimum sequence of {options.min_tokens}; attention stays dense') + if debug: + log.trace(f'Sparse attention: inactive at tokens={seq_q}, below the minimum sequence of {options.min_tokens}; attention stays dense') return decline('below the minimum sequence') budget = budget_for_step() if budget >= 1.0: diff --git a/modules/devices.py b/modules/devices.py index 001bd0eed..42ac70840 100644 --- a/modules/devices.py +++ b/modules/devices.py @@ -531,17 +531,19 @@ def set_sdpa_params(): else: sdpa_original = torch.nn.functional.scaled_dot_product_attention except Exception as err: - log.warning(f'Attention: type="sdpa" {err}') + log.warning(f'Attention: type="SDPA" {err}') try: + options = {} torch.backends.cuda.enable_flash_sdp('Flash' in opts.sdp_options or 'Flash attention' in opts.sdp_options) torch.backends.cuda.enable_mem_efficient_sdp('Memory' in opts.sdp_options or 'Memory attention' in opts.sdp_options) torch.backends.cuda.enable_math_sdp('Math' in opts.sdp_options or 'Math attention' in opts.sdp_options) if hasattr(torch.backends.cuda, "allow_fp16_bf16_reduction_math_sdp"): # only valid for torch >= 2.5 + options['math'] = 'fp16/bf16' torch.backends.cuda.allow_fp16_bf16_reduction_math_sdp(True) torch_info.set(attention="sdpa") - log.debug(f'Attention: type="sdpa" kernels={opts.sdp_options}') + log.debug(f'Attention: type="SDPA" kernels={opts.sdp_options} options={options}') except Exception as err: - log.warning(f'Attention: type="sdpa" {err}') + log.warning(f'Attention: type="SDPA" {err}') attention.install_router([opts.cross_attention_optimization], attention.Platform(backend=backend, device=device), sdpa_original) if report: report_attention() From 14fd01f6069af2343079b20861925c3d6cd24681 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 10:14:23 +0200 Subject: [PATCH 131/270] modular pipelines exception logging Signed-off-by: Vladimir Mandic --- modules/sd_hijack_modular.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/sd_hijack_modular.py b/modules/sd_hijack_modular.py index 4f4b7ed72..50f3965de 100644 --- a/modules/sd_hijack_modular.py +++ b/modules/sd_hijack_modular.py @@ -95,7 +95,10 @@ def register_callbacks(pipe: diffusers.ModularPipeline): class InterruptLogFilter(logging.Filter): """Drops the per-block error dumps the modular runner logs when an interrupt raises through it.""" def filter(self, record): - return 'Interrupted...' not in record.msg + filtered = 'Interrupted...' in record.msg + if not debug: + filtered = filtered or ('Error in block:' in record.msg) + return not filtered def publish_layout(kwargs): From 58e72f50cc0fd342ffed8be2b21cda7ea2604585 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 11:57:53 +0200 Subject: [PATCH 132/270] sort reference models Signed-off-by: Vladimir Mandic --- data/reference-base.json | 1543 +++++++++++++++++---------------- data/reference-cloud.json | 18 +- data/reference-community.json | 198 ++--- data/reference-distilled.json | 239 ++--- data/reference-nunchaku.json | 116 +-- data/reference-quantized.json | 202 ++--- 6 files changed, 1165 insertions(+), 1151 deletions(-) diff --git a/data/reference-base.json b/data/reference-base.json index 39f430c3b..34415efe2 100644 --- a/data/reference-base.json +++ b/data/reference-base.json @@ -26,684 +26,21 @@ "desc": "This stable-diffusion-2 model is resumed from stable-diffusion-2-base (512-base-ema.ckpt) and trained for 150k steps using a v-objective on the same dataset. Resumed for another 140k steps on 768x768 images", "extras": "width: 768, height: 768, sampler: DEIS, steps: 20, cfg_scale: 6.0" }, - "StabilityAI StableDiffusion XL": { - "path": "stabilityai/stable-diffusion-xl-base-1.0", - "preview": "stabilityai--stable-diffusion-xl-base-1.0.jpg", - "desc": "Stable Diffusion XL (SDXL) is AI image generation model that is tailored towards more photorealistic outputs with more detailed imagery and composition compared to previous SD models, including SD 2.1. It can make realistic faces and better image composition, all while using shorter and simpler prompts at a greatly increased base resolution of 1024x1024. Just like its predecessors, SDXL has the ability to generate image variations using image-to-image prompting, inpainting (reimagining of the selected parts of an image), and outpainting (creating new parts that lie outside the image borders).", - "variant": "fp16", - "size": 32.0, - "date": "2023 July" - }, - "Microsoft Lens": { - "path": "Jinstudio/Lens", - "preview": "microsoft--Lens.jpg", - "desc": "Microsoft Lens is a text-to-image DiT model using GPT-OSS chat-style prompt encoding and Flux2 VAE decoding.", - "size": 28.43, - "date": "2026 May" - }, - "Boogu Image 0.1 Base": { - "path": "Boogu/Boogu-Image-0.1-Base", - "preview": "Boogu--Boogu-Image-0.1-Base.jpg", - "desc": "Boogu Image 0.1 Base is the core Boogu text-to-image model with Qwen3-VL instruction encoding and a mixed single/double-stream diffusion transformer.", - "size": 35.81, - "date": "2026 June" - }, - "Boogu Image 0.1 Edit": { - "path": "Boogu/Boogu-Image-0.1-Edit", - "preview": "Boogu--Boogu-Image-0.1-Edit.jpg", - "desc": "Boogu Image 0.1 Edit is optimized for image editing with the same instruction-aware Boogu transformer and flow-match scheduler.", - "size": 35.81, - "date": "2026 June" - }, - "Microsoft Lens Base": { - "path": "Jinstudio/Lens-Base", - "preview": "microsoft--Lens-Base.jpg", - "desc": "Microsoft Lens-Base is the base variant of Lens for text-to-image generation with GPT-OSS prompt features.", - "size": 28.43, - "date": "2026 May" - }, - "StabilityAI Stable Cascade": { - "path": "huggingface/stabilityai/stable-cascade", - "variant": "bf16", - "desc": "Stable Cascade is a diffusion model built upon the Würstchen architecture and its main difference to other models like Stable Diffusion is that it is working at a much smaller latent space. Why is this important? The smaller the latent space, the faster you can run inference and the cheaper the training becomes. How small is the latent space? Stable Diffusion uses a compression factor of 8, resulting in a 1024x1024 image being encoded to 128x128. Stable Cascade achieves a compression factor of 42, meaning that it is possible to encode a 1024x1024 image to 24x24, while maintaining crisp reconstructions. The text-conditional model is then trained in the highly compressed latent space. Previous versions of this architecture, achieved a 16x cost reduction over Stable Diffusion 1.5", - "preview": "stabilityai--stable-cascade.jpg", - "extras": "sampler: Default, cfg_scale: 4.0, cfg_image: 1.0", - "size": 2.59, - "date": "2024 February" - }, - "StabilityAI Stable Diffusion 3.0 Medium": { - "path": "stabilityai/stable-diffusion-3-medium-diffusers", - "variant": "fp16", - "desc": "Stable Diffusion 3 Medium is a Multimodal Diffusion Transformer (MMDiT) text-to-image model that features greatly improved performance in image quality, typography, complex prompt understanding, and resource-efficiency", - "preview": "stabilityai--stable-diffusion-3.jpg", - "extras": "sampler: Default, cfg_scale: 7.0", - "size": 28.87, - "date": "2024 June" - }, - "StabilityAI Stable Diffusion 3.5 Medium": { - "path": "stabilityai/stable-diffusion-3.5-medium", - "variant": "fp16", - "desc": "Stable Diffusion 3.5 Medium is a Multimodal Diffusion Transformer with improvements (MMDiT-X) text-to-image model that features improved performance in image quality, typography, complex prompt understanding, and resource-efficiency.", - "preview": "stabilityai--stable-diffusion-3_5-medium.jpg", - "extras": "sampler: Default, cfg_scale: 7.0", - "size": 25.55, - "date": "2024 October" - }, - "StabilityAI Stable Diffusion 3.5 Large": { - "path": "stabilityai/stable-diffusion-3.5-large", - "variant": "fp16", - "desc": "Stable Diffusion 3.5 Large is a Multimodal Diffusion Transformer (MMDiT) text-to-image model that features improved performance in image quality, typography, complex prompt understanding, and resource-efficiency.", - "preview": "stabilityai--stable-diffusion-3_5-large.jpg", - "extras": "sampler: Default, cfg_scale: 7.0", - "size": 36.12, - "date": "2024 October" - }, - "Black Forest Labs FLUX.1 Dev": { - "path": "black-forest-labs/FLUX.1-dev", - "preview": "black-forest-labs--FLUX.1-dev.jpg", - "desc": "FLUX.1 models are based on a hybrid architecture of multimodal and parallel diffusion transformer blocks, scaled to 12B parameters and builing on flow matching", - "extras": "sampler: Default, cfg_scale: 3.5", - "size": 31.42, - "date": "2024 July" - }, - "Black Forest Labs FLUX.1 Schnell": { - "path": "black-forest-labs/FLUX.1-schnell", - "preview": "black-forest-labs--FLUX.1-schnell.jpg", - "desc": "FLUX.1 models are based on a hybrid architecture of multimodal and parallel diffusion transformer blocks, scaled to 12B parameters and builing on flow matching. Trained using latent adversarial diffusion distillation, FLUX.1 [schnell] can generate high-quality images in only 1 to 4 steps", - "extras": "sampler: Default, cfg_scale: 3.5", - "size": 31.41, - "date": "2024 July" - }, - "Black Forest Labs FLUX.1 Kontext Dev": { - "path": "black-forest-labs/FLUX.1-Kontext-dev", - "preview": "black-forest-labs--FLUX.1-Kontext-dev.jpg", - "desc": "FLUX.1 Kontext [dev] is a 12 billion parameter rectified flow transformer capable of editing images based on text instructions.", - "extras": "sampler: Default, cfg_scale: 3.5", - "size": 31.42, - "date": "2025 May" - }, - "Black Forest Labs FLUX.1 Krea Dev": { - "path": "black-forest-labs/FLUX.1-Krea-dev", - "preview": "black-forest-labs--FLUX.1-Krea-dev.jpg", - "desc": "FLUX.1 Krea [dev] is a 12 billion parameter rectified flow transformer capable of generating images from text descriptions.", - "extras": "sampler: Default, cfg_scale: 4.5", - "size": 31.42, - "date": "2025 July" - }, - "Black Forest Labs FLUX.2 Dev": { - "path": "black-forest-labs/FLUX.2-dev", - "preview": "black-forest-labs--FLUX.2-dev.jpg", - "desc": "FLUX.2 generates high-quality images while maintaining character and style consistency across multiple reference images, following structured prompts, reading and writing complex text, adhering to brand guidelines, and reliably handling lighting, layouts, and logos.", - "size": 105.06, - "date": "2025 November" - }, - "Black Forest Labs FLUX.2 Klein Base 4B": { - "path": "black-forest-labs/FLUX.2-klein-base-4B", - "preview": "black-forest-labs--FLUX.2-klein-base-4B.jpg", - "desc": "FLUX.2-klein-base-4B is the undistilled 4 billion parameter base model of FLUX.2-klein. Requires 50 inference steps for full quality but offers flexibility for fine-tuning. Supports text-to-image and multi-reference editing. Apache 2.0 licensed.", - "extras": "sampler: Default, cfg_scale: 4.0, steps: 50", - "size": 14.87, - "date": "2026 January" - }, - "Black Forest Labs FLUX.2 Klein Base 9B": { - "path": "black-forest-labs/FLUX.2-klein-base-9B", - "preview": "black-forest-labs--FLUX.2-klein-base-9B.jpg", - "desc": "FLUX.2-klein-base-9B is the undistilled 9 billion parameter base model of FLUX.2-klein. Requires 50 inference steps for full quality but offers flexibility for fine-tuning. Supports text-to-image and multi-reference editing. Non-commercial license.", - "extras": "sampler: Default, cfg_scale: 4.0, steps: 50", - "size": 32.32, - "date": "2026 January" - }, - "Owen777 UltraFlux-v1": { - "path": "Owen777/UltraFlux-v1", - "preview": "Owen777--UltraFlux-v1.jpg", - "desc": "UltraFlux-v1 is a FLUX.1-dev based text-to-image model optimized for native 4K and multi-aspect-ratio generation with improved composition consistency.", - "extras": "sampler: Default, cfg_scale: 4.0, steps: 50", - "size": 31.58, - "date": "2025 November" - }, - "Z-Image": { - "path": "Tongyi-MAI/Z-Image", - "preview": "Tongyi-MAI--Z-Image.jpg", - "desc": "Z-Image, an efficient image generation foundation model built on a Single-Stream Diffusion Transformer architecture. It preserves the complete training signal with full CFG support, enabling aesthetic versatility from hyper-realistic photography to anime, enhanced output diversity, and robust negative prompting for artifact suppression. Ideal base for LoRA training, ControlNet, and semantic conditioning.", - "extras": "sampler: Default, cfg_scale: 4.0, steps: 50", - "size": 19.11, - "date": "2026 January" - }, - "Z-Image-Turbo": { - "path": "Tongyi-MAI/Z-Image-Turbo", - "preview": "Tongyi-MAI--Z-Image-Turbo.jpg", - "desc": "Z-Image-Turbo, a distilled version of Z-Image that matches or exceeds leading competitors with only 8 NFEs (Number of Function Evaluations). It excels in photorealistic image generation, bilingual text rendering (English & Chinese), and robust instruction adherence.", - "extras": "sampler: Default, cfg_scale: 1.0, steps: 9", - "size": 30.58, - "date": "2025 November" - }, - "Ideogram 4": { - "path": "CalamitousFelicitousness/Ideogram-4-bf16-Diffusers", - "preview": "CalamitousFelicitousness--Ideogram-4-bf16-Diffusers.jpg", - "desc": "Ideogram 4 is Ideogram's first open-weight text-to-image model: a two 9.3B flow-matching DiTs that uses a Qwen3-VL vision-language model as its text encoder, with strong in-image text rendering. Requires structured JSON-caption prompts; prompt-enhance (on by default) rewrites a plain prompt into one.", - "extras": "sampler: Default, cfg_scale: 7.0, steps: 20, width: 1024, height: 1024", - "size": 49.9, - "date": "2026 June" - }, - "Krea 2 Base": { - "path": "CalamitousFelicitousness/Krea-2-Base-Diffusers", - "preview": "CalamitousFelicitousness--Krea-2-Base-Diffusers.jpg", - "desc": "Krea 2 (K2) Base is the undistilled foundation model of the Krea 2 family, trained from scratch by Krea. A 12.9B-parameter single-stream flow-matching DiT that uses a Qwen3-VL-4B vision-language model as its text encoder and the Qwen-Image VAE. The base checkpoint is intended for fine-tuning and LoRA training; LoRAs trained on it apply to Krea 2 Turbo.", - "extras": "sampler: Default, cfg_scale: 4.5, steps: 52", - "size": 33.5, - "date": "2026 June" - }, - "Baidu ERNIE-Image": { - "path": "baidu/ERNIE-Image", - "preview": "baidu--ERNIE-Image.jpg", - "desc": "ERNIE-Image is a text-to-image diffusion transformer model that combines a Mistral3 text encoder with a FlowMatch transformer and Flux2-style VAE for 1024px image generation.", - "extras": "sampler: Default, cfg_scale: 4.0, steps: 50", - "size": 22.29, - "date": "2026 April" - }, - "NucleusAI Nucleus-Image": { - "path": "NucleusAI/Nucleus-Image", - "preview": "NucleusAI--Nucleus-Image.jpg", - "desc": "Nucleus-Image is a sparse mixture-of-experts diffusion transformer with 17B total parameters and about 2B active parameters per forward pass, using a Qwen3-VL text encoder and Qwen-Image VAE for 1024px generation.", - "variant": "bf16", - "extras": "sampler: Default, cfg_scale: 8.0, steps: 50", - "size": 48.09, - "date": "2026 March" - }, - "Qwen-Image": { - "path": "Qwen/Qwen-Image", - "preview": "Qwen--Qwen-Image.jpg", - "desc": "Qwen-Image, an image generation foundation model in the Qwen series that achieves significant advances in complex text rendering and precise image editing.", - "size": 53.74, - "date": "2025 August" - }, - "Qwen-Image-2512": { - "path": "Qwen/Qwen-Image-2512", - "preview": "Qwen--Qwen-Image-2512.jpg", - "desc": "Qwen-Image-2512 is an Qwen Image successor, that significantly reduces the AI-generated look, got finer natural detailils and improved text rendering.", - "size": 53.74, - "date": "2025 December" - }, - "Qwen-Image-Edit": { - "path": "Qwen/Qwen-Image-Edit", - "preview": "Qwen--Qwen-Image-Edit.jpg", - "desc": "Qwen-Image-Edit, the image editing version of Qwen-Image. Built upon our 20B Qwen-Image model, Qwen-Image-Edit successfully extends Qwen-Image’s unique text rendering capabilities to image editing tasks, enabling precise text editing.", - "size": 53.74, - "date": "2025 August" - }, - "Qwen-Image-Edit-2509": { - "path": "Qwen/Qwen-Image-Edit-2509", - "preview": "Qwen--Qwen-Image-Edit-2509.jpg", - "desc": "Qwen-Image-Edit, the image editing version of Qwen-Image. Built upon our 20B Qwen-Image model, Qwen-Image-Edit successfully extends Qwen-Image’s unique text rendering capabilities to image editing tasks, enabling precise text editing.", - "size": 53.74, - "date": "2025 September" - }, - "Qwen-Image-Edit-2511": { - "path": "Qwen/Qwen-Image-Edit-2511", - "preview": "Qwen--Qwen-Image-Edit-2511.jpg", - "desc": "Key enhancements: mitigate image drift, improved character consistency, enhanced industrial design generation, and strengthened geometric reasoning ability.", - "size": 53.74, - "date": "2025 December" - }, - "Qwen-Image-Layered": { - "path": "Qwen/Qwen-Image-Layered", - "preview": "Qwen--Qwen-Image-Layered.jpg", - "desc": "Qwen-Image-Layered, a model capable of decomposing an image into multiple RGBA layers", - "size": 53.74, - "date": "2025 December" - }, - "lodestones Chroma1 HD": { - "path": "lodestones/Chroma1-HD", - "preview": "lodestones--Chroma1-HD.jpg", - "desc": "Chroma is a 8.9B parameter model based on FLUX.1-schnell. It’s fully Apache 2.0 licensed, ensuring that anyone can use, modify, and build on top of it—no corporate gatekeeping. This is the high-res fine-tune of the Chroma1-Base at a 1024x1024 resolution.", - "size": 25.6, - "date": "2025 August" - }, - "lodestones Chroma1 Base": { - "path": "lodestones/Chroma1-Base", - "preview": "lodestones--Chroma1-Base.jpg", - "desc": "Chroma is a 8.9B parameter model based on FLUX.1-schnell. It’s fully Apache 2.0 licensed, ensuring that anyone can use, modify, and build on top of it—no corporate gatekeeping. This is the core 512x512 model. It's a solid, all-around foundation for pretty much any creative project.", - "size": 25.6, - "date": "2025 July" - }, - "lodestones Chroma1 v50 Preview Annealed": { - "path": "vladmandic/chroma-unlocked-v50-annealed", - "preview": "vladmandic--chroma-unlocked-v50-annealed.jpg", - "desc": "Chroma is a 8.9B parameter model based on FLUX.1-schnell. It’s fully Apache 2.0 licensed, ensuring that anyone can use, modify, and build on top of it—no corporate gatekeeping. Re-tweaked variant with extra noise added.", - "size": 25.6, - "date": "2025 August" - }, - "lodestones Zeta-Chroma": { - "path": "lodestones/Zeta-Chroma", - "preview": "lodestones--Zeta-Chroma.jpg", - "desc": "Zeta-Chroma is a pixel-space diffusion transformer image model from lodestones that generates images directly in RGB space using a NextDiT-style architecture.", - "extras": "sampler: Default, cfg_scale: 3.0, steps: 30", - "size": 12.11, - "date": "2025 December" - }, - "Anima 1.0 Base": { - "path": "vladmandic/Anima-1.0-Base", - "preview": "vladmandic--Anima-1.0-Base.jpg", - "desc": "Anima 1.0 Base with extended 1024-resolution training and expanded dataset coverage for less common artists. A 2B parameter anime-focused text-to-image model based on modified Cosmos-Predict-2B with Qwen3-0.6B text encoder, created by CircleStone Labs and Comfy Org.", - "date": "2026 May", - "size": 4.99 - }, - "Anima 1.0 Aesthetic": { - "path": "CalamitousFelicitousness/Anima-1.0-Aesthetic-Diffusers", - "preview": "CalamitousFelicitousness--Anima-1.0-Aesthetic-Diffusers.jpg", - "desc": "Anima 1.0 Aesthetic, fine-tuned for better consistency and a higher quality default art style. A 2B parameter anime-focused text-to-image model based on modified Cosmos-Predict-2B with Qwen3-0.6B text encoder, created by CircleStone Labs and Comfy Org.", - "extras": "sampler: Default, cfg_scale: 4.5, steps: 30", - "date": "2026 July", - "size": 4.99 - }, - "Anima 2.9B Preview v1": { - "path": "CalamitousFelicitousness/Anima-2.9B-Preview-v1-Diffusers", - "preview": "CalamitousFelicitousness--Anima-2.9B-Preview-v1-Diffusers.jpg", - "desc": "Anima 2.9B preview v1 by Gazingstars, a depth-expanded fine-tune of Anima 1.0 Base: the transformer is grown from 28 to 40 layers and trained on 1.7M additional anime and illustration samples with mixed tag and natural-language captions. Same Qwen3-0.6B text encoder, LLM adapter and VAE as Anima 1.0.", - "extras": "sampler: Default, cfg_scale: 4.0, steps: 30", - "date": "2026 August", - "size": 7.32 - }, - "Meituan LongCat Image": { - "path": "meituan-longcat/LongCat-Image", - "preview": "meituan-longcat--LongCat-Image.jpg", - "desc": "Pioneering open-source and bilingual (Chinese-English) foundation model for image generation, designed to address core challenges in multilingual text rendering, photorealism, deployment efficiency, and developer accessibility prevalent in current leading models.", - "size": 27.28, - "date": "2025 December" - }, - "Meituan LongCat Image-Edit": { - "path": "meituan-longcat/LongCat-Image-Edit", - "preview": "meituan-longcat--LongCat-Image-Edit.jpg", - "desc": "Pioneering open-source and bilingual (Chinese-English) foundation model for image generation, designed to address core challenges in multilingual text rendering, photorealism, deployment efficiency, and developer accessibility prevalent in current leading models.", - "size": 27.28, - "date": "2025 December" - }, - "Ostris Flex.2 Preview": { - "path": "ostris/Flex.2-preview", - "preview": "ostris--Flex.2-preview.jpg", - "desc": "Open Source 8B parameter Text to Image Diffusion Model with universal control and inpainting support built in. Early access preview release. The next version of Flex.1-alpha", - "extras": "sampler: Default, cfg_scale: 3.5", - "size": 24.46, - "date": "2025 April" - }, - "Ostris Flex.1 Alpha": { - "path": "ostris/Flex.1-alpha", - "preview": "ostris--Flex.1-alpha.jpg", - "desc": "Flex.1 alpha is a pre-trained base 8 billion parameter rectified flow transformer capable of generating images from text descriptions. It has a similar architecture to FLUX.1-dev, but with fewer double transformer blocks (8 vs 19)", - "extras": "sampler: Default, cfg_scale: 3.5", - "size": 24.46, - "date": "2025 January" - }, - "Wan-AI Wan2.1 1.3B": { - "path": "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", - "preview": "Wan-AI--Wan2.1-T2V-1.3B-Diffusers.jpg", - "desc": "Wan is an advanced and powerful visual generation model developed by Tongyi Lab of Alibaba Group. It can generate videos based on text, images, and other control signals. The Wan2.1 series models are now fully open-source.", + "DeepFloyd IF Medium": { + "path": "DeepFloyd/IF-I-M-v1.0", + "desc": "DeepFloyd-IF is a pixel-based text-to-image triple-cascaded diffusion model, that can generate pictures with new state-of-the-art for photorealism and language understanding. The result is a highly efficient model that outperforms current state-of-the-art models, achieving a zero-shot FID-30K score of 6.66 on the COCO dataset. It is modular and composed of frozen text mode and three pixel cascaded diffusion modules, each designed to generate images of increasing resolution: 64x64, 256x256, and 1024x1024.", + "preview": "DeepFloyd--IF-I-M-v1.0.jpg", "extras": "sampler: Default", - "size": 26.92, - "date": "2025 March" + "size": 75.87, + "date": "2023 March" }, - "Wan-AI Wan2.1 14B": { - "path": "Wan-AI/Wan2.1-T2V-14B-Diffusers", - "preview": "Wan-AI--Wan2.1-T2V-14B-Diffusers.jpg", - "desc": "Wan is an advanced and powerful visual generation model developed by Tongyi Lab of Alibaba Group. It can generate videos based on text, images, and other control signals. The Wan2.1 series models are now fully open-source.", + "DeepFloyd IF Large": { + "path": "DeepFloyd/IF-I-L-v1.0", + "desc": "DeepFloyd-IF is a pixel-based text-to-image triple-cascaded diffusion model, that can generate pictures with new state-of-the-art for photorealism and language understanding. The result is a highly efficient model that outperforms current state-of-the-art models, achieving a zero-shot FID-30K score of 6.66 on the COCO dataset. It is modular and composed of frozen text mode and three pixel cascaded diffusion modules, each designed to generate images of increasing resolution: 64x64, 256x256, and 1024x1024.", + "preview": "DeepFloyd--IF-I-L-v1.0.jpg", "extras": "sampler: Default", - "size": 74.86, - "date": "2025 March" - }, - "Wan-AI Wan2.2 5B": { - "path": "Wan-AI/Wan2.2-TI2V-5B-Diffusers", - "preview": "Wan-AI--Wan2.2-TI2V-5B-Diffusers.jpg", - "desc": "Wan2.2, offering more powerful capabilities, better performance, and superior visual quality. With Wan2.2, we have focused on incorporating the following technical innovations: MoE Architecture, Data Scalling, Cinematic Aesthetics, Efficient High-Definition Hybrid", - "extras": "sampler: Default", - "size": 31.83, - "date": "2025 July" - }, - "Wan-AI Wan2.2 A14B T2I": { - "path": "Wan-AI/Wan2.2-T2V-A14B-Diffusers", - "preview": "Wan-AI--Wan2.2-T2V-A14B-Diffusers.jpg", - "desc": "Wan2.2, offering more powerful capabilities, better performance, and superior visual quality. With Wan2.2, we have focused on incorporating the following technical innovations: MoE Architecture, Data Scalling, Cinematic Aesthetics, Efficient High-Definition Hybrid", - "extras": "sampler: Default", - "size": 117.51, - "date": "2025 July" - }, - "Wan-AI Wan2.2 A14B I2I": { - "path": "Wan-AI/Wan2.2-I2V-A14B-Diffusers", - "preview": "Wan-AI--Wan2.2-T2V-A14B-Diffusers.jpg", - "desc": "Wan2.2, offering more powerful capabilities, better performance, and superior visual quality. With Wan2.2, we have focused on incorporating the following technical innovations: MoE Architecture, Data Scalling, Cinematic Aesthetics, Efficient High-Definition Hybrid", - "extras": "sampler: Default", - "size": 117.52, - "date": "2025 July" - }, - "Wan-AI Wan2.2 14B VACE": { - "path": "linoyts/Wan2.2-VACE-Fun-14B-diffusers", - "preview": "linoyts--Wan2.2-VACE-Fun-14B-diffusers.jpg", - "desc": "Wan2.2, offering more powerful capabilities, better performance, and superior visual quality. With Wan2.2, we have focused on incorporating the following technical innovations: MoE Architecture, Data Scalling, Cinematic Aesthetics, Efficient High-Definition Hybrid", - "extras": "sampler: Default", - "size": 75.64, - "date": "2025 September" - }, - "MiniMaxAI MiniMax-H3": { - "path": "MiniMaxAI/MiniMax-H3", - "preview": "MiniMaxAI--MiniMax-H3.jpg", - "desc": "MiniMax-H3 generates video with synchronized stereo audio in a single denoising pass through a 33B single-stream transformer with a Qwen3-VL conditioner. In image tabs the model runs in experimental still mode, keeping the first frame of a minimal generation.", - "extras": "sampler: Default", - "size": 134.12, - "date": "2026 August" - }, - "MiniMaxAI MiniMax-H3 Ref2VA": { - "path": "MiniMaxAI/MiniMax-H3", - "subfolder": "ref2va", - "preview": "MiniMaxAI--MiniMax-H3.jpg", - "desc": "The omni-reference variant of MiniMax-H3, sharing one repository with the base model as a separate checkpoint partition. Video with synchronized stereo audio is conditioned on reference images for identity and appearance, with reference rows held clean while video rows denoise.", - "extras": "sampler: Default", - "size": 134.12, - "date": "2026 August" - }, - "Freepik F-Lite": { - "path": "Freepik/F-Lite", - "preview": "Freepik--F-Lite.jpg", - "desc": "F Lite is a 10B parameter diffusion model created by Freepik and Fal, trained exclusively on copyright-safe and SFW content. The model was trained on Freepik's internal dataset comprising approximately 80 million copyright-safe images, making it the first publicly available model of this scale trained exclusively on legally compliant and SFW content.", - "extras": "sampler: Default, cfg_scale: 3.5", - "size": 9.03, - "date": "2025 April" - }, - "Freepik F-Lite Texture": { - "path": "Freepik/F-Lite-Texture", - "preview": "Freepik--F-Lite-Texture.jpg", - "desc": "F Lite is a 10B parameter diffusion model created by Freepik and Fal, trained exclusively on copyright-safe and SFW content. The model was trained on Freepik's internal dataset comprising approximately 80 million copyright-safe images, making it the first publicly available model of this scale trained exclusively on legally compliant and SFW content.", - "extras": "sampler: Default, cfg_scale: 3.5", - "size": 9.03, - "date": "2025 April" - }, - "Freepik F-Lite 7B": { - "path": "Freepik/F-Lite-7B", - "preview": "Freepik--F-Lite-7B.jpg", - "desc": "F Lite is a 10B parameter diffusion model created by Freepik and Fal, trained exclusively on copyright-safe and SFW content. The model was trained on Freepik's internal dataset comprising approximately 80 million copyright-safe images, making it the first publicly available model of this scale trained exclusively on legally compliant and SFW content.", - "extras": "sampler: Default, cfg_scale: 3.5", - "size": 9.03, - "date": "2025 May" - }, - "SDXS DreamShaper 512": { - "path": "IDKiro/sdxs-512-dreamshaper", - "preview": "IDKiro--sdxs-512-dreamshaper.jpg", - "desc": "SDXS: Real-Time One-Step Latent Diffusion Models with Image Conditions", - "extras": "width: 512, height: 512, sampler: CMSI, steps: 1, cfg_scale: 0.0", - "size": 1.64, - "date": "2024 April" - }, - "NVLabs Sana 1.5 1.6B 1k": { - "path": "Efficient-Large-Model/SANA1.5_1.6B_1024px_diffusers", - "desc": "Sana is an efficient model with scaling of training-time and inference time techniques. SANA-1.5 delivers: efficient model growth from 1.6B Sana-1.0 model to 4.8B, achieving similar or better performance than training from scratch and saving 60% training cost; efficient model depth pruning, slimming any model size as you want; powerful VLM selection based inference scaling, smaller model+inference scaling > larger model.", - "preview": "Efficient-Large-Model--SANA1.5_1.6B_1024px_diffusers.jpg", - "size": 9.02, - "date": "2025 March" - }, - "NVLabs Sana 1.5 4.8B 1k": { - "path": "Efficient-Large-Model/SANA1.5_4.8B_1024px_diffusers", - "desc": "Sana is an efficient model with scaling of training-time and inference time techniques. SANA-1.5 delivers: efficient model growth from 1.6B Sana-1.0 model to 4.8B, achieving similar or better performance than training from scratch and saving 60% training cost; efficient model depth pruning, slimming any model size as you want; powerful VLM selection based inference scaling, smaller model+inference scaling > larger model.", - "preview": "Efficient-Large-Model--SANA1.5_4.8B_1024px_diffusers.jpg", - "size": 14.83, - "date": "2025 March" - }, - "NVLabs Sana 1.0 1.6B 4k": { - "path": "Efficient-Large-Model/Sana_1600M_4Kpx_BF16_diffusers", - "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 × 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", - "preview": "Efficient-Large-Model--Sana_1600M_4Kpx_BF16_diffusers.jpg", - "size": 21.03, - "date": "2025 January" - }, - "NVLabs Sana 1.0 1.6B 2k": { - "path": "Efficient-Large-Model/Sana_1600M_2Kpx_BF16_diffusers", - "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 × 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", - "preview": "Efficient-Large-Model--Sana_1600M_2Kpx_BF16_diffusers.jpg", - "size": 21.03, - "date": "2024 December" - }, - "NVLabs Sana 1.0 1.6B 1k": { - "path": "Efficient-Large-Model/Sana_1600M_1024px_diffusers", - "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 × 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", - "preview": "Efficient-Large-Model--Sana_1600M_1024px_diffusers.jpg", - "size": 24.02, - "date": "2024 November" - }, - "NVLabs Sana 1.0 0.6B 0.5k": { - "path": "Efficient-Large-Model/Sana_600M_512px_diffusers", - "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 × 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", - "preview": "Efficient-Large-Model--Sana_600M_512px_diffusers.jpg", - "size": 15.37, - "date": "2024 December" - }, - "nVidia ChronoEdit": { - "path": "nvidia/ChronoEdit-14B-Diffusers", - "preview": "nvidia--ChronoEdit-14B-Diffusers.jpg", - "desc": "ChronoEdit reframes image editing as a video generation task, using input and edited images as start/end frames to leverage pretrained video models with temporal consistency.", - "size": 82.71, - "date": "2025 October" - }, - "nVidia Cosmos-Predict2 T2I 2B": { - "path": "nvidia/Cosmos-Predict2-2B-Text2Image", - "desc": "Cosmos-Predict2: A family of highly performant pre-trained world foundation models purpose-built for generating physics-aware images, videos and world states for physical AI development.", - "preview": "nvidia--Cosmos-Predict2-2B-Text2Image.jpg", - "size": 13.18, - "date": "2025 April" - }, - "nVidia Cosmos-Predict2 T2I 14B": { - "path": "nvidia/Cosmos-Predict2-14B-Text2Image", - "desc": "Cosmos-Predict2: A family of highly performant pre-trained world foundation models purpose-built for generating physics-aware images, videos and world states for physical AI development.", - "preview": "nvidia--Cosmos-Predict2-14B-Text2Image.jpg", - "size": 36.11, - "date": "2025 April" - }, - "X-Omni SFT": { - "path": "X-Omni/X-Omni-SFT", - "desc": "X-Omni: Reinforcement learning makes discrete autoregressive image generative models great again", - "preview": "X-Omni--X-Omni-SFT.jpg", - "size": 23.8, - "date": "2025 August", - "experimental": true - }, - "VectorSpaceLab OmniGen v1": { - "path": "Shitao/OmniGen-v1-diffusers", - "desc": "OmniGen is a unified image generation model that can generate a wide range of images from multi-modal prompts. It is designed to be simple, flexible and easy to use.", - "preview": "Shitao--OmniGen-v1.jpg", - "size": 7.53, - "date": "2024 December" - }, - "VectorSpaceLab OmniGen v2": { - "path": "OmniGen2/OmniGen2", - "desc": "OmniGen2 is a powerful and efficient unified multimodal model. Unlike OmniGen v1, OmniGen2 features two distinct decoding pathways for text and image modalities, utilizing unshared parameters and a decoupled image tokenizer.", - "preview": "OmniGen2--OmniGen2.jpg", - "size": 15.09, - "date": "2025 June" - }, - "AuraFlow 0.3": { - "path": "fal/AuraFlow-v0.3", - "desc": "AuraFlow v0.3 is the fully open-sourced flow-based text-to-image generation model. The model was trained with more compute compared to the previous version, AuraFlow-v0.2. Compared to AuraFlow-v0.2, the model is fine-tuned on more aesthetic datasets and now supports various aspect ratio, (now width and height up to 1536 pixels).", - "preview": "fal--AuraFlow-v0.3.jpg", - "size": 46.1, - "date": "2024 August" - }, - "AuraFlow 0.2": { - "path": "fal/AuraFlow-v0.2", - "desc": "AuraFlow v0.2 is the fully open-sourced largest flow-based text-to-image generation model. The model was trained with more compute compared to the previous version, AuraFlow-v0.1", - "preview": "fal--AuraFlow-v0.2.jpg", - "size": 46.01, - "date": "2024 July" - }, - "Segmind Vega": { - "path": "huggingface/segmind/Segmind-Vega", - "preview": "segmind--Segmind-Vega.jpg", - "desc": "The Segmind-Vega Model is a distilled version of the Stable Diffusion XL (SDXL), offering a remarkable 70% reduction in size and an impressive 100% speedup while retaining high-quality text-to-image generation capabilities. Trained on diverse datasets, including Grit and Midjourney scrape data, it excels at creating a wide range of visual content based on textual prompts. Employing a knowledge distillation strategy, Segmind-Vega leverages the teachings of several expert models, including SDXL, ZavyChromaXL, and JuggernautXL, to combine their strengths and produce compelling visual outputs.", - "variant": "fp16", - "extras": "sampler: Default, cfg_scale: 9.0", - "size": 9.2, - "date": "2023 November" - }, - "Segmind SegMoE SD 4x2": { - "path": "segmind/SegMoE-SD-4x2-v0", - "preview": "segmind--SegMoE-SD-4x2-v0.jpg", - "desc": "SegMoE-SD-4x2-v0 is an untrained Segmind Mixture of Diffusion Experts Model generated using segmoe from 4 Expert SD1.5 models. SegMoE is a powerful framework for dynamically combining Stable Diffusion Models into a Mixture of Experts within minutes without training", - "extras": "width: 512, height: 512, sampler: Default", - "size": 3.04, - "date": "2024 January" - }, - "Segmind SegMoE XL 4x2": { - "path": "segmind/SegMoE-4x2-v0", - "preview": "segmind--SegMoE-4x2-v0.jpg", - "desc": "SegMoE-4x2-v0 is an untrained Segmind Mixture of Diffusion Experts Model generated using segmoe from 4 Expert SDXL models. SegMoE is a powerful framework for dynamically combining Stable Diffusion Models into a Mixture of Experts within minutes without training", - "extras": "sampler: Default", - "size": 15.77, - "date": "2024 January" - }, - "Pixart-α XL 2 Medium": { - "path": "PixArt-alpha/PixArt-XL-2-512x512", - "desc": "PixArt-α is a Transformer-based T2I diffusion model whose image generation quality is competitive with state-of-the-art image generators (e.g., Imagen, SDXL, and even Midjourney), and the training speed markedly surpasses existing large-scale T2I models. Extensive experiments demonstrate that PIXART-α excels in image quality, artistry, and semantic control. It can directly generate 512px images from text prompts within a single sampling process.", - "preview": "PixArt-alpha--PixArt-XL-2-512x512.jpg", - "extras": "width: 512, height: 512, sampler: Default, cfg_scale: 2.0", - "size": 29.36, - "date": "2023 November" - }, - "Pixart-α XL 2 Large": { - "path": "PixArt-alpha/PixArt-XL-2-1024-MS", - "desc": "PixArt-α is a Transformer-based T2I diffusion model whose image generation quality is competitive with state-of-the-art image generators (e.g., Imagen, SDXL, and even Midjourney), and the training speed markedly surpasses existing large-scale T2I models. Extensive experiments demonstrate that PIXART-α excels in image quality, artistry, and semantic control. It can directly generate 1024px images from text prompts within a single sampling process.", - "preview": "PixArt-alpha--PixArt-XL-2-1024-MS.jpg", - "extras": "sampler: Default, cfg_scale: 2.0", - "size": 20.33, - "date": "2023 November" - }, - "Pixart-Σ Small": { - "path": "huggingface/PixArt-alpha/PixArt-Sigma-XL-2-512-MS", - "desc": "PixArt-Σ, a Diffusion Transformer model (DiT) capable of directly generating images at 4K resolution. PixArt-Σ represents a significant advancement over its predecessor, PixArt-α, offering images of markedly higher fidelity and improved alignment with text prompts.", - "preview": "PixArt-alpha--PixArt-Sigma-XL-2-512-MS.jpg", - "extras": "width: 512, height: 512, sampler: Default, cfg_scale: 2.0", - "size": 2.28, - "date": "2024 April" - }, - "Pixart-Σ Medium": { - "path": "huggingface/PixArt-alpha/PixArt-Sigma-XL-2-1024-MS", - "desc": "PixArt-Σ, a Diffusion Transformer model (DiT) capable of directly generating images at 4K resolution. PixArt-Σ represents a significant advancement over its predecessor, PixArt-α, offering images of markedly higher fidelity and improved alignment with text prompts.", - "preview": "PixArt-alpha--PixArt-Sigma-XL-2-1024-MS.jpg", - "extras": "sampler: Default, cfg_scale: 2.0", - "size": 20.33, - "date": "2024 April" - }, - "Pixart-Σ Large": { - "path": "huggingface/PixArt-alpha/PixArt-Sigma-XL-2-2K-MS", - "desc": "PixArt-Σ, a Diffusion Transformer model (DiT) capable of directly generating images at 4K resolution. PixArt-Σ represents a significant advancement over its predecessor, PixArt-α, offering images of markedly higher fidelity and improved alignment with text prompts.", - "preview": "PixArt-alpha--PixArt-Sigma-XL-2-2K-MS.jpg", - "extras": "sampler: Default, cfg_scale: 2.0", - "size": 2.28, - "date": "2024 April" - }, - "Tencent HunyuanImage 2.1": { - "path": "hunyuanvideo-community/HunyuanImage-2.1-Diffusers", - "desc": "HunyuanImage-2.1, a highly efficient text-to-image model that is capable of generating 2K (2048 × 2048) resolution images.", - "preview": "hunyuanvideo-community--HunyuanImage-2.1-Diffusers.jpg", - "size": 49.48, - "date": "2025 September" - }, - "Tencent HunyuanImage 2.1 Refiner": { - "path": "hunyuanvideo-community/HunyuanImage-2.1-Refiner-Diffusers", - "desc": "HunyuanImage-2.1, a highly efficient text-to-image model that is capable of generating 2K (2048 × 2048) resolution images.", - "preview": "hunyuanvideo-community--HunyuanImage-2.1-Diffusers.jpg", - "size": 45.78, - "date": "2025 September" - }, - "Tencent HunyuanDiT 1.2": { - "path": "Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers", - "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", - "preview": "Tencent-Hunyuan--HunyuanDiT-v1.2-Diffusers.jpg", - "extras": "sampler: Default, cfg_scale: 2.0", - "size": 13.43, - "date": "2024 July" - }, - "Tencent HunyuanDiT 1.1": { - "path": "Tencent-Hunyuan/HunyuanDiT-v1.1-Diffusers", - "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", - "preview": "Tencent-Hunyuan--HunyuanDiT-v1.1-Diffusers.jpg", - "extras": "sampler: Default, cfg_scale: 2.0", - "size": 13.49, - "date": "2024 June" - }, - "AlphaVLLM Lumina Next SFT": { - "path": "Alpha-VLLM/Lumina-Next-SFT-diffusers", - "desc": "The Lumina-Next-SFT is a Next-DiT model containing 2B parameters and utilizes Gemma-2B as the text encoder, enhanced through high-quality supervised fine-tuning (SFT).", - "preview": "Alpha-VLLM--Lumina-Next-SFT-diffusers.jpg", - "extras": "sampler: Default", - "size": 8.25, - "date": "2024 June" - }, - "AlphaVLLM Lumina 2": { - "path": "Alpha-VLLM/Lumina-Image-2.0", - "desc": "A Unified and Efficient Image Generative Model. Lumina-Image-2.0 is a 2 billion parameter flow-based diffusion transformer capable of generating images from text descriptions.", - "preview": "Alpha-VLLM--Lumina-Image-2.0.jpg", - "extras": "sampler: Default", - "size": 19.77, - "date": "2025 January" - }, - "AlphaVLLM Lumina DiMOO": { - "path": "Alpha-VLLM/Lumina-DiMOO", - "desc": "Lumina-DiMOO is an omni diffusion large language model for multimodal generation and understanding with text-to-image, image editing, and multimodal understanding capabilities.", - "preview": "Alpha-VLLM--Lumina-DiMOO.jpg", - "extras": "sampler: Default", - "size": 0, - "date": "2025 September" - }, - "HiDream-I1 Fast": { - "path": "HiDream-ai/HiDream-I1-Fast", - "desc": "HiDream-I1 is a new open-source image generative foundation model with 17B parameters that achieves state-of-the-art image generation quality within seconds.", - "preview": "HiDream-ai--HiDream-I1-Fast.jpg", - "extras": "sampler: Default", - "size": 43.94, - "date": "2025 April" - }, - "HiDream-I1 Dev": { - "path": "HiDream-ai/HiDream-I1-Dev", - "desc": "HiDream-I1 is a new open-source image generative foundation model with 17B parameters that achieves state-of-the-art image generation quality within seconds.", - "preview": "HiDream-ai--HiDream-I1-Dev.jpg", - "extras": "sampler: Default", - "size": 43.94, - "date": "2025 April" - }, - "HiDream-I1 Full": { - "path": "HiDream-ai/HiDream-I1-Full", - "desc": "HiDream-I1 is a new open-source image generative foundation model with 17B parameters that achieves state-of-the-art image generation quality within seconds.", - "preview": "HiDream-ai--HiDream-I1-Full.jpg", - "extras": "sampler: Default", - "size": 43.94, - "date": "2025 April" - }, - "HiDream-O1 Image": { - "path": "HiDream-ai/HiDream-O1-Image", - "desc": "HiDream-O1-Image is an 8B pixel-level unified transformer model for text-to-image generation, instruction editing, and multi-reference personalization up to 2048x2048.", - "preview": "HiDream-ai--HiDream-O1-Image.jpg", - "extras": "sampler: Default", - "size": 35.2, - "date": "2026 May" - }, - "HiDream-E1 Full": { - "path": "HiDream-ai/HiDream-E1-Full", - "desc": "HiDream-E1 is an image editing model built on HiDream-I1.", - "preview": "HiDream-ai--HiDream-E1-Full.jpg", - "extras": "sampler: Default", - "size": 43.94, - "date": "2025 April" - }, - "HiDream-E1.1": { - "path": "HiDream-ai/HiDream-E1-1", - "desc": "HiDream-E1 is an image editing model built on HiDream-I1.", - "preview": "HiDream-ai--HiDream-E1-1.jpg", - "extras": "sampler: Default", - "size": 43.94, - "date": "2025 July" - }, - "Kwai Kolors": { - "path": "Kwai-Kolors/Kolors-diffusers", - "desc": "Kolors is a large-scale text-to-image generation model based on latent diffusion, developed by the Kuaishou Kolors team. Trained on billions of text-image pairs, Kolors exhibits significant advantages over both open-source and proprietary models in visual quality, complex semantic accuracy, and text rendering for both Chinese and English characters. Furthermore, Kolors supports both Chinese and English inputs", - "preview": "Kwai-Kolors--Kolors-diffusers.jpg", - "extras": "width: 1024, height: 1024", - "size": 16.59, - "date": "2024 July" + "size": 82.18, + "date": "2023 March" }, "Kandinsky 2.1": { "path": "kandinsky-community/kandinsky-2-1", @@ -721,6 +58,53 @@ "size": 9.34, "date": "2023 June" }, + "StabilityAI StableDiffusion XL": { + "path": "stabilityai/stable-diffusion-xl-base-1.0", + "preview": "stabilityai--stable-diffusion-xl-base-1.0.jpg", + "desc": "Stable Diffusion XL (SDXL) is AI image generation model that is tailored towards more photorealistic outputs with more detailed imagery and composition compared to previous SD models, including SD 2.1. It can make realistic faces and better image composition, all while using shorter and simpler prompts at a greatly increased base resolution of 1024x1024. Just like its predecessors, SDXL has the ability to generate image variations using image-to-image prompting, inpainting (reimagining of the selected parts of an image), and outpainting (creating new parts that lie outside the image borders).", + "variant": "fp16", + "size": 32.0, + "date": "2023 July" + }, + "SalesForce BLIP-Diffusion": { + "path": "salesforce/blipdiffusion", + "desc": "BLIP-Diffusion, a new subject-driven image generation model that supports multimodal control which consumes inputs of subject images and text prompts. Unlike other subject-driven generation models, BLIP-Diffusion introduces a new multimodal encoder which is pre-trained to provide subject representation.", + "preview": "salesforce--blipdiffusion.jpg", + "size": 3.97, + "date": "2023 September" + }, + "InstaFlow 0.9B": { + "path": "XCLiu/instaflow_0_9B_from_sd_1_5", + "desc": "InstaFlow is an ultra-fast, one-step image generator that achieves image quality close to Stable Diffusion. This efficiency is made possible through a recent Rectified Flow technique, which trains probability flows with straight trajectories, hence inherently requiring only a single step for fast inference.", + "preview": "XCLiu--instaflow_0_9B_from_sd_1_5.jpg", + "size": 3.97, + "date": "2023 October" + }, + "Segmind Vega": { + "path": "huggingface/segmind/Segmind-Vega", + "preview": "segmind--Segmind-Vega.jpg", + "desc": "The Segmind-Vega Model is a distilled version of the Stable Diffusion XL (SDXL), offering a remarkable 70% reduction in size and an impressive 100% speedup while retaining high-quality text-to-image generation capabilities. Trained on diverse datasets, including Grit and Midjourney scrape data, it excels at creating a wide range of visual content based on textual prompts. Employing a knowledge distillation strategy, Segmind-Vega leverages the teachings of several expert models, including SDXL, ZavyChromaXL, and JuggernautXL, to combine their strengths and produce compelling visual outputs.", + "variant": "fp16", + "extras": "sampler: Default, cfg_scale: 9.0", + "size": 9.2, + "date": "2023 November" + }, + "Pixart-α XL 2 Medium": { + "path": "PixArt-alpha/PixArt-XL-2-512x512", + "desc": "PixArt-α is a Transformer-based T2I diffusion model whose image generation quality is competitive with state-of-the-art image generators (e.g., Imagen, SDXL, and even Midjourney), and the training speed markedly surpasses existing large-scale T2I models. Extensive experiments demonstrate that PIXART-α excels in image quality, artistry, and semantic control. It can directly generate 512px images from text prompts within a single sampling process.", + "preview": "PixArt-alpha--PixArt-XL-2-512x512.jpg", + "extras": "width: 512, height: 512, sampler: Default, cfg_scale: 2.0", + "size": 29.36, + "date": "2023 November" + }, + "Pixart-α XL 2 Large": { + "path": "PixArt-alpha/PixArt-XL-2-1024-MS", + "desc": "PixArt-α is a Transformer-based T2I diffusion model whose image generation quality is competitive with state-of-the-art image generators (e.g., Imagen, SDXL, and even Midjourney), and the training speed markedly surpasses existing large-scale T2I models. Extensive experiments demonstrate that PIXART-α excels in image quality, artistry, and semantic control. It can directly generate 1024px images from text prompts within a single sampling process.", + "preview": "PixArt-alpha--PixArt-XL-2-1024-MS.jpg", + "extras": "sampler: Default, cfg_scale: 2.0", + "size": 20.33, + "date": "2023 November" + }, "Kandinsky 3.0": { "path": "kandinsky-community/kandinsky-3", "desc": "Kandinsky 3.0 is an open-source text-to-image diffusion model built upon the Kandinsky2-x model family. In comparison to its predecessors, Kandinsky 3.0 incorporates more data and specifically related to Russian culture, which allows to generate pictures related to Russin culture. Furthermore, enhancements have been made to the text understanding and visual quality of the model, achieved by increasing the size of the text encoder and Diffusion U-Net models, respectively.", @@ -730,20 +114,6 @@ "size": 25.94, "date": "2023 November" }, - "Kandinsky 5.0 T2I Lite": { - "path": "kandinskylab/Kandinsky-5.0-T2I-Lite-sft-Diffusers", - "desc": "Kandinsky 5.0 Image Lite is a 6B image generation models 1K resulution, high visual quality and strong text-writing", - "preview": "kandinskylab--Kandinsky-5.0-T2I-Lite-sft-Diffusers.jpg", - "size": 30.0, - "date": "2025 November" - }, - "Kandinsky 5.0 I2I Lite": { - "path": "kandinskylab/Kandinsky-5.0-I2I-Lite-sft-Diffusers", - "desc": "Kandinsky 5.0 Image Lite is a 6B image editing models 1K resulution, high visual quality and strong text-writing", - "preview": "kandinskylab--Kandinsky-5.0-T2I-Lite-sft-Diffusers.jpg", - "size": 30.01, - "date": "2025 November" - }, "Playground v1": { "path": "playgroundai/playground-v1", "desc": "Playground v1 is a latent diffusion model that improves the overall HDR quality to get more stunning images.", @@ -776,6 +146,40 @@ "size": 38.77, "date": "2023 December" }, + "Segmind SegMoE SD 4x2": { + "path": "segmind/SegMoE-SD-4x2-v0", + "preview": "segmind--SegMoE-SD-4x2-v0.jpg", + "desc": "SegMoE-SD-4x2-v0 is an untrained Segmind Mixture of Diffusion Experts Model generated using segmoe from 4 Expert SD1.5 models. SegMoE is a powerful framework for dynamically combining Stable Diffusion Models into a Mixture of Experts within minutes without training", + "extras": "width: 512, height: 512, sampler: Default", + "size": 3.04, + "date": "2024 January" + }, + "Segmind SegMoE XL 4x2": { + "path": "segmind/SegMoE-4x2-v0", + "preview": "segmind--SegMoE-4x2-v0.jpg", + "desc": "SegMoE-4x2-v0 is an untrained Segmind Mixture of Diffusion Experts Model generated using segmoe from 4 Expert SDXL models. SegMoE is a powerful framework for dynamically combining Stable Diffusion Models into a Mixture of Experts within minutes without training", + "extras": "sampler: Default", + "size": 15.77, + "date": "2024 January" + }, + "KOALA 700M": { + "path": "huggingface/etri-vilab/koala-700m-llava-cap", + "variant": "fp16", + "desc": "Fast text-to-image model, called KOALA, by compressing SDXL's U-Net and distilling knowledge from SDXL into our model. KOALA-700M can generate a 1024x1024 image in less than 1.5 seconds on an NVIDIA 4090 GPU, which is more than 2x faster than SDXL.", + "preview": "etri-vilab--koala-700m-llava-cap.jpg", + "extras": "sampler: Default", + "size": 12.93, + "date": "2024 January" + }, + "StabilityAI Stable Cascade": { + "path": "huggingface/stabilityai/stable-cascade", + "variant": "bf16", + "desc": "Stable Cascade is a diffusion model built upon the Würstchen architecture and its main difference to other models like Stable Diffusion is that it is working at a much smaller latent space. Why is this important? The smaller the latent space, the faster you can run inference and the cheaper the training becomes. How small is the latent space? Stable Diffusion uses a compression factor of 8, resulting in a 1024x1024 image being encoded to 128x128. Stable Cascade achieves a compression factor of 42, meaning that it is possible to encode a 1024x1024 image to 24x24, while maintaining crisp reconstructions. The text-conditional model is then trained in the highly compressed latent space. Previous versions of this architecture, achieved a 16x cost reduction over Stable Diffusion 1.5", + "preview": "stabilityai--stable-cascade.jpg", + "extras": "sampler: Default, cfg_scale: 4.0, cfg_image: 1.0", + "size": 2.59, + "date": "2024 February" + }, "Playground v2.5": { "path": "playgroundai/playground-v2.5-1024px-aesthetic", "desc": "Playground v2.5 is a diffusion-based text-to-image generative model, and a successor to Playground v2. Playground v2.5 is the state-of-the-art open-source model in aesthetic quality.", @@ -785,12 +189,126 @@ "size": 38.77, "date": "2024 February" }, - "CogView 4": { - "path": "zai-org/CogView4-6B", - "desc": "An innovative cascaded framework that enhances the performance of text-to-image diffusion. CogView is the first model implementing relay diffusion in the realm of text-to-image generation, executing the task by first creating low-resolution images and subsequently applying relay-based super-resolution.", - "preview": "THUDM--CogView4-6B.jpg", - "size": 28.97, - "date": "2025 March" + "SDXS DreamShaper 512": { + "path": "IDKiro/sdxs-512-dreamshaper", + "preview": "IDKiro--sdxs-512-dreamshaper.jpg", + "desc": "SDXS: Real-Time One-Step Latent Diffusion Models with Image Conditions", + "extras": "width: 512, height: 512, sampler: CMSI, steps: 1, cfg_scale: 0.0", + "size": 1.64, + "date": "2024 April" + }, + "Pixart-Σ Small": { + "path": "huggingface/PixArt-alpha/PixArt-Sigma-XL-2-512-MS", + "desc": "PixArt-Σ, a Diffusion Transformer model (DiT) capable of directly generating images at 4K resolution. PixArt-Σ represents a significant advancement over its predecessor, PixArt-α, offering images of markedly higher fidelity and improved alignment with text prompts.", + "preview": "PixArt-alpha--PixArt-Sigma-XL-2-512-MS.jpg", + "extras": "width: 512, height: 512, sampler: Default, cfg_scale: 2.0", + "size": 2.28, + "date": "2024 April" + }, + "Pixart-Σ Medium": { + "path": "huggingface/PixArt-alpha/PixArt-Sigma-XL-2-1024-MS", + "desc": "PixArt-Σ, a Diffusion Transformer model (DiT) capable of directly generating images at 4K resolution. PixArt-Σ represents a significant advancement over its predecessor, PixArt-α, offering images of markedly higher fidelity and improved alignment with text prompts.", + "preview": "PixArt-alpha--PixArt-Sigma-XL-2-1024-MS.jpg", + "extras": "sampler: Default, cfg_scale: 2.0", + "size": 20.33, + "date": "2024 April" + }, + "Pixart-Σ Large": { + "path": "huggingface/PixArt-alpha/PixArt-Sigma-XL-2-2K-MS", + "desc": "PixArt-Σ, a Diffusion Transformer model (DiT) capable of directly generating images at 4K resolution. PixArt-Σ represents a significant advancement over its predecessor, PixArt-α, offering images of markedly higher fidelity and improved alignment with text prompts.", + "preview": "PixArt-alpha--PixArt-Sigma-XL-2-2K-MS.jpg", + "extras": "sampler: Default, cfg_scale: 2.0", + "size": 2.28, + "date": "2024 April" + }, + "StabilityAI Stable Diffusion 3.0 Medium": { + "path": "stabilityai/stable-diffusion-3-medium-diffusers", + "variant": "fp16", + "desc": "Stable Diffusion 3 Medium is a Multimodal Diffusion Transformer (MMDiT) text-to-image model that features greatly improved performance in image quality, typography, complex prompt understanding, and resource-efficiency", + "preview": "stabilityai--stable-diffusion-3.jpg", + "extras": "sampler: Default, cfg_scale: 7.0", + "size": 28.87, + "date": "2024 June" + }, + "Tencent HunyuanDiT 1.1": { + "path": "Tencent-Hunyuan/HunyuanDiT-v1.1-Diffusers", + "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", + "preview": "Tencent-Hunyuan--HunyuanDiT-v1.1-Diffusers.jpg", + "extras": "sampler: Default, cfg_scale: 2.0", + "size": 13.49, + "date": "2024 June" + }, + "AlphaVLLM Lumina Next SFT": { + "path": "Alpha-VLLM/Lumina-Next-SFT-diffusers", + "desc": "The Lumina-Next-SFT is a Next-DiT model containing 2B parameters and utilizes Gemma-2B as the text encoder, enhanced through high-quality supervised fine-tuning (SFT).", + "preview": "Alpha-VLLM--Lumina-Next-SFT-diffusers.jpg", + "extras": "sampler: Default", + "size": 8.25, + "date": "2024 June" + }, + "Black Forest Labs FLUX.1 Dev": { + "path": "black-forest-labs/FLUX.1-dev", + "preview": "black-forest-labs--FLUX.1-dev.jpg", + "desc": "FLUX.1 models are based on a hybrid architecture of multimodal and parallel diffusion transformer blocks, scaled to 12B parameters and builing on flow matching", + "extras": "sampler: Default, cfg_scale: 3.5", + "size": 31.42, + "date": "2024 July" + }, + "Black Forest Labs FLUX.1 Schnell": { + "path": "black-forest-labs/FLUX.1-schnell", + "preview": "black-forest-labs--FLUX.1-schnell.jpg", + "desc": "FLUX.1 models are based on a hybrid architecture of multimodal and parallel diffusion transformer blocks, scaled to 12B parameters and builing on flow matching. Trained using latent adversarial diffusion distillation, FLUX.1 [schnell] can generate high-quality images in only 1 to 4 steps", + "extras": "sampler: Default, cfg_scale: 3.5", + "size": 31.41, + "date": "2024 July" + }, + "AuraFlow 0.2": { + "path": "fal/AuraFlow-v0.2", + "desc": "AuraFlow v0.2 is the fully open-sourced largest flow-based text-to-image generation model. The model was trained with more compute compared to the previous version, AuraFlow-v0.1", + "preview": "fal--AuraFlow-v0.2.jpg", + "size": 46.01, + "date": "2024 July" + }, + "Tencent HunyuanDiT 1.2": { + "path": "Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers", + "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", + "preview": "Tencent-Hunyuan--HunyuanDiT-v1.2-Diffusers.jpg", + "extras": "sampler: Default, cfg_scale: 2.0", + "size": 13.43, + "date": "2024 July" + }, + "Kwai Kolors": { + "path": "Kwai-Kolors/Kolors-diffusers", + "desc": "Kolors is a large-scale text-to-image generation model based on latent diffusion, developed by the Kuaishou Kolors team. Trained on billions of text-image pairs, Kolors exhibits significant advantages over both open-source and proprietary models in visual quality, complex semantic accuracy, and text rendering for both Chinese and English characters. Furthermore, Kolors supports both Chinese and English inputs", + "preview": "Kwai-Kolors--Kolors-diffusers.jpg", + "extras": "width: 1024, height: 1024", + "size": 16.59, + "date": "2024 July" + }, + "AuraFlow 0.3": { + "path": "fal/AuraFlow-v0.3", + "desc": "AuraFlow v0.3 is the fully open-sourced flow-based text-to-image generation model. The model was trained with more compute compared to the previous version, AuraFlow-v0.2. Compared to AuraFlow-v0.2, the model is fine-tuned on more aesthetic datasets and now supports various aspect ratio, (now width and height up to 1536 pixels).", + "preview": "fal--AuraFlow-v0.3.jpg", + "size": 46.1, + "date": "2024 August" + }, + "StabilityAI Stable Diffusion 3.5 Medium": { + "path": "stabilityai/stable-diffusion-3.5-medium", + "variant": "fp16", + "desc": "Stable Diffusion 3.5 Medium is a Multimodal Diffusion Transformer with improvements (MMDiT-X) text-to-image model that features improved performance in image quality, typography, complex prompt understanding, and resource-efficiency.", + "preview": "stabilityai--stable-diffusion-3_5-medium.jpg", + "extras": "sampler: Default, cfg_scale: 7.0", + "size": 25.55, + "date": "2024 October" + }, + "StabilityAI Stable Diffusion 3.5 Large": { + "path": "stabilityai/stable-diffusion-3.5-large", + "variant": "fp16", + "desc": "Stable Diffusion 3.5 Large is a Multimodal Diffusion Transformer (MMDiT) text-to-image model that features improved performance in image quality, typography, complex prompt understanding, and resource-efficiency.", + "preview": "stabilityai--stable-diffusion-3_5-large.jpg", + "extras": "sampler: Default, cfg_scale: 7.0", + "size": 36.12, + "date": "2024 October" }, "CogView 3 Plus": { "path": "zai-org/CogView3-Plus-3B", @@ -806,21 +324,276 @@ "size": 7.61, "date": "2024 October" }, - "KOALA 700M": { - "path": "huggingface/etri-vilab/koala-700m-llava-cap", - "variant": "fp16", - "desc": "Fast text-to-image model, called KOALA, by compressing SDXL's U-Net and distilling knowledge from SDXL into our model. KOALA-700M can generate a 1024x1024 image in less than 1.5 seconds on an NVIDIA 4090 GPU, which is more than 2x faster than SDXL.", - "preview": "etri-vilab--koala-700m-llava-cap.jpg", - "extras": "sampler: Default", - "size": 12.93, - "date": "2024 January" + "NVLabs Sana 1.0 1.6B 1k": { + "path": "Efficient-Large-Model/Sana_1600M_1024px_diffusers", + "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 × 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", + "preview": "Efficient-Large-Model--Sana_1600M_1024px_diffusers.jpg", + "size": 24.02, + "date": "2024 November" }, - "AIDC Ovis-Image 7B": { - "path": "AIDC-AI/Ovis-Image-7B", - "desc": "Built upon Ovis-U1, Ovis-Image is a 7B text-to-image model specifically optimized for high-quality text rendering, designed to operate efficiently under stringent computational constraints.", - "preview": "AIDC-AI--Ovis-Image-7B.jpg", - "size": 20.29, - "date": "2025 November" + "NVLabs Sana 1.0 1.6B 2k": { + "path": "Efficient-Large-Model/Sana_1600M_2Kpx_BF16_diffusers", + "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 × 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", + "preview": "Efficient-Large-Model--Sana_1600M_2Kpx_BF16_diffusers.jpg", + "size": 21.03, + "date": "2024 December" + }, + "NVLabs Sana 1.0 0.6B 0.5k": { + "path": "Efficient-Large-Model/Sana_600M_512px_diffusers", + "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 × 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", + "preview": "Efficient-Large-Model--Sana_600M_512px_diffusers.jpg", + "size": 15.37, + "date": "2024 December" + }, + "VectorSpaceLab OmniGen v1": { + "path": "Shitao/OmniGen-v1-diffusers", + "desc": "OmniGen is a unified image generation model that can generate a wide range of images from multi-modal prompts. It is designed to be simple, flexible and easy to use.", + "preview": "Shitao--OmniGen-v1.jpg", + "size": 7.53, + "date": "2024 December" + }, + "Ostris Flex.1 Alpha": { + "path": "ostris/Flex.1-alpha", + "preview": "ostris--Flex.1-alpha.jpg", + "desc": "Flex.1 alpha is a pre-trained base 8 billion parameter rectified flow transformer capable of generating images from text descriptions. It has a similar architecture to FLUX.1-dev, but with fewer double transformer blocks (8 vs 19)", + "extras": "sampler: Default, cfg_scale: 3.5", + "size": 24.46, + "date": "2025 January" + }, + "NVLabs Sana 1.0 1.6B 4k": { + "path": "Efficient-Large-Model/Sana_1600M_4Kpx_BF16_diffusers", + "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 × 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", + "preview": "Efficient-Large-Model--Sana_1600M_4Kpx_BF16_diffusers.jpg", + "size": 21.03, + "date": "2025 January" + }, + "AlphaVLLM Lumina 2": { + "path": "Alpha-VLLM/Lumina-Image-2.0", + "desc": "A Unified and Efficient Image Generative Model. Lumina-Image-2.0 is a 2 billion parameter flow-based diffusion transformer capable of generating images from text descriptions.", + "preview": "Alpha-VLLM--Lumina-Image-2.0.jpg", + "extras": "sampler: Default", + "size": 19.77, + "date": "2025 January" + }, + "Wan-AI Wan2.1 1.3B": { + "path": "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", + "preview": "Wan-AI--Wan2.1-T2V-1.3B-Diffusers.jpg", + "desc": "Wan is an advanced and powerful visual generation model developed by Tongyi Lab of Alibaba Group. It can generate videos based on text, images, and other control signals. The Wan2.1 series models are now fully open-source.", + "extras": "sampler: Default", + "size": 26.92, + "date": "2025 March" + }, + "Wan-AI Wan2.1 14B": { + "path": "Wan-AI/Wan2.1-T2V-14B-Diffusers", + "preview": "Wan-AI--Wan2.1-T2V-14B-Diffusers.jpg", + "desc": "Wan is an advanced and powerful visual generation model developed by Tongyi Lab of Alibaba Group. It can generate videos based on text, images, and other control signals. The Wan2.1 series models are now fully open-source.", + "extras": "sampler: Default", + "size": 74.86, + "date": "2025 March" + }, + "NVLabs Sana 1.5 1.6B 1k": { + "path": "Efficient-Large-Model/SANA1.5_1.6B_1024px_diffusers", + "desc": "Sana is an efficient model with scaling of training-time and inference time techniques. SANA-1.5 delivers: efficient model growth from 1.6B Sana-1.0 model to 4.8B, achieving similar or better performance than training from scratch and saving 60% training cost; efficient model depth pruning, slimming any model size as you want; powerful VLM selection based inference scaling, smaller model+inference scaling > larger model.", + "preview": "Efficient-Large-Model--SANA1.5_1.6B_1024px_diffusers.jpg", + "size": 9.02, + "date": "2025 March" + }, + "NVLabs Sana 1.5 4.8B 1k": { + "path": "Efficient-Large-Model/SANA1.5_4.8B_1024px_diffusers", + "desc": "Sana is an efficient model with scaling of training-time and inference time techniques. SANA-1.5 delivers: efficient model growth from 1.6B Sana-1.0 model to 4.8B, achieving similar or better performance than training from scratch and saving 60% training cost; efficient model depth pruning, slimming any model size as you want; powerful VLM selection based inference scaling, smaller model+inference scaling > larger model.", + "preview": "Efficient-Large-Model--SANA1.5_4.8B_1024px_diffusers.jpg", + "size": 14.83, + "date": "2025 March" + }, + "CogView 4": { + "path": "zai-org/CogView4-6B", + "desc": "An innovative cascaded framework that enhances the performance of text-to-image diffusion. CogView is the first model implementing relay diffusion in the realm of text-to-image generation, executing the task by first creating low-resolution images and subsequently applying relay-based super-resolution.", + "preview": "THUDM--CogView4-6B.jpg", + "size": 28.97, + "date": "2025 March" + }, + "Ostris Flex.2 Preview": { + "path": "ostris/Flex.2-preview", + "preview": "ostris--Flex.2-preview.jpg", + "desc": "Open Source 8B parameter Text to Image Diffusion Model with universal control and inpainting support built in. Early access preview release. The next version of Flex.1-alpha", + "extras": "sampler: Default, cfg_scale: 3.5", + "size": 24.46, + "date": "2025 April" + }, + "Freepik F-Lite": { + "path": "Freepik/F-Lite", + "preview": "Freepik--F-Lite.jpg", + "desc": "F Lite is a 10B parameter diffusion model created by Freepik and Fal, trained exclusively on copyright-safe and SFW content. The model was trained on Freepik's internal dataset comprising approximately 80 million copyright-safe images, making it the first publicly available model of this scale trained exclusively on legally compliant and SFW content.", + "extras": "sampler: Default, cfg_scale: 3.5", + "size": 9.03, + "date": "2025 April" + }, + "Freepik F-Lite Texture": { + "path": "Freepik/F-Lite-Texture", + "preview": "Freepik--F-Lite-Texture.jpg", + "desc": "F Lite is a 10B parameter diffusion model created by Freepik and Fal, trained exclusively on copyright-safe and SFW content. The model was trained on Freepik's internal dataset comprising approximately 80 million copyright-safe images, making it the first publicly available model of this scale trained exclusively on legally compliant and SFW content.", + "extras": "sampler: Default, cfg_scale: 3.5", + "size": 9.03, + "date": "2025 April" + }, + "nVidia Cosmos-Predict2 T2I 2B": { + "path": "nvidia/Cosmos-Predict2-2B-Text2Image", + "desc": "Cosmos-Predict2: A family of highly performant pre-trained world foundation models purpose-built for generating physics-aware images, videos and world states for physical AI development.", + "preview": "nvidia--Cosmos-Predict2-2B-Text2Image.jpg", + "size": 13.18, + "date": "2025 April" + }, + "nVidia Cosmos-Predict2 T2I 14B": { + "path": "nvidia/Cosmos-Predict2-14B-Text2Image", + "desc": "Cosmos-Predict2: A family of highly performant pre-trained world foundation models purpose-built for generating physics-aware images, videos and world states for physical AI development.", + "preview": "nvidia--Cosmos-Predict2-14B-Text2Image.jpg", + "size": 36.11, + "date": "2025 April" + }, + "HiDream-I1 Fast": { + "path": "HiDream-ai/HiDream-I1-Fast", + "desc": "HiDream-I1 is a new open-source image generative foundation model with 17B parameters that achieves state-of-the-art image generation quality within seconds.", + "preview": "HiDream-ai--HiDream-I1-Fast.jpg", + "extras": "sampler: Default", + "size": 43.94, + "date": "2025 April" + }, + "HiDream-I1 Dev": { + "path": "HiDream-ai/HiDream-I1-Dev", + "desc": "HiDream-I1 is a new open-source image generative foundation model with 17B parameters that achieves state-of-the-art image generation quality within seconds.", + "preview": "HiDream-ai--HiDream-I1-Dev.jpg", + "extras": "sampler: Default", + "size": 43.94, + "date": "2025 April" + }, + "HiDream-I1 Full": { + "path": "HiDream-ai/HiDream-I1-Full", + "desc": "HiDream-I1 is a new open-source image generative foundation model with 17B parameters that achieves state-of-the-art image generation quality within seconds.", + "preview": "HiDream-ai--HiDream-I1-Full.jpg", + "extras": "sampler: Default", + "size": 43.94, + "date": "2025 April" + }, + "HiDream-E1 Full": { + "path": "HiDream-ai/HiDream-E1-Full", + "desc": "HiDream-E1 is an image editing model built on HiDream-I1.", + "preview": "HiDream-ai--HiDream-E1-Full.jpg", + "extras": "sampler: Default", + "size": 43.94, + "date": "2025 April" + }, + "Black Forest Labs FLUX.1 Kontext Dev": { + "path": "black-forest-labs/FLUX.1-Kontext-dev", + "preview": "black-forest-labs--FLUX.1-Kontext-dev.jpg", + "desc": "FLUX.1 Kontext [dev] is a 12 billion parameter rectified flow transformer capable of editing images based on text instructions.", + "extras": "sampler: Default, cfg_scale: 3.5", + "size": 31.42, + "date": "2025 May" + }, + "Freepik F-Lite 7B": { + "path": "Freepik/F-Lite-7B", + "preview": "Freepik--F-Lite-7B.jpg", + "desc": "F Lite is a 10B parameter diffusion model created by Freepik and Fal, trained exclusively on copyright-safe and SFW content. The model was trained on Freepik's internal dataset comprising approximately 80 million copyright-safe images, making it the first publicly available model of this scale trained exclusively on legally compliant and SFW content.", + "extras": "sampler: Default, cfg_scale: 3.5", + "size": 9.03, + "date": "2025 May" + }, + "VectorSpaceLab OmniGen v2": { + "path": "OmniGen2/OmniGen2", + "desc": "OmniGen2 is a powerful and efficient unified multimodal model. Unlike OmniGen v1, OmniGen2 features two distinct decoding pathways for text and image modalities, utilizing unshared parameters and a decoupled image tokenizer.", + "preview": "OmniGen2--OmniGen2.jpg", + "size": 15.09, + "date": "2025 June" + }, + "Black Forest Labs FLUX.1 Krea Dev": { + "path": "black-forest-labs/FLUX.1-Krea-dev", + "preview": "black-forest-labs--FLUX.1-Krea-dev.jpg", + "desc": "FLUX.1 Krea [dev] is a 12 billion parameter rectified flow transformer capable of generating images from text descriptions.", + "extras": "sampler: Default, cfg_scale: 4.5", + "size": 31.42, + "date": "2025 July" + }, + "lodestones Chroma1 Base": { + "path": "lodestones/Chroma1-Base", + "preview": "lodestones--Chroma1-Base.jpg", + "desc": "Chroma is a 8.9B parameter model based on FLUX.1-schnell. It’s fully Apache 2.0 licensed, ensuring that anyone can use, modify, and build on top of it—no corporate gatekeeping. This is the core 512x512 model. It's a solid, all-around foundation for pretty much any creative project.", + "size": 25.6, + "date": "2025 July" + }, + "Wan-AI Wan2.2 5B": { + "path": "Wan-AI/Wan2.2-TI2V-5B-Diffusers", + "preview": "Wan-AI--Wan2.2-TI2V-5B-Diffusers.jpg", + "desc": "Wan2.2, offering more powerful capabilities, better performance, and superior visual quality. With Wan2.2, we have focused on incorporating the following technical innovations: MoE Architecture, Data Scalling, Cinematic Aesthetics, Efficient High-Definition Hybrid", + "extras": "sampler: Default", + "size": 31.83, + "date": "2025 July" + }, + "Wan-AI Wan2.2 A14B T2I": { + "path": "Wan-AI/Wan2.2-T2V-A14B-Diffusers", + "preview": "Wan-AI--Wan2.2-T2V-A14B-Diffusers.jpg", + "desc": "Wan2.2, offering more powerful capabilities, better performance, and superior visual quality. With Wan2.2, we have focused on incorporating the following technical innovations: MoE Architecture, Data Scalling, Cinematic Aesthetics, Efficient High-Definition Hybrid", + "extras": "sampler: Default", + "size": 117.51, + "date": "2025 July" + }, + "Wan-AI Wan2.2 A14B I2I": { + "path": "Wan-AI/Wan2.2-I2V-A14B-Diffusers", + "preview": "Wan-AI--Wan2.2-T2V-A14B-Diffusers.jpg", + "desc": "Wan2.2, offering more powerful capabilities, better performance, and superior visual quality. With Wan2.2, we have focused on incorporating the following technical innovations: MoE Architecture, Data Scalling, Cinematic Aesthetics, Efficient High-Definition Hybrid", + "extras": "sampler: Default", + "size": 117.52, + "date": "2025 July" + }, + "HiDream-E1.1": { + "path": "HiDream-ai/HiDream-E1-1", + "desc": "HiDream-E1 is an image editing model built on HiDream-I1.", + "preview": "HiDream-ai--HiDream-E1-1.jpg", + "extras": "sampler: Default", + "size": 43.94, + "date": "2025 July" + }, + "Bria 3.2": { + "path": "SahilCarterr/BRIA-3.2", + "desc": "Bria 3.2 is the next-generation commercial-ready text-to-image model. With just 4 billion parameters, it provides exceptional aesthetics and text rendering, evaluated to provide on par results to leading open-source models, and outperforming other licensed models.", + "preview": "briaai--BRIA-3.2.jpg", + "size": 18.11, + "date": "2025 July" + }, + "Qwen-Image": { + "path": "Qwen/Qwen-Image", + "preview": "Qwen--Qwen-Image.jpg", + "desc": "Qwen-Image, an image generation foundation model in the Qwen series that achieves significant advances in complex text rendering and precise image editing.", + "size": 53.74, + "date": "2025 August" + }, + "Qwen-Image-Edit": { + "path": "Qwen/Qwen-Image-Edit", + "preview": "Qwen--Qwen-Image-Edit.jpg", + "desc": "Qwen-Image-Edit, the image editing version of Qwen-Image. Built upon our 20B Qwen-Image model, Qwen-Image-Edit successfully extends Qwen-Image’s unique text rendering capabilities to image editing tasks, enabling precise text editing.", + "size": 53.74, + "date": "2025 August" + }, + "lodestones Chroma1 HD": { + "path": "lodestones/Chroma1-HD", + "preview": "lodestones--Chroma1-HD.jpg", + "desc": "Chroma is a 8.9B parameter model based on FLUX.1-schnell. It’s fully Apache 2.0 licensed, ensuring that anyone can use, modify, and build on top of it—no corporate gatekeeping. This is the high-res fine-tune of the Chroma1-Base at a 1024x1024 resolution.", + "size": 25.6, + "date": "2025 August" + }, + "lodestones Chroma1 v50 Preview Annealed": { + "path": "vladmandic/chroma-unlocked-v50-annealed", + "preview": "vladmandic--chroma-unlocked-v50-annealed.jpg", + "desc": "Chroma is a 8.9B parameter model based on FLUX.1-schnell. It’s fully Apache 2.0 licensed, ensuring that anyone can use, modify, and build on top of it—no corporate gatekeeping. Re-tweaked variant with extra noise added.", + "size": 25.6, + "date": "2025 August" + }, + "X-Omni SFT": { + "path": "X-Omni/X-Omni-SFT", + "desc": "X-Omni: Reinforcement learning makes discrete autoregressive image generative models great again", + "preview": "X-Omni--X-Omni-SFT.jpg", + "size": 23.8, + "date": "2025 August", + "experimental": true }, "HDM-XUT 340M Anime": { "path": "KBlueLeaf/HDM-xut-340M-anime", @@ -829,35 +602,109 @@ "size": 2.2, "date": "2025 August" }, - "SalesForce BLIP-Diffusion": { - "path": "salesforce/blipdiffusion", - "desc": "BLIP-Diffusion, a new subject-driven image generation model that supports multimodal control which consumes inputs of subject images and text prompts. Unlike other subject-driven generation models, BLIP-Diffusion introduces a new multimodal encoder which is pre-trained to provide subject representation.", - "preview": "salesforce--blipdiffusion.jpg", - "size": 3.97, - "date": "2023 September" - }, - "InstaFlow 0.9B": { - "path": "XCLiu/instaflow_0_9B_from_sd_1_5", - "desc": "InstaFlow is an ultra-fast, one-step image generator that achieves image quality close to Stable Diffusion. This efficiency is made possible through a recent Rectified Flow technique, which trains probability flows with straight trajectories, hence inherently requiring only a single step for fast inference.", - "preview": "XCLiu--instaflow_0_9B_from_sd_1_5.jpg", - "size": 3.97, - "date": "2023 October" - }, - "DeepFloyd IF Medium": { - "path": "DeepFloyd/IF-I-M-v1.0", - "desc": "DeepFloyd-IF is a pixel-based text-to-image triple-cascaded diffusion model, that can generate pictures with new state-of-the-art for photorealism and language understanding. The result is a highly efficient model that outperforms current state-of-the-art models, achieving a zero-shot FID-30K score of 6.66 on the COCO dataset. It is modular and composed of frozen text mode and three pixel cascaded diffusion modules, each designed to generate images of increasing resolution: 64x64, 256x256, and 1024x1024.", - "preview": "DeepFloyd--IF-I-M-v1.0.jpg", + "StepFun Step1X-Edit v1.1": { + "path": "stepfun-ai/Step1X-Edit-v1p1-diffusers", + "preview": "stepfun-ai--Step1X-Edit-v1p1-diffusers.jpg", + "desc": "Multimodal image editing model using Step1X transformer architecture with Qwen2.5-VL text encoding, trained with Flow Matching scheduler for high-quality in-context image edits and refinements.", "extras": "sampler: Default", - "size": 75.87, - "date": "2023 March" + "size": 38.91, + "date": "2025 August" }, - "DeepFloyd IF Large": { - "path": "DeepFloyd/IF-I-L-v1.0", - "desc": "DeepFloyd-IF is a pixel-based text-to-image triple-cascaded diffusion model, that can generate pictures with new state-of-the-art for photorealism and language understanding. The result is a highly efficient model that outperforms current state-of-the-art models, achieving a zero-shot FID-30K score of 6.66 on the COCO dataset. It is modular and composed of frozen text mode and three pixel cascaded diffusion modules, each designed to generate images of increasing resolution: 64x64, 256x256, and 1024x1024.", - "preview": "DeepFloyd--IF-I-L-v1.0.jpg", + "Qwen-Image-Edit-2509": { + "path": "Qwen/Qwen-Image-Edit-2509", + "preview": "Qwen--Qwen-Image-Edit-2509.jpg", + "desc": "Qwen-Image-Edit, the image editing version of Qwen-Image. Built upon our 20B Qwen-Image model, Qwen-Image-Edit successfully extends Qwen-Image’s unique text rendering capabilities to image editing tasks, enabling precise text editing.", + "size": 53.74, + "date": "2025 September" + }, + "Wan-AI Wan2.2 14B VACE": { + "path": "linoyts/Wan2.2-VACE-Fun-14B-diffusers", + "preview": "linoyts--Wan2.2-VACE-Fun-14B-diffusers.jpg", + "desc": "Wan2.2, offering more powerful capabilities, better performance, and superior visual quality. With Wan2.2, we have focused on incorporating the following technical innovations: MoE Architecture, Data Scalling, Cinematic Aesthetics, Efficient High-Definition Hybrid", "extras": "sampler: Default", - "size": 82.18, - "date": "2023 March" + "size": 75.64, + "date": "2025 September" + }, + "Tencent HunyuanImage 2.1": { + "path": "hunyuanvideo-community/HunyuanImage-2.1-Diffusers", + "desc": "HunyuanImage-2.1, a highly efficient text-to-image model that is capable of generating 2K (2048 × 2048) resolution images.", + "preview": "hunyuanvideo-community--HunyuanImage-2.1-Diffusers.jpg", + "size": 49.48, + "date": "2025 September" + }, + "Tencent HunyuanImage 2.1 Refiner": { + "path": "hunyuanvideo-community/HunyuanImage-2.1-Refiner-Diffusers", + "desc": "HunyuanImage-2.1, a highly efficient text-to-image model that is capable of generating 2K (2048 × 2048) resolution images.", + "preview": "hunyuanvideo-community--HunyuanImage-2.1-Diffusers.jpg", + "size": 45.78, + "date": "2025 September" + }, + "AlphaVLLM Lumina DiMOO": { + "path": "Alpha-VLLM/Lumina-DiMOO", + "desc": "Lumina-DiMOO is an omni diffusion large language model for multimodal generation and understanding with text-to-image, image editing, and multimodal understanding capabilities.", + "preview": "Alpha-VLLM--Lumina-DiMOO.jpg", + "extras": "sampler: Default", + "size": 0, + "date": "2025 September" + }, + "nVidia ChronoEdit": { + "path": "nvidia/ChronoEdit-14B-Diffusers", + "preview": "nvidia--ChronoEdit-14B-Diffusers.jpg", + "desc": "ChronoEdit reframes image editing as a video generation task, using input and edited images as start/end frames to leverage pretrained video models with temporal consistency.", + "size": 82.71, + "date": "2025 October" + }, + "Bria FIBO": { + "path": "briaai/FIBO", + "preview": "briaai--FIBO.jpg", + "desc": "BRIA FIBO is an 8-billion parameter text-to-image diffusion model using Flow Matching and featuring a lightweight SmolLM3-3B text encoder. Delivers high-quality, detailed image generation with efficient inference.", + "extras": "sampler: Default, cfg_scale: 3.5", + "size": 23.79, + "date": "2025 October" + }, + "Black Forest Labs FLUX.2 Dev": { + "path": "black-forest-labs/FLUX.2-dev", + "preview": "black-forest-labs--FLUX.2-dev.jpg", + "desc": "FLUX.2 generates high-quality images while maintaining character and style consistency across multiple reference images, following structured prompts, reading and writing complex text, adhering to brand guidelines, and reliably handling lighting, layouts, and logos.", + "size": 105.06, + "date": "2025 November" + }, + "Owen777 UltraFlux-v1": { + "path": "Owen777/UltraFlux-v1", + "preview": "Owen777--UltraFlux-v1.jpg", + "desc": "UltraFlux-v1 is a FLUX.1-dev based text-to-image model optimized for native 4K and multi-aspect-ratio generation with improved composition consistency.", + "extras": "sampler: Default, cfg_scale: 4.0, steps: 50", + "size": 31.58, + "date": "2025 November" + }, + "Z-Image-Turbo": { + "path": "Tongyi-MAI/Z-Image-Turbo", + "preview": "Tongyi-MAI--Z-Image-Turbo.jpg", + "desc": "Z-Image-Turbo, a distilled version of Z-Image that matches or exceeds leading competitors with only 8 NFEs (Number of Function Evaluations). It excels in photorealistic image generation, bilingual text rendering (English & Chinese), and robust instruction adherence.", + "extras": "sampler: Default, cfg_scale: 1.0, steps: 9", + "size": 30.58, + "date": "2025 November" + }, + "Kandinsky 5.0 T2I Lite": { + "path": "kandinskylab/Kandinsky-5.0-T2I-Lite-sft-Diffusers", + "desc": "Kandinsky 5.0 Image Lite is a 6B image generation models 1K resulution, high visual quality and strong text-writing", + "preview": "kandinskylab--Kandinsky-5.0-T2I-Lite-sft-Diffusers.jpg", + "size": 30.0, + "date": "2025 November" + }, + "Kandinsky 5.0 I2I Lite": { + "path": "kandinskylab/Kandinsky-5.0-I2I-Lite-sft-Diffusers", + "desc": "Kandinsky 5.0 Image Lite is a 6B image editing models 1K resulution, high visual quality and strong text-writing", + "preview": "kandinskylab--Kandinsky-5.0-T2I-Lite-sft-Diffusers.jpg", + "size": 30.01, + "date": "2025 November" + }, + "AIDC Ovis-Image 7B": { + "path": "AIDC-AI/Ovis-Image-7B", + "desc": "Built upon Ovis-U1, Ovis-Image is a 7B text-to-image model specifically optimized for high-quality text rendering, designed to operate efficiently under stringent computational constraints.", + "preview": "AIDC-AI--Ovis-Image-7B.jpg", + "size": 20.29, + "date": "2025 November" }, "Photoroom PRX 1024": { "path": "Photoroom/prx-1024-t2i-beta", @@ -866,12 +713,72 @@ "size": 19.28, "date": "2025 November" }, - "Photoroom PRXPixel": { - "path": "Photoroom/prxpixel-t2i", - "desc": "PRXPixel is a 7-billion-parameter pixel-space text-to-image model that denoises RGB images directly using a Qwen3-VL text encoder and flow-matching scheduler.", - "preview": "Photoroom--prxpixel-t2i.jpg", - "size": 16.25, - "date": "2026 June" + "Qwen-Image-2512": { + "path": "Qwen/Qwen-Image-2512", + "preview": "Qwen--Qwen-Image-2512.jpg", + "desc": "Qwen-Image-2512 is an Qwen Image successor, that significantly reduces the AI-generated look, got finer natural detailils and improved text rendering.", + "size": 53.74, + "date": "2025 December" + }, + "Qwen-Image-Edit-2511": { + "path": "Qwen/Qwen-Image-Edit-2511", + "preview": "Qwen--Qwen-Image-Edit-2511.jpg", + "desc": "Key enhancements: mitigate image drift, improved character consistency, enhanced industrial design generation, and strengthened geometric reasoning ability.", + "size": 53.74, + "date": "2025 December" + }, + "Qwen-Image-Layered": { + "path": "Qwen/Qwen-Image-Layered", + "preview": "Qwen--Qwen-Image-Layered.jpg", + "desc": "Qwen-Image-Layered, a model capable of decomposing an image into multiple RGBA layers", + "size": 53.74, + "date": "2025 December" + }, + "lodestones Zeta-Chroma": { + "path": "lodestones/Zeta-Chroma", + "preview": "lodestones--Zeta-Chroma.jpg", + "desc": "Zeta-Chroma is a pixel-space diffusion transformer image model from lodestones that generates images directly in RGB space using a NextDiT-style architecture.", + "extras": "sampler: Default, cfg_scale: 3.0, steps: 30", + "size": 12.11, + "date": "2025 December" + }, + "Meituan LongCat Image": { + "path": "meituan-longcat/LongCat-Image", + "preview": "meituan-longcat--LongCat-Image.jpg", + "desc": "Pioneering open-source and bilingual (Chinese-English) foundation model for image generation, designed to address core challenges in multilingual text rendering, photorealism, deployment efficiency, and developer accessibility prevalent in current leading models.", + "size": 27.28, + "date": "2025 December" + }, + "Meituan LongCat Image-Edit": { + "path": "meituan-longcat/LongCat-Image-Edit", + "preview": "meituan-longcat--LongCat-Image-Edit.jpg", + "desc": "Pioneering open-source and bilingual (Chinese-English) foundation model for image generation, designed to address core challenges in multilingual text rendering, photorealism, deployment efficiency, and developer accessibility prevalent in current leading models.", + "size": 27.28, + "date": "2025 December" + }, + "Black Forest Labs FLUX.2 Klein Base 4B": { + "path": "black-forest-labs/FLUX.2-klein-base-4B", + "preview": "black-forest-labs--FLUX.2-klein-base-4B.jpg", + "desc": "FLUX.2-klein-base-4B is the undistilled 4 billion parameter base model of FLUX.2-klein. Requires 50 inference steps for full quality but offers flexibility for fine-tuning. Supports text-to-image and multi-reference editing. Apache 2.0 licensed.", + "extras": "sampler: Default, cfg_scale: 4.0, steps: 50", + "size": 14.87, + "date": "2026 January" + }, + "Black Forest Labs FLUX.2 Klein Base 9B": { + "path": "black-forest-labs/FLUX.2-klein-base-9B", + "preview": "black-forest-labs--FLUX.2-klein-base-9B.jpg", + "desc": "FLUX.2-klein-base-9B is the undistilled 9 billion parameter base model of FLUX.2-klein. Requires 50 inference steps for full quality but offers flexibility for fine-tuning. Supports text-to-image and multi-reference editing. Non-commercial license.", + "extras": "sampler: Default, cfg_scale: 4.0, steps: 50", + "size": 32.32, + "date": "2026 January" + }, + "Z-Image": { + "path": "Tongyi-MAI/Z-Image", + "preview": "Tongyi-MAI--Z-Image.jpg", + "desc": "Z-Image, an efficient image generation foundation model built on a Single-Stream Diffusion Transformer architecture. It preserves the complete training signal with full CFG support, enabling aesthetic versatility from hyper-realistic photography to anime, enhanced output diversity, and robust negative prompting for artifact suppression. Ideal base for LoRA training, ControlNet, and semantic conditioning.", + "extras": "sampler: Default, cfg_scale: 4.0, steps: 50", + "size": 19.11, + "date": "2026 January" }, "ZAI GLM-Image": { "path": "zai-org/GLM-Image", @@ -889,14 +796,6 @@ "size": 10.46, "date": "2026 January" }, - "Bria FIBO": { - "path": "briaai/FIBO", - "preview": "briaai--FIBO.jpg", - "desc": "BRIA FIBO is an 8-billion parameter text-to-image diffusion model using Flow Matching and featuring a lightweight SmolLM3-3B text encoder. Delivers high-quality, detailed image generation with efficient inference.", - "extras": "sampler: Default, cfg_scale: 3.5", - "size": 23.79, - "date": "2025 October" - }, "Bria Fibo-Edit": { "path": "briaai/Fibo-Edit", "preview": "briaai--Fibo-Edit.jpg", @@ -905,20 +804,59 @@ "size": 22.47, "date": "2026 January" }, - "Bria 3.2": { - "path": "SahilCarterr/BRIA-3.2", - "desc": "Bria 3.2 is the next-generation commercial-ready text-to-image model. With just 4 billion parameters, it provides exceptional aesthetics and text rendering, evaluated to provide on par results to leading open-source models, and outperforming other licensed models.", - "preview": "briaai--BRIA-3.2.jpg", - "size": 18.11, - "date": "2025 July" + "NucleusAI Nucleus-Image": { + "path": "NucleusAI/Nucleus-Image", + "preview": "NucleusAI--Nucleus-Image.jpg", + "desc": "Nucleus-Image is a sparse mixture-of-experts diffusion transformer with 17B total parameters and about 2B active parameters per forward pass, using a Qwen3-VL text encoder and Qwen-Image VAE for 1024px generation.", + "variant": "bf16", + "extras": "sampler: Default, cfg_scale: 8.0, steps: 50", + "size": 48.09, + "date": "2026 March" }, - "StepFun Step1X-Edit v1.1": { - "path": "stepfun-ai/Step1X-Edit-v1p1-diffusers", - "preview": "stepfun-ai--Step1X-Edit-v1p1-diffusers.jpg", - "desc": "Multimodal image editing model using Step1X transformer architecture with Qwen2.5-VL text encoding, trained with Flow Matching scheduler for high-quality in-context image edits and refinements.", + "Baidu ERNIE-Image": { + "path": "baidu/ERNIE-Image", + "preview": "baidu--ERNIE-Image.jpg", + "desc": "ERNIE-Image is a text-to-image diffusion transformer model that combines a Mistral3 text encoder with a FlowMatch transformer and Flux2-style VAE for 1024px image generation.", + "extras": "sampler: Default, cfg_scale: 4.0, steps: 50", + "size": 22.29, + "date": "2026 April" + }, + "JoyAI Image Edit": { + "path": "jdopensource/JoyAI-Image-Edit-Diffusers", + "preview": "jdopensource--JoyAI-Image-Edit-Diffusers.jpg", + "desc": "JoyAI Image Edit is a Diffusers-native image editing model that combines a JoyImageEdit transformer with Qwen3-VL multimodal conditioning for instruction-guided edits.", + "size": 46.86, "extras": "sampler: Default", - "size": 38.91, - "date": "2025 August" + "date": "2026 April" + }, + "Microsoft Lens": { + "path": "Jinstudio/Lens", + "preview": "microsoft--Lens.jpg", + "desc": "Microsoft Lens is a text-to-image DiT model using GPT-OSS chat-style prompt encoding and Flux2 VAE decoding.", + "size": 28.43, + "date": "2026 May" + }, + "Microsoft Lens Base": { + "path": "Jinstudio/Lens-Base", + "preview": "microsoft--Lens-Base.jpg", + "desc": "Microsoft Lens-Base is the base variant of Lens for text-to-image generation with GPT-OSS prompt features.", + "size": 28.43, + "date": "2026 May" + }, + "Anima 1.0 Base": { + "path": "vladmandic/Anima-1.0-Base", + "preview": "vladmandic--Anima-1.0-Base.jpg", + "desc": "Anima 1.0 Base with extended 1024-resolution training and expanded dataset coverage for less common artists. A 2B parameter anime-focused text-to-image model based on modified Cosmos-Predict-2B with Qwen3-0.6B text encoder, created by CircleStone Labs and Comfy Org.", + "date": "2026 May", + "size": 4.99 + }, + "HiDream-O1 Image": { + "path": "HiDream-ai/HiDream-O1-Image", + "desc": "HiDream-O1-Image is an 8B pixel-level unified transformer model for text-to-image generation, instruction editing, and multi-reference personalization up to 2048x2048.", + "preview": "HiDream-ai--HiDream-O1-Image.jpg", + "extras": "sampler: Default", + "size": 35.2, + "date": "2026 May" }, "VIBE Image Edit": { "path": "vladmandic/VIBE-Image-Edit", @@ -928,13 +866,50 @@ "size": 8.63, "date": "2026 May" }, - "JoyAI Image Edit": { - "path": "jdopensource/JoyAI-Image-Edit-Diffusers", - "preview": "jdopensource--JoyAI-Image-Edit-Diffusers.jpg", - "desc": "JoyAI Image Edit is a Diffusers-native image editing model that combines a JoyImageEdit transformer with Qwen3-VL multimodal conditioning for instruction-guided edits.", - "size": 46.86, - "extras": "sampler: Default", - "date": "2026 April" + "Boogu Image 0.1 Base": { + "path": "Boogu/Boogu-Image-0.1-Base", + "preview": "Boogu--Boogu-Image-0.1-Base.jpg", + "desc": "Boogu Image 0.1 Base is the core Boogu text-to-image model with Qwen3-VL instruction encoding and a mixed single/double-stream diffusion transformer.", + "size": 35.81, + "date": "2026 June" + }, + "Boogu Image 0.1 Edit": { + "path": "Boogu/Boogu-Image-0.1-Edit", + "preview": "Boogu--Boogu-Image-0.1-Edit.jpg", + "desc": "Boogu Image 0.1 Edit is optimized for image editing with the same instruction-aware Boogu transformer and flow-match scheduler.", + "size": 35.81, + "date": "2026 June" + }, + "Ideogram 4": { + "path": "CalamitousFelicitousness/Ideogram-4-bf16-Diffusers", + "preview": "CalamitousFelicitousness--Ideogram-4-bf16-Diffusers.jpg", + "desc": "Ideogram 4 is Ideogram's first open-weight text-to-image model: a two 9.3B flow-matching DiTs that uses a Qwen3-VL vision-language model as its text encoder, with strong in-image text rendering. Requires structured JSON-caption prompts; prompt-enhance (on by default) rewrites a plain prompt into one.", + "extras": "sampler: Default, cfg_scale: 7.0, steps: 20, width: 1024, height: 1024", + "size": 49.9, + "date": "2026 June" + }, + "Krea 2 Base": { + "path": "CalamitousFelicitousness/Krea-2-Base-Diffusers", + "preview": "CalamitousFelicitousness--Krea-2-Base-Diffusers.jpg", + "desc": "Krea 2 (K2) Base is the undistilled foundation model of the Krea 2 family, trained from scratch by Krea. A 12.9B-parameter single-stream flow-matching DiT that uses a Qwen3-VL-4B vision-language model as its text encoder and the Qwen-Image VAE. The base checkpoint is intended for fine-tuning and LoRA training; LoRAs trained on it apply to Krea 2 Turbo.", + "extras": "sampler: Default, cfg_scale: 4.5, steps: 52", + "size": 33.5, + "date": "2026 June" + }, + "Photoroom PRXPixel": { + "path": "Photoroom/prxpixel-t2i", + "desc": "PRXPixel is a 7-billion-parameter pixel-space text-to-image model that denoises RGB images directly using a Qwen3-VL text encoder and flow-matching scheduler.", + "preview": "Photoroom--prxpixel-t2i.jpg", + "size": 16.25, + "date": "2026 June" + }, + "Anima 1.0 Aesthetic": { + "path": "CalamitousFelicitousness/Anima-1.0-Aesthetic-Diffusers", + "preview": "CalamitousFelicitousness--Anima-1.0-Aesthetic-Diffusers.jpg", + "desc": "Anima 1.0 Aesthetic, fine-tuned for better consistency and a higher quality default art style. A 2B parameter anime-focused text-to-image model based on modified Cosmos-Predict-2B with Qwen3-0.6B text encoder, created by CircleStone Labs and Comfy Org.", + "extras": "sampler: Default, cfg_scale: 4.5, steps: 30", + "date": "2026 July", + "size": 4.99 }, "JoyAI Image Edit Plus": { "path": "jdopensource/JoyAI-Image-Edit-Plus-Diffusers", @@ -983,5 +958,37 @@ "extras": "sampler: Default", "size": 17.69, "date": "2026 July" + }, + "Anima 2.9B Preview v1": { + "path": "CalamitousFelicitousness/Anima-2.9B-Preview-v1-Diffusers", + "preview": "CalamitousFelicitousness--Anima-2.9B-Preview-v1-Diffusers.jpg", + "desc": "Anima 2.9B preview v1 by Gazingstars, a depth-expanded fine-tune of Anima 1.0 Base: the transformer is grown from 28 to 40 layers and trained on 1.7M additional anime and illustration samples with mixed tag and natural-language captions. Same Qwen3-0.6B text encoder, LLM adapter and VAE as Anima 1.0.", + "extras": "sampler: Default, cfg_scale: 4.0, steps: 30", + "date": "2026 August", + "size": 7.32 + }, + "MiniMaxAI MiniMax-H3": { + "path": "MiniMaxAI/MiniMax-H3", + "preview": "MiniMaxAI--MiniMax-H3.jpg", + "desc": "MiniMax-H3 generates video with synchronized stereo audio in a single denoising pass through a 33B single-stream transformer with a Qwen3-VL conditioner. In image tabs the model runs in experimental still mode, keeping the first frame of a minimal generation.", + "extras": "sampler: Default", + "size": 134.12, + "date": "2026 August" + }, + "MiniMaxAI MiniMax-H3 Ref2VA": { + "path": "MiniMaxAI/MiniMax-H3", + "subfolder": "ref2va", + "preview": "MiniMaxAI--MiniMax-H3.jpg", + "desc": "The omni-reference variant of MiniMax-H3, sharing one repository with the base model as a separate checkpoint partition. Video with synchronized stereo audio is conditioned on reference images for identity and appearance, with reference rows held clean while video rows denoise.", + "extras": "sampler: Default", + "size": 134.12, + "date": "2026 August" + }, + "inclusionAI LLaDA-Image": { + "path": "inclusionAI/LLaDA-Image", + "desc": "LLaDA-Image is a unified 6B image generation and editing model with text, VQ-conditioned, and reference-image workflows.", + "extras": "steps: 50, cfg_scale: 5.0", + "size": 37.15, + "date": "2026 September" } } diff --git a/data/reference-cloud.json b/data/reference-cloud.json index d08526559..10f0e5930 100644 --- a/data/reference-cloud.json +++ b/data/reference-cloud.json @@ -1,22 +1,22 @@ { - "Nano Banana": { - "path": "gemini-2.5-flash-image", - "desc": "Our best engine for high-velocity visual creation, offering state-of-the-art speed and efficiency. Gemini 2.5 Flash Image, also known as Nano Banana, is best for high-volume generation, conversational image editing, and low-latency creative workflows that require native multimodal understanding. (Knowledge cutoff June 2025)", - "preview": "gemini-2.5-flash-image.jpg" + "Nano Banana lite": { + "path": "gemini-3.1-flash-lite-image", + "desc": "Nano Banana Lite is designed as the efficiency specialist of the image generation family, offering ultra-low latency and cost-effective image generation and editing. By targeting a sub-2 second latency and significantly reduced TPU compute costs, this model enables high-volume interactive developer use cases and real-time consumer applications. (Knowledge cutoff January 2025)", + "preview": "gemini-3.1-flash-lite-image.jpg" }, "Nano Banana 2": { "path": "gemini-3.1-flash-image", "desc": "Nano Banana 2 provides high-quality image generation and conversational editing at a mainstream price point and low latency. It serves as the high-efficiency counterpart to Gemini 3 Pro Image, optimized for speed and high-volume developer use cases.(Knowledge cutoff January 2025)", "preview": "gemini-3.1-flash-image.jpg" }, - "Nano Banana lite": { - "path": "gemini-3.1-flash-lite-image", - "desc": "Nano Banana Lite is designed as the efficiency specialist of the image generation family, offering ultra-low latency and cost-effective image generation and editing. By targeting a sub-2 second latency and significantly reduced TPU compute costs, this model enables high-volume interactive developer use cases and real-time consumer applications. (Knowledge cutoff January 2025)", - "preview": "gemini-3.1-flash-lite-image.jpg" - }, "Nano Banana Pro": { "path": "gemini-3-pro-image", "desc": "Nano Banana Pro is a sophisticated reasoning-driven engine for professional-grade image editing and generation, offering studio-quality precision and advanced creative control. Nano Banana Pro is best for complex graphic design, high-fidelity product mockups, and factual data visualizations that require accurate text rendering and real-world grounding via Google Search. (Knowledge cutoff January 2025)", "preview": "gemini-3-pro-image.jpg" + }, + "Nano Banana": { + "path": "gemini-2.5-flash-image", + "desc": "Our best engine for high-velocity visual creation, offering state-of-the-art speed and efficiency. Gemini 2.5 Flash Image, also known as Nano Banana, is best for high-volume generation, conversational image editing, and low-latency creative workflows that require native multimodal understanding. (Knowledge cutoff June 2025)", + "preview": "gemini-2.5-flash-image.jpg" } } diff --git a/data/reference-community.json b/data/reference-community.json index 2fc9d5290..6fa5c68c7 100644 --- a/data/reference-community.json +++ b/data/reference-community.json @@ -1,17 +1,12 @@ { - "Tempest-by-Vlad XL": { - "path": "tempestByVlad_baseV01.safetensors@https://civitai.com/api/download/models/1301775", - "preview": "tempestByVlad_baseV01.jpg", - "desc": "Flexible SDXL model with custom encoder and finetuned for larger landscape resolutions with high details and high contrast.", - "size": 6.94, - "date": "2025 January" - }, - "Tempest-by-Vlad XL Hyper": { - "path": "tempestByVlad_hyperV01.safetensors@https://civitai.com/api/download/models/1343512", - "preview": "tempestByVlad_hyperV01.jpg", - "desc": "Custom distilled variant with goal to get as-normal-as-possible model that works with low steps and guidance-free", - "size": 6.94, - "date": "2025 January" + "Juggernaut SD Reborn": { + "original": true, + "path": "juggernaut_reborn.safetensors@https://civitai.com/api/download/models/274039", + "preview": "juggernaut_reborn.jpg", + "desc": "Showcase finetuned model based on Stable diffusion 1.5", + "date": "2023 December", + "size": 2.28, + "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0" }, "Juggernaut XL XI": { "path": "juggernautXL_juggXIByRundiffusion.safetensors@https://civitai.com/api/download/models/782002", @@ -29,28 +24,26 @@ "size": 6.94, "extras": "sampler: DPM SDE, steps: 6, cfg_scale: 2.0" }, - "Juggernaut SD Reborn": { - "original": true, - "path": "juggernaut_reborn.safetensors@https://civitai.com/api/download/models/274039", - "preview": "juggernaut_reborn.jpg", - "desc": "Showcase finetuned model based on Stable diffusion 1.5", - "date": "2023 December", - "size": 2.28, - "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0" - }, - "WAI Illustrious XL v15": { - "path": "waiIllustriousSDXL_v150.safetensors@https://civitai.com/api/download/models/2167369", - "preview": "waiIllustriousSDXL_v150.jpg", + "NoobAI XL 1.1 Epsilon": { + "path": "noobaiXLNAIXL_epsilonPred11Version.safetensors@https://huggingface.co/Laxhar/noobai-XL-1.1/resolve/main/NoobAI-XL-v1.1.safetensors", + "preview": "noobaiXLNAIXL_epsilonPred11Version.jpg", "desc": "", "size": 6.94, - "date": "2025 August" + "date": "2024 November" }, - "Pony Realism XL v2.3": { - "path": "ponyRealism_V23.safetensors@https://civitai.com/api/download/models/1763661", - "preview": "ponyRealism_V23.jpg", - "desc": "", - "size": 6.94, - "date": "2025 May" + "ShuttleAI Shuttle 3.0 Diffusion": { + "path": "shuttleai/shuttle-3-diffusion", + "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", + "preview": "shuttleai--shuttle-3-diffusion.jpg", + "date": "2024 November", + "size": 31.41 + }, + "ShuttleAI Shuttle 3.1 Aesthetic": { + "path": "shuttleai/shuttle-3.1-aesthetic", + "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", + "preview": "shuttleai--shuttle-3.1-aesthetic.jpg", + "date": "2024 November", + "size": 31.41 }, "NoobAI XL 1.0 V-Pred": { "path": "noobaiXLNAIXL_vPred10Version.safetensors@https://huggingface.co/Laxhar/noobai-XL-Vpred-1.0/resolve/main/NoobAI-XL-Vpred-v1.0.safetensors", @@ -59,12 +52,33 @@ "size": 6.94, "date": "2024 December" }, - "NoobAI XL 1.1 Epsilon": { - "path": "noobaiXLNAIXL_epsilonPred11Version.safetensors@https://huggingface.co/Laxhar/noobai-XL-1.1/resolve/main/NoobAI-XL-v1.1.safetensors", - "preview": "noobaiXLNAIXL_epsilonPred11Version.jpg", + "Tempest-by-Vlad XL": { + "path": "tempestByVlad_baseV01.safetensors@https://civitai.com/api/download/models/1301775", + "preview": "tempestByVlad_baseV01.jpg", + "desc": "Flexible SDXL model with custom encoder and finetuned for larger landscape resolutions with high details and high contrast.", + "size": 6.94, + "date": "2025 January" + }, + "Tempest-by-Vlad XL Hyper": { + "path": "tempestByVlad_hyperV01.safetensors@https://civitai.com/api/download/models/1343512", + "preview": "tempestByVlad_hyperV01.jpg", + "desc": "Custom distilled variant with goal to get as-normal-as-possible model that works with low steps and guidance-free", + "size": 6.94, + "date": "2025 January" + }, + "ShuttleAI Shuttle Jaguar": { + "path": "shuttleai/shuttle-jaguar", + "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", + "preview": "shuttleai--shuttle-jaguar.jpg", + "date": "2025 January", + "size": 31.41 + }, + "Pony Realism XL v2.3": { + "path": "ponyRealism_V23.safetensors@https://civitai.com/api/download/models/1763661", + "preview": "ponyRealism_V23.jpg", "desc": "", "size": 6.94, - "date": "2024 November" + "date": "2025 May" }, "WAI-Ani-Pony XL v14": { "path": "waiANIPONYXL_v140.safetensors@https://civitai.com/api/download/models/1767402", @@ -73,6 +87,55 @@ "size": 6.94, "date": "2025 May" }, + "WAI Illustrious XL v15": { + "path": "waiIllustriousSDXL_v150.safetensors@https://civitai.com/api/download/models/2167369", + "preview": "waiIllustriousSDXL_v150.jpg", + "desc": "", + "size": 6.94, + "date": "2025 August" + }, + "Tiwaz CenKreChro": { + "path": "Tiwaz/CenKreChro", + "preview": "Tiwaz--CenKreChro.jpg", + "desc": "Based Centerfold Flux 5, trying to merge in Chroma and Krea.", + "date": "2025 September", + "size": 31.42 + }, + "purplesmartai Pony 7": { + "path": "purplesmartai/pony-v7-base", + "preview": "purplesmartai--pony-v7-base.jpg", + "desc": "Pony V7 is a versatile character generation model based on AuraFlow architecture. It supports a wide range of styles and species types (humanoid, anthro, feral, and more) and handles character interactions through natural language prompts.", + "date": "2025 October", + "size": 33.32 + }, + "Skywork UniPic3": { + "path": "Skywork/Unipic3", + "preview": "Skywork--Unipic3.jpg", + "desc": "UniPic3 is an image editing and multi-image composition model based. It is a fine-tune of Qwen-Image-Edit.", + "date": "2026 January", + "size": 53.74 + }, + "Skywork Unipic3-DMD": { + "path": "Skywork/Unipic3-DMD", + "preview": "Skywork--Unipic3-DMD.jpg", + "desc": "UniPic3-DMD-Model is a few-step image editing and multi-image composition model trained using Distribution Matching Distillation (DMD) and is a fine-tune of Qwen-Image-Edit.", + "date": "2026 January", + "size": 53.74 + }, + "FireRed Image Edit 1.0": { + "path": "FireRedTeam/FireRed-Image-Edit-1.0", + "preview": "FireRedTeam--FireRed-Image-Edit-1.0.jpg", + "desc": "FireRed-Image-Edit is a general-purpose image editing model that delivers high-fidelity and consistent editing across a wide range of scenarios. FireRed is a fine-tune of Qwen-Image-Edit.", + "date": "2026 February", + "size": 53.74 + }, + "FireRed Image Edit 1.1": { + "path": "FireRedTeam/FireRed-Image-Edit-1.1", + "preview": "FireRedTeam--FireRed-Image-Edit-1.1.jpg", + "desc": "FireRed-Image-Edit is a general-purpose image editing model that delivers high-fidelity and consistent editing across a wide range of scenarios. FireRed is a fine-tune of Qwen-Image-Edit.", + "date": "2026 March", + "size": 53.74 + }, "Z-Image-Turbo MoodyRealMix": { "path": "resonantsky/MoodyRealMix-SDNQ-int8-svd-r32", "preview": "resonantsky--MoodyRealMix-SDNQ-int8-svd-r32.jpg", @@ -100,69 +163,6 @@ "tags": "community, Z-image", "date": "2026 May" }, - "Tiwaz CenKreChro": { - "path": "Tiwaz/CenKreChro", - "preview": "Tiwaz--CenKreChro.jpg", - "desc": "Based Centerfold Flux 5, trying to merge in Chroma and Krea.", - "date": "2025 September", - "size": 31.42 - }, - "purplesmartai Pony 7": { - "path": "purplesmartai/pony-v7-base", - "preview": "purplesmartai--pony-v7-base.jpg", - "desc": "Pony V7 is a versatile character generation model based on AuraFlow architecture. It supports a wide range of styles and species types (humanoid, anthro, feral, and more) and handles character interactions through natural language prompts.", - "date": "2025 October", - "size": 33.32 - }, - "ShuttleAI Shuttle 3.0 Diffusion": { - "path": "shuttleai/shuttle-3-diffusion", - "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", - "preview": "shuttleai--shuttle-3-diffusion.jpg", - "date": "2024 November", - "size": 31.41 - }, - "ShuttleAI Shuttle 3.1 Aesthetic": { - "path": "shuttleai/shuttle-3.1-aesthetic", - "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", - "preview": "shuttleai--shuttle-3.1-aesthetic.jpg", - "date": "2024 November", - "size": 31.41 - }, - "ShuttleAI Shuttle Jaguar": { - "path": "shuttleai/shuttle-jaguar", - "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", - "preview": "shuttleai--shuttle-jaguar.jpg", - "date": "2025 January", - "size": 31.41 - }, - "FireRed Image Edit 1.0": { - "path": "FireRedTeam/FireRed-Image-Edit-1.0", - "preview": "FireRedTeam--FireRed-Image-Edit-1.0.jpg", - "desc": "FireRed-Image-Edit is a general-purpose image editing model that delivers high-fidelity and consistent editing across a wide range of scenarios. FireRed is a fine-tune of Qwen-Image-Edit.", - "date": "2026 February", - "size": 53.74 - }, - "FireRed Image Edit 1.1": { - "path": "FireRedTeam/FireRed-Image-Edit-1.1", - "preview": "FireRedTeam--FireRed-Image-Edit-1.1.jpg", - "desc": "FireRed-Image-Edit is a general-purpose image editing model that delivers high-fidelity and consistent editing across a wide range of scenarios. FireRed is a fine-tune of Qwen-Image-Edit.", - "date": "2026 March", - "size": 53.74 - }, - "Skywork UniPic3": { - "path": "Skywork/Unipic3", - "preview": "Skywork--Unipic3.jpg", - "desc": "UniPic3 is an image editing and multi-image composition model based. It is a fine-tune of Qwen-Image-Edit.", - "date": "2026 January", - "size": 53.74 - }, - "Skywork Unipic3-DMD": { - "path": "Skywork/Unipic3-DMD", - "preview": "Skywork--Unipic3-DMD.jpg", - "desc": "UniPic3-DMD-Model is a few-step image editing and multi-image composition model trained using Distribution Matching Distillation (DMD) and is a fine-tune of Qwen-Image-Edit.", - "date": "2026 January", - "size": 53.74 - }, "Anima 1.0 Base Merge sdnq-hadamard-uint4": { "path": "vladmandic/Anima-1.0-Base-Merge-sdnq-hadamard-uint4", "preview": "vladmandic--Anima-1.0-Base.jpg", diff --git a/data/reference-distilled.json b/data/reference-distilled.json index 96f70d453..b1f07f95e 100644 --- a/data/reference-distilled.json +++ b/data/reference-distilled.json @@ -1,17 +1,20 @@ { - "Boogu Image 0.1 Turbo": { - "path": "Boogu/Boogu-Image-0.1-Turbo", - "preview": "Boogu--Boogu-Image-0.1-Turbo.jpg", - "desc": "Boogu Image 0.1 Turbo is the distilled fast inference variant of Boogu Image with the same Qwen3-VL instruction encoder and Boogu transformer architecture.", - "size": 35.81, - "date": "2026 June" + "Segmind Tiny": { + "path": "segmind/tiny-sd", + "preview": "segmind--tiny-sd.jpg", + "desc": "Segmind's Tiny-SD offers a compact, efficient, and distilled version of Realistic Vision 4.0 and is up to 80% faster than SD1.5", + "extras": "width: 512, height: 512, sampler: Default, cfg_scale: 9.0", + "size": 0.99, + "date": "2023 July" }, - "Boogu Image 0.1 Edit Turbo": { - "path": "Boogu/Boogu-Image-0.1-Edit-Turbo", - "preview": "Boogu--Boogu-Image-0.1-Edit-Turbo.jpg", - "desc": "Boogu Image 0.1 Edit Turbo is the distilled editing variant of Boogu Image with motion-aware instruction encoding and fast flow-match inference.", - "size": 35.81, - "date": "2026 June" + "Segmind SSD-1B": { + "path": "huggingface/segmind/SSD-1B", + "preview": "segmind--SSD-1B.jpg", + "desc": "The Segmind Stable Diffusion Model (SSD-1B) offers a compact, efficient, and distilled version of the SDXL model. At 50% smaller and 60% faster than Stable Diffusion XL (SDXL), it provides quick and seamless performance without sacrificing image quality.", + "variant": "fp16", + "extras": "sampler: Default, cfg_scale: 9.0", + "size": 12.48, + "date": "2023 October" }, "StabilityAI StableDiffusion XL Turbo": { "path": "stabilityai/sdxl-turbo", @@ -22,13 +25,21 @@ "size": 19.38, "date": "2023 November" }, - "Krea 2 Turbo": { - "path": "CalamitousFelicitousness/Krea-2-Turbo-Diffusers", - "preview": "CalamitousFelicitousness--Krea-2-Turbo-Diffusers.jpg", - "desc": "Krea 2 (K2) Turbo is the 8-step distilled inference model of the Krea 2 family, trained from scratch by Krea. A 12.9B-parameter single-stream flow-matching DiT that uses a Qwen3-VL-4B vision-language model as its text encoder and the Qwen-Image VAE. Runs without classifier-free guidance; LoRAs trained on Krea 2 Base apply directly.", - "extras": "sampler: Default, cfg_scale: 1.0, steps: 8", - "size": 33.5, - "date": "2026 June" + "Tencent HunyuanDiT 1.1 Distilled": { + "path": "Tencent-Hunyuan/HunyuanDiT-v1.1-Diffusers-Distilled", + "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", + "preview": "Tencent-Hunyuan--HunyuanDiT-v1.1-Diffusers-Distilled.jpg", + "extras": "sampler: Default, cfg_scale: 2.0", + "size": 13.49, + "date": "2024 June" + }, + "Tencent HunyuanDiT 1.2 Distilled": { + "path": "Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers-Distilled", + "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", + "preview": "Tencent-Hunyuan--HunyuanDiT-v1.2-Diffusers-Distilled.jpg", + "extras": "sampler: Default, cfg_scale: 2.0", + "size": 13.43, + "date": "2024 July" }, "StabilityAI Stable Diffusion 3.5 Turbo": { "path": "stabilityai/stable-diffusion-3.5-large-turbo", @@ -39,28 +50,12 @@ "size": 36.12, "date": "2024 October" }, - "Microsoft Lens Turbo": { - "path": "Jinstudio/Lens-Turbo", - "preview": "microsoft--Lens-Turbo.jpg", - "desc": "Microsoft Lens-Turbo is the distilled Lens variant optimized for faster text-to-image generation with fewer steps.", - "size": 28.43, - "date": "2026 May" - }, - "Tencent FLUX.1 Dev SRPO": { - "path": "vladmandic/flux.1-dev-SRPO", - "preview": "vladmandic--flux.1-dev-SRPO.jpg", - "desc": "FLUX.1 Dev SRPO is Tencent trained with specific technique: Directly Aligning the Full Diffusion Trajectory with Fine-Grained Human Preference", - "extras": "sampler: Default, cfg_scale: 4.5", - "size": 31.42, - "date": "2025 September" - }, - "HiDream-O1 Image Dev": { - "path": "HiDream-ai/HiDream-O1-Image-Dev", - "preview": "HiDream-ai--HiDream-O1-Image-Dev.jpg", - "desc": "HiDream-O1-Image-Dev is the distilled 8B HiDream-O1 variant tuned for 28-step fast generation using flash flow scheduling.", - "extras": "sampler: Flash, steps: 28, cfg_scale: 0.0", - "size": 35.2, - "date": "2026 May" + "NVLabs Sana 1.5 1.6B 1k Sprint": { + "path": "Efficient-Large-Model/Sana_Sprint_1.6B_1024px_diffusers", + "desc": "SANA-Sprint is an ultra-efficient diffusion model for text-to-image (T2I) generation, reducing inference steps from 20 to 1-4 while achieving state-of-the-art performance.", + "preview": "Efficient-Large-Model--Sana15_Sprint_1600M_1024px_diffusers.jpg", + "size": 9.03, + "date": "2025 March" }, "Qwen-Image-Lightning": { "path": "vladmandic/Qwen-Lightning", @@ -78,13 +73,20 @@ "size": 56.1, "date": "2025 August" }, - "Baidu ERNIE-Image-Turbo": { - "path": "baidu/ERNIE-Image-Turbo", - "preview": "baidu--ERNIE-Image-Turbo.jpg", - "desc": "ERNIE-Image-Turbo is a distilled ERNIE-Image variant optimized for fast generation with fewer denoising steps.", - "extras": "sampler: Default, cfg_scale: 1.0, steps: 8", - "size": 22.29, - "date": "2026 April" + "lodestones Chroma1 Flash": { + "path": "lodestones/Chroma1-Flash", + "preview": "lodestones--Chroma1-Flash.jpg", + "desc": "Chroma is a 8.9B parameter model based on FLUX.1-schnell. It’s fully Apache 2.0 licensed, ensuring that anyone can use, modify, and build on top of it—no corporate gatekeeping. A fine-tuned version of the Chroma1-Base made to find the best way to make these flow matching models faster.", + "size": 25.6, + "date": "2025 August" + }, + "Tencent FLUX.1 Dev SRPO": { + "path": "vladmandic/flux.1-dev-SRPO", + "preview": "vladmandic--flux.1-dev-SRPO.jpg", + "desc": "FLUX.1 Dev SRPO is Tencent trained with specific technique: Directly Aligning the Full Diffusion Trajectory with Fine-Grained Human Preference", + "extras": "sampler: Default, cfg_scale: 4.5", + "size": 31.42, + "date": "2025 September" }, "Qwen-Image-Lightning-Edit": { "path": "vladmandic/Qwen-Lightning-Edit", @@ -110,6 +112,13 @@ "date": "2025 September", "size": 41.08 }, + "Tencent HunyuanImage 2.1 Distilled": { + "path": "hunyuanvideo-community/HunyuanImage-2.1-Distilled-Diffusers", + "desc": "HunyuanImage-2.1, a highly efficient text-to-image model that is capable of generating 2K (2048 × 2048) resolution images.", + "preview": "hunyuanvideo-community--HunyuanImage-2.1-Distilled-Diffusers.jpg", + "size": 49.53, + "date": "2025 September" + }, "Qwen-Image-Edit-2509 Pruning-13B": { "path": "OPPOer/Qwen-Image-Edit-2509-Pruning", "subfolder": "Qwen-Image-Edit-2509-13B-4steps", @@ -118,51 +127,6 @@ "date": "2025 October", "size": 42.34 }, - "lodestones Chroma1 Flash": { - "path": "lodestones/Chroma1-Flash", - "preview": "lodestones--Chroma1-Flash.jpg", - "desc": "Chroma is a 8.9B parameter model based on FLUX.1-schnell. It’s fully Apache 2.0 licensed, ensuring that anyone can use, modify, and build on top of it—no corporate gatekeeping. A fine-tuned version of the Chroma1-Base made to find the best way to make these flow matching models faster.", - "size": 25.6, - "date": "2025 August" - }, - "SDXL Flash Mini": { - "path": "SDXL-Flash_Mini.safetensors@https://huggingface.co/sd-community/sdxl-flash-mini/resolve/main/SDXL-Flash_Mini.safetensors?download=true", - "preview": "SDXL-Flash_Mini.jpg", - "desc": "Introducing the new fast model SDXL Flash (Mini), we learned that all fast XL models work fast, but the quality decreases, and we also made a fast model, but it is not as fast as LCM, Turbo, Lightning and Hyper, but the quality is higher.", - "extras": "sampler: DEIS, steps: 40, cfg_scale: 6.0", - "experimental": true - }, - "NVLabs Sana 1.5 1.6B 1k Sprint": { - "path": "Efficient-Large-Model/Sana_Sprint_1.6B_1024px_diffusers", - "desc": "SANA-Sprint is an ultra-efficient diffusion model for text-to-image (T2I) generation, reducing inference steps from 20 to 1-4 while achieving state-of-the-art performance.", - "preview": "Efficient-Large-Model--Sana15_Sprint_1600M_1024px_diffusers.jpg", - "size": 9.03, - "date": "2025 March" - }, - "Segmind SSD-1B": { - "path": "huggingface/segmind/SSD-1B", - "preview": "segmind--SSD-1B.jpg", - "desc": "The Segmind Stable Diffusion Model (SSD-1B) offers a compact, efficient, and distilled version of the SDXL model. At 50% smaller and 60% faster than Stable Diffusion XL (SDXL), it provides quick and seamless performance without sacrificing image quality.", - "variant": "fp16", - "extras": "sampler: Default, cfg_scale: 9.0", - "size": 12.48, - "date": "2023 October" - }, - "Segmind Tiny": { - "path": "segmind/tiny-sd", - "preview": "segmind--tiny-sd.jpg", - "desc": "Segmind's Tiny-SD offers a compact, efficient, and distilled version of Realistic Vision 4.0 and is up to 80% faster than SD1.5", - "extras": "width: 512, height: 512, sampler: Default, cfg_scale: 9.0", - "size": 0.99, - "date": "2023 July" - }, - "Tencent HunyuanImage 2.1 Distilled": { - "path": "hunyuanvideo-community/HunyuanImage-2.1-Distilled-Diffusers", - "desc": "HunyuanImage-2.1, a highly efficient text-to-image model that is capable of generating 2K (2048 × 2048) resolution images.", - "preview": "hunyuanvideo-community--HunyuanImage-2.1-Distilled-Diffusers.jpg", - "size": 49.53, - "date": "2025 September" - }, "Bria Fibo-Lite": { "path": "briaai/Fibo-lite", "preview": "briaai--Fibo-lite.jpg", @@ -171,22 +135,6 @@ "size": 22.47, "date": "2025 November" }, - "Tencent HunyuanDiT 1.2 Distilled": { - "path": "Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers-Distilled", - "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", - "preview": "Tencent-Hunyuan--HunyuanDiT-v1.2-Diffusers-Distilled.jpg", - "extras": "sampler: Default, cfg_scale: 2.0", - "size": 13.43, - "date": "2024 July" - }, - "Tencent HunyuanDiT 1.1 Distilled": { - "path": "Tencent-Hunyuan/HunyuanDiT-v1.1-Diffusers-Distilled", - "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", - "preview": "Tencent-Hunyuan--HunyuanDiT-v1.1-Diffusers-Distilled.jpg", - "extras": "sampler: Default, cfg_scale: 2.0", - "size": 13.49, - "date": "2024 June" - }, "Black Forest Labs FLUX.2 Klein 4B": { "path": "black-forest-labs/FLUX.2-klein-4B", "preview": "black-forest-labs--FLUX.2-klein-4B.jpg", @@ -203,6 +151,13 @@ "size": 32.32, "date": "2026 January" }, + "Meituan LongCat Image-Edit Turbo": { + "path": "meituan-longcat/LongCat-Image-Edit-Turbo", + "preview": "meituan-longcat--LongCat-Image-Edit.jpg", + "desc": "LongCat-Image-Edit-Turbo, the distilled version of LongCat-Image-Edit. It achieves high-quality image editing with only 8 NFEs (Number of Function Evaluations) , offering extremely low inference latency.", + "size": 27.28, + "date": "2026 February" + }, "Black Forest Labs FLUX.2 Klein 9B KV": { "path": "black-forest-labs/FLUX.2-klein-9b-kv", "preview": "black-forest-labs--FLUX.2-klein-9b-kv.jpg", @@ -211,6 +166,51 @@ "size": 32.32, "date": "2026 March" }, + "Baidu ERNIE-Image-Turbo": { + "path": "baidu/ERNIE-Image-Turbo", + "preview": "baidu--ERNIE-Image-Turbo.jpg", + "desc": "ERNIE-Image-Turbo is a distilled ERNIE-Image variant optimized for fast generation with fewer denoising steps.", + "extras": "sampler: Default, cfg_scale: 1.0, steps: 8", + "size": 22.29, + "date": "2026 April" + }, + "Microsoft Lens Turbo": { + "path": "Jinstudio/Lens-Turbo", + "preview": "microsoft--Lens-Turbo.jpg", + "desc": "Microsoft Lens-Turbo is the distilled Lens variant optimized for faster text-to-image generation with fewer steps.", + "size": 28.43, + "date": "2026 May" + }, + "HiDream-O1 Image Dev": { + "path": "HiDream-ai/HiDream-O1-Image-Dev", + "preview": "HiDream-ai--HiDream-O1-Image-Dev.jpg", + "desc": "HiDream-O1-Image-Dev is the distilled 8B HiDream-O1 variant tuned for 28-step fast generation using flash flow scheduling.", + "extras": "sampler: Flash, steps: 28, cfg_scale: 0.0", + "size": 35.2, + "date": "2026 May" + }, + "Krea 2 Turbo": { + "path": "CalamitousFelicitousness/Krea-2-Turbo-Diffusers", + "preview": "CalamitousFelicitousness--Krea-2-Turbo-Diffusers.jpg", + "desc": "Krea 2 (K2) Turbo is the 8-step distilled inference model of the Krea 2 family, trained from scratch by Krea. A 12.9B-parameter single-stream flow-matching DiT that uses a Qwen3-VL-4B vision-language model as its text encoder and the Qwen-Image VAE. Runs without classifier-free guidance; LoRAs trained on Krea 2 Base apply directly.", + "extras": "sampler: Default, cfg_scale: 1.0, steps: 8", + "size": 33.5, + "date": "2026 June" + }, + "Boogu Image 0.1 Turbo": { + "path": "Boogu/Boogu-Image-0.1-Turbo", + "preview": "Boogu--Boogu-Image-0.1-Turbo.jpg", + "desc": "Boogu Image 0.1 Turbo is the distilled fast inference variant of Boogu Image with the same Qwen3-VL instruction encoder and Boogu transformer architecture.", + "size": 35.81, + "date": "2026 June" + }, + "Boogu Image 0.1 Edit Turbo": { + "path": "Boogu/Boogu-Image-0.1-Edit-Turbo", + "preview": "Boogu--Boogu-Image-0.1-Edit-Turbo.jpg", + "desc": "Boogu Image 0.1 Edit Turbo is the distilled editing variant of Boogu Image with motion-aware instruction encoding and fast flow-match inference.", + "size": 35.81, + "date": "2026 June" + }, "Anima 1.0 Turbo": { "path": "CalamitousFelicitousness/Anima-1.0-Turbo-Diffusers", "preview": "CalamitousFelicitousness--Anima-1.0-Turbo-Diffusers.jpg", @@ -219,13 +219,6 @@ "date": "2026 July", "size": 4.99 }, - "Meituan LongCat Image-Edit Turbo": { - "path": "meituan-longcat/LongCat-Image-Edit-Turbo", - "preview": "meituan-longcat--LongCat-Image-Edit.jpg", - "desc": "LongCat-Image-Edit-Turbo, the distilled version of LongCat-Image-Edit. It achieves high-quality image editing with only 8 NFEs (Number of Function Evaluations) , offering extremely low inference latency.", - "size": 27.28, - "date": "2026 February" - }, "Microsoft Mage-Flow Turbo": { "path": "vladmandic/Mage-Flow-4B-Turbo", "preview": "vladmandic--Mage-Flow-Turbo-4B.jpg", @@ -257,5 +250,19 @@ "extras": "sampler: Default", "size": 17.69, "date": "2026 July" + }, + "inclusionAI LLaDA-Image Turbo": { + "path": "inclusionAI/LLaDA-Image-Turbo", + "desc": "LLaDA-Image-Turbo is the distilled fast-generation and editing variant of LLaDA-Image.", + "extras": "steps: 4, cfg_scale: 1.0", + "size": 37.15, + "date": "2026 September" + }, + "SDXL Flash Mini": { + "path": "SDXL-Flash_Mini.safetensors@https://huggingface.co/sd-community/sdxl-flash-mini/resolve/main/SDXL-Flash_Mini.safetensors?download=true", + "preview": "SDXL-Flash_Mini.jpg", + "desc": "Introducing the new fast model SDXL Flash (Mini), we learned that all fast XL models work fast, but the quality decreases, and we also made a fast model, but it is not as fast as LCM, Turbo, Lightning and Hyper, but the quality is higher.", + "extras": "sampler: DEIS, steps: 40, cfg_scale: 6.0", + "experimental": true } } diff --git a/data/reference-nunchaku.json b/data/reference-nunchaku.json index be4ae4a76..17d49437e 100644 --- a/data/reference-nunchaku.json +++ b/data/reference-nunchaku.json @@ -1,4 +1,27 @@ { + "SDXL Base Nunchaku SVDQuant": { + "path": "stabilityai/stable-diffusion-xl-base-1.0", + "subfolder": "nunchaku", + "preview": "stabilityai--stable-diffusion-xl-base-1.0.jpg", + "desc": "Nunchaku SVDQuant quantization of SDXL Base 1.0 UNet with INT4 and SVD rank 32", + "nunchaku": [ + "Model" + ], + "size": 32.0, + "date": "2023 July" + }, + "SDXL Turbo Nunchaku SVDQuant": { + "path": "stabilityai/sdxl-turbo", + "subfolder": "nunchaku", + "preview": "stabilityai--sdxl-turbo.jpg", + "desc": "Nunchaku SVDQuant quantization of SDXL Turbo UNet with INT4 and SVD rank 32", + "nunchaku": [ + "Model" + ], + "extras": "sampler: Default, cfg_scale: 1.0, steps: 4", + "size": 19.38, + "date": "2023 November" + }, "FLUX.1-Dev Nunchaku SVDQuant": { "path": "black-forest-labs/FLUX.1-dev", "subfolder": "nunchaku", @@ -24,30 +47,6 @@ "size": 31.41, "date": "2024 July" }, - "FLUX.1-Kontext Nunchaku SVDQuant": { - "path": "black-forest-labs/FLUX.1-Kontext-dev", - "subfolder": "nunchaku", - "preview": "black-forest-labs--FLUX.1-Kontext-dev.jpg", - "desc": "Nunchaku SVDQuant quantization of FLUX.1-Kontext-dev transformer with INT4 and SVD rank 32", - "nunchaku": [ - "Model", - "TE" - ], - "size": 31.42, - "date": "2025 May" - }, - "FLUX.1-Krea Nunchaku SVDQuant": { - "path": "black-forest-labs/FLUX.1-Krea-dev", - "subfolder": "nunchaku", - "preview": "black-forest-labs--FLUX.1-Krea-dev.jpg", - "desc": "Nunchaku SVDQuant quantization of FLUX.1-Krea-dev transformer with INT4 and SVD rank 32", - "nunchaku": [ - "Model", - "TE" - ], - "size": 31.42, - "date": "2025 July" - }, "FLUX.1-Fill Nunchaku SVDQuant": { "path": "black-forest-labs/FLUX.1-Fill-dev", "subfolder": "nunchaku", @@ -74,6 +73,17 @@ "size": 40.68, "date": "2024 November" }, + "Sana 1.6B 1k Nunchaku SVDQuant": { + "path": "Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers", + "subfolder": "nunchaku", + "preview": "Efficient-Large-Model--Sana_1600M_1024px_diffusers.jpg", + "desc": "Nunchaku SVDQuant quantization of Sana 1.6B 1024px transformer with INT4 and SVD rank 32", + "nunchaku": [ + "Model" + ], + "size": 22.22, + "date": "2024 December" + }, "Shuttle Jaguar Nunchaku SVDQuant": { "path": "shuttleai/shuttle-jaguar", "subfolder": "nunchaku", @@ -86,6 +96,30 @@ "size": 31.41, "date": "2025 January" }, + "FLUX.1-Kontext Nunchaku SVDQuant": { + "path": "black-forest-labs/FLUX.1-Kontext-dev", + "subfolder": "nunchaku", + "preview": "black-forest-labs--FLUX.1-Kontext-dev.jpg", + "desc": "Nunchaku SVDQuant quantization of FLUX.1-Kontext-dev transformer with INT4 and SVD rank 32", + "nunchaku": [ + "Model", + "TE" + ], + "size": 31.42, + "date": "2025 May" + }, + "FLUX.1-Krea Nunchaku SVDQuant": { + "path": "black-forest-labs/FLUX.1-Krea-dev", + "subfolder": "nunchaku", + "preview": "black-forest-labs--FLUX.1-Krea-dev.jpg", + "desc": "Nunchaku SVDQuant quantization of FLUX.1-Krea-dev transformer with INT4 and SVD rank 32", + "nunchaku": [ + "Model", + "TE" + ], + "size": 31.42, + "date": "2025 July" + }, "Qwen-Image Nunchaku SVDQuant": { "path": "Qwen/Qwen-Image", "subfolder": "nunchaku", @@ -167,17 +201,6 @@ "size": 53.74, "date": "2025 September" }, - "Sana 1.6B 1k Nunchaku SVDQuant": { - "path": "Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers", - "subfolder": "nunchaku", - "preview": "Efficient-Large-Model--Sana_1600M_1024px_diffusers.jpg", - "desc": "Nunchaku SVDQuant quantization of Sana 1.6B 1024px transformer with INT4 and SVD rank 32", - "nunchaku": [ - "Model" - ], - "size": 22.22, - "date": "2024 December" - }, "Z-Image-Turbo Nunchaku SVDQuant": { "path": "Tongyi-MAI/Z-Image-Turbo", "subfolder": "nunchaku", @@ -190,29 +213,6 @@ "size": 30.58, "date": "2025 November" }, - "SDXL Base Nunchaku SVDQuant": { - "path": "stabilityai/stable-diffusion-xl-base-1.0", - "subfolder": "nunchaku", - "preview": "stabilityai--stable-diffusion-xl-base-1.0.jpg", - "desc": "Nunchaku SVDQuant quantization of SDXL Base 1.0 UNet with INT4 and SVD rank 32", - "nunchaku": [ - "Model" - ], - "size": 32.0, - "date": "2023 July" - }, - "SDXL Turbo Nunchaku SVDQuant": { - "path": "stabilityai/sdxl-turbo", - "subfolder": "nunchaku", - "preview": "stabilityai--sdxl-turbo.jpg", - "desc": "Nunchaku SVDQuant quantization of SDXL Turbo UNet with INT4 and SVD rank 32", - "nunchaku": [ - "Model" - ], - "extras": "sampler: Default, cfg_scale: 1.0, steps: 4", - "size": 19.38, - "date": "2023 November" - }, "Z-Image-Turbo Nunchaku-Lite": { "path": "lite-infer/z-image-turbo-nunchaku-lite-int4_r32-bnb4-text-encoder", "preview": "Tongyi-MAI--Z-Image-Turbo.jpg", diff --git a/data/reference-quantized.json b/data/reference-quantized.json index d9ccfbc70..ee0cbbd09 100644 --- a/data/reference-quantized.json +++ b/data/reference-quantized.json @@ -27,37 +27,6 @@ "size": 12.6, "date": "2025 October" }, - "FLUX.2 Dev sdnq-svd-uint4": { - "path": "Disty0/FLUX.2-dev-SDNQ-uint4-svd-r32", - "preview": "Disty0--FLUX.2-dev-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of black-forest-labs/FLUX.2-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "size": 31.89, - "date": "2025 November" - }, - "Black Forest Labs FLUX.2 Klein 4B sdnq-uint4-dynamic": { - "path": "Disty0/FLUX.2-klein-4B-SDNQ-4bit-dynamic", - "preview": "Disty0--FLUX.2-klein-4B-SDNQ-4bit-dynamic.jpg", - "desc": "Dynamic 4-bit quantization of black-forest-labs/FLUX.2-klein-4B using SDNQ.", - "extras": "sampler: Default, cfg_scale: 1.0, steps: 4", - "size": 5.09, - "date": "2026 January" - }, - "Black Forest Labs FLUX.2 Klein 9B sdnq-uint4-dynamic-svd": { - "path": "Disty0/FLUX.2-klein-9B-SDNQ-4bit-dynamic-svd-r32", - "preview": "Disty0--FLUX.2-klein-9B-SDNQ-4bit-dynamic-svd-r32.jpg", - "desc": "Dynamic 4-bit quantization of black-forest-labs/FLUX.2-klein-9B using SDNQ with SVD rank 32.", - "extras": "sampler: Default, cfg_scale: 1.0, steps: 4", - "size": 11.73, - "date": "2026 January" - }, - "Black Forest Labs FLUX.2 Klein 9B KV sdnq-uint4-dynamic-svd": { - "path": "vladmandic/Flux.2-Klein-9B-KV-sdnq-hadamard-uint4", - "preview": "black-forest-labs--FLUX.2-klein-9b-kv.jpg", - "desc": "Dynamic 4-bit quantization of black-forest-labs/FLUX.2-klein-9B-KV using SDNQ with Hadamard.", - "extras": "sampler: Default, cfg_scale: 1.0, steps: 4", - "size": 12.26, - "date": "2026 July" - }, "Chroma1-HD sdnq-svd-uint4": { "path": "Disty0/Chroma1-HD-SDNQ-uint4-svd-r32", "preview": "Disty0--Chroma1-HD-SDNQ-uint4-svd-r32.jpg", @@ -79,48 +48,6 @@ "date": "2025 October", "size": 23.53 }, - "MiniMaxAI MiniMax-H3 sdnq-uint4": { - "path": "OzzyGT/MiniMax_H3_sdnq_dynamic_4bit", - "preview": "MiniMaxAI--MiniMax-H3.jpg", - "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", - "extras": "sampler: Default", - "size": 64.80, - "date": "2026 August" - }, - "MiniMaxAI MiniMax-H3 sdnq-uint4 Ref2VA": { - "path": "OzzyGT/MiniMax_H3_sdnq_dynamic_4bit", - "preview": "MiniMaxAI--MiniMax-H3.jpg", - "subfolder": "ref2va", - "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", - "extras": "sampler: Default", - "size": 64.80, - "date": "2026 August" - }, - "MiniMaxAI MiniMax-H3 Pruned sdnq-uint4": { - "path": "OzzyGT/MiniMax_H3_sdnq_4bit_pruned", - "preview": "OzzyGT--MiniMax_H3_sdnq_4bit_pruned.jpg", - "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", - "extras": "sampler: Default", - "size": 23.70, - "date": "2026 August" - }, - "MiniMaxAI MiniMax-H3 Pruned sdnq-uint4 Ref2VA": { - "path": "OzzyGT/MiniMax_H3_sdnq_4bit_pruned", - "preview": "OzzyGT--MiniMax_H3_sdnq_4bit_pruned.jpg", - "subfolder": "ref2va", - "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", - "extras": "sampler: Default", - "size": 23.70, - "date": "2026 August" - }, - "Z-Image-Turbo sdnq-svd-uint4": { - "path": "Disty0/Z-Image-Turbo-SDNQ-uint4-svd-r32", - "preview": "Disty0--Z-Image-Turbo-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of Tongyi-MAI/Z-Image-Turbo using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "extras": "sampler: Default, cfg_scale: 1.0, steps: 9", - "size": 6.05, - "date": "2025 November" - }, "Qwen-Image sdnq-svd-uint4": { "path": "Disty0/Qwen-Image-SDNQ-uint4-svd-r32", "preview": "Qwen--Qwen-Image.jpg", @@ -128,13 +55,6 @@ "date": "2025 October", "size": 16.09 }, - "Qwen-Image-2512 sdnq-svd-uint4": { - "path": "Disty0/Qwen-Image-2512-SDNQ-uint4-svd-r32", - "preview": "Disty0--Qwen-Image-2512-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of Qwen/Qwen-Image-2512 using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "size": 16.09, - "date": "2026 January" - }, "Qwen-Image-Edit sdnq-svd-uint4": { "path": "Disty0/Qwen-Image-Edit-SDNQ-uint4-svd-r32", "preview": "Qwen--Qwen-Image-Edit.jpg", @@ -149,20 +69,6 @@ "date": "2025 October", "size": 16.09 }, - "Qwen-Image-Edit-2511 sdnq-svd-uint4": { - "path": "Disty0/Qwen-Image-Edit-2511-SDNQ-uint4-svd-r32", - "preview": "Disty0--Qwen-Image-Edit-2511-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of Qwen/Qwen-Image-Edit-2511 using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "date": "2025 December", - "size": 16.09 - }, - "Qwen-Image-Layered sdnq-svd-uint4": { - "path": "Disty0/Qwen-Image-Layered-SDNQ-uint4-svd-r32", - "preview": "Disty0--Qwen-Image-Layered-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of Qwen/Qwen-Image-Layered using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "date": "2025 December", - "size": 16.09 - }, "nVidia ChronoEdit sdnq-svd-uint4": { "path": "Disty0/ChronoEdit-14B-SDNQ-uint4-svd-r32", "preview": "Disty0--ChronoEdit-14B-SDNQ-uint4-svd-r32.jpg", @@ -198,6 +104,58 @@ "size": 3.37, "date": "2025 October" }, + "FLUX.2 Dev sdnq-svd-uint4": { + "path": "Disty0/FLUX.2-dev-SDNQ-uint4-svd-r32", + "preview": "Disty0--FLUX.2-dev-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of black-forest-labs/FLUX.2-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "size": 31.89, + "date": "2025 November" + }, + "Z-Image-Turbo sdnq-svd-uint4": { + "path": "Disty0/Z-Image-Turbo-SDNQ-uint4-svd-r32", + "preview": "Disty0--Z-Image-Turbo-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of Tongyi-MAI/Z-Image-Turbo using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "extras": "sampler: Default, cfg_scale: 1.0, steps: 9", + "size": 6.05, + "date": "2025 November" + }, + "Qwen-Image-Edit-2511 sdnq-svd-uint4": { + "path": "Disty0/Qwen-Image-Edit-2511-SDNQ-uint4-svd-r32", + "preview": "Disty0--Qwen-Image-Edit-2511-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of Qwen/Qwen-Image-Edit-2511 using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "date": "2025 December", + "size": 16.09 + }, + "Qwen-Image-Layered sdnq-svd-uint4": { + "path": "Disty0/Qwen-Image-Layered-SDNQ-uint4-svd-r32", + "preview": "Disty0--Qwen-Image-Layered-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of Qwen/Qwen-Image-Layered using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "date": "2025 December", + "size": 16.09 + }, + "Black Forest Labs FLUX.2 Klein 4B sdnq-uint4-dynamic": { + "path": "Disty0/FLUX.2-klein-4B-SDNQ-4bit-dynamic", + "preview": "Disty0--FLUX.2-klein-4B-SDNQ-4bit-dynamic.jpg", + "desc": "Dynamic 4-bit quantization of black-forest-labs/FLUX.2-klein-4B using SDNQ.", + "extras": "sampler: Default, cfg_scale: 1.0, steps: 4", + "size": 5.09, + "date": "2026 January" + }, + "Black Forest Labs FLUX.2 Klein 9B sdnq-uint4-dynamic-svd": { + "path": "Disty0/FLUX.2-klein-9B-SDNQ-4bit-dynamic-svd-r32", + "preview": "Disty0--FLUX.2-klein-9B-SDNQ-4bit-dynamic-svd-r32.jpg", + "desc": "Dynamic 4-bit quantization of black-forest-labs/FLUX.2-klein-9B using SDNQ with SVD rank 32.", + "extras": "sampler: Default, cfg_scale: 1.0, steps: 4", + "size": 11.73, + "date": "2026 January" + }, + "Qwen-Image-2512 sdnq-svd-uint4": { + "path": "Disty0/Qwen-Image-2512-SDNQ-uint4-svd-r32", + "preview": "Disty0--Qwen-Image-2512-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of Qwen/Qwen-Image-2512 using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "size": 16.09, + "date": "2026 January" + }, "ZAI GLM-Image sdnq-dynamic-uint4": { "path": "Disty0/GLM-Image-SDNQ-4bit-dynamic", "preview": "zai-org--GLM-Image.jpg", @@ -260,6 +218,22 @@ "size": 17.3, "date": "2026 June" }, + "Krea 2 Base sdnq-hadamard-uint4": { + "path": "vladmandic/Krea-2-Base-sdnq-hadamard-uint4", + "preview": "CalamitousFelicitousness--Krea-2-Base-Diffusers.jpg", + "desc": "Krea 2 (K2) Base is the undistilled foundation model of the Krea 2 family, trained from scratch by Krea. A 12.9B-parameter single-stream flow-matching DiT that uses a Qwen3-VL-4B vision-language model as its text encoder and the Qwen-Image VAE. The base checkpoint is intended for fine-tuning and LoRA training; LoRAs trained on it apply to Krea 2 Turbo.", + "extras": "sampler: Default, cfg_scale: 4.5, steps: 52", + "size": 10.3, + "date": "2026 June" + }, + "Black Forest Labs FLUX.2 Klein 9B KV sdnq-uint4-dynamic-svd": { + "path": "vladmandic/Flux.2-Klein-9B-KV-sdnq-hadamard-uint4", + "preview": "black-forest-labs--FLUX.2-klein-9b-kv.jpg", + "desc": "Dynamic 4-bit quantization of black-forest-labs/FLUX.2-klein-9B-KV using SDNQ with Hadamard.", + "extras": "sampler: Default, cfg_scale: 1.0, steps: 4", + "size": 12.26, + "date": "2026 July" + }, "Krea 2 Turbo sdnq-hadamard-uint4": { "path": "vladmandic/Krea-2-Turbo-sdnq-hadamard-uint4", "preview": "CalamitousFelicitousness--Krea-2-Turbo-Diffusers.jpg", @@ -268,12 +242,38 @@ "size": 10.54, "date": "2026 July" }, - "Krea 2 Base sdnq-hadamard-uint4": { - "path": "vladmandic/Krea-2-Base-sdnq-hadamard-uint4", - "preview": "CalamitousFelicitousness--Krea-2-Base-Diffusers.jpg", - "desc": "Krea 2 (K2) Base is the undistilled foundation model of the Krea 2 family, trained from scratch by Krea. A 12.9B-parameter single-stream flow-matching DiT that uses a Qwen3-VL-4B vision-language model as its text encoder and the Qwen-Image VAE. The base checkpoint is intended for fine-tuning and LoRA training; LoRAs trained on it apply to Krea 2 Turbo.", - "extras": "sampler: Default, cfg_scale: 4.5, steps: 52", - "size": 10.3, - "date": "2026 June" + "MiniMaxAI MiniMax-H3 sdnq-uint4": { + "path": "OzzyGT/MiniMax_H3_sdnq_dynamic_4bit", + "preview": "MiniMaxAI--MiniMax-H3.jpg", + "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", + "extras": "sampler: Default", + "size": 64.80, + "date": "2026 August" + }, + "MiniMaxAI MiniMax-H3 sdnq-uint4 Ref2VA": { + "path": "OzzyGT/MiniMax_H3_sdnq_dynamic_4bit", + "preview": "MiniMaxAI--MiniMax-H3.jpg", + "subfolder": "ref2va", + "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", + "extras": "sampler: Default", + "size": 64.80, + "date": "2026 August" + }, + "MiniMaxAI MiniMax-H3 Pruned sdnq-uint4": { + "path": "OzzyGT/MiniMax_H3_sdnq_4bit_pruned", + "preview": "OzzyGT--MiniMax_H3_sdnq_4bit_pruned.jpg", + "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", + "extras": "sampler: Default", + "size": 23.70, + "date": "2026 August" + }, + "MiniMaxAI MiniMax-H3 Pruned sdnq-uint4 Ref2VA": { + "path": "OzzyGT/MiniMax_H3_sdnq_4bit_pruned", + "preview": "OzzyGT--MiniMax_H3_sdnq_4bit_pruned.jpg", + "subfolder": "ref2va", + "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", + "extras": "sampler: Default", + "size": 23.70, + "date": "2026 August" } } From 7b6a967203e7b7421a93bfe6369e518020ccebd0 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 11:58:32 +0200 Subject: [PATCH 133/270] explicit init api limiter Signed-off-by: Vladimir Mandic --- modules/api/api.py | 5 +++++ modules/api/validate.py | 8 ++++++++ modules/processing_prompt.py | 5 ++++- modules/sd_hijack_te.py | 14 ++++++++++---- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/modules/api/api.py b/modules/api/api.py index 5b018d1e3..2ac4345ce 100644 --- a/modules/api/api.py +++ b/modules/api/api.py @@ -178,6 +178,11 @@ class Api: from modules.api import upload upload.register_api() + # rate limiter + from modules.api.validate import init_limiter + init_limiter() + + def add_api_route(self, path: str, fn, auth: bool = True, **kwargs): if auth and self.credentials: deps = list(kwargs.get('dependencies', [])) diff --git a/modules/api/validate.py b/modules/api/validate.py index 7de27254a..3f753cea8 100644 --- a/modules/api/validate.py +++ b/modules/api/validate.py @@ -99,6 +99,13 @@ def get_api_stats(): limiter.stats() +def init_limiter(): + global limiter # pylint: disable=global-statement + from modules.shared import opts, cmd_opts + if opts.server_rate_limit != limiter.request_limit: + limiter = Limiter(opts.server_rate_limit, cmd_opts.subpath, cmd_opts.profile) + + def validate_request(client, endpoint): global limiter # pylint: disable=global-statement from modules.shared import opts, cmd_opts @@ -114,6 +121,7 @@ def validate_request(client, endpoint): limiter.summary[key] += 1 return limiter.check_request(client, api) + def validate_log(client, endpoint): api = re.match(r"^[^?#&=]+", endpoint).group(0) if (limiter.subpath is not None) and (len(limiter.subpath) > 0) and api.startswith(limiter.subpath): # strip subpath from api for logging diff --git a/modules/processing_prompt.py b/modules/processing_prompt.py index 6df19a4be..4151b213c 100644 --- a/modules/processing_prompt.py +++ b/modules/processing_prompt.py @@ -119,7 +119,10 @@ def set_prompt(p: StableDiffusionProcessing, prompt_attention = 'fixed' if not hasattr(shared.sd_model, 'orig_encode_prompt'): - log.debug(f'Encode: prompt="{prompts}" negative="{negative_prompts}" embedder={prompt_parser_diffusers.embedder is not None} attention={prompt_attention}') + if isinstance(prompts, list): + log.debug(f'Encode: prompt={prompts} negative={negative_prompts} embedder={prompt_parser_diffusers.embedder is not None} attention={prompt_attention}') + else: + log.debug(f'Encode: prompt="{prompts}" negative="{negative_prompts}" embedder={prompt_parser_diffusers.embedder is not None} attention={prompt_attention}') prompts, negative_prompts, prompts_2, negative_prompts_2 = fix_prompt_batch(p, prompts, negative_prompts, prompts_2, negative_prompts_2) prompts, negative_prompts, prompts_2, negative_prompts_2 = fix_prompt_model(cls, prompts, negative_prompts, prompts_2, negative_prompts_2) diff --git a/modules/sd_hijack_te.py b/modules/sd_hijack_te.py index ccb6c7eec..2c43f516c 100644 --- a/modules/sd_hijack_te.py +++ b/modules/sd_hijack_te.py @@ -31,7 +31,10 @@ class PromptCache: else: cached = None if cached: - log.debug(f'Encode: prompt="{prompt}" cache={len(self.cache)} hit') + if isinstance(prompt, list): + log.debug(f'Encode: prompt={prompt} cache={len(self.cache)} hit') + else: + log.debug(f'Encode: prompt="{prompt}" cache={len(self.cache)} hit') return cached def set(self, prompt, encoded, negative_prompt=None, cfg_enabled=None): @@ -66,7 +69,7 @@ def hijack_encode_prompt(*args, **kwargs): res = prompt if hasattr(shared.sd_model, 'before_prompt_encode'): - log.debug(f'Encode: prompt="{prompt}" op=before') + log.debug('Encode: op=before') res = shared.sd_model.before_prompt_encode(prompt) if patch_prompt: args_copy[0] = res @@ -78,7 +81,10 @@ def hijack_encode_prompt(*args, **kwargs): if cached is not None: res = cached else: - log.debug(f'Encode: prompt="{prompt}" hijack=True') + if isinstance(prompt, list): + log.debug(f'Encode: prompt={prompt} hijack=True') + else: + log.debug(f'Encode: prompt="{prompt}" hijack=True') with attention_context.role('te'): if hasattr(shared.sd_model, 'orig_encode_prompt'): res = shared.sd_model.orig_encode_prompt(*args_copy, **kwargs) @@ -87,7 +93,7 @@ def hijack_encode_prompt(*args, **kwargs): prompt_cache.set(prompt, res, negative_prompt, cfg_enabled) if hasattr(shared.sd_model, 'after_prompt_encode'): - log.debug(f'Encode: prompt="{prompt}" op=after') + log.debug('Encode: op=after') res = shared.sd_model.after_prompt_encode(res) except Exception as e: From 6333be7b83d97fa609df61b650032c49a71d5867 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 12:42:01 +0200 Subject: [PATCH 134/270] cleanups Signed-off-by: Vladimir Mandic --- cli/sdnq-attention-benchmark.py | 4 ++-- data/reference-cloud.json | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/cli/sdnq-attention-benchmark.py b/cli/sdnq-attention-benchmark.py index 7e3ddf354..fbcf9fb36 100755 --- a/cli/sdnq-attention-benchmark.py +++ b/cli/sdnq-attention-benchmark.py @@ -465,7 +465,7 @@ def load_sdnext(): raise detail = f"exited with code {e.code}" if isinstance(e, SystemExit) else f"{type(e).__name__}: {e}" console.print(f"[red]sdnext failed to start: {detail}[/red]") - text = startup_log["text"].strip() + text = startup_log["text"].strip() # pylint: disable=used-before-assignment if text: console.print(Panel(escape(text[-4000:]), title="sdnext startup log", box=ROUNDED_BOX)) console.print("run from the sdnext root with the venv active; triton is required") @@ -2229,7 +2229,7 @@ def resolved_group_label(layer, in_features): return "row" -def bench_group_sizes(shape_label, out_features, in_features, plain_results, selected_dtypes, iters, warmup, config_timeout=300): +def bench_group_sizes(shape_label, out_features, in_features, plain_results, selected_dtypes, iters, warmup, config_timeout=300): # pylint: disable=unused-argument # the Group size setting: 0 = auto, -1 = row-wise, explicit values snap to a divisor of # in_features; grouping forces a per-forward re-quantize when quantized matmul is on, so # the mm cells price that cost alongside the accuracy gain diff --git a/data/reference-cloud.json b/data/reference-cloud.json index 10f0e5930..59327c848 100644 --- a/data/reference-cloud.json +++ b/data/reference-cloud.json @@ -2,21 +2,25 @@ "Nano Banana lite": { "path": "gemini-3.1-flash-lite-image", "desc": "Nano Banana Lite is designed as the efficiency specialist of the image generation family, offering ultra-low latency and cost-effective image generation and editing. By targeting a sub-2 second latency and significantly reduced TPU compute costs, this model enables high-volume interactive developer use cases and real-time consumer applications. (Knowledge cutoff January 2025)", - "preview": "gemini-3.1-flash-lite-image.jpg" + "preview": "gemini-3.1-flash-lite-image.jpg", + "date": "2026 July" }, "Nano Banana 2": { "path": "gemini-3.1-flash-image", "desc": "Nano Banana 2 provides high-quality image generation and conversational editing at a mainstream price point and low latency. It serves as the high-efficiency counterpart to Gemini 3 Pro Image, optimized for speed and high-volume developer use cases.(Knowledge cutoff January 2025)", - "preview": "gemini-3.1-flash-image.jpg" + "preview": "gemini-3.1-flash-image.jpg", + "date": "2026 February" }, "Nano Banana Pro": { "path": "gemini-3-pro-image", "desc": "Nano Banana Pro is a sophisticated reasoning-driven engine for professional-grade image editing and generation, offering studio-quality precision and advanced creative control. Nano Banana Pro is best for complex graphic design, high-fidelity product mockups, and factual data visualizations that require accurate text rendering and real-world grounding via Google Search. (Knowledge cutoff January 2025)", - "preview": "gemini-3-pro-image.jpg" + "preview": "gemini-3-pro-image.jpg", + "date": "2025 November" }, "Nano Banana": { "path": "gemini-2.5-flash-image", "desc": "Our best engine for high-velocity visual creation, offering state-of-the-art speed and efficiency. Gemini 2.5 Flash Image, also known as Nano Banana, is best for high-volume generation, conversational image editing, and low-latency creative workflows that require native multimodal understanding. (Knowledge cutoff June 2025)", - "preview": "gemini-2.5-flash-image.jpg" + "preview": "gemini-2.5-flash-image.jpg", + "date": "2025 August" } } From cb0aea8eb5deadce32c95d05cf53f91b7aae2400 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 13:01:36 +0200 Subject: [PATCH 135/270] llada t2i Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 4 + modules/modeldata.py | 2 + modules/sd_detect.py | 2 + modules/sd_models.py | 5 + modules/vae/sd_vae_taesd.py | 2 +- pipelines/llada/__init__.py | 8 + .../llada/configuration_llada2uni_moe.py | 133 ++ pipelines/llada/fused_moe_ops.py | 375 ++++ pipelines/llada/modeling_llada2uni_moe.py | 1284 +++++++++++ pipelines/llada/pipeline_llada_image.py | 687 ++++++ pipelines/llada/pipeline_output.py | 34 + pipelines/llada/transformer_llada_image.py | 1874 +++++++++++++++++ pipelines/model_llada.py | 80 + 13 files changed, 4489 insertions(+), 1 deletion(-) create mode 100644 pipelines/llada/__init__.py create mode 100644 pipelines/llada/configuration_llada2uni_moe.py create mode 100644 pipelines/llada/fused_moe_ops.py create mode 100644 pipelines/llada/modeling_llada2uni_moe.py create mode 100644 pipelines/llada/pipeline_llada_image.py create mode 100644 pipelines/llada/pipeline_output.py create mode 100644 pipelines/llada/transformer_llada_image.py create mode 100644 pipelines/model_llada.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 73c7025c5..b3ae5858a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ All-about-optimizations: - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) expanded version of Anima 2B + - [inclusionAI LLaDA-Image](https://huggingface.co/inclusionAI/LLaDA-Image) in *base* and *turbo* variants + LLaDA-Image is a 6.5B transformer with massive 16.3B fully-custom MoE text-encoder and optional 1.3B SigVQ conditioning model + with support for text-to-image, vq-conditioned text-to-image and image-editing workflows + *note* model is extremely quantization sensitive so minimum allowed quant type is `uint8` - **LoRA** - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions *note*: lora now has its own settings section in *settings -> lora* diff --git a/modules/modeldata.py b/modules/modeldata.py index ee8122b15..4e7568436 100644 --- a/modules/modeldata.py +++ b/modules/modeldata.py @@ -119,6 +119,8 @@ def get_model_type(pipe): model_type = 'longcat' elif 'GlmImage' in name: model_type = 'glmimage' + elif 'LLaDAImage' in name: + model_type = 'lladaimage' elif 'Step1XEdit' in name: model_type = 'step1x_edit' elif 'JoyImageEdit' in name: diff --git a/modules/sd_detect.py b/modules/sd_detect.py index bf3327be1..a133c8e21 100644 --- a/modules/sd_detect.py +++ b/modules/sd_detect.py @@ -167,6 +167,8 @@ def guess_by_name(fn, current_guess): new_guess = 'OvisImage' elif 'glm-image' in fn.lower(): new_guess = 'GLMImage' + elif 'llada' in fn.lower(): + new_guess = 'LLaDAImage' elif 'sdxs-1b' in fn.lower(): new_guess = 'SDXS' elif 'step1x-edit' in fn.lower(): diff --git a/modules/sd_models.py b/modules/sd_models.py index 37ad35067..bbaf5d008 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -55,6 +55,7 @@ pipe_switch_task_exclude = [ 'Kandinsky5I2IPipeline', 'GoogleNanoBananaPipeline', 'Step1XEditPipeline', + 'LLaDAImagePipeline', 'BooguImagePipeline', 'BooguImageTurboPipeline', ] @@ -610,6 +611,10 @@ def load_diffuser_force(detected_model_type: str, checkpoint_info: CheckpointInf from pipelines.model_glm import load_glm_image sd_model = load_glm_image(checkpoint_info, diffusers_load_config) allow_post_quant = False + elif model_type in ['LLaDAImage']: + from pipelines.model_llada import load_llada_image + sd_model = load_llada_image(checkpoint_info, diffusers_load_config) + allow_post_quant = False elif model_type in ['SDXS']: from pipelines.model_sdxs import load_sdxs sd_model = load_sdxs(checkpoint_info, diffusers_load_config) diff --git a/modules/vae/sd_vae_taesd.py b/modules/vae/sd_vae_taesd.py index a898c3410..2cffe6041 100644 --- a/modules/vae/sd_vae_taesd.py +++ b/modules/vae/sd_vae_taesd.py @@ -73,7 +73,7 @@ def get_model(model_cls, variant=None): elif model_cls in {'f1', 'h1', 'zimage', 'lumina2', 'chroma', 'longcat', 'omnigen2', 'flite', 'ovis', 'kandinsky5', 'glmimage', 'cogview3', 'cogview4', 'ultraflux'}: model_cls = 'f1' variant = 'TAE FLUX.1' - elif model_cls in {'f2', 'ernieimage', 'lens', 'ideogram4'}: + elif model_cls in {'f2', 'ernieimage', 'lens', 'ideogram4', 'lladaimage'}: model_cls = 'f2' variant = 'TAE FLUX.2' elif model_cls in {'sd3'}: diff --git a/pipelines/llada/__init__.py b/pipelines/llada/__init__.py new file mode 100644 index 000000000..af8b8951d --- /dev/null +++ b/pipelines/llada/__init__.py @@ -0,0 +1,8 @@ +from .pipeline_llada_image import LLaDAImagePipeline +from .pipeline_output import LLaDAImagePipelineOutput +from .transformer_llada_image import LLaDAImageQueryFormerModel +from .transformer_llada_image import LLaDAImageSigVQModel +from .transformer_llada_image import LLaDAImageTextProjectionModel +from .transformer_llada_image import LLaDAImageTransformer2DModel + +__all__ = ['LLaDAImagePipeline', 'LLaDAImagePipelineOutput', 'LLaDAImageQueryFormerModel', 'LLaDAImageSigVQModel', 'LLaDAImageTextProjectionModel', 'LLaDAImageTransformer2DModel'] diff --git a/pipelines/llada/configuration_llada2uni_moe.py b/pipelines/llada/configuration_llada2uni_moe.py new file mode 100644 index 000000000..fdd7a8845 --- /dev/null +++ b/pipelines/llada/configuration_llada2uni_moe.py @@ -0,0 +1,133 @@ +# Copyright 2025 Antgroup and The HuggingFace Inc. team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""LLaDA2 MoE model configuration.""" + +from transformers.configuration_utils import PretrainedConfig + + +class LLaDA2MoeConfig(PretrainedConfig): + r""" + Configuration class for the LLaDA2 MoE model. + + ```python + >>> from configuration_llada2uni_moe import LLaDA2MoeConfig + >>> config = LLaDA2MoeConfig() + ``` + """ + + # Keep the original value because it selects the fused-expert implementation. + model_type = "llada2_moe_veomni" + + def __init__( + self, + vocab_size=30592, + hidden_size=1024, + intermediate_size=None, + num_hidden_layers=24, + num_attention_heads=16, + num_key_value_heads=0, + head_dim=None, + hidden_act="silu", + use_qkv_bias=False, + use_qk_norm=True, + use_bias=True, + rms_norm_eps=1e-05, + tie_word_embeddings=False, + attention_dropout=0.1, + initializer_range=0.02, + max_position_embeddings=16384, + rope_theta=10000.0, + rope_parameters=None, + rope_scaling=None, + partial_rotary_factor=0.5, + use_cache=True, + sliding_window=None, + pad_token_id=126081, + # Image + image_token_offset=157184, + # MoE + num_experts=16, + num_shared_experts=0, + num_experts_per_tok=2, + n_group=8, + topk_group=4, + routed_scaling_factor=2.5, + moe_router_enable_expert_bias=True, + norm_topk_prob=True, + router_dtype="fp32", + score_function="sigmoid", + moe_intermediate_size=None, + first_k_dense_replace=0, + output_router_logits=False, + **kwargs, + ): + self.vocab_size = vocab_size + self.hidden_size = hidden_size + self.intermediate_size = intermediate_size + self.num_hidden_layers = num_hidden_layers + self.num_attention_heads = num_attention_heads + self.num_key_value_heads = num_key_value_heads + self.head_dim = head_dim or hidden_size // num_attention_heads + self.hidden_act = hidden_act + self.use_qkv_bias = use_qkv_bias + self.use_qk_norm = use_qk_norm + self.use_bias = use_bias + self.rms_norm_eps = rms_norm_eps + self.attention_dropout = attention_dropout + self.initializer_range = initializer_range + self.max_position_embeddings = max_position_embeddings + self.rope_theta = rope_theta + self.rope_scaling = rope_scaling + self.partial_rotary_factor = partial_rotary_factor + self.use_cache = use_cache + self.sliding_window = sliding_window + + # Image token offset: VQ codebook indices are shifted by this amount in the vocabulary + self.image_token_offset = image_token_offset + + # RoPE parameters dict — used by LLaDA2MoeRotaryEmbedding + if rope_parameters is None: + rope_parameters = { + "rope_type": "default", + "rope_theta": rope_theta, + "partial_rotary_factor": partial_rotary_factor, + } + self.rope_parameters = rope_parameters + + # MoE + self.num_experts = num_experts + self.num_shared_experts = num_shared_experts + self.num_experts_per_tok = num_experts_per_tok + self.n_group = n_group + self.topk_group = topk_group + self.routed_scaling_factor = routed_scaling_factor + self.moe_router_enable_expert_bias = moe_router_enable_expert_bias + self.norm_topk_prob = norm_topk_prob + self.router_dtype = router_dtype + self.score_function = score_function + self.moe_intermediate_size = moe_intermediate_size + self.first_k_dense_replace = first_k_dense_replace + self.output_router_logits = output_router_logits + + # FP8 quantization flag — set to True to use FP8Linear for experts + self.use_fp8_experts = kwargs.pop("use_fp8_experts", False) + + super().__init__( + pad_token_id=pad_token_id, + tie_word_embeddings=tie_word_embeddings, + **kwargs, + ) + + +__all__ = ["LLaDA2MoeConfig"] diff --git a/pipelines/llada/fused_moe_ops.py b/pipelines/llada/fused_moe_ops.py new file mode 100644 index 000000000..30296fcbe --- /dev/null +++ b/pipelines/llada/fused_moe_ops.py @@ -0,0 +1,375 @@ +# Copyright 2025 Bytedance Ltd. and/or its affiliates +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Standalone, inference-only VeOmni v0.1.0 fused-MoE compatibility shim. + +This module preserves the ``veomni.ops.fused_moe_forward`` call signature used +by VeOmni v0.1.0 while removing VeOmni's training, Expert Parallelism (EP), NPU, +and Seed-kernel dependencies. It is intended for single-device inference only. + +The CUDA fast path uses a small Triton grouped-linear kernel. If Triton is not +available, the tensors are not on CUDA, or ``LLADA_MOE_BACKEND=eager`` is set, +the implementation falls back to ordinary PyTorch operations. + +Replace the original model-code import with, for example, +``from .fused_moe_v010 import fused_moe_forward``. + +Derived from ByteDance-Seed/VeOmni v0.1.0.post1: +https://github.com/ByteDance-Seed/VeOmni/tree/v0.1.0.post1 +""" + +from __future__ import annotations + +import os + +import torch +import torch.nn.functional as F + +try: + import triton + import triton.language as tl +except ImportError: # The eager fallback does not require Triton. + triton = None + tl = None + + +_SUPPORTED_TRITON_DTYPES = (torch.float16, torch.bfloat16) + + +if triton is not None: + + @triton.jit + def _grouped_linear_kernel( + input_ptr, + weight_ptr, + output_ptr, + expert_cumsum_ptr, + N: tl.constexpr, + K: tl.constexpr, + BLOCK_M: tl.constexpr, + BLOCK_N: tl.constexpr, + BLOCK_K: tl.constexpr, + ): + """Compute per-expert ``input @ weight.T`` for contiguous tensors.""" + block_m = tl.program_id(axis=0) + block_n = tl.program_id(axis=1) + expert = tl.program_id(axis=2) + + expert_start = tl.load(expert_cumsum_ptr + expert - 1, mask=expert > 0, other=0) + expert_end = tl.load(expert_cumsum_ptr + expert) + expert_tokens = expert_end - expert_start + + if block_m * BLOCK_M >= expert_tokens: + return + + row_offsets = block_m * BLOCK_M + tl.arange(0, BLOCK_M) + col_offsets = block_n * BLOCK_N + tl.arange(0, BLOCK_N) + k_offsets = tl.arange(0, BLOCK_K) + + input_ptrs = ( + input_ptr + + (expert_start + row_offsets[:, None]) * K + + k_offsets[None, :] + ) + weight_ptrs = ( + weight_ptr + + expert * N * K + + col_offsets[None, :] * K + + k_offsets[:, None] + ) + + accumulator = tl.zeros((BLOCK_M, BLOCK_N), dtype=tl.float32) + for k_block in range(0, tl.cdiv(K, BLOCK_K)): + remaining_k = K - k_block * BLOCK_K + inputs = tl.load( + input_ptrs, + mask=(row_offsets[:, None] < expert_tokens) & (k_offsets[None, :] < remaining_k), + other=0.0, + ) + weights = tl.load( + weight_ptrs, + mask=(col_offsets[None, :] < N) & (k_offsets[:, None] < remaining_k), + other=0.0, + ) + accumulator += tl.dot(inputs, weights) + input_ptrs += BLOCK_K + weight_ptrs += BLOCK_K + + output_ptrs = ( + output_ptr + + (expert_start + row_offsets[:, None]) * N + + col_offsets[None, :] + ) + tl.store( + output_ptrs, + accumulator, + mask=(row_offsets[:, None] < expert_tokens) & (col_offsets[None, :] < N), + ) + + +def _validate_inputs( + num_experts: int, + routing_weights: torch.Tensor, + selected_experts: torch.Tensor, + hidden_states: torch.Tensor, + fc1_1_weight: torch.Tensor, + fc1_2_weight: torch.Tensor, + fc2_weight: torch.Tensor, +) -> None: + if num_experts <= 0: + raise ValueError(f"num_experts must be positive, got {num_experts}") + if torch.is_grad_enabled(): + raise RuntimeError( + "This standalone fused_moe_forward is inference-only. Call it under " + "torch.no_grad() or torch.inference_mode()." + ) + if hidden_states.ndim != 2: + raise ValueError(f"hidden_states must have shape [tokens, hidden], got {tuple(hidden_states.shape)}") + if routing_weights.ndim != 2 or selected_experts.shape != routing_weights.shape: + raise ValueError( + "routing_weights and selected_experts must have the same [tokens, top_k] shape, got " + f"{tuple(routing_weights.shape)} and {tuple(selected_experts.shape)}" + ) + if routing_weights.shape[1] == 0: + raise ValueError("top_k must be positive") + if routing_weights.shape[0] != hidden_states.shape[0]: + raise ValueError("routing_weights and hidden_states must contain the same number of tokens") + if selected_experts.dtype not in (torch.int32, torch.int64): + raise TypeError(f"selected_experts must be int32 or int64, got {selected_experts.dtype}") + if fc1_1_weight.ndim != 3 or fc1_2_weight.ndim != 3 or fc2_weight.ndim != 3: + raise ValueError("expert weights must be rank-3 tensors") + if fc1_1_weight.shape != fc1_2_weight.shape: + raise ValueError("fc1_1_weight and fc1_2_weight must have identical shapes") + + experts, intermediate_size, hidden_size = fc1_1_weight.shape + expected_fc2_shape = (experts, hidden_size, intermediate_size) + if experts != num_experts: + raise ValueError(f"num_experts={num_experts}, but the weights contain {experts} experts") + if hidden_states.shape[1] != hidden_size: + raise ValueError(f"hidden size is {hidden_states.shape[1]}, but the weights expect {hidden_size}") + if tuple(fc2_weight.shape) != expected_fc2_shape: + raise ValueError(f"fc2_weight must have shape {expected_fc2_shape}, got {tuple(fc2_weight.shape)}") + if selected_experts.numel(): + # These scalar checks synchronize CUDA once, before launching harder-to-debug kernels. + min_expert = int(selected_experts.min().item()) + max_expert = int(selected_experts.max().item()) + if min_expert < 0 or max_expert >= num_experts: + raise ValueError(f"selected expert IDs must be in [0, {num_experts}), got [{min_expert}, {max_expert}]") + + devices = { + hidden_states.device, + routing_weights.device, + selected_experts.device, + fc1_1_weight.device, + fc1_2_weight.device, + fc2_weight.device, + } + if len(devices) != 1: + raise ValueError(f"all inputs and weights must be on one device, got {sorted(map(str, devices))}") + + +def _route_tokens( + num_experts: int, + routing_weights: torch.Tensor, + selected_experts: torch.Tensor, + hidden_states: torch.Tensor, +) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]: + """Sort routed token copies by expert and return the inverse permutation.""" + top_k = selected_experts.shape[1] + flat_experts = selected_experts.reshape(-1).to(torch.int64) + order = torch.argsort(flat_experts, stable=True) + sorted_hidden_states = hidden_states[torch.div(order, top_k, rounding_mode="floor")].contiguous() + sorted_routing_weights = routing_weights.reshape(-1)[order].contiguous() + tokens_per_expert = torch.bincount(flat_experts, minlength=num_experts) + expert_cumsum = torch.cumsum(tokens_per_expert, dim=0, dtype=torch.int32).contiguous() + return sorted_hidden_states, sorted_routing_weights, expert_cumsum, order + + +def _unroute_tokens( + sorted_outputs: torch.Tensor, + order: torch.Tensor, + num_tokens: int, + top_k: int, +) -> torch.Tensor: + restored = torch.empty_like(sorted_outputs) + restored[order] = sorted_outputs + # VeOmni's v0.1.0 gather kernel accumulates the top-k outputs in FP32. + return restored.view(num_tokens, top_k, -1).sum(dim=1, dtype=torch.float32).to(sorted_outputs.dtype) + + +def _grouped_linear_triton( + inputs: torch.Tensor, + weights: torch.Tensor, + expert_cumsum: torch.Tensor, +) -> torch.Tensor: + if triton is None: # pragma: no cover - guarded by the caller + raise RuntimeError("Triton is not available") + if not inputs.is_contiguous() or not weights.is_contiguous(): + raise ValueError("the Triton path requires contiguous inputs and expert weights") + + num_experts, output_size, input_size = weights.shape + if inputs.shape[1] != input_size: + raise ValueError(f"input width is {inputs.shape[1]}, but the weights expect {input_size}") + + output = torch.empty((inputs.shape[0], output_size), dtype=inputs.dtype, device=inputs.device) + block_m, block_n, block_k = 128, 128, 32 + grid = ( + triton.cdiv(inputs.shape[0], block_m), + triton.cdiv(output_size, block_n), + num_experts, + ) + with torch.cuda.device(inputs.device): + _grouped_linear_kernel[grid]( + inputs, + weights, + output, + expert_cumsum, + N=output_size, + K=input_size, + BLOCK_M=block_m, + BLOCK_N=block_n, + BLOCK_K=block_k, + num_warps=8, + num_stages=3, + ) + return output + + +def _triton_moe_forward( + num_experts: int, + routing_weights: torch.Tensor, + selected_experts: torch.Tensor, + hidden_states: torch.Tensor, + fc1_1_weight: torch.Tensor, + fc1_2_weight: torch.Tensor, + fc2_weight: torch.Tensor, +) -> torch.Tensor: + sorted_hidden, sorted_routing, expert_cumsum, order = _route_tokens( + num_experts, routing_weights, selected_experts, hidden_states + ) + gate = _grouped_linear_triton(sorted_hidden, fc1_1_weight, expert_cumsum) + up = _grouped_linear_triton(sorted_hidden, fc1_2_weight, expert_cumsum) + intermediate = F.silu(gate) * up + intermediate.mul_(sorted_routing.unsqueeze(-1)) + sorted_outputs = _grouped_linear_triton(intermediate.contiguous(), fc2_weight, expert_cumsum) + return _unroute_tokens(sorted_outputs, order, hidden_states.shape[0], selected_experts.shape[1]) + + +def _eager_moe_forward( + num_experts: int, + routing_weights: torch.Tensor, + selected_experts: torch.Tensor, + hidden_states: torch.Tensor, + fc1_1_weight: torch.Tensor, + fc1_2_weight: torch.Tensor, + fc2_weight: torch.Tensor, +) -> torch.Tensor: + sorted_hidden, sorted_routing, expert_cumsum, order = _route_tokens( + num_experts, routing_weights, selected_experts, hidden_states + ) + expert_ends = expert_cumsum.to(device="cpu", dtype=torch.int64).tolist() + outputs: list[torch.Tensor] = [] + start = 0 + for expert, end in enumerate(expert_ends): + if end > start: + expert_inputs = sorted_hidden[start:end] + gate = F.linear(expert_inputs, fc1_1_weight[expert]) + up = F.linear(expert_inputs, fc1_2_weight[expert]) + intermediate = F.silu(gate) * up + intermediate.mul_(sorted_routing[start:end].unsqueeze(-1)) + outputs.append(F.linear(intermediate, fc2_weight[expert])) + start = end + + sorted_outputs = torch.cat(outputs, dim=0) if outputs else hidden_states.new_empty((0, hidden_states.shape[1])) + return _unroute_tokens(sorted_outputs, order, hidden_states.shape[0], selected_experts.shape[1]) + + +def fused_moe_forward( + module: torch.nn.Module, + num_experts: int, + routing_weights: torch.Tensor, + selected_experts: torch.Tensor, + hidden_states: torch.Tensor, + fc1_1_weight: torch.Tensor, + fc1_2_weight: torch.Tensor, + fc2_weight: torch.Tensor, +) -> torch.Tensor: + """Run the VeOmni v0.1.0 split-weight MoE operation for inference. + + ``module`` is retained for call-site compatibility. Like VeOmni's original + non-EP implementation, this function does not use it. + + Set ``LLADA_MOE_BACKEND`` to ``auto`` (default), ``triton``, or ``eager``. + The ``triton`` setting fails loudly if its requirements are not met; + ``auto`` falls back to the PyTorch implementation. + """ + del module + _validate_inputs( + num_experts, + routing_weights, + selected_experts, + hidden_states, + fc1_1_weight, + fc1_2_weight, + fc2_weight, + ) + + backend = os.getenv("LLADA_MOE_BACKEND", "auto").lower() + if backend not in {"auto", "triton", "eager"}: + raise ValueError(f"LLADA_MOE_BACKEND must be auto, triton, or eager; got {backend!r}") + + compute_dtype = fc1_1_weight.dtype + if fc1_2_weight.dtype != compute_dtype or fc2_weight.dtype != compute_dtype: + raise TypeError("all expert weights must have the same dtype") + hidden_states = hidden_states.to(dtype=compute_dtype) + routing_weights = routing_weights.to(dtype=compute_dtype) + + if hidden_states.shape[0] == 0: + return hidden_states + + can_use_triton = ( + triton is not None + and hidden_states.is_cuda + and compute_dtype in _SUPPORTED_TRITON_DTYPES + and fc1_1_weight.is_contiguous() + and fc1_2_weight.is_contiguous() + and fc2_weight.is_contiguous() + ) + if backend == "triton" and not can_use_triton: + raise RuntimeError( + "The Triton backend requires Triton, CUDA tensors, contiguous expert weights, " + "and float16 or bfloat16 weights." + ) + if backend != "eager" and can_use_triton: + return _triton_moe_forward( + num_experts, + routing_weights, + selected_experts, + hidden_states, + fc1_1_weight, + fc1_2_weight, + fc2_weight, + ) + return _eager_moe_forward( + num_experts, + routing_weights, + selected_experts, + hidden_states, + fc1_1_weight, + fc1_2_weight, + fc2_weight, + ) + + +__all__ = ["fused_moe_forward"] diff --git a/pipelines/llada/modeling_llada2uni_moe.py b/pipelines/llada/modeling_llada2uni_moe.py new file mode 100644 index 000000000..77eb547b3 --- /dev/null +++ b/pipelines/llada/modeling_llada2uni_moe.py @@ -0,0 +1,1284 @@ +# coding=utf-8 +# Copyright 2025 Antgroup and The HuggingFace Inc. team. All rights reserved. +# +# This code is based on EleutherAI's GPT-NeoX library and the GPT-NeoX +# and OPT implementations in this library. It has been modified from its +# original forms to accommodate minor architectural differences compared +# to GPT-NeoX and OPT used by the Meta AI team that trained the model. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""PyTorch implementation of the fused LLaDA2 MoE model.""" + +from dataclasses import dataclass +import math +from typing import List, Optional, Tuple, Union + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from transformers.activations import ACT2FN +from transformers.cache_utils import Cache +from transformers.generation import GenerationMixin +from transformers.modeling_attn_mask_utils import ( + _prepare_4d_attention_mask, + _prepare_4d_causal_attention_mask, + _prepare_4d_causal_attention_mask_for_sdpa, +) +from transformers.modeling_outputs import ModelOutput, MoeModelOutputWithPast +from transformers.modeling_rope_utils import ROPE_INIT_FUNCTIONS, dynamic_rope_update +from transformers.modeling_utils import PreTrainedModel +from transformers.pytorch_utils import ALL_LAYERNORM_LAYERS +from transformers.utils import logging +from .fused_moe_ops import fused_moe_forward + +from .configuration_llada2uni_moe import LLaDA2MoeConfig + +logger = logging.get_logger(__name__) + + +class LLaDA2MoeRMSNorm(nn.Module): + """RMSNorm used by the LLaDA2 model.""" + + def __init__(self, hidden_size, eps=1e-6): + super().__init__() + self.weight = nn.Parameter(torch.ones(hidden_size)) + self.variance_epsilon = eps + + def forward(self, hidden_states): + input_dtype = hidden_states.dtype + hidden_states = hidden_states.to(torch.float32) + variance = hidden_states.pow(2).mean(-1, keepdim=True) + hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon) + return self.weight * hidden_states.to(input_dtype) + + +# Preserve the historical spelling used by the original implementation. +LLaDA2MoERMSNorm = LLaDA2MoeRMSNorm +ALL_LAYERNORM_LAYERS.append(LLaDA2MoeRMSNorm) + + +class LLaDA2MoePreTrainedModel(PreTrainedModel): + config_class = LLaDA2MoeConfig + base_model_prefix = "model" + supports_gradient_checkpointing = True + _no_split_modules = ["LLaDA2MoeDecoderLayer"] + _skip_keys_device_placement = "past_key_values" + _supports_flash_attn_2 = True + _supports_sdpa = True + _supports_cache_class = True + _supports_flash_attn = True + _can_compile_fullgraph = True + _supports_attention_backend = True + + def _init_weights(self, module): + std = self.config.initializer_range + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=std) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=std) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + + +def rotate_half(hidden_states): + first, second = hidden_states.chunk(2, dim=-1) + return torch.cat((-second, first), dim=-1) + + +def apply_rotary_pos_emb(query, key, cos, sin, position_ids=None, unsqueeze_dim=1): # pylint: disable=unused-argument + """Apply RoPE to the rotary part of query and key states.""" + cos = cos.unsqueeze(unsqueeze_dim) + sin = sin.unsqueeze(unsqueeze_dim) + rotary_dim = cos.shape[-1] + query_rotary, query_pass = query[..., :rotary_dim], query[..., rotary_dim:] + key_rotary, key_pass = key[..., :rotary_dim], key[..., rotary_dim:] + query_rotary = query_rotary * cos + rotate_half(query_rotary) * sin + key_rotary = key_rotary * cos + rotate_half(key_rotary) * sin + return torch.cat((query_rotary, query_pass), dim=-1), torch.cat( + (key_rotary, key_pass), dim=-1 + ) + + +def _compute_default_rope_parameters(config, device=None, **kwargs): # pylint: disable=unused-argument + """Compute the unscaled RoPE frequencies removed from Transformers 5.x.""" + head_dim = getattr(config, "head_dim", None) or config.hidden_size // config.num_attention_heads + partial_rotary_factor = getattr(config, "partial_rotary_factor", 1.0) + dim = int(head_dim * partial_rotary_factor) + base = getattr(config, "rope_theta", 10000.0) + inv_freq = 1.0 / ( + base ** (torch.arange(0, dim, 2, dtype=torch.int64, device=device).float() / dim) + ) + return inv_freq, 1.0 + + +class LLaDA2MoeRotaryEmbedding(nn.Module): + def __init__(self, config: LLaDA2MoeConfig, device=None): + super().__init__() + # BC: "rope_type" was originally "type" + if hasattr(config, "rope_scaling") and config.rope_scaling is not None: + self.rope_type = config.rope_scaling.get( + "rope_type", config.rope_scaling.get("type") + ) + else: + self.rope_type = "default" + self.max_seq_len_cached = config.max_position_embeddings + self.original_max_seq_len = config.max_position_embeddings + + self.config = config + self.rope_init_fn = ROPE_INIT_FUNCTIONS.get(self.rope_type) + if self.rope_init_fn is None and self.rope_type == "default": + self.rope_init_fn = _compute_default_rope_parameters + if self.rope_init_fn is None: + raise KeyError(f"Unsupported RoPE type: {self.rope_type}") + + inv_freq, self.attention_scaling = self.rope_init_fn(self.config, device) + self.register_buffer("inv_freq", inv_freq, persistent=False) + self.original_inv_freq = self.inv_freq + + @torch.no_grad() + @dynamic_rope_update # power user: used with advanced RoPE types (e.g. dynamic rope) + def forward(self, x, position_ids): + inv_freq_expanded = ( + self.inv_freq[None, :, None] + .float() + .expand(position_ids.shape[0], -1, 1) + .to(x.device) + ) + position_ids_expanded = position_ids[:, None, :].float() + + device_type = ( + x.device.type + if isinstance(x.device.type, str) and x.device.type != "mps" + else "cpu" + ) + with torch.autocast(device_type=device_type, enabled=False): # Force float32 + freqs = ( + inv_freq_expanded.float() @ position_ids_expanded.float() + ).transpose(1, 2) + emb = torch.cat((freqs, freqs), dim=-1) + cos = emb.cos() * self.attention_scaling + sin = emb.sin() * self.attention_scaling + + return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype) + + +class LLaDA2MoeMLP(nn.Module): + def __init__(self, config: LLaDA2MoeConfig, intermediate_size: int): + super().__init__() + self.config = config + self.hidden_size = config.hidden_size + self.intermediate_size = intermediate_size + + self.gate_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False) + self.up_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False) + self.down_proj = nn.Linear(self.intermediate_size, self.hidden_size, bias=False) + self.act_fn = ACT2FN[config.hidden_act] + + def forward(self, x): + return self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x)) + + +class LLaDA2MoeGate(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.top_k = config.num_experts_per_tok + self.num_experts = config.num_experts + + self.n_group = config.n_group + self.topk_group = config.topk_group + + self.gating_dim = config.hidden_size + self.weight = nn.Parameter(torch.empty((self.num_experts, self.gating_dim))) + self.routed_scaling_factor = config.routed_scaling_factor + + self.register_buffer("expert_bias", torch.zeros((self.num_experts))) + self.reset_parameters() + + def reset_parameters(self) -> None: + import torch.nn.init as init + + init.kaiming_uniform_(self.weight, a=math.sqrt(5)) + + def group_limited_topk( + self, + scores: torch.Tensor, + ): + num_tokens, _ = scores.size() + group_scores = ( + scores.view(num_tokens, self.n_group, -1).topk(2, dim=-1)[0].sum(dim=-1) + ) + group_idx = torch.topk(group_scores, k=self.topk_group, dim=-1, sorted=False)[1] + group_mask = torch.zeros_like(group_scores) + group_mask.scatter_(1, group_idx, 1) + + score_mask = ( + group_mask.unsqueeze(-1) + .expand(num_tokens, self.n_group, self.num_experts // self.n_group) + .reshape(num_tokens, -1) + ) + + masked_scores = scores.masked_fill(~score_mask.bool(), float("-inf")) + probs, top_indices = torch.topk(masked_scores, k=self.top_k, dim=-1) + + return probs, top_indices + + def forward(self, hidden_states): + hidden_states = hidden_states.view(-1, hidden_states.shape[-1]) + logits = F.linear( + hidden_states.type(torch.float32), self.weight.type(torch.float32) + ) + + scores = torch.sigmoid(logits.float()).type_as(logits) + + scores_for_routing = scores + self.expert_bias + _, topk_idx = self.group_limited_topk(scores_for_routing) + + scores = torch.gather(scores, dim=1, index=topk_idx).type_as(logits) + + topk_weight = ( + scores / (scores.sum(dim=-1, keepdim=True) + 1e-20) + if self.top_k > 1 + else scores + ) + topk_weight = topk_weight * self.routed_scaling_factor + + return topk_idx, topk_weight, logits + + +class LLaDA2MoeExperts(nn.Module): + def __init__(self, config): + super().__init__() + self.num_experts = config.num_experts + self.hidden_dim = config.hidden_size + self.intermediate_size = config.moe_intermediate_size + self.gate_proj = torch.nn.Parameter( + torch.empty(self.num_experts, self.intermediate_size, self.hidden_dim), + requires_grad=True, + ) + self.up_proj = torch.nn.Parameter( + torch.empty(self.num_experts, self.intermediate_size, self.hidden_dim), + requires_grad=True, + ) + self.down_proj = torch.nn.Parameter( + torch.empty(self.num_experts, self.hidden_dim, self.intermediate_size), + requires_grad=True, + ) + + def forward(self, hidden_states, routing_weights, selected_experts): + return fused_moe_forward( + module=self, + num_experts=self.num_experts, + routing_weights=routing_weights, + selected_experts=selected_experts, + hidden_states=hidden_states, + fc1_1_weight=self.gate_proj, + fc1_2_weight=self.up_proj, + fc2_weight=self.down_proj, + ) + + def reset_parameters(self): + """ + Initialize the parameters of all expert networks. + Uses different initialization strategies for different projection layers. + """ + for expert_id in range(self.num_experts): + nn.init.kaiming_uniform_(self.gate_proj[expert_id], a=math.sqrt(5)) + nn.init.kaiming_uniform_(self.up_proj[expert_id], a=math.sqrt(5)) + nn.init.xavier_uniform_(self.down_proj[expert_id]) + + +class LLaDA2MoeSparseMoeBlock(nn.Module): + """Fused routed experts plus a shared expert.""" + + def __init__(self, config: LLaDA2MoeConfig): + super().__init__() + self.config = config + self.experts = LLaDA2MoeExperts(config) + self.gate = LLaDA2MoeGate(config) + if config.num_shared_experts is not None: + self.shared_experts = LLaDA2MoeMLP( + config=config, + intermediate_size=config.moe_intermediate_size + * config.num_shared_experts, + ) + + def forward(self, hidden_states): + identity = hidden_states + bsz, seq_len, h = hidden_states.shape + topk_idx, topk_weight, router_logits = self.gate(hidden_states) + hidden_states = hidden_states.view(-1, hidden_states.shape[-1]) + y = self.experts( + hidden_states, routing_weights=topk_weight, selected_experts=topk_idx + ).reshape(bsz, seq_len, h) + if self.config.num_shared_experts is not None: + y = y + self.shared_experts(identity) + return y, ( + router_logits.view(bsz, seq_len, -1), + topk_idx.view(bsz, seq_len, -1), + ) + + +def repeat_kv(hidden_states: torch.Tensor, n_rep: int) -> torch.Tensor: + """ + This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch, + num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim) + """ + batch, num_key_value_heads, slen, head_dim = hidden_states.shape + if n_rep == 1: + return hidden_states + hidden_states = hidden_states[:, :, None, :, :].expand( + batch, num_key_value_heads, n_rep, slen, head_dim + ) + return hidden_states.reshape(batch, num_key_value_heads * n_rep, slen, head_dim) + + +class LLaDA2MoeAttention(nn.Module): + """Multi-headed attention from 'Attention Is All You Need' paper""" + + def __init__(self, config: LLaDA2MoeConfig, layer_idx: Optional[int] = None): + super().__init__() + self.config = config + self.layer_idx = layer_idx + if layer_idx is None: + logger.warning_once( + f"Instantiating {self.__class__.__name__} without passing `layer_idx` is not recommended and will " + "to errors during the forward call, if caching is used. Please make sure to provide a `layer_idx` " + "when creating this class." + ) + + self.attention_dropout = config.attention_dropout + self.hidden_size = config.hidden_size + self.num_heads = config.num_attention_heads + self.head_dim = config.head_dim or self.hidden_size // self.num_heads + partial_rotary_factor = ( + config.partial_rotary_factor + if hasattr(config, "partial_rotary_factor") + else 1.0 + ) + self.rope_dim = int(self.head_dim * partial_rotary_factor) + self.num_key_value_heads = config.num_key_value_heads + self.num_key_value_groups = self.num_heads // self.num_key_value_heads + self.max_position_embeddings = config.max_position_embeddings + self.rope_theta = config.rope_theta + self.is_causal = False + + self.query_key_value = nn.Linear( + self.hidden_size, + (self.num_heads + 2 * self.num_key_value_heads) * self.head_dim, + bias=config.use_qkv_bias, + ) + + self.query_layernorm = LLaDA2MoERMSNorm(self.head_dim, eps=config.rms_norm_eps) + self.key_layernorm = LLaDA2MoERMSNorm(self.head_dim, eps=config.rms_norm_eps) + self.dense = nn.Linear( + self.num_heads * self.head_dim, self.hidden_size, bias=config.use_bias + ) + + def forward( # pylint: disable=unused-argument + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Cache] = None, + output_attentions: bool = False, + use_cache: bool = False, + position_embeddings: Optional[ + Tuple[torch.Tensor, torch.Tensor] + ] = None, # necessary, but kept here for BC + **kwargs, + ) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]: + bsz, q_len, _ = hidden_states.size() + + qkv = self.query_key_value(hidden_states) + qkv = qkv.view( + bsz, q_len, self.num_heads + 2 * self.num_key_value_heads, self.head_dim + ) + + query_states, key_states, value_states = qkv.split( + [self.num_heads, self.num_key_value_heads, self.num_key_value_heads], dim=-2 + ) + query_states = query_states.transpose(1, 2) + key_states = key_states.transpose(1, 2) + value_states = value_states.transpose(1, 2) + + query_states = self.query_layernorm(query_states) + key_states = self.key_layernorm(key_states) + + kv_seq_len = key_states.shape[-2] + if past_key_value is not None: + if self.layer_idx is None: + raise ValueError( + f"The cache structure has changed since version v4.36. If you are using {self.__class__.__name__} " + "for auto-regressive decoding with k/v caching, please make sure to initialize the attention class " + "with a layer index." + ) + kv_seq_len += past_key_value.get_seq_length(self.layer_idx) + cos, sin = position_embeddings + query_states, key_states = apply_rotary_pos_emb( + query_states, key_states, cos, sin, position_ids + ) + + if past_key_value is not None: + cache_kwargs = {"sin": sin, "cos": cos} # Specific to RoPE models + key_states, value_states = past_key_value.update( + key_states, value_states, self.layer_idx, cache_kwargs + ) + + key_states = repeat_kv(key_states, self.num_key_value_groups) + value_states = repeat_kv(value_states, self.num_key_value_groups) + + attn_weights = torch.matmul( + query_states, key_states.transpose(2, 3) + ) / math.sqrt(self.head_dim) + + if attn_weights.size() != (bsz, self.num_heads, q_len, kv_seq_len): + raise ValueError( + f"Attention weights should be of size {(bsz, self.num_heads, q_len, kv_seq_len)}, but is" + f" {attn_weights.size()}" + ) + if attention_mask is not None: + if attention_mask.size() != (bsz, 1, q_len, kv_seq_len): + raise ValueError( + f"Attention mask should be of size {(bsz, 1, q_len, kv_seq_len)}, but is {attention_mask.size()}" + ) + attn_weights = attn_weights + attention_mask + + attn_weights = nn.functional.softmax( + attn_weights, dim=-1, dtype=torch.float32 + ).to(query_states.dtype) + attn_weights = nn.functional.dropout( + attn_weights, p=self.attention_dropout, training=self.training + ) + attn_output = torch.matmul(attn_weights, value_states) + + if attn_output.size() != (bsz, self.num_heads, q_len, self.head_dim): + raise ValueError( + f"`attn_output` should be of size {(bsz, self.num_heads, q_len, self.head_dim)}, but is" + f" {attn_output.size()}" + ) + + attn_output = attn_output.transpose(1, 2).contiguous() + + attn_output = attn_output.reshape(bsz, q_len, -1) + + attn_output = self.dense(attn_output) + + if not output_attentions: + attn_weights = None + + return attn_output, attn_weights, past_key_value + + +class LLaDA2MoeSdpaAttention(LLaDA2MoeAttention): + """ + LLaDA2Moe attention module using torch.nn.functional.scaled_dot_product_attention. This module inherits from + `LLaDA2MoeAttention` as the weights of the module stays untouched. The only changes are on the forward pass to adapt to + SDPA API. + """ + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Cache] = None, + output_attentions: bool = False, + use_cache: bool = False, + position_embeddings: Optional[ + Tuple[torch.Tensor, torch.Tensor] + ] = None, # necessary, but kept here for BC + **kwargs, + ) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]: + if output_attentions: + logger.warning_once( + "LLaDA2MoeModel is using LLaDA2MoeSdpaAttention, but `torch.nn.functional.scaled_dot_product_attention` does not support `output_attentions=True`. Falling back to the manual attention implementation, " + 'but specifying the manual implementation will be required from Transformers version v5.0.0 onwards. This warning can be removed using the argument `attn_implementation="eager"` when loading the model.' + ) + return super().forward( + hidden_states=hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_value=past_key_value, + output_attentions=output_attentions, + use_cache=use_cache, + ) + + bsz, q_len, _ = hidden_states.size() + + qkv = self.query_key_value(hidden_states) + qkv = qkv.view( + bsz, q_len, self.num_heads + 2 * self.num_key_value_heads, self.head_dim + ) + + query_states, key_states, value_states = qkv.split( + [self.num_heads, self.num_key_value_heads, self.num_key_value_heads], dim=-2 + ) + query_states = query_states.transpose(1, 2) + key_states = key_states.transpose(1, 2) + value_states = value_states.transpose(1, 2) + + query_states = self.query_layernorm(query_states) + key_states = self.key_layernorm(key_states) + + kv_seq_len = key_states.shape[-2] + if past_key_value is not None: + kv_seq_len += past_key_value.get_seq_length(self.layer_idx) + cos, sin = position_embeddings + + query_states, key_states = apply_rotary_pos_emb( + query_states, key_states, cos, sin, position_ids + ) + + if past_key_value is not None: + cache_kwargs = {"sin": sin, "cos": cos} # Specific to RoPE models + key_states, value_states = past_key_value.update( + key_states, value_states, self.layer_idx, cache_kwargs + ) + + key_states = repeat_kv(key_states, self.num_key_value_groups) + value_states = repeat_kv(value_states, self.num_key_value_groups) + + if attention_mask is not None: + if attention_mask.size() != (bsz, 1, q_len, kv_seq_len): + raise ValueError( + f"Attention mask should be of size {(bsz, 1, q_len, kv_seq_len)}, but is {attention_mask.size()}" + ) + + # SDPA with memory-efficient backend is currently (torch==2.1.2) bugged with non-contiguous inputs with custom attn_mask, + # Reference: https://github.com/pytorch/pytorch/issues/112577. + if query_states.device.type == "cuda" and attention_mask is not None: + query_states = query_states.contiguous() + key_states = key_states.contiguous() + value_states = value_states.contiguous() + + attn_output = torch.nn.functional.scaled_dot_product_attention( + query_states, + key_states, + value_states, + attn_mask=attention_mask, + dropout_p=self.attention_dropout if self.training else 0.0, + # The q_len > 1 is necessary to match with AttentionMaskConverter.to_causal_4d that does not create a causal mask in case q_len == 1. + is_causal=self.is_causal and attention_mask is None and q_len > 1, + ) + + attn_output = attn_output.transpose(1, 2).contiguous() + attn_output = attn_output.reshape(bsz, q_len, -1) + + attn_output = self.dense(attn_output) + + return attn_output, None, past_key_value + + +ATTENTION_CLASSES = { + "eager": LLaDA2MoeSdpaAttention, + "flash_attention_2": LLaDA2MoeSdpaAttention, + "sdpa": LLaDA2MoeSdpaAttention, +} + + +class LLaDA2MoeDecoderLayer(nn.Module): + def __init__(self, config: LLaDA2MoeConfig, layer_idx: int): + super().__init__() + self.hidden_size = config.hidden_size + + self.attention = ATTENTION_CLASSES[config._attn_implementation]( + config=config, layer_idx=layer_idx + ) + + self.mlp = ( + LLaDA2MoeSparseMoeBlock(config) + if ( + config.num_experts is not None + and layer_idx >= config.first_k_dense_replace + ) + else LLaDA2MoeMLP(config=config, intermediate_size=config.intermediate_size) + ) + self.input_layernorm = LLaDA2MoERMSNorm( + config.hidden_size, eps=config.rms_norm_eps + ) + self.post_attention_layernorm = LLaDA2MoERMSNorm( + config.hidden_size, eps=config.rms_norm_eps + ) + + def forward( + self, # pylint: disable=unused-argument + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Tuple[torch.Tensor]] = None, + output_attentions: Optional[bool] = False, + output_router_logits: Optional[bool] = False, + use_cache: Optional[bool] = False, + position_embeddings: Optional[ + Tuple[torch.Tensor, torch.Tensor] + ] = None, # necessary, but kept here for BC + **kwargs, + ) -> Tuple[ + torch.FloatTensor, Optional[Tuple[torch.FloatTensor, torch.FloatTensor]] + ]: + """ + Args: + hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)` + attention_mask (`torch.FloatTensor`, *optional*): + attention mask of size `(batch_size, sequence_length)` if flash attention is used or `(batch_size, 1, + query_sequence_length, key_sequence_length)` if default attention is used. + position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0, + config.n_positions - 1]`. + past_key_value (`Tuple(torch.FloatTensor)`, *optional*): + cached past key and value projection states + output_attentions (`bool`, *optional*): + Whether to return the attentions tensors of all attention layers. See `attentions` under + returned tensors for more detail. + output_router_logits (`bool`, *optional*): + Whether or not to return the logits of all the routers. They are useful for computing the router loss, + and should not be returned during inference. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding + (see `past_key_values`). + """ + residual = hidden_states + + hidden_states = self.input_layernorm(hidden_states) + + hidden_states, self_attn_weights, present_key_value = self.attention( + hidden_states=hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_value=past_key_value, + output_attentions=output_attentions, + position_embeddings=position_embeddings, + use_cache=use_cache, + ) + hidden_states = residual + hidden_states + + residual = hidden_states + hidden_states = self.post_attention_layernorm(hidden_states) + hidden_states = self.mlp(hidden_states) + if isinstance(hidden_states, tuple): + hidden_states, router_logits = hidden_states + else: + router_logits = None + hidden_states = residual + hidden_states.to(residual.device) + + outputs = (hidden_states,) + + if output_attentions: + outputs += (self_attn_weights,) + + if use_cache: + outputs += (present_key_value,) + + if output_router_logits: + outputs += (router_logits,) + + return outputs + + +def calculate_pack_position_ids( + input_ids: Optional[torch.Tensor] = None, + inputs_embeds: Optional[torch.Tensor] = None, + position_ids: Optional[torch.Tensor] = None, + past_key_values_length: int = 0, + cu_lengths_list: Optional[List[torch.Tensor]] = None, +): + """Build continuous or per-sequence packed position IDs.""" + if position_ids is not None: + return position_ids + + if input_ids is not None: + device = input_ids.device + batch_size, seq_length = input_ids.shape + elif inputs_embeds is not None: + device = inputs_embeds.device + batch_size, seq_length, _ = inputs_embeds.shape + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + if cu_lengths_list is not None: + all_position_ids = [] + + for i in range(batch_size): + cu_seqlens = cu_lengths_list[i].to(device) + starts = cu_seqlens[:-1] + lengths = cu_seqlens[1:] - cu_seqlens[:-1] + total_len = cu_seqlens[-1].item() + global_positions = torch.arange(total_len, device=device, dtype=torch.long) + subtraction_mask = torch.repeat_interleave(starts, lengths) + current_pos_ids = global_positions - subtraction_mask + all_position_ids.append(current_pos_ids) + + position_ids = torch.nn.utils.rnn.pad_sequence( + all_position_ids, + batch_first=True, + padding_value=0, + ) + + if position_ids.shape[1] < seq_length: + pad_right = seq_length - position_ids.shape[1] + position_ids = F.pad(position_ids, (0, pad_right), "constant", 0) + else: + position_ids = torch.arange( + past_key_values_length, + seq_length + past_key_values_length, + dtype=torch.long, + device=device, + ) + position_ids = position_ids.unsqueeze(0).expand(batch_size, -1) + + return position_ids + + +class LLaDA2MoeModel(LLaDA2MoePreTrainedModel): + """ + Transformer decoder consisting of *config.num_hidden_layers* layers. Each layer is a [`LLaDA2MoeDecoderLayer`] + Args: + config: LLaDA2MoeConfig + """ + + def __init__(self, config: LLaDA2MoeConfig): + super().__init__(config) + self.padding_idx = config.pad_token_id + self.vocab_size = config.vocab_size + + self.word_embeddings = nn.Embedding( + config.vocab_size, config.hidden_size, self.padding_idx + ) + self.layers = nn.ModuleList( + [ + LLaDA2MoeDecoderLayer(config, layer_idx) + for layer_idx in range(config.num_hidden_layers) + ] + ) + + self._use_sdpa = config._attn_implementation == "sdpa" + self._use_flash_attention_2 = config._attn_implementation == "flash_attention_2" + self.norm = LLaDA2MoERMSNorm(config.hidden_size, eps=config.rms_norm_eps) + self.rotary_emb = LLaDA2MoeRotaryEmbedding(config=config) + self.gradient_checkpointing = False + + self.post_init() + + def get_input_embeddings(self): + return self.word_embeddings + + def set_input_embeddings(self, value): + self.word_embeddings = value + + def forward( + self, # pylint: disable=unused-argument + input_ids: torch.LongTensor = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[List[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + output_router_logits: Optional[bool] = None, + cu_lengths_list: Optional[List] = None, + return_dict: Optional[bool] = None, + **kwargs, + ) -> Union[Tuple, MoeModelOutputWithPast]: + output_attentions = ( + output_attentions + if output_attentions is not None + else self.config.output_attentions + ) + output_hidden_states = ( + output_hidden_states + if output_hidden_states is not None + else self.config.output_hidden_states + ) + output_router_logits = ( + output_router_logits + if output_router_logits is not None + else self.config.output_router_logits + ) + use_cache = use_cache if use_cache is not None else self.config.use_cache + + return_dict = ( + return_dict if return_dict is not None else self.config.use_return_dict + ) + + if input_ids is not None and inputs_embeds is not None: + raise ValueError( + "You cannot specify both input_ids and inputs_embeds at the same time" + ) + elif input_ids is not None: + batch_size, seq_length = input_ids.shape[:2] + elif inputs_embeds is not None: + batch_size, seq_length = inputs_embeds.shape[:2] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning_once( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`transformers." + ) + use_cache = False + + past_key_values_length = past_key_values.get_seq_length() if use_cache and past_key_values is not None else 0 + + if position_ids is None: + position_ids = calculate_pack_position_ids( + input_ids, + inputs_embeds, + position_ids, + past_key_values_length, + cu_lengths_list, + ) + + if inputs_embeds is None: + inputs_embeds = self.word_embeddings(input_ids) + + if hasattr(attention_mask, "dim") and attention_mask.dim() == 2: + if self._use_sdpa and not output_attentions: + # output_attentions=True can not be supported when using SDPA, and we fall back on + # the manual implementation that requires a 4D causal mask in all cases. + attention_mask = _prepare_4d_causal_attention_mask_for_sdpa( + attention_mask, + (batch_size, seq_length), + inputs_embeds, + past_key_values_length, + ) + else: + if attention_mask is not None: + attention_mask = _prepare_4d_attention_mask( + attention_mask, inputs_embeds.dtype + ) + else: + attention_mask = _prepare_4d_causal_attention_mask( + attention_mask, + (batch_size, seq_length), + inputs_embeds, + past_key_values_length, + ) + hidden_states = inputs_embeds + + position_embeddings = self.rotary_emb(hidden_states, position_ids) + + all_hidden_states = () if output_hidden_states else None + all_self_attns = () if output_attentions else None + all_router_logits = () if output_router_logits else None + next_decoder_cache = None + + for decoder_layer in self.layers: + if output_hidden_states: + all_hidden_states += (hidden_states,) + + if self.gradient_checkpointing and self.training: + layer_outputs = self._gradient_checkpointing_func( + decoder_layer.__call__, + hidden_states, + attention_mask, + position_ids, + past_key_values, + output_attentions, + output_router_logits, + use_cache, + position_embeddings, + ) + else: + layer_outputs = decoder_layer( + hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_value=past_key_values, + output_attentions=output_attentions, + output_router_logits=output_router_logits, + use_cache=use_cache, + position_embeddings=position_embeddings, + ) + hidden_states = layer_outputs[0] + + if use_cache: + next_decoder_cache = layer_outputs[2 if output_attentions else 1] + + if output_attentions: + all_self_attns += (layer_outputs[1],) + + if output_router_logits and layer_outputs[-1] is not None: + all_router_logits += (layer_outputs[-1],) + + hidden_states = self.norm(hidden_states) + + if output_hidden_states: + all_hidden_states += (hidden_states,) + + next_cache = next_decoder_cache if use_cache else None + if not return_dict: + return tuple( + v + for v in [ + hidden_states, + next_cache, + all_hidden_states, + all_self_attns, + all_router_logits, + ] + if v is not None + ) + return MoeModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=next_cache, + hidden_states=all_hidden_states, + attentions=all_self_attns, + router_logits=all_router_logits, + ) + + +@dataclass +class LLaDA2MoeCausalLMOutputWithPast(ModelOutput): + r""" + loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided): + Training loss. + logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`): + Prediction scores for each vocabulary token before SoftMax. + past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`): + It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache). + + Contains pre-computed hidden-states (key and values in the self-attention blocks) that can be used (see + `past_key_values` input) to speed up sequential decoding. + rope_deltas (`torch.LongTensor` of shape `(batch_size, )`, *optional*): + The offset between the sequence length and rotary position indices. + """ + + loss: Optional[torch.FloatTensor] = None + z_loss: Optional[torch.FloatTensor] = None + logits: Optional[torch.FloatTensor] = None + past_key_values: Optional[Cache] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + attentions: Optional[tuple[torch.FloatTensor]] = None + rope_deltas: Optional[torch.LongTensor] = None + + +class LLaDA2MoeBackbone(nn.Module): + """Container for the model backbone and output head.""" + + def __init__(self, config: LLaDA2MoeConfig): + super().__init__() + self.language_model = LLaDA2MoeModel(config) + self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + def get_input_embeddings(self): + return self.language_model.get_input_embeddings() + + def set_input_embeddings(self, value): + self.language_model.set_input_embeddings(value) + + def forward(self, *args, **kwargs): + return self.language_model(*args, **kwargs) + + +class LLaDA2MoeModelLM(LLaDA2MoePreTrainedModel, GenerationMixin): + """Fused LLaDA2 MoE model.""" + + accepts_loss_kwargs = False + + def __init__(self, config: LLaDA2MoeConfig): + super().__init__(config) + self.model = LLaDA2MoeBackbone(config) + self.img_token_id = 157184 + self.img_start_id = 157185 + self.img_end_id = 157186 + self.img_pad_id = 157187 + self.post_init() + + @property + def language_model(self): + return self.model.language_model + + def get_input_embeddings(self): + return self.model.get_input_embeddings() + + def set_input_embeddings(self, value): + self.model.set_input_embeddings(value) + + def get_output_embeddings(self): + return self.model.lm_head + + def set_output_embeddings(self, value): + self.model.lm_head = value + + def get_decoder(self): + return self.model.language_model + + def set_decoder(self, decoder): + self.model.language_model = decoder + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[Cache] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_router_logits: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + logits_to_keep: Union[int, torch.Tensor] = 0, + cu_lengths_list: Optional[List] = None, + **kwargs, + ) -> Union[tuple, LLaDA2MoeCausalLMOutputWithPast]: + return_dict = ( + return_dict if return_dict is not None else self.config.use_return_dict + ) + if inputs_embeds is None: + if input_ids is None: + raise ValueError("Provide either input_ids or inputs_embeds") + inputs_embeds = self.get_input_embeddings()(input_ids) + + outputs = self.model( + input_ids=None, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_values=past_key_values, + inputs_embeds=inputs_embeds, + use_cache=use_cache, + output_attentions=output_attentions, + output_router_logits=output_router_logits, + output_hidden_states=output_hidden_states, + return_dict=True, + cu_lengths_list=cu_lengths_list, + **kwargs, + ) + hidden_states = outputs.last_hidden_state + indices = ( + slice(-logits_to_keep, None) + if isinstance(logits_to_keep, int) + else logits_to_keep + ) + logits = self.model.lm_head(hidden_states[:, indices, :]) + + loss = None + if labels is not None: + loss = F.cross_entropy( + logits.reshape(-1, logits.shape[-1]), labels.reshape(-1) + ) + + if not return_dict: + result = ( + logits, + outputs.past_key_values, + outputs.hidden_states, + outputs.attentions, + ) + return ((loss,) + result) if loss is not None else result + return LLaDA2MoeCausalLMOutputWithPast( + loss=loss, + z_loss=None, + logits=logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + rope_deltas=None, + ) + + @staticmethod + def _top_k_logits(logits, k): + if k is None or k <= 0: + return logits + values, _ = torch.topk(logits, min(k, logits.shape[-1])) + return torch.where(logits < values[..., -1, None], -torch.inf, logits) + + @staticmethod + def _top_p_logits(logits, p): + if p is None or p >= 1.0: + return logits + sorted_logits, sorted_indices = torch.sort(logits, descending=True) + cumulative_probs = torch.cumsum(F.softmax(sorted_logits, dim=-1), dim=-1) + sorted_mask = cumulative_probs > p + sorted_mask[..., 1:] = sorted_mask[..., :-1].clone() + sorted_mask[..., 0] = False + mask = torch.zeros_like(sorted_mask).scatter(-1, sorted_indices, sorted_mask) + return logits.masked_fill(mask, -torch.inf) + + def _sample_with_temperature_topk_topp( + self, logits, temperature=1.0, top_k=0, top_p=1.0 + ): + original_shape = logits.shape[:-1] + logits = logits.reshape(-1, logits.shape[-1]) + if ( + temperature == 0.0 + and (top_k in (None, 0)) + and (top_p is None or top_p >= 1.0) + ): + probs = F.softmax(logits, dim=-1) + token = logits.argmax(dim=-1, keepdim=True) + token_prob = probs.gather(-1, token) + return token.view(*original_shape), token_prob.view(*original_shape) + if temperature > 0 and temperature != 1.0: + logits = logits / temperature + logits = self._top_k_logits(logits, top_k) + logits = self._top_p_logits(logits, top_p) + probs = F.softmax(logits, dim=-1) + token = torch.multinomial(probs, num_samples=1) + token_prob = probs.gather(-1, token) + return token.view(*original_shape), token_prob.view(*original_shape) + + @staticmethod + def _get_num_transfer_tokens(block_length, steps): + if steps == 0: + return torch.empty(0, dtype=torch.int64) + schedule = torch.full((steps,), block_length // steps, dtype=torch.int64) + schedule[: block_length % steps] += 1 + return schedule + + @torch.no_grad() + def generate_bd_image_logic( + self, + data: Optional[dict] = None, + temperature: float = 0.0, + block_length: int = 32, + steps: int = 32, + gen_length: int = 2048, + top_p: Optional[float] = None, + top_k: Optional[int] = None, + eos_early_stop: bool = True, + minimal_topk: int = 1, + threshold: float = 0.95, + eos_id: int = 156892, + mask_id: int = 156895, + cfg_scale: float = 1.0, + mode: str = "eoi", + ): + """Generate discrete image tokens with the original block-diffusion logic.""" + if data is None or "input_ids" not in data: + raise ValueError("data must contain input_ids") + steps = min(steps, gen_length // minimal_topk) + input_ids = data["input_ids"] + eoi_id = 156902 + prompt_length = input_ids.shape[1] + num_blocks = (prompt_length + gen_length + block_length - 1) // block_length + total_length = num_blocks * block_length + + block_mask = torch.tril(torch.ones(num_blocks, num_blocks, device=self.device)) + full_attention_mask = ( + block_mask.repeat_interleave(block_length, 0) + .repeat_interleave(block_length, 1)[None, None] + .bool() + ) + position_ids = torch.arange(total_length, device=self.device).unsqueeze(0) + x = torch.full((1, total_length), mask_id, dtype=torch.long, device=self.device) + x[:, :prompt_length] = input_ids + prefill_blocks = prompt_length // block_length + schedule = self._get_num_transfer_tokens(block_length, steps) + use_cfg = cfg_scale != 1.0 + + if use_cfg: + uncond_ids = data.get("uncond_ids", [27, 411, 19483, 29]) + if torch.is_tensor(uncond_ids): + uncond_ids = uncond_ids.flatten().tolist() + pad_len = prompt_length - len(uncond_ids) + if pad_len < 0: + raise ValueError( + "The unconditional prompt is longer than the conditional prompt" + ) + uncond_input = torch.full( + (1, prompt_length), mask_id, dtype=torch.long, device=self.device + ) + uncond_input[0, -len(uncond_ids) :] = torch.tensor( + uncond_ids, device=self.device + ) + uncond_attention_mask = full_attention_mask.clone() + uncond_attention_mask[:, :, :, :pad_len] = False + uncond_position_ids = torch.cat( + [ + torch.zeros(pad_len, device=self.device, dtype=torch.long), + torch.arange(total_length - pad_len, device=self.device), + ] + ).unsqueeze(0) + + for block_index in range(prefill_blocks, num_blocks): + window_end = (block_index + 1) * block_length + current = x[:, :window_end] + current_mask = full_attention_mask[:, :, :window_end, :window_end] + current_positions = position_ids[:, :window_end] + + for step_index in range(steps): + active = current[:, -block_length:] == mask_id + if not active.any(): + break + if use_cfg: + unconditional = current.clone() + unconditional[:, :prompt_length] = uncond_input + combined_ids = torch.cat([current, unconditional], dim=0) + combined_positions = torch.cat( + [current_positions, uncond_position_ids[:, :window_end]], dim=0 + ) + combined_mask = torch.cat( + [ + current_mask, + uncond_attention_mask[:, :, :window_end, :window_end], + ], + dim=0, + ) + logits = self( + input_ids=combined_ids, + attention_mask=combined_mask, + position_ids=combined_positions, + ).logits + conditional_logits, unconditional_logits = logits.chunk(2, dim=0) + active_logits = unconditional_logits[ + :, -block_length: + ] + cfg_scale * ( + conditional_logits[:, -block_length:] + - unconditional_logits[:, -block_length:] + ) + else: + active_logits = self( + input_ids=current, + attention_mask=current_mask, + position_ids=current_positions, + ).logits[:, -block_length:] + + tokens, confidence = self._sample_with_temperature_topk_topp( + active_logits, temperature=temperature, top_k=top_k, top_p=top_p + ) + count = schedule[step_index].item() + scores = torch.where(active, confidence, -torch.inf) + selected = torch.zeros_like(tokens, dtype=torch.bool) + high_confidence = scores[0] > threshold + if high_confidence.sum().item() >= count: + selected[0] = high_confidence + else: + _, indices = torch.topk( + scores[0], k=min(count, active.sum().item()) + ) + selected[0, indices] = True + current[:, -block_length:][selected] = tokens[selected] + + stop_token = eoi_id if mode == "eoi" else eos_id + positions = (current[0, prompt_length:] == stop_token).nonzero( + as_tuple=True + )[0] + if eos_early_stop and len(positions) > 0: + stop_position = positions[0].item() + prompt_length + if (current[0, prompt_length:stop_position] != mask_id).all(): + x[:, :window_end] = current + return x[:, : stop_position + 1] + + x[:, :window_end] = current + return x[:, : prompt_length + gen_length] + + +__all__ = ["LLaDA2MoeModelLM", "LLaDA2MoeModel", "LLaDA2MoePreTrainedModel"] diff --git a/pipelines/llada/pipeline_llada_image.py b/pipelines/llada/pipeline_llada_image.py new file mode 100644 index 000000000..eabe87622 --- /dev/null +++ b/pipelines/llada/pipeline_llada_image.py @@ -0,0 +1,687 @@ +# Copyright 2026 The HuggingFace Team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from collections.abc import Callable +from pathlib import Path + +import torch +import torch.nn.functional as F +from transformers import AutoModel, AutoTokenizer, PreTrainedModel, PreTrainedTokenizerBase + +from diffusers.image_processor import PipelineImageInput, VaeImageProcessor +from diffusers.models import AutoencoderKLFlux2 +from diffusers.pipelines.pipeline_utils import DiffusionPipeline +from diffusers.schedulers import FlowMatchEulerDiscreteScheduler +from diffusers.utils import logging +from diffusers.utils.torch_utils import randn_tensor + +from .transformer_llada_image import ( + LLaDAImageQueryFormerModel, + LLaDAImageSigVQModel, + LLaDAImageTextProjectionModel, + LLaDAImageTransformer2DModel, +) +from .pipeline_output import LLaDAImagePipelineOutput + + +logger = logging.get_logger(__name__) + + +class LLaDAImagePipeline(DiffusionPipeline): + r""" + Pipeline for LLaDA-Image text-to-image generation, VQ-conditioned generation, and single-image editing. + + Args: + scheduler ([`FlowMatchEulerDiscreteScheduler`]): + Flow-matching scheduler used for denoising. + vae ([`AutoencoderKLFlux2`]): + Flux2 VAE used to encode reference images and decode generated latents. + text_encoder (`transformers.PreTrainedModel`): + LLaDA2 conditional-generation model. It must expose `get_input_embeddings()` and its language backbone as + `model`. + tokenizer (`transformers.PreTrainedTokenizerBase`): + Tokenizer paired with the LLaDA2 text encoder. + queryformer ([`LLaDAImageQueryFormerModel`]): + QueryFormer that refines the learnable generation queries. + text_projection ([`LLaDAImageTextProjectionModel`]): + Connector and projector that map LLaDA2 hidden states to denoiser caption features. + sigvq ([`LLaDAImageSigVQModel`]): + GLM SigVQ component that embeds MLLM-generated VQ tokens and encodes editing reference images. + transformer ([`LLaDAImageTransformer2DModel`]): + Denoising transformer. + """ + + model_cpu_offload_seq = "text_encoder->queryformer->text_projection->sigvq->transformer->vae" + _callback_tensor_inputs = ["latents", "noise_pred"] + + def __init__( + self, + scheduler: FlowMatchEulerDiscreteScheduler, + vae: AutoencoderKLFlux2, + text_encoder: PreTrainedModel, + tokenizer: PreTrainedTokenizerBase, + queryformer: LLaDAImageQueryFormerModel, + text_projection: LLaDAImageTextProjectionModel, + sigvq: LLaDAImageSigVQModel, + transformer: LLaDAImageTransformer2DModel, + ): + super().__init__() + self.register_modules( + scheduler=scheduler, + vae=vae, + text_encoder=text_encoder, + tokenizer=tokenizer, + queryformer=queryformer, + text_projection=text_projection, + sigvq=sigvq, + transformer=transformer, + ) + + self.vae_scale_factor = 2 ** (len(self.vae.config.block_out_channels) - 1) if self.vae is not None else 8 + self.latent_scale_factor = self.vae_scale_factor * 2 + self.image_processor = VaeImageProcessor(vae_scale_factor=self.latent_scale_factor) + + @classmethod + def from_pretrained( # pylint: disable=arguments-differ + cls, + pretrained_model_name_or_path: str | Path, + *, + torch_dtype: torch.dtype | None = None, + device: torch.device | str | None = None, + cache_dir: str | None = None, + scheduler=None, + vae=None, + text_encoder=None, + tokenizer=None, + queryformer=None, + text_projection=None, + sigvq=None, + transformer=None, + **kwargs, + ) -> "LLaDAImagePipeline": + """Load all LLaDA-Image components from a converted model directory or Hugging Face repository. + + This model stores a LLaDA2 text encoder that requires `trust_remote_code=True`, so its components are loaded + explicitly instead of relying on the generic Diffusers pipeline resolver. + """ + model_path = Path(pretrained_model_name_or_path) + if not model_path.is_dir(): + from huggingface_hub import snapshot_download + + ignore_patterns = ["assets/**"] + if text_encoder is not None: + ignore_patterns.append("text_encoder/**") + if transformer is not None: + ignore_patterns.append("transformer/**") + model_path = Path( + snapshot_download( + repo_id=str(pretrained_model_name_or_path), + cache_dir=cache_dir, + ignore_patterns=ignore_patterns or None, + ) + ) + + if not (model_path / "model_index.json").is_file(): + raise ValueError( + "Expected a converted LLaDA-Image model directory containing `model_index.json`, got " + f"{model_path}." + ) + + if scheduler is None: + scheduler = FlowMatchEulerDiscreteScheduler.from_pretrained(model_path / "scheduler", cache_dir=cache_dir) + if vae is None: + vae = AutoencoderKLFlux2.from_pretrained(model_path / "vae", torch_dtype=torch_dtype, cache_dir=cache_dir) + if text_encoder is None: + text_encoder_kwargs = {"dtype": torch_dtype, "trust_remote_code": True, "cache_dir": cache_dir} + if device is not None: + text_encoder_kwargs["device_map"] = {"": device} + text_encoder = AutoModel.from_pretrained(model_path / "text_encoder", **text_encoder_kwargs) + if tokenizer is None: + tokenizer = AutoTokenizer.from_pretrained(model_path / "tokenizer", cache_dir=cache_dir) + if queryformer is None: + queryformer = LLaDAImageQueryFormerModel.from_pretrained( + model_path / "queryformer", torch_dtype=torch_dtype, cache_dir=cache_dir + ) + if text_projection is None: + text_projection = LLaDAImageTextProjectionModel.from_pretrained( + model_path / "text_projection", torch_dtype=torch_dtype, cache_dir=cache_dir + ) + if sigvq is None: + sigvq = LLaDAImageSigVQModel.from_pretrained( + model_path / "sigvq", torch_dtype=torch_dtype, cache_dir=cache_dir + ) + if transformer is None: + transformer = LLaDAImageTransformer2DModel.from_pretrained( + model_path / "transformer", torch_dtype=torch_dtype, cache_dir=cache_dir + ) + + if device is not None: + vae = vae.to(device) + queryformer = queryformer.to(device) + text_projection = text_projection.to(device) + sigvq = sigvq.to(device) + transformer = transformer.to(device) + + return cls( + scheduler=scheduler, + vae=vae, + text_encoder=text_encoder, + tokenizer=tokenizer, + queryformer=queryformer, + text_projection=text_projection, + sigvq=sigvq, + transformer=transformer, + ) + + @property + def guidance_scale(self) -> float: + return self._guidance_scale + + @property + def num_timesteps(self) -> int: + return self._num_timesteps + + @staticmethod + def _patchify_latents(latents: torch.Tensor) -> torch.Tensor: + batch_size, channels, height, width = latents.shape + latents = latents.reshape(batch_size, channels, height // 2, 2, width // 2, 2) + latents = latents.permute(0, 1, 3, 5, 2, 4) + return latents.reshape(batch_size, channels * 4, height // 2, width // 2) + + @staticmethod + def _unpatchify_latents(latents: torch.Tensor) -> torch.Tensor: + batch_size, channels, height, width = latents.shape + latents = latents.reshape(batch_size, channels // 4, 2, 2, height, width) + latents = latents.permute(0, 1, 4, 2, 5, 3) + return latents.reshape(batch_size, channels // 4, height * 2, width * 2) + + def _encode_text( + self, + prompts: list[str], + max_sequence_length: int, + ) -> tuple[torch.Tensor, torch.Tensor]: + formatted_prompts = [ + "HUMAN Generate an image.\nASSISTANT\n" + if prompt is None + else f"HUMAN Generate an image: {prompt.strip()}\nASSISTANT\n" + for prompt in prompts + ] + text_inputs = self.tokenizer( + formatted_prompts, + add_special_tokens=True, + padding=True, + truncation=True, + max_length=max_sequence_length, + return_tensors="pt", + ) + input_ids = text_inputs.input_ids.to(self.text_encoder.device) + attention_mask = text_inputs.attention_mask.to(input_ids.device).bool() + inputs_embeds = self.text_encoder.get_input_embeddings()(input_ids) + text_encoder_device = inputs_embeds.device + attention_mask = attention_mask.to(text_encoder_device) + + query_embeds = self.queryformer( + inputs_embeds.to(device=self.queryformer.device, dtype=self.queryformer.dtype), + attention_mask.to(self.queryformer.device), + ).query_embeds.to(device=text_encoder_device, dtype=inputs_embeds.dtype) + text_length = inputs_embeds.shape[1] + inputs_embeds = torch.cat([inputs_embeds, query_embeds], dim=1) + attention_mask = torch.cat( + [attention_mask, attention_mask.new_ones(attention_mask.shape[0], query_embeds.shape[1])], + dim=1, + ) + position_ids = attention_mask.long().cumsum(dim=1) - 1 + position_ids.masked_fill_(position_ids < 0, 0) + + mask_value = torch.finfo(inputs_embeds.dtype).min + backbone_attention_mask = attention_mask[:, None, None, :].expand(-1, 1, attention_mask.shape[1], -1) + backbone_attention_mask = torch.where( + backbone_attention_mask, + torch.zeros((), dtype=inputs_embeds.dtype, device=text_encoder_device), + torch.full((), mask_value, dtype=inputs_embeds.dtype, device=text_encoder_device), + ) + backbone_attention_mask[:, :, :text_length, text_length:] = mask_value + + hidden_states = self.text_encoder.model( + inputs_embeds=inputs_embeds, + attention_mask=backbone_attention_mask, + position_ids=position_ids, + return_dict=True, + ).last_hidden_state + prompt_embeds = self.text_projection( + hidden_states.to(device=self.text_projection.device, dtype=self.text_projection.dtype) + ).hidden_states + return prompt_embeds, attention_mask.to(prompt_embeds.device) + + def encode_prompt( + self, + prompt: str | list[str] | None, + negative_prompt: str | list[str] | None = None, + do_classifier_free_guidance: bool = True, + num_images_per_prompt: int = 1, + prompt_embeds: torch.Tensor | None = None, + prompt_attention_mask: torch.Tensor | None = None, + negative_prompt_embeds: torch.Tensor | None = None, + negative_prompt_attention_mask: torch.Tensor | None = None, + max_sequence_length: int = 2048, + device: torch.device | None = None, + ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor | None, torch.Tensor | None]: + device = device or self._execution_device + + if prompt_embeds is None: + prompt = [prompt] if isinstance(prompt, str) else prompt + prompt_embeds, prompt_attention_mask = self._encode_text(prompt, max_sequence_length) + else: + prompt_embeds = prompt_embeds.to(device) + prompt_attention_mask = prompt_attention_mask.to(device).bool() + + batch_size = prompt_embeds.shape[0] + if do_classifier_free_guidance and negative_prompt_embeds is None: + if negative_prompt is None: + negative_prompt = [None] * batch_size + elif isinstance(negative_prompt, str): + negative_prompt = [negative_prompt] * batch_size + negative_prompt_embeds, negative_prompt_attention_mask = self._encode_text( + negative_prompt, max_sequence_length + ) + elif do_classifier_free_guidance: + negative_prompt_embeds = negative_prompt_embeds.to(device) + negative_prompt_attention_mask = negative_prompt_attention_mask.to(device).bool() + + prompt_embeds = prompt_embeds.repeat_interleave(num_images_per_prompt, dim=0) + prompt_attention_mask = prompt_attention_mask.repeat_interleave(num_images_per_prompt, dim=0) + if do_classifier_free_guidance: + negative_prompt_embeds = negative_prompt_embeds.repeat_interleave(num_images_per_prompt, dim=0) + negative_prompt_attention_mask = negative_prompt_attention_mask.repeat_interleave( + num_images_per_prompt, dim=0 + ) + + return prompt_embeds, prompt_attention_mask, negative_prompt_embeds, negative_prompt_attention_mask + + def generate_vq_tokens( + self, + prompt: str | list[str], + height: int, + width: int, + ) -> torch.Tensor: + prompts = [prompt] if isinstance(prompt, str) else prompt + image_token_offset = 157184 + frontend_scale = max(max(height, width) / 512, 1.0) + frontend_height = int(height / frontend_scale) + frontend_width = int(width / frontend_scale) + vq_height = frontend_height // 16 + vq_width = frontend_width // 16 + image_token_count = vq_height * vq_width + system_prompt = "You are a text-to-image generation assistant." + generated_tokens = [] + + for prompt in prompts: + text_prompt = f"SYSTEM {system_prompt} HUMAN{prompt}ASSISTANT" + text_ids = self.tokenizer(text_prompt).input_ids + image_info_ids = self.tokenizer( + f"<|image|><|reserved_token_{vq_height}|><|reserved_token_{vq_width}|><|/image|>" + ).input_ids + input_ids = text_ids + image_info_ids[:-1] + + uncond_prompt = ( + f"SYSTEM {system_prompt} HUMANASSISTANT" + ) + uncond_ids = self.tokenizer(uncond_prompt).input_ids + image_info_ids[:-1] + output_ids = self.text_encoder.generate_bd_image_logic( + data={ + "input_ids": torch.tensor(input_ids, device=self.text_encoder.device).unsqueeze(0), + "uncond_ids": uncond_ids, + }, + block_length=32, + steps=8, + gen_length=image_token_count, + cfg_scale=2.0, + ) + token_ids = output_ids[0, len(input_ids) : len(input_ids) + image_token_count] - image_token_offset + if len(token_ids) != image_token_count: + raise ValueError(f"The MLLM generated {len(token_ids)} VQ tokens, expected {image_token_count}.") + if torch.any((token_ids < 0) | (token_ids >= self.sigvq.config.codebook_size)): + raise ValueError("The MLLM generated token IDs outside the SigVQ codebook.") + generated_tokens.append(token_ids) + + return torch.stack(generated_tokens) + + def check_inputs( + self, + prompt: str | list[str] | None, + image: PipelineImageInput | None, + generation_mode: str, + height: int, + width: int, + num_images_per_prompt: int, + prompt_embeds: torch.Tensor | None, + prompt_attention_mask: torch.Tensor | None, + negative_prompt_embeds: torch.Tensor | None, + negative_prompt_attention_mask: torch.Tensor | None, + callback_on_step_end_tensor_inputs: list[str], + num_inference_steps: int, + ) -> None: + if generation_mode not in {"text", "vq", "editing"}: + raise ValueError("`generation_mode` must be one of 'text', 'vq', or 'editing'.") + if generation_mode in {"text", "vq"} and image is not None: + raise ValueError(f"`image` must be omitted when `generation_mode='{generation_mode}'`.") + if generation_mode == "vq" and prompt is None: + raise ValueError("`prompt` is required when `generation_mode='vq'`.") + if generation_mode == "editing" and image is None: + raise ValueError("`image` is required when `generation_mode='editing'`.") + if generation_mode == "vq" and (height % 16 != 0 or width % 16 != 0): + raise ValueError("`height` and `width` must be divisible by 16 in VQ mode.") + + required_multiple = self.latent_scale_factor * (2 if generation_mode == "editing" else 1) + if height <= 0 or width <= 0 or height % required_multiple != 0 or width % required_multiple != 0: + raise ValueError(f"`height` and `width` must be divisible by {required_multiple}.") + if num_inference_steps < 1: + raise ValueError("`num_inference_steps` must be at least 1.") + if prompt is None and prompt_embeds is None: + raise ValueError("Provide either `prompt` or `prompt_embeds`.") + if prompt is not None and prompt_embeds is not None: + raise ValueError("Provide only one of `prompt` or `prompt_embeds`.") + if prompt_embeds is not None and prompt_attention_mask is None: + raise ValueError("`prompt_attention_mask` is required with `prompt_embeds`.") + if negative_prompt_embeds is not None and negative_prompt_attention_mask is None: + raise ValueError("`negative_prompt_attention_mask` is required with `negative_prompt_embeds`.") + if num_images_per_prompt < 1: + raise ValueError("`num_images_per_prompt` must be at least 1.") + if not all(name in self._callback_tensor_inputs for name in callback_on_step_end_tensor_inputs): + raise ValueError( + f"`callback_on_step_end_tensor_inputs` must be chosen from {self._callback_tensor_inputs}." + ) + + def _encode_source_image( + self, + image: PipelineImageInput, + height: int, + width: int, + batch_size: int, + num_images_per_prompt: int, + ) -> tuple[torch.Tensor, torch.Tensor]: + image = self.image_processor.preprocess(image, height=height, width=width) + if image.shape[0] == 1 and batch_size > 1: + image = image.repeat(batch_size, 1, 1, 1) + if image.shape[0] != batch_size: + raise ValueError(f"The image batch size must be 1 or {batch_size}, but is {image.shape[0]}.") + image = image.repeat_interleave(num_images_per_prompt, dim=0) + + sigvq_pixel_values = F.interpolate( + image.float(), + size=(height // 2, width // 2), + mode="bilinear", + align_corners=False, + ) + semantic_features = self.sigvq( + sigvq_pixel_values.to(device=self.sigvq.device, dtype=self.sigvq.dtype) + ).semantic_features + + source_latents = self.vae.encode(image.to(device=self.vae.device, dtype=self.vae.dtype)).latent_dist.mode() + source_latents = self._patchify_latents(source_latents) + latent_mean = self.vae.bn.running_mean.view(1, -1, 1, 1).to(source_latents) + latent_std = torch.sqrt(self.vae.bn.running_var.view(1, -1, 1, 1) + self.vae.config.batch_norm_eps).to( + source_latents + ) + source_latents = (source_latents - latent_mean) / latent_std + return source_latents, semantic_features + + @torch.no_grad() + def __call__( + self, + prompt: str | list[str] | None = None, + image: PipelineImageInput | None = None, + generation_mode: str = "text", + negative_prompt: str | list[str] | None = None, + height: int = 1024, + width: int = 1024, + num_inference_steps: int = 20, + guidance_scale: float = 4.5, + num_images_per_prompt: int = 1, + generator: torch.Generator | list[torch.Generator] | None = None, + latents: torch.Tensor | None = None, + prompt_embeds: torch.Tensor | None = None, + prompt_attention_mask: torch.Tensor | None = None, + negative_prompt_embeds: torch.Tensor | None = None, + negative_prompt_attention_mask: torch.Tensor | None = None, + max_sequence_length: int = 2048, + output_type: str = "pil", + return_dict: bool = True, + callback_on_step_end: Callable[["LLaDAImagePipeline", int, torch.Tensor, dict], dict] | None = None, + callback_on_step_end_tensor_inputs: list[str] = ["latents"], + ) -> LLaDAImagePipelineOutput | tuple: + r""" + Generate images using text-only, VQ-conditioned, or editing inference. + + The timestep schedule is selected by the scheduler configuration. `use_uniform_sigmas=True` uses a uniform + pre-shift grid; otherwise the source Kumaraswamy schedule is used. + + Args: + prompt (`str` or `list[str]`, *optional*): + Text prompts that describe the generated image or requested edit. + image (`PipelineImageInput`, *optional*): + Reference image or image batch. Required in `"editing"` mode and rejected in other modes. + generation_mode (`str`, defaults to `"text"`): + Inference path. `"text"` uses only the text prompt. `"vq"` uses the MLLM to generate VQ tokens from + the prompt at a maximum frontend resolution of 512 before diffusion. `"editing"` uses both + reference-image SigVQ features and source-image latents. + negative_prompt (`str` or `list[str]`, *optional*): + Text excluded from generation. The checkpoint's empty CFG prompt is used by default. + height (`int`, defaults to `1024`): + Output image height. + width (`int`, defaults to `1024`): + Output image width. + num_inference_steps (`int`, defaults to `20`): + Number of flow-matching denoising steps. + guidance_scale (`float`, defaults to `4.5`): + Classifier-free guidance scale. Guidance is disabled at values up to `1.0`. + num_images_per_prompt (`int`, defaults to `1`): + Number of images generated per prompt. + generator (`torch.Generator` or `list[torch.Generator]`, *optional*): + Random generator or generator batch used to create the initial latents. + latents (`torch.Tensor`, *optional*): + Pre-generated patchified Flux2 latents. + prompt_embeds (`torch.Tensor`, *optional*): + Precomputed, projected positive prompt embeddings. + prompt_attention_mask (`torch.Tensor`, *optional*): + Valid-token mask for `prompt_embeds`. + negative_prompt_embeds (`torch.Tensor`, *optional*): + Precomputed, projected negative prompt embeddings. + negative_prompt_attention_mask (`torch.Tensor`, *optional*): + Valid-token mask for `negative_prompt_embeds`. + max_sequence_length (`int`, defaults to `2048`): + Maximum text sequence length before the QueryFormer tokens are appended. + output_type (`str`, defaults to `"pil"`): + Output format. Choose `"pil"`, `"np"`, `"pt"`, or `"latent"`. + return_dict (`bool`, defaults to `True`): + Whether to return [`LLaDAImagePipelineOutput`] instead of a tuple. + callback_on_step_end (`Callable`, *optional*): + Function called after each denoising step. + callback_on_step_end_tensor_inputs (`list[str]`, defaults to `["latents"]`): + Tensor names forwarded to `callback_on_step_end`. + + Returns: + [`LLaDAImagePipelineOutput`] or `tuple`: + Generated images or final patchified latents. + """ + self.check_inputs( + prompt, + image, + generation_mode, + height, + width, + num_images_per_prompt, + prompt_embeds, + prompt_attention_mask, + negative_prompt_embeds, + negative_prompt_attention_mask, + callback_on_step_end_tensor_inputs, + num_inference_steps, + ) + + if prompt_embeds is not None: + batch_size = prompt_embeds.shape[0] + elif isinstance(prompt, str): + batch_size = 1 + else: + batch_size = len(prompt) + device = self.transformer.device + self._guidance_scale = guidance_scale # pylint: disable=attribute-defined-outside-init + do_classifier_free_guidance = guidance_scale > 1.0 + + prompt_embeds, prompt_attention_mask, negative_prompt_embeds, negative_prompt_attention_mask = ( + self.encode_prompt( + prompt, + negative_prompt, + do_classifier_free_guidance, + num_images_per_prompt, + prompt_embeds, + prompt_attention_mask, + negative_prompt_embeds, + negative_prompt_attention_mask, + max_sequence_length, + device, + ) + ) + effective_batch_size = batch_size * num_images_per_prompt + + source_latents = None + semantic_features = None + if generation_mode == "vq": + vq_token_ids = self.generate_vq_tokens(prompt, height, width) + vq_token_ids = vq_token_ids.repeat_interleave(num_images_per_prompt, dim=0) + semantic_features = self.sigvq(token_ids=vq_token_ids.to(self.sigvq.device)).semantic_features + elif generation_mode == "editing": + source_latents, semantic_features = self._encode_source_image( + image, + height, + width, + batch_size, + num_images_per_prompt, + ) + + latent_shape = ( + effective_batch_size, + self.transformer.config.in_channels, + height // self.latent_scale_factor, + width // self.latent_scale_factor, + ) + if latents is None: + latents = randn_tensor(latent_shape, generator=generator, device=device, dtype=torch.float32) + latents = latents.to(self.transformer.dtype).float() + else: + if latents.shape != latent_shape: + raise ValueError(f"Expected `latents` to have shape {latent_shape}, got {tuple(latents.shape)}.") + latents = latents.to(device=device, dtype=torch.float32) + + if self.scheduler.config.get("use_uniform_sigmas", False): + # diffusers 0.39.0 does not natively support this scheduler option. Supplying the pre-shift grid + # explicitly preserves the behavior of the patched scheduler used by LLaDA-Image-SGLang. + sigmas = torch.linspace(1.0, 0.0, num_inference_steps + 1, dtype=torch.float32)[:-1].tolist() + self.scheduler.set_timesteps(sigmas=sigmas, device=device) + else: + schedule_steps = num_inference_steps + 1 + schedule = torch.linspace(0.001, 1.0, schedule_steps, dtype=torch.float64)[:-1] + schedule = (1 - (1 - schedule**1.17) ** 0.8) ** 1.1 + sigmas = (1 - schedule).tolist() + self.scheduler.set_timesteps(sigmas=sigmas, device=device) + timesteps = self.scheduler.timesteps + self._num_timesteps = len(timesteps) # pylint: disable=attribute-defined-outside-init + + cond_cap_feats = [ + embeds[mask].to(device=self.transformer.device, dtype=self.transformer.dtype) + for embeds, mask in zip(prompt_embeds, prompt_attention_mask.bool()) + ] + if do_classifier_free_guidance: + uncond_cap_feats = [ + embeds[mask].to(device=self.transformer.device, dtype=self.transformer.dtype) + for embeds, mask in zip(negative_prompt_embeds, negative_prompt_attention_mask.bool()) + ] + cap_feats = cond_cap_feats + uncond_cap_feats + else: + cap_feats = cond_cap_feats + + glm_cap_feats = None + source_latent_list = None + if semantic_features is not None: + cond_glm_cap_feats = [ + features.to(device=self.transformer.device, dtype=self.transformer.dtype) + for features in semantic_features + ] + if source_latents is not None: + source_latent_list = [ + latent.unsqueeze(1).to(device=self.transformer.device, dtype=self.transformer.dtype) + for latent in source_latents + ] + if do_classifier_free_guidance: + empty_glm = semantic_features.new_zeros((0, semantic_features.shape[-1])).to( + device=self.transformer.device, dtype=self.transformer.dtype + ) + glm_cap_feats = cond_glm_cap_feats + [empty_glm] * effective_batch_size + if source_latent_list is not None: + source_latent_list = source_latent_list + source_latent_list + else: + glm_cap_feats = cond_glm_cap_feats + + with self.progress_bar(total=num_inference_steps) as progress_bar: + for step_index, timestep in enumerate(timesteps): + latent_model_input = torch.cat([latents, latents], dim=0) if do_classifier_free_guidance else latents + latent_list = [latent.unsqueeze(1).to(self.transformer.dtype) for latent in latent_model_input] + model_timestep = (timestep / self.scheduler.config.num_train_timesteps).expand( + latent_model_input.shape[0] + ) + + noise_pred = self.transformer( + x=latent_list, + t=model_timestep.to(self.transformer.dtype), + cap_feats=cap_feats, + glm_cap_feats=glm_cap_feats, + source_latents=source_latent_list, + ).sample + noise_pred = -torch.stack(noise_pred, dim=0).squeeze(2).float() + + if do_classifier_free_guidance: + conditional_output, unconditional_output = noise_pred.chunk(2) + noise_pred = unconditional_output + self.guidance_scale * ( + conditional_output - unconditional_output + ) + + latents = self.scheduler.step(noise_pred, timestep, latents, return_dict=False)[0] + + if callback_on_step_end is not None: + callback_kwargs = {} + for name in callback_on_step_end_tensor_inputs: + callback_kwargs[name] = locals()[name] + callback_outputs = callback_on_step_end(self, step_index, timestep, callback_kwargs) + latents = callback_outputs.pop("latents", latents) + + progress_bar.update() + + if output_type == "latent": + images = latents + else: + latents = latents.to(device=self.vae.device, dtype=self.vae.dtype) + latent_mean = self.vae.bn.running_mean.view(1, -1, 1, 1).to(latents) + latent_std = torch.sqrt(self.vae.bn.running_var.view(1, -1, 1, 1) + self.vae.config.batch_norm_eps).to( + latents + ) + latents = latents * latent_std + latent_mean + latents = self._unpatchify_latents(latents) + images = self.vae.decode(latents, return_dict=False)[0] + images = self.image_processor.postprocess(images, output_type=output_type) + + self.maybe_free_model_hooks() + if not return_dict: + return (images,) + return LLaDAImagePipelineOutput(images=images) diff --git a/pipelines/llada/pipeline_output.py b/pipelines/llada/pipeline_output.py new file mode 100644 index 000000000..f79efaa72 --- /dev/null +++ b/pipelines/llada/pipeline_output.py @@ -0,0 +1,34 @@ +# Copyright 2026 The HuggingFace Team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from dataclasses import dataclass + +import numpy as np +import PIL.Image +import torch + +from diffusers.utils import BaseOutput + + +@dataclass +class LLaDAImagePipelineOutput(BaseOutput): + """ + Output class for the LLaDA-Image pipeline. + + Args: + images (`list[PIL.Image.Image]`, `np.ndarray`, or `torch.Tensor`): + Generated images. The format is controlled by the pipeline's `output_type` argument. + """ + + images: list[PIL.Image.Image] | np.ndarray | torch.Tensor diff --git a/pipelines/llada/transformer_llada_image.py b/pipelines/llada/transformer_llada_image.py new file mode 100644 index 000000000..d1aa783d2 --- /dev/null +++ b/pipelines/llada/transformer_llada_image.py @@ -0,0 +1,1874 @@ +# Copyright 2026 The HuggingFace Team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import math +from dataclasses import dataclass + +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.nn.utils.rnn import pad_sequence + +from diffusers.configuration_utils import ConfigMixin, register_to_config +from diffusers.models.attention import AttentionMixin, AttentionModuleMixin, FeedForward +from diffusers.models.attention_dispatch import dispatch_attention_fn +from diffusers.models.modeling_outputs import Transformer2DModelOutput +from diffusers.models.modeling_utils import ModelMixin +from diffusers.models.normalization import RMSNorm +from diffusers.utils import BaseOutput +from diffusers.utils.torch_utils import maybe_allow_in_graph + + +ADALN_EMBED_DIM = 256 +SEQUENCE_MULTIPLE = 32 + + +@dataclass +class _LLaDAImageSequence: + features: list[torch.Tensor] + position_ids: list[torch.Tensor] + padding_masks: list[torch.Tensor] + noise_masks: list[list[int]] | None = None + + +class LLaDAImageTimestepEmbedder(nn.Module): + def __init__(self, output_dim: int, hidden_dim: int = 1024, frequency_embedding_dim: int = 256): + super().__init__() + self.mlp = nn.Sequential( + nn.Linear(frequency_embedding_dim, hidden_dim, bias=True), + nn.SiLU(), + nn.Linear(hidden_dim, output_dim, bias=True), + ) + self.frequency_embedding_dim = frequency_embedding_dim + + def forward(self, timestep: torch.Tensor, hidden_dtype: torch.dtype) -> torch.Tensor: + half_dim = self.frequency_embedding_dim // 2 + frequencies = torch.exp( + -math.log(10000) * torch.arange(half_dim, dtype=torch.float32, device=timestep.device) / half_dim + ) + arguments = timestep[:, None].float() * frequencies[None] + embedding = torch.cat([torch.cos(arguments), torch.sin(arguments)], dim=-1) + if self.frequency_embedding_dim % 2: + embedding = torch.cat([embedding, torch.zeros_like(embedding[:, :1])], dim=-1) + return self.mlp(embedding.to(dtype=hidden_dtype)) + + +class LLaDAImageRopeEmbedder(nn.Module): + def __init__(self, theta: float, axes_dims: tuple[int, ...], axes_lens: tuple[int, ...]): + super().__init__() + self.theta = theta + self.axes_dims = axes_dims + self.axes_lens = axes_lens + self.freqs_cis = None + + def _create_frequencies(self, device: torch.device) -> list[torch.Tensor]: + frequencies = [] + for axis_dim, axis_len in zip(self.axes_dims, self.axes_lens): + inverse_frequencies = 1.0 / ( + self.theta ** (torch.arange(0, axis_dim, 2, dtype=torch.float32, device=device) / axis_dim) + ) + positions = torch.arange(axis_len, dtype=torch.float32, device=device) + angles = torch.outer(positions, inverse_frequencies) + frequencies.append(torch.complex(torch.cos(angles), torch.sin(angles))) + return frequencies + + def forward(self, position_ids: torch.Tensor) -> torch.Tensor: + if self.freqs_cis is None or self.freqs_cis[0].device != position_ids.device: + self.freqs_cis = self._create_frequencies(position_ids.device) + + frequencies = [] + for axis, axis_frequencies in enumerate(self.freqs_cis): + frequencies.append(axis_frequencies[position_ids[:, axis]]) + return torch.cat(frequencies, dim=-1) + + +class LLaDAImageAttnProcessor: + _attention_backend = None + _parallel_config = None + + def __call__( + self, + attn: "LLaDAImageAttention", + hidden_states: torch.Tensor, + attention_mask: torch.Tensor | None = None, + freqs_cis: torch.Tensor | None = None, + ) -> torch.Tensor: + query = attn.to_q(hidden_states).unflatten(-1, (attn.heads, attn.head_dim)) + key = attn.to_k(hidden_states).unflatten(-1, (attn.heads, attn.head_dim)) + value = attn.to_v(hidden_states).unflatten(-1, (attn.heads, attn.head_dim)) + + if attn.norm_q is not None: + query = attn.norm_q(query) + key = attn.norm_k(key) + + if freqs_cis is not None: + with torch.autocast(device_type=hidden_states.device.type, enabled=False): + query_complex = torch.view_as_complex(query.float().reshape(*query.shape[:-1], -1, 2)) + key_complex = torch.view_as_complex(key.float().reshape(*key.shape[:-1], -1, 2)) + frequencies = freqs_cis.unsqueeze(2) + query = torch.view_as_real(query_complex * frequencies).flatten(3).to(dtype=query.dtype) + key = torch.view_as_real(key_complex * frequencies).flatten(3).to(dtype=key.dtype) + + if attention_mask is not None and attention_mask.ndim == 2: + attention_mask = attention_mask[:, None, None, :] + + hidden_states = dispatch_attention_fn( + query, + key, + value, + attn_mask=attention_mask, + dropout_p=0.0, + is_causal=False, + backend=self._attention_backend, + parallel_config=self._parallel_config, + ) + hidden_states = hidden_states.flatten(2, 3) + return attn.to_out[0](hidden_states) + + +class LLaDAImageAttention(nn.Module, AttentionModuleMixin): + _default_processor_cls = LLaDAImageAttnProcessor + _available_processors = [LLaDAImageAttnProcessor] + _supports_qkv_fusion = False + + def __init__(self, dim: int, num_heads: int, norm_eps: float, qk_norm: bool): + super().__init__() + self.heads = num_heads + self.head_dim = dim // num_heads + self.to_q = nn.Linear(dim, dim, bias=False) + self.to_k = nn.Linear(dim, dim, bias=False) + self.to_v = nn.Linear(dim, dim, bias=False) + self.norm_q = RMSNorm(self.head_dim, eps=norm_eps, elementwise_affine=False) if qk_norm else None + self.norm_k = RMSNorm(self.head_dim, eps=norm_eps, elementwise_affine=False) if qk_norm else None + self.to_out = nn.ModuleList([nn.Linear(dim, dim, bias=False), nn.Dropout(0.0)]) + self.set_processor(self._default_processor_cls()) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: torch.Tensor | None, + freqs_cis: torch.Tensor, + ) -> torch.Tensor: + return self.processor(self, hidden_states, attention_mask, freqs_cis) + + +class LLaDAImageFeedForward(nn.Module): + def __init__(self, dim: int): + super().__init__() + hidden_dim = int(dim / 3 * 8) + self.w1 = nn.Linear(dim, hidden_dim, bias=False) + self.w2 = nn.Linear(hidden_dim, dim, bias=False) + self.w3 = nn.Linear(dim, hidden_dim, bias=False) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + return self.w2(F.silu(self.w1(hidden_states)) * self.w3(hidden_states)) + + +def _select_per_token( + noisy_value: torch.Tensor, + clean_value: torch.Tensor, + noise_mask: torch.Tensor, + sequence_length: int, +) -> torch.Tensor: + noise_mask = noise_mask.unsqueeze(-1) + return torch.where( + noise_mask == 1, + noisy_value.unsqueeze(1).expand(-1, sequence_length, -1), + clean_value.unsqueeze(1).expand(-1, sequence_length, -1), + ) + + +@maybe_allow_in_graph +class LLaDAImageTransformerBlock(nn.Module): + def __init__(self, dim: int, num_heads: int, norm_eps: float, qk_norm: bool, modulation: bool): + super().__init__() + self.modulation = modulation + self.attention = LLaDAImageAttention(dim, num_heads, norm_eps, qk_norm) + self.feed_forward = LLaDAImageFeedForward(dim) + self.attention_norm1 = RMSNorm(dim, eps=norm_eps, elementwise_affine=False) + self.ffn_norm1 = RMSNorm(dim, eps=norm_eps, elementwise_affine=False) + self.attention_norm2 = RMSNorm(dim, eps=norm_eps, elementwise_affine=False) + self.ffn_norm2 = RMSNorm(dim, eps=norm_eps, elementwise_affine=False) + if modulation: + self.adaLN_modulation = nn.Sequential(nn.Linear(min(dim, ADALN_EMBED_DIM), 4 * dim, bias=True)) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: torch.Tensor | None, + freqs_cis: torch.Tensor, + adaln_input: torch.Tensor | None = None, + noise_mask: torch.Tensor | None = None, + adaln_noisy: torch.Tensor | None = None, + adaln_clean: torch.Tensor | None = None, + ) -> torch.Tensor: + if self.modulation: + sequence_length = hidden_states.shape[1] + if noise_mask is None: + scale_msa, gate_msa, scale_mlp, gate_mlp = ( + self.adaLN_modulation(adaln_input).unsqueeze(1).chunk(4, dim=2) + ) + gate_msa = gate_msa.tanh() + gate_mlp = gate_mlp.tanh() + scale_msa = 1.0 + scale_msa + scale_mlp = 1.0 + scale_mlp + else: + noisy_modulation = self.adaLN_modulation(adaln_noisy) + clean_modulation = self.adaLN_modulation(adaln_clean) + noisy_scale_msa, noisy_gate_msa, noisy_scale_mlp, noisy_gate_mlp = noisy_modulation.chunk(4, dim=1) + clean_scale_msa, clean_gate_msa, clean_scale_mlp, clean_gate_mlp = clean_modulation.chunk(4, dim=1) + scale_msa = _select_per_token( + 1.0 + noisy_scale_msa, 1.0 + clean_scale_msa, noise_mask, sequence_length + ) + scale_mlp = _select_per_token( + 1.0 + noisy_scale_mlp, 1.0 + clean_scale_mlp, noise_mask, sequence_length + ) + gate_msa = _select_per_token(noisy_gate_msa.tanh(), clean_gate_msa.tanh(), noise_mask, sequence_length) + gate_mlp = _select_per_token(noisy_gate_mlp.tanh(), clean_gate_mlp.tanh(), noise_mask, sequence_length) + + attention_output = self.attention( + self.attention_norm1(hidden_states) * scale_msa, + attention_mask, + freqs_cis, + ) + hidden_states = hidden_states + gate_msa * self.attention_norm2(attention_output) + hidden_states = hidden_states + gate_mlp * self.ffn_norm2( + self.feed_forward(self.ffn_norm1(hidden_states) * scale_mlp) + ) + else: + attention_output = self.attention( + self.attention_norm1(hidden_states), + attention_mask, + freqs_cis, + ) + hidden_states = hidden_states + self.attention_norm2(attention_output) + hidden_states = hidden_states + self.ffn_norm2(self.feed_forward(self.ffn_norm1(hidden_states))) + return hidden_states + + +class LLaDAImageFinalLayer(nn.Module): + def __init__(self, dim: int, out_channels: int): + super().__init__() + self.norm_final = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6) + self.linear = nn.Linear(dim, out_channels, bias=True) + self.adaLN_modulation = nn.Sequential( + nn.SiLU(), + nn.Linear(min(dim, ADALN_EMBED_DIM), dim, bias=True), + ) + + def forward( + self, + hidden_states: torch.Tensor, + adaln_input: torch.Tensor | None = None, + noise_mask: torch.Tensor | None = None, + adaln_noisy: torch.Tensor | None = None, + adaln_clean: torch.Tensor | None = None, + ) -> torch.Tensor: + if noise_mask is None: + scale = 1.0 + self.adaLN_modulation(adaln_input) + scale = scale.unsqueeze(1) + else: + sequence_length = hidden_states.shape[1] + noisy_scale = 1.0 + self.adaLN_modulation(adaln_noisy) + clean_scale = 1.0 + self.adaLN_modulation(adaln_clean) + scale = _select_per_token(noisy_scale, clean_scale, noise_mask, sequence_length) + hidden_states = self.norm_final(hidden_states) * scale + return self.linear(hidden_states) + + +class LLaDAImageTransformer2DModel(ModelMixin, ConfigMixin, AttentionMixin): + r""" + The denoising transformer used by LLaDAImage for text-to-image generation and single-image editing. + + This component consumes caption features that have already passed through LLaDAImage's QueryFormer, connector, and + projector. For editing, it additionally consumes GLM/SigVQ features and source-image latents. + + Args: + all_patch_size (`tuple[int, ...]`, defaults to `(1,)`): + Supported spatial patch sizes. + all_f_patch_size (`tuple[int, ...]`, defaults to `(1,)`): + Supported temporal patch sizes paired with `all_patch_size`. + in_channels (`int`, defaults to `128`): + Number of channels in the patchified Flux2 VAE latents. + dim (`int`, defaults to `3840`): + Transformer hidden dimension. + n_layers (`int`, defaults to `30`): + Number of main transformer blocks. + n_refiner_layers (`int`, defaults to `2`): + Number of noise, caption, and SigVQ refiner blocks. + n_heads (`int`, defaults to `30`): + Number of attention heads. + norm_eps (`float`, defaults to `1e-5`): + Epsilon used by RMS normalization layers. + qk_norm (`bool`, defaults to `True`): + Whether to apply RMS normalization to query and key tensors. + cap_feat_dim (`int`, defaults to `2560`): + Dimension of projected QueryFormer caption features. + semantic_feat_dim (`int`, defaults to `4096`): + Dimension of GLM/SigVQ semantic features. + rope_theta (`float`, defaults to `256.0`): + RoPE frequency base. + t_scale (`float`, defaults to `1000.0`): + Scale applied to diffusion timesteps. + axes_dims (`tuple[int, ...]`, defaults to `(32, 48, 48)`): + RoPE dimensions for sequence, height, and width axes. + axes_lens (`tuple[int, ...]`, defaults to `(32768, 1024, 1024)`): + Maximum RoPE positions for sequence, height, and width axes. + """ + + _supports_gradient_checkpointing = True + _no_split_modules = ["LLaDAImageTransformerBlock"] + _repeated_blocks = ["LLaDAImageTransformerBlock"] + _skip_layerwise_casting_patterns = [ + "t_embedder", + "cap_embedder", + "semantic_embedder", + "sigvq_embedder", + ] + + @register_to_config + def __init__( + self, + all_patch_size: tuple[int, ...] = (1,), + all_f_patch_size: tuple[int, ...] = (1,), + in_channels: int = 128, + dim: int = 3840, + n_layers: int = 30, + n_refiner_layers: int = 2, + n_heads: int = 30, + norm_eps: float = 1e-5, + qk_norm: bool = True, + cap_feat_dim: int = 2560, + semantic_feat_dim: int = 4096, + rope_theta: float = 256.0, + t_scale: float = 1000.0, + axes_dims: tuple[int, ...] = (32, 48, 48), + axes_lens: tuple[int, ...] = (32768, 1024, 1024), + ): + super().__init__() + if len(all_patch_size) != len(all_f_patch_size): + raise ValueError("`all_patch_size` and `all_f_patch_size` must have the same length.") + if dim % n_heads != 0: + raise ValueError(f"`dim` ({dim}) must be divisible by `n_heads` ({n_heads}).") + if dim // n_heads != sum(axes_dims): + raise ValueError("The attention head dimension must equal the sum of `axes_dims`.") + + self.in_channels = in_channels + self.out_channels = in_channels + self.all_patch_size = all_patch_size + self.all_f_patch_size = all_f_patch_size + self.t_scale = t_scale + self.gradient_checkpointing = False + + self.all_x_embedder = nn.ModuleDict() + self.all_final_layer = nn.ModuleDict() + for patch_size, f_patch_size in zip(all_patch_size, all_f_patch_size): + patch_key = f"{patch_size}-{f_patch_size}" + patch_dim = f_patch_size * patch_size * patch_size * in_channels + self.all_x_embedder[patch_key] = nn.Linear(patch_dim, dim, bias=True) + self.all_final_layer[patch_key] = LLaDAImageFinalLayer(dim, patch_dim) + + self.noise_refiner = nn.ModuleList( + [ + LLaDAImageTransformerBlock(dim, n_heads, norm_eps, qk_norm, modulation=True) + for _ in range(n_refiner_layers) + ] + ) + self.context_refiner = nn.ModuleList( + [ + LLaDAImageTransformerBlock(dim, n_heads, norm_eps, qk_norm, modulation=False) + for _ in range(n_refiner_layers) + ] + ) + self.sigvq_refiner = nn.ModuleList( + [ + LLaDAImageTransformerBlock(dim, n_heads, norm_eps, qk_norm, modulation=False) + for _ in range(n_refiner_layers) + ] + ) + self.layers = nn.ModuleList( + [LLaDAImageTransformerBlock(dim, n_heads, norm_eps, qk_norm, modulation=True) for _ in range(n_layers)] + ) + + self.t_embedder = LLaDAImageTimestepEmbedder(min(dim, ADALN_EMBED_DIM)) + self.cap_embedder = nn.Sequential( + RMSNorm(cap_feat_dim, eps=norm_eps, elementwise_affine=False), + nn.Linear(cap_feat_dim, dim, bias=True), + ) + self.semantic_embedder = nn.Sequential( + RMSNorm(semantic_feat_dim, eps=norm_eps, elementwise_affine=False), + nn.Linear(semantic_feat_dim, dim, bias=True), + ) + self.sigvq_embedder = nn.Sequential( + RMSNorm(semantic_feat_dim, eps=norm_eps, elementwise_affine=False), + nn.Linear(semantic_feat_dim, dim, bias=True), + ) + + nn.init.normal_(self.semantic_embedder[1].weight, mean=0.0, std=0.02) + nn.init.zeros_(self.semantic_embedder[1].bias) + nn.init.normal_(self.sigvq_embedder[1].weight, mean=0.0, std=0.02) + nn.init.zeros_(self.sigvq_embedder[1].bias) + + self.x_pad_token = nn.Parameter(torch.zeros(1, dim)) + self.cap_pad_token = nn.Parameter(torch.zeros(1, dim)) + self.sigvq_pad_token = nn.Parameter(torch.zeros(1, dim)) + nn.init.normal_(self.sigvq_pad_token, mean=0.0, std=0.02) + + self.rope_embedder = LLaDAImageRopeEmbedder(rope_theta, axes_dims, axes_lens) + + @staticmethod + def _create_coordinate_grid( + size: tuple[int, int, int], + start: tuple[int, int, int], + device: torch.device, + ) -> torch.Tensor: + axes = [ + torch.arange(start_value, start_value + span, dtype=torch.int32, device=device) + for start_value, span in zip(start, size) + ] + return torch.stack(torch.meshgrid(axes, indexing="ij"), dim=-1) + + def _patchify_image( + self, + image: torch.Tensor, + patch_size: int, + f_patch_size: int, + ) -> tuple[torch.Tensor, tuple[int, int, int], tuple[int, int, int]]: + channels, frames, height, width = image.shape + frame_tokens = frames // f_patch_size + height_tokens = height // patch_size + width_tokens = width // patch_size + image = image.view( + channels, + frame_tokens, + f_patch_size, + height_tokens, + patch_size, + width_tokens, + patch_size, + ) + image = image.permute(1, 3, 5, 2, 4, 6, 0).reshape( + frame_tokens * height_tokens * width_tokens, + f_patch_size * patch_size * patch_size * channels, + ) + return image, (frames, height, width), (frame_tokens, height_tokens, width_tokens) + + def _pad_with_ids( + self, + features: torch.Tensor, + position_grid_size: tuple[int, int, int], + position_start: tuple[int, int, int], + noise_value: int | None = None, + ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor, int, list[int] | None]: + original_length = len(features) + padding_length = (-original_length) % SEQUENCE_MULTIPLE + padded_length = original_length + padding_length + device = features.device + + position_ids = self._create_coordinate_grid( + position_grid_size, + position_start, + device, + ).flatten(0, 2) + if padding_length > 0: + padding_position_ids = ( + self._create_coordinate_grid( + (1, 1, 1), + (0, 0, 0), + device, + ) + .flatten(0, 2) + .repeat(padding_length, 1) + ) + position_ids = torch.cat([position_ids, padding_position_ids], dim=0) + features = torch.cat([features, features[-1:].repeat(padding_length, 1)], dim=0) + padding_mask = torch.cat( + [ + torch.zeros(original_length, dtype=torch.bool, device=device), + torch.ones(padding_length, dtype=torch.bool, device=device), + ] + ) + else: + padding_mask = torch.zeros(original_length, dtype=torch.bool, device=device) + + noise_mask = [noise_value] * padded_length if noise_value is not None else None + return features, position_ids, padding_mask, padded_length, noise_mask + + @staticmethod + def _batch_sequences( + features: list[torch.Tensor], + frequencies: list[torch.Tensor], + inner_padding_masks: list[torch.Tensor], + pad_token: torch.Tensor, + noise_masks: list[list[int]] | None = None, + ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor | None, list[int], torch.Tensor | None]: + sequence_lengths = [len(item) for item in features] + max_sequence_length = max(sequence_lengths) + features = torch.cat(features, dim=0) + inner_padding_mask = torch.cat(inner_padding_masks).unsqueeze(-1) + features = torch.where( + inner_padding_mask.to(device=features.device), + pad_token.to(device=features.device, dtype=features.dtype), + features, + ) + features = list(features.split(sequence_lengths, dim=0)) + + features = pad_sequence(features, batch_first=True, padding_value=0.0) + frequencies = pad_sequence(frequencies, batch_first=True, padding_value=0.0)[:, : features.shape[1]] + + attention_mask = None + if not all(length == max_sequence_length for length in sequence_lengths): + attention_mask = torch.zeros( + (len(sequence_lengths), max_sequence_length), + dtype=torch.bool, + device=features.device, + ) + for batch_index, sequence_length in enumerate(sequence_lengths): + attention_mask[batch_index, :sequence_length] = True + + noise_mask = None + if noise_masks is not None: + noise_mask = pad_sequence( + [torch.tensor(mask, dtype=torch.long, device=features.device) for mask in noise_masks], + batch_first=True, + padding_value=0, + )[:, : features.shape[1]] + + return features, frequencies, attention_mask, sequence_lengths, noise_mask + + def _unpatchify( + self, + hidden_states: list[torch.Tensor], + sizes: list[tuple[int, int, int] | list[tuple[int, int, int]]], + patch_size: int, + f_patch_size: int, + image_offsets: list[tuple[int, int]] | None = None, + ) -> list[torch.Tensor]: + outputs = [] + for batch_index, batch_hidden_states in enumerate(hidden_states): + if image_offsets is None: + batch_sizes = [sizes[batch_index]] + image_hidden_states = batch_hidden_states + else: + batch_sizes = sizes[batch_index] + start, end = image_offsets[batch_index] + image_hidden_states = batch_hidden_states[start:end] + + current_offset = 0 + output = None + for frames, height, width in batch_sizes: + original_length = (frames // f_patch_size) * (height // patch_size) * (width // patch_size) + padding_length = (-original_length) % SEQUENCE_MULTIPLE + output = ( + image_hidden_states[current_offset : current_offset + original_length] + .view( + frames // f_patch_size, + height // patch_size, + width // patch_size, + f_patch_size, + patch_size, + patch_size, + self.out_channels, + ) + .permute(6, 0, 3, 1, 4, 2, 5) + .reshape(self.out_channels, frames, height, width) + ) + current_offset += original_length + padding_length + outputs.append(output) + return outputs + + def _prepare_t2i_sequences( + self, + x: list[torch.Tensor], + cap_feats: list[torch.Tensor] | None, + glm_features: list[torch.Tensor] | None, + patch_size: int, + f_patch_size: int, + ) -> tuple[ + _LLaDAImageSequence, + _LLaDAImageSequence | None, + _LLaDAImageSequence | None, + list[tuple[int, int, int]], + ]: + image_sequence = _LLaDAImageSequence([], [], []) + cap_sequence = _LLaDAImageSequence([], [], []) if cap_feats is not None else None + glm_sequence = _LLaDAImageSequence([], [], []) if glm_features is not None else None + image_sizes = [] + + for batch_index, latent in enumerate(x): + position_cursor = 1 + if cap_sequence is not None: + padded_features, position_ids, padding_mask, sequence_length, _ = self._pad_with_ids( + cap_feats[batch_index], + (len(cap_feats[batch_index]), 1, 1), + (position_cursor, 0, 0), + ) + cap_sequence.features.append(padded_features) + cap_sequence.position_ids.append(position_ids) + cap_sequence.padding_masks.append(padding_mask) + position_cursor += sequence_length + + if glm_sequence is not None: + padded_features, position_ids, padding_mask, sequence_length, _ = self._pad_with_ids( + glm_features[batch_index], + (len(glm_features[batch_index]), 1, 1), + (position_cursor, 0, 0), + ) + glm_sequence.features.append(padded_features) + glm_sequence.position_ids.append(position_ids) + glm_sequence.padding_masks.append(padding_mask) + position_cursor += sequence_length + + patches, image_size, token_grid_size = self._patchify_image(latent, patch_size, f_patch_size) + padded_features, position_ids, padding_mask, _, _ = self._pad_with_ids( + patches, + token_grid_size, + (position_cursor, 0, 0), + ) + image_sequence.features.append(padded_features) + image_sequence.position_ids.append(position_ids) + image_sequence.padding_masks.append(padding_mask) + image_sizes.append(image_size) + + return image_sequence, cap_sequence, glm_sequence, image_sizes + + def _prepare_editing_sequences( + self, + x: list[torch.Tensor], + cap_feats: list[torch.Tensor], + glm_cap_feats: list[torch.Tensor], + source_latents: list[torch.Tensor], + patch_size: int, + f_patch_size: int, + ) -> tuple[ + _LLaDAImageSequence, + _LLaDAImageSequence, + _LLaDAImageSequence, + list[list[tuple[int, int, int]]], + list[tuple[int, int]], + ]: + image_sequence = _LLaDAImageSequence([], [], [], []) + cap_sequence = _LLaDAImageSequence([], [], [], []) + sigvq_sequence = _LLaDAImageSequence([], [], [], []) + image_sizes = [] + image_offsets = [] + + for batch_index, latent in enumerate(x): + cap_end_positions = [] + position_cursor = 1 + batch_cap_features = [] + batch_cap_positions = [] + batch_cap_padding = [] + batch_cap_noise = [] + for noise_value in (0, 1): + padded_features, position_ids, padding_mask, _, noise_mask = self._pad_with_ids( + cap_feats[batch_index], + (len(cap_feats[batch_index]), 1, 1), + (position_cursor, 0, 0), + noise_value, + ) + batch_cap_features.append(padded_features) + batch_cap_positions.append(position_ids) + batch_cap_padding.append(padding_mask) + batch_cap_noise.extend(noise_mask) + position_cursor += len(cap_feats[batch_index]) + cap_end_positions.append(position_cursor) + position_cursor += 2 + + batch_image_features = [] + batch_image_sizes = [] + batch_image_positions = [] + batch_image_padding = [] + batch_image_noise = [] + for image, position_start, noise_value in zip( + (source_latents[batch_index], latent), + cap_end_positions, + (0, 1), + ): + patches, image_size, token_grid_size = self._patchify_image(image, patch_size, f_patch_size) + padded_features, position_ids, padding_mask, _, noise_mask = self._pad_with_ids( + patches, + token_grid_size, + (position_start, 0, 0), + noise_value, + ) + batch_image_features.append(padded_features) + batch_image_sizes.append(image_size) + batch_image_positions.append(position_ids) + batch_image_padding.append(padding_mask) + batch_image_noise.extend(noise_mask) + + batch_cap_features = torch.cat(batch_cap_features, dim=0) + batch_image_features = torch.cat(batch_image_features, dim=0) + cap_sequence.features.append(batch_cap_features) + cap_sequence.position_ids.append(torch.cat(batch_cap_positions, dim=0)) + cap_sequence.padding_masks.append(torch.cat(batch_cap_padding, dim=0)) + cap_sequence.noise_masks.append(batch_cap_noise) + image_sequence.features.append(batch_image_features) + image_sequence.position_ids.append(torch.cat(batch_image_positions, dim=0)) + image_sequence.padding_masks.append(torch.cat(batch_image_padding, dim=0)) + image_sequence.noise_masks.append(batch_image_noise) + image_sizes.append(batch_image_sizes) + image_offsets.append( + ( + len(batch_cap_features), + len(batch_cap_features) + len(batch_image_features), + ) + ) + + padded_features, position_ids, padding_mask, _, noise_mask = self._pad_with_ids( + glm_cap_feats[batch_index], + (len(glm_cap_feats[batch_index]), 1, 1), + (len(batch_cap_features) + len(batch_image_features) + 1, 0, 0), + 0, + ) + sigvq_sequence.features.append(padded_features) + sigvq_sequence.position_ids.append(position_ids) + sigvq_sequence.padding_masks.append(padding_mask) + sigvq_sequence.noise_masks.append(noise_mask) + + return image_sequence, cap_sequence, sigvq_sequence, image_sizes, image_offsets + + @staticmethod + def _merge_padded_sequences( + feature_groups: tuple[torch.Tensor, ...], + frequency_groups: tuple[torch.Tensor, ...], + length_groups: tuple[list[int], ...], + noise_mask_groups: tuple[torch.Tensor, ...] | None = None, + ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor | None, list[int], torch.Tensor | None]: + batch_size = feature_groups[0].shape[0] + merged_features = [] + merged_frequencies = [] + merged_noise_masks = [] if noise_mask_groups is not None else None + + for batch_index in range(batch_size): + device = feature_groups[0].device + merged_features.append( + torch.cat( + [ + features[batch_index, : lengths[batch_index]].to(device) + for features, lengths in zip(feature_groups, length_groups) + ], + dim=0, + ) + ) + merged_frequencies.append( + torch.cat( + [ + frequencies[batch_index, : lengths[batch_index]].to(device) + for frequencies, lengths in zip(frequency_groups, length_groups) + ], + dim=0, + ) + ) + if merged_noise_masks is not None: + merged_noise_masks.append( + torch.cat( + [ + noise_masks[batch_index, : lengths[batch_index]].to(device) + for noise_masks, lengths in zip(noise_mask_groups, length_groups) + ], + dim=0, + ) + ) + + merged_lengths = [len(features) for features in merged_features] + merged_features = pad_sequence(merged_features, batch_first=True, padding_value=0.0) + merged_frequencies = pad_sequence(merged_frequencies, batch_first=True, padding_value=0.0) + + attention_mask = None + max_length = max(merged_lengths) + if not all(length == max_length for length in merged_lengths): + attention_mask = torch.zeros( + (batch_size, max_length), + dtype=torch.bool, + device=merged_features.device, + ) + for batch_index, sequence_length in enumerate(merged_lengths): + attention_mask[batch_index, :sequence_length] = True + + noise_mask = None + if merged_noise_masks is not None: + noise_mask = pad_sequence(merged_noise_masks, batch_first=True, padding_value=0)[ + :, : merged_features.shape[1] + ] + + return merged_features, merged_frequencies, attention_mask, merged_lengths, noise_mask + + def forward( + self, + x: list[torch.Tensor], + t: torch.Tensor, + cap_feats: list[torch.Tensor] | None, + glm_cap_feats: list[torch.Tensor] | None = None, + source_latents: list[torch.Tensor] | None = None, + patch_size: int = 1, + f_patch_size: int = 1, + return_dict: bool = True, + ) -> Transformer2DModelOutput | tuple[list[torch.Tensor]]: + r""" + Args: + x (`list[torch.Tensor]`): + Target latents. Each tensor has shape `(channels, frames, height, width)`. + t (`torch.Tensor`): + Denoising timestep for each batch item. + cap_feats (`list[torch.Tensor]`, *optional*): + Projected QueryFormer features, each with shape `(sequence_length, cap_feat_dim)`. + glm_cap_feats (`list[torch.Tensor]`, *optional*): + GLM/SigVQ features, each with shape `(sequence_length, semantic_feat_dim)`. + source_latents (`list[torch.Tensor]`, *optional*): + Source-image latents for editing. When provided, `cap_feats` and `glm_cap_feats` are required. + patch_size (`int`, defaults to `1`): + Spatial patch size. + f_patch_size (`int`, defaults to `1`): + Temporal patch size. + return_dict (`bool`, defaults to `True`): + Whether to return a [`~models.modeling_outputs.Transformer2DModelOutput`]. + + Returns: + [`~models.modeling_outputs.Transformer2DModelOutput`] or `tuple`: + The denoised target latents. + """ + patch_key = f"{patch_size}-{f_patch_size}" + if patch_key not in self.all_x_embedder: + raise ValueError(f"Unsupported patch sizes: patch_size={patch_size}, f_patch_size={f_patch_size}.") + if source_latents is None and cap_feats is None and glm_cap_feats is None: + raise ValueError("Text-to-image inference requires `cap_feats` or `glm_cap_feats`.") + if source_latents is not None and (cap_feats is None or glm_cap_feats is None): + raise ValueError("Editing requires `cap_feats`, `glm_cap_feats`, and `source_latents`.") + + batch_size = len(x) + is_editing = source_latents is not None + adaln_input = None + noisy_embedding = None + clean_embedding = None + image_offsets = None + + if is_editing: + if t.shape[0] == 1: + t = t.repeat(batch_size) + dual_timestep = torch.cat([t, torch.zeros_like(t)], dim=0) + dual_embedding = self.t_embedder(dual_timestep.abs() * self.t_scale, x[0].dtype) + noisy_embedding = dual_embedding[:batch_size] + clean_embedding = dual_embedding[batch_size:] + image_sequence, cap_sequence, sigvq_sequence, image_sizes, image_offsets = self._prepare_editing_sequences( + x, + cap_feats, + glm_cap_feats, + source_latents, + patch_size, + f_patch_size, + ) + else: + adaln_input = self.t_embedder(t * self.t_scale, x[0].dtype) + glm_features = ( + [self.semantic_embedder(batch_features) for batch_features in glm_cap_feats] + if glm_cap_feats is not None + else None + ) + image_sequence, cap_sequence, glm_sequence, image_sizes = self._prepare_t2i_sequences( + x, + cap_feats, + glm_features, + patch_size, + f_patch_size, + ) + + image_lengths = [len(features) for features in image_sequence.features] + image_features = self.all_x_embedder[patch_key](torch.cat(image_sequence.features, dim=0)) + image_frequencies = list( + self.rope_embedder(torch.cat(image_sequence.position_ids, dim=0)).split( + [len(position_ids) for position_ids in image_sequence.position_ids], + dim=0, + ) + ) + image_features, image_frequencies, image_attention_mask, image_lengths, image_noise_mask = ( + self._batch_sequences( + list(image_features.split(image_lengths, dim=0)), + image_frequencies, + image_sequence.padding_masks, + self.x_pad_token, + image_sequence.noise_masks, + ) + ) + + for layer in self.noise_refiner: + if torch.is_grad_enabled() and self.gradient_checkpointing: + if is_editing: + image_features = self._gradient_checkpointing_func( + layer, + image_features, + image_attention_mask, + image_frequencies, + None, + image_noise_mask, + noisy_embedding, + clean_embedding, + ) + else: + image_features = self._gradient_checkpointing_func( + layer, + image_features, + image_attention_mask, + image_frequencies, + adaln_input, + ) + elif is_editing: + image_features = layer( + image_features, + image_attention_mask, + image_frequencies, + noise_mask=image_noise_mask, + adaln_noisy=noisy_embedding, + adaln_clean=clean_embedding, + ) + else: + image_features = layer( + image_features, + image_attention_mask, + image_frequencies, + adaln_input, + ) + + if is_editing: + cap_lengths = [len(features) for features in cap_sequence.features] + cap_features = self.cap_embedder(torch.cat(cap_sequence.features, dim=0)) + cap_frequencies = list( + self.rope_embedder(torch.cat(cap_sequence.position_ids, dim=0)).split( + [len(position_ids) for position_ids in cap_sequence.position_ids], + dim=0, + ) + ) + cap_features, cap_frequencies, cap_attention_mask, cap_lengths, cap_noise_mask = self._batch_sequences( + list(cap_features.split(cap_lengths, dim=0)), + cap_frequencies, + cap_sequence.padding_masks, + self.cap_pad_token, + cap_sequence.noise_masks, + ) + + for layer in self.context_refiner: + if torch.is_grad_enabled() and self.gradient_checkpointing: + cap_features = self._gradient_checkpointing_func( + layer, + cap_features, + cap_attention_mask, + cap_frequencies, + ) + else: + cap_features = layer( + cap_features, + cap_attention_mask, + cap_frequencies, + ) + + sigvq_lengths = [len(features) for features in sigvq_sequence.features] + sigvq_features = self.sigvq_embedder(torch.cat(sigvq_sequence.features, dim=0)) + sigvq_frequencies = list( + self.rope_embedder(torch.cat(sigvq_sequence.position_ids, dim=0)).split( + [len(position_ids) for position_ids in sigvq_sequence.position_ids], + dim=0, + ) + ) + ( + sigvq_features, + sigvq_frequencies, + sigvq_attention_mask, + sigvq_lengths, + sigvq_noise_mask, + ) = self._batch_sequences( + list(sigvq_features.split(sigvq_lengths, dim=0)), + sigvq_frequencies, + sigvq_sequence.padding_masks, + self.sigvq_pad_token, + sigvq_sequence.noise_masks, + ) + + for layer in self.sigvq_refiner: + if torch.is_grad_enabled() and self.gradient_checkpointing: + sigvq_features = self._gradient_checkpointing_func( + layer, + sigvq_features, + sigvq_attention_mask, + sigvq_frequencies, + ) + else: + sigvq_features = layer( + sigvq_features, + sigvq_attention_mask, + sigvq_frequencies, + ) + + ( + unified_features, + unified_frequencies, + unified_attention_mask, + _, + unified_noise_mask, + ) = self._merge_padded_sequences( + (cap_features, image_features, sigvq_features), + (cap_frequencies, image_frequencies, sigvq_frequencies), + (cap_lengths, image_lengths, sigvq_lengths), + (cap_noise_mask, image_noise_mask, sigvq_noise_mask), + ) + else: + condition_feature_groups = [] + condition_frequency_groups = [] + condition_length_groups = [] + + if cap_sequence is not None: + cap_lengths = [len(features) for features in cap_sequence.features] + cap_features = self.cap_embedder(torch.cat(cap_sequence.features, dim=0)) + cap_padding_mask = torch.cat(cap_sequence.padding_masks).unsqueeze(-1).to(cap_features.device) + cap_features = torch.where( + cap_padding_mask, + self.cap_pad_token.to(device=cap_features.device, dtype=cap_features.dtype), + cap_features, + ) + cap_features = pad_sequence( + list(cap_features.split(cap_lengths, dim=0)), + batch_first=True, + padding_value=0.0, + ) + cap_frequencies = list( + self.rope_embedder(torch.cat(cap_sequence.position_ids, dim=0)).split( + [len(position_ids) for position_ids in cap_sequence.position_ids], + dim=0, + ) + ) + cap_frequencies = pad_sequence(cap_frequencies, batch_first=True, padding_value=0.0) + condition_feature_groups.append(cap_features) + condition_frequency_groups.append(cap_frequencies) + condition_length_groups.append(cap_lengths) + + if glm_sequence is not None: + glm_lengths = [len(features) for features in glm_sequence.features] + glm_features = torch.cat(glm_sequence.features, dim=0) + glm_padding_mask = torch.cat(glm_sequence.padding_masks).unsqueeze(-1).to(glm_features.device) + glm_features = torch.where( + glm_padding_mask, + self.cap_pad_token.to(device=glm_features.device, dtype=glm_features.dtype), + glm_features, + ) + glm_features = pad_sequence( + list(glm_features.split(glm_lengths, dim=0)), + batch_first=True, + padding_value=0.0, + ) + glm_frequencies = list( + self.rope_embedder(torch.cat(glm_sequence.position_ids, dim=0)).split( + [len(position_ids) for position_ids in glm_sequence.position_ids], + dim=0, + ) + ) + glm_frequencies = pad_sequence(glm_frequencies, batch_first=True, padding_value=0.0) + condition_feature_groups.append(glm_features) + condition_frequency_groups.append(glm_frequencies) + condition_length_groups.append(glm_lengths) + + condition_features, condition_frequencies, condition_attention_mask, condition_lengths, _ = ( + self._merge_padded_sequences( + tuple(condition_feature_groups), + tuple(condition_frequency_groups), + tuple(condition_length_groups), + ) + ) + + for layer in self.context_refiner: + if torch.is_grad_enabled() and self.gradient_checkpointing: + condition_features = self._gradient_checkpointing_func( + layer, + condition_features, + condition_attention_mask, + condition_frequencies, + ) + else: + condition_features = layer( + condition_features, + condition_attention_mask, + condition_frequencies, + ) + + unified_features, unified_frequencies, unified_attention_mask, _, unified_noise_mask = ( + self._merge_padded_sequences( + (image_features, condition_features), + (image_frequencies, condition_frequencies), + (image_lengths, condition_lengths), + ) + ) + + for layer in self.layers: + if torch.is_grad_enabled() and self.gradient_checkpointing: + if is_editing: + unified_features = self._gradient_checkpointing_func( + layer, + unified_features, + unified_attention_mask, + unified_frequencies, + None, + unified_noise_mask, + noisy_embedding, + clean_embedding, + ) + else: + unified_features = self._gradient_checkpointing_func( + layer, + unified_features, + unified_attention_mask, + unified_frequencies, + adaln_input, + ) + elif is_editing: + unified_features = layer( + unified_features, + unified_attention_mask, + unified_frequencies, + noise_mask=unified_noise_mask, + adaln_noisy=noisy_embedding, + adaln_clean=clean_embedding, + ) + else: + unified_features = layer( + unified_features, + unified_attention_mask, + unified_frequencies, + adaln_input, + ) + + if is_editing: + unified_features = self.all_final_layer[patch_key]( + unified_features, + noise_mask=unified_noise_mask, + adaln_noisy=noisy_embedding, + adaln_clean=clean_embedding, + ) + else: + unified_features = self.all_final_layer[patch_key]( + unified_features, + adaln_input=adaln_input, + ) + + output = self._unpatchify( + list(unified_features.unbind(dim=0)), + image_sizes, + patch_size, + f_patch_size, + image_offsets, + ) + if not return_dict: + return (output,) + return Transformer2DModelOutput(sample=output) + + +@dataclass +class LLaDAImageQueryFormerOutput(BaseOutput): + query_embeds: torch.Tensor + + +class LLaDAImageQueryAttnProcessor: + _attention_backend = None + _parallel_config = None + + def __call__( + self, + attn: "LLaDAImageQueryAttention", + hidden_states: torch.Tensor, + encoder_hidden_states: torch.Tensor, + attention_mask: torch.Tensor | None = None, + ) -> torch.Tensor: + query = F.linear( + hidden_states, + attn.in_proj_weight[: attn.inner_dim], + attn.in_proj_bias[: attn.inner_dim], + ) + key = F.linear( + encoder_hidden_states, + attn.in_proj_weight[attn.inner_dim : 2 * attn.inner_dim], + attn.in_proj_bias[attn.inner_dim : 2 * attn.inner_dim], + ) + value = F.linear( + encoder_hidden_states, + attn.in_proj_weight[2 * attn.inner_dim :], + attn.in_proj_bias[2 * attn.inner_dim :], + ) + + query = query.unflatten(-1, (attn.heads, attn.head_dim)) + key = key.unflatten(-1, (attn.heads, attn.head_dim)) + value = value.unflatten(-1, (attn.heads, attn.head_dim)) + + if attention_mask is not None: + attention_mask = attention_mask[:, None, None, :] + + hidden_states = dispatch_attention_fn( + query, + key, + value, + attn_mask=attention_mask, + dropout_p=attn.dropout if attn.training else 0.0, + is_causal=False, + backend=self._attention_backend, + parallel_config=self._parallel_config, + ) + hidden_states = hidden_states.flatten(2, 3) + return attn.out_proj(hidden_states) + + +class LLaDAImageQueryAttention(nn.Module, AttentionModuleMixin): + _default_processor_cls = LLaDAImageQueryAttnProcessor + _available_processors = [LLaDAImageQueryAttnProcessor] + _supports_qkv_fusion = False + + def __init__(self, hidden_size: int, num_heads: int, dropout: float): + super().__init__() + self.inner_dim = hidden_size + self.heads = num_heads + self.head_dim = hidden_size // num_heads + self.dropout = dropout + + self.in_proj_weight = nn.Parameter(torch.zeros(3 * hidden_size, hidden_size)) + self.in_proj_bias = nn.Parameter(torch.zeros(3 * hidden_size)) + self.out_proj = nn.Linear(hidden_size, hidden_size, bias=True) + self.set_processor(self._default_processor_cls()) + + nn.init.xavier_uniform_(self.in_proj_weight) + nn.init.zeros_(self.in_proj_bias) + + def forward( + self, + hidden_states: torch.Tensor, + encoder_hidden_states: torch.Tensor, + attention_mask: torch.Tensor | None = None, + ) -> torch.Tensor: + return self.processor(self, hidden_states, encoder_hidden_states, attention_mask) + + +@maybe_allow_in_graph +class LLaDAImageQueryFormerBlock(nn.Module): + def __init__( + self, + hidden_size: int, + num_heads: int, + intermediate_size: int, + dropout: float, + norm_eps: float, + ): + super().__init__() + self.norm_q = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=norm_eps) + self.norm_k = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=norm_eps) + self.cross_attn = LLaDAImageQueryAttention(hidden_size, num_heads, dropout) + self.dropout = nn.Dropout(dropout) + self.norm1 = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=norm_eps) + self.mlp = nn.Module() + self.mlp.fc1 = nn.Linear(hidden_size, intermediate_size, bias=True) + self.mlp.fc2 = nn.Linear(intermediate_size, hidden_size, bias=True) + + def forward( + self, + query_embeds: torch.Tensor, + encoder_hidden_states: torch.Tensor, + attention_mask: torch.Tensor | None = None, + ) -> torch.Tensor: + query_embeds = self.norm_q(query_embeds) + encoder_hidden_states = self.norm_k(encoder_hidden_states) + attention_output = self.cross_attn(query_embeds, encoder_hidden_states, attention_mask) + query_embeds = query_embeds + self.dropout(attention_output) + query_embeds = self.norm1(query_embeds) + mlp_output = self.mlp.fc2(F.gelu(self.mlp.fc1(query_embeds), approximate="tanh")) + return query_embeds + self.dropout(mlp_output) + + +class LLaDAImageQueryFormerModel(ModelMixin, ConfigMixin, AttentionMixin): + r""" + QueryFormer used by LLaDA-Image to derive learnable image-generation queries from LLaDA token embeddings. + + This model is independent from the LLaDA text encoder. It returns refined query embeddings; the pipeline appends + them to the text embeddings and invokes the text encoder backbone. + + Args: + num_queries (`int`, defaults to `256`): + Number of learnable query tokens. + hidden_size (`int`, defaults to `2048`): + Query and LLaDA token embedding dimension. + num_hidden_layers (`int`, defaults to `1`): + Number of QueryFormer blocks. + num_attention_heads (`int`, defaults to `16`): + Number of cross-attention heads. + intermediate_size (`int`, defaults to `8192`): + Hidden dimension of the QueryFormer MLP. + dropout (`float`, defaults to `0.0`): + Dropout probability. + norm_eps (`float`, defaults to `1e-6`): + Epsilon used by parameter-free layer normalization. + """ + + _supports_gradient_checkpointing = True + _no_split_modules = ["LLaDAImageQueryFormerBlock"] + _repeated_blocks = ["LLaDAImageQueryFormerBlock"] + _skip_layerwise_casting_patterns = ["norm"] + + @register_to_config + def __init__( + self, + num_queries: int = 256, + hidden_size: int = 2048, + num_hidden_layers: int = 1, + num_attention_heads: int = 16, + intermediate_size: int = 8192, + dropout: float = 0.0, + norm_eps: float = 1e-6, + ): + super().__init__() + if hidden_size % num_attention_heads != 0: + raise ValueError( + f"`hidden_size` ({hidden_size}) must be divisible by `num_attention_heads` ({num_attention_heads})." + ) + + self.meta_queries = nn.Parameter(torch.zeros(num_queries, hidden_size)) + nn.init.normal_(self.meta_queries, std=1 / math.sqrt(hidden_size)) + self.query_blocks = nn.ModuleList( + [ + LLaDAImageQueryFormerBlock( + hidden_size, + num_attention_heads, + intermediate_size, + dropout, + norm_eps, + ) + for _ in range(num_hidden_layers) + ] + ) + self.gradient_checkpointing = False + + def forward( + self, + inputs_embeds: torch.Tensor, + attention_mask: torch.Tensor, + return_dict: bool = True, + ) -> LLaDAImageQueryFormerOutput | tuple[torch.Tensor]: + r""" + Args: + inputs_embeds (`torch.Tensor` of shape `(batch_size, sequence_length, hidden_size)`): + LLaDA input token embeddings. + attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`): + Mask whose nonzero entries identify valid text tokens. + return_dict (`bool`, defaults to `True`): + Whether to return [`LLaDAImageQueryFormerOutput`] instead of a tuple. + + Returns: + [`LLaDAImageQueryFormerOutput`] or `tuple`: + The refined query embeddings. + """ + batch_size = inputs_embeds.shape[0] + query_embeds = self.meta_queries.unsqueeze(0).expand(batch_size, -1, -1) + attention_mask = attention_mask.bool() + + for query_block in self.query_blocks: + if torch.is_grad_enabled() and self.gradient_checkpointing: + query_embeds = self._gradient_checkpointing_func( + query_block, + query_embeds, + inputs_embeds, + attention_mask, + ) + else: + query_embeds = query_block(query_embeds, inputs_embeds, attention_mask) + + if not return_dict: + return (query_embeds,) + return LLaDAImageQueryFormerOutput(query_embeds=query_embeds) + + +@dataclass +class LLaDAImageTextProjectionOutput(BaseOutput): + hidden_states: torch.Tensor + + +class LLaDAImageTextProjectionAttnProcessor: + _attention_backend = None + _parallel_config = None + + def __call__( + self, + attn: "LLaDAImageTextProjectionAttention", + hidden_states: torch.Tensor, + ) -> torch.Tensor: + query = attn.q_proj(hidden_states).unflatten(-1, (attn.heads, attn.head_dim)) + key = attn.k_proj(hidden_states).unflatten(-1, (attn.heads, attn.head_dim)) + value = attn.v_proj(hidden_states).unflatten(-1, (attn.heads, attn.head_dim)) + + query = attn.q_norm(query) + key = attn.k_norm(key) + + hidden_states = dispatch_attention_fn( + query, + key, + value, + attn_mask=None, + dropout_p=attn.dropout if attn.training else 0.0, + is_causal=False, + backend=self._attention_backend, + parallel_config=self._parallel_config, + ) + hidden_states = hidden_states.flatten(2, 3) + return attn.out_proj(hidden_states) + + +class LLaDAImageTextProjectionAttention(nn.Module, AttentionModuleMixin): + _default_processor_cls = LLaDAImageTextProjectionAttnProcessor + _available_processors = [LLaDAImageTextProjectionAttnProcessor] + _supports_qkv_fusion = False + + def __init__(self, hidden_size: int, num_attention_heads: int, attention_dropout: float, norm_eps: float): + super().__init__() + self.heads = num_attention_heads + self.head_dim = hidden_size // num_attention_heads + self.dropout = attention_dropout + + self.k_proj = nn.Linear(hidden_size, hidden_size, bias=True) + self.v_proj = nn.Linear(hidden_size, hidden_size, bias=True) + self.q_proj = nn.Linear(hidden_size, hidden_size, bias=True) + self.out_proj = nn.Linear(hidden_size, hidden_size, bias=True) + self.q_norm = RMSNorm(self.head_dim, eps=norm_eps, elementwise_affine=False) + self.k_norm = RMSNorm(self.head_dim, eps=norm_eps, elementwise_affine=False) + self.set_processor(self._default_processor_cls()) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + return self.processor(self, hidden_states) + + +class LLaDAImageTextProjectionMLP(nn.Module): + def __init__(self, hidden_size: int, intermediate_size: int): + super().__init__() + self.fc1 = nn.Linear(hidden_size, intermediate_size, bias=True) + self.fc2 = nn.Linear(intermediate_size, hidden_size, bias=True) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + hidden_states = self.fc1(hidden_states) + hidden_states = F.gelu(hidden_states, approximate="tanh") + return self.fc2(hidden_states) + + +@maybe_allow_in_graph +class LLaDAImageTextProjectionBlock(nn.Module): + def __init__( + self, + hidden_size: int, + intermediate_size: int, + num_attention_heads: int, + attention_dropout: float, + norm_eps: float, + ): + super().__init__() + self.self_attn = LLaDAImageTextProjectionAttention( + hidden_size, + num_attention_heads, + attention_dropout, + norm_eps, + ) + self.layer_norm1 = RMSNorm(hidden_size, eps=norm_eps, elementwise_affine=False) + self.mlp = LLaDAImageTextProjectionMLP(hidden_size, intermediate_size) + self.layer_norm2 = RMSNorm(hidden_size, eps=norm_eps, elementwise_affine=False) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + hidden_states = hidden_states + self.self_attn(self.layer_norm1(hidden_states)) + hidden_states = hidden_states + self.mlp(self.layer_norm2(hidden_states)) + return hidden_states + + +class LLaDAImageTextProjectionModel(ModelMixin, ConfigMixin, AttentionMixin): + r""" + Connector and output projection used to map LLaDA hidden states to the LLaDA-Image denoiser context dimension. + + Args: + hidden_size (`int`, defaults to `2048`): + Input and connector hidden dimension. + intermediate_size (`int`, defaults to `8960`): + Connector MLP hidden dimension. + num_hidden_layers (`int`, defaults to `6`): + Number of connector layers. + num_attention_heads (`int`, defaults to `32`): + Number of connector self-attention heads. + projection_dim (`int`, defaults to `2560`): + Output dimension expected by the denoising transformer. + attention_dropout (`float`, defaults to `0.0`): + Attention dropout probability. + norm_eps (`float`, defaults to `1e-6`): + Epsilon used by parameter-free RMS normalization. + """ + + _supports_gradient_checkpointing = True + _no_split_modules = ["LLaDAImageTextProjectionBlock"] + _repeated_blocks = ["LLaDAImageTextProjectionBlock"] + _skip_layerwise_casting_patterns = ["layer_norm", "q_norm", "k_norm"] + + @register_to_config + def __init__( + self, + hidden_size: int = 2048, + intermediate_size: int = 8960, + num_hidden_layers: int = 6, + num_attention_heads: int = 32, + projection_dim: int = 2560, + attention_dropout: float = 0.0, + norm_eps: float = 1e-6, + ): + super().__init__() + if hidden_size % num_attention_heads != 0: + raise ValueError( + f"`hidden_size` ({hidden_size}) must be divisible by `num_attention_heads` ({num_attention_heads})." + ) + + self.layers = nn.ModuleList( + [ + LLaDAImageTextProjectionBlock( + hidden_size, + intermediate_size, + num_attention_heads, + attention_dropout, + norm_eps, + ) + for _ in range(num_hidden_layers) + ] + ) + self.projector = nn.Linear(hidden_size, projection_dim, bias=True) + self.gradient_checkpointing = False + + def forward( + self, + hidden_states: torch.Tensor, + return_dict: bool = True, + ) -> LLaDAImageTextProjectionOutput | tuple[torch.Tensor]: + r""" + Args: + hidden_states (`torch.Tensor` of shape `(batch_size, sequence_length, hidden_size)`): + Hidden states produced by the LLaDA text backbone. + return_dict (`bool`, defaults to `True`): + Whether to return [`LLaDAImageTextProjectionOutput`] instead of a tuple. + + Returns: + [`LLaDAImageTextProjectionOutput`] or `tuple`: + Hidden states projected to the denoiser caption dimension. + """ + for layer in self.layers: + if torch.is_grad_enabled() and self.gradient_checkpointing: + hidden_states = self._gradient_checkpointing_func(layer, hidden_states) + else: + hidden_states = layer(hidden_states) + + hidden_states = self.projector(hidden_states) + if not return_dict: + return (hidden_states,) + return LLaDAImageTextProjectionOutput(hidden_states=hidden_states) + + +@dataclass +class LLaDAImageSigVQOutput(BaseOutput): + semantic_features: torch.Tensor + token_ids: torch.Tensor + + +class LLaDAImageSigVQAttnProcessor: + _attention_backend = None + _parallel_config = None + + def __call__(self, attn: "LLaDAImageSigVQAttention", hidden_states: torch.Tensor) -> torch.Tensor: + query, key, value = attn.qkv(hidden_states).chunk(3, dim=-1) + query = query.unflatten(-1, (attn.heads, attn.head_dim)) + key = key.unflatten(-1, (attn.heads, attn.head_dim)) + value = value.unflatten(-1, (attn.heads, attn.head_dim)) + + hidden_states = dispatch_attention_fn( + query, + key, + value, + attn_mask=None, + dropout_p=attn.dropout if attn.training else 0.0, + is_causal=False, + backend=self._attention_backend, + parallel_config=self._parallel_config, + ) + hidden_states = hidden_states.flatten(2, 3) + return attn.proj(hidden_states) + + +class LLaDAImageSigVQAttention(nn.Module, AttentionModuleMixin): + _default_processor_cls = LLaDAImageSigVQAttnProcessor + _available_processors = [LLaDAImageSigVQAttnProcessor] + _supports_qkv_fusion = False + + def __init__( + self, + hidden_size: int, + num_attention_heads: int, + attention_bias: bool, + attention_dropout: float, + ): + super().__init__() + self.heads = num_attention_heads + self.head_dim = hidden_size // num_attention_heads + self.dropout = attention_dropout + self.qkv = nn.Linear(hidden_size, 3 * hidden_size, bias=attention_bias) + self.proj = nn.Linear(hidden_size, hidden_size, bias=attention_bias) + self.set_processor(self._default_processor_cls()) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + return self.processor(self, hidden_states) + + +class LLaDAImageSigVQMLP(nn.Module): + def __init__(self, hidden_size: int, intermediate_size: int): + super().__init__() + self.fc1 = nn.Linear(hidden_size, intermediate_size, bias=True) + self.fc2 = nn.Linear(intermediate_size, hidden_size, bias=True) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + return self.fc2(F.gelu(self.fc1(hidden_states))) + + +@maybe_allow_in_graph +class LLaDAImageSigVQVisionBlock(nn.Module): + def __init__( + self, + hidden_size: int, + intermediate_size: int, + num_attention_heads: int, + attention_bias: bool, + attention_dropout: float, + norm_eps: float, + ): + super().__init__() + self.norm1 = nn.LayerNorm(hidden_size, eps=norm_eps) + self.norm2 = nn.LayerNorm(hidden_size, eps=norm_eps) + self.attn = LLaDAImageSigVQAttention( + hidden_size, + num_attention_heads, + attention_bias, + attention_dropout, + ) + self.mlp = LLaDAImageSigVQMLP(hidden_size, intermediate_size) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + hidden_states = hidden_states + self.attn(self.norm1(hidden_states)) + hidden_states = hidden_states + self.mlp(self.norm2(hidden_states)) + return hidden_states + + +class LLaDAImageSigVQPatchEmbed(nn.Module): + def __init__(self, in_channels: int, hidden_size: int, patch_size: int): + super().__init__() + self.in_channels = in_channels + self.patch_size = patch_size + self.proj = nn.Conv2d(in_channels, hidden_size, kernel_size=patch_size, stride=patch_size) + + def forward(self, pixel_values: torch.Tensor) -> torch.Tensor: + batch_size, channels, height, width = pixel_values.shape + grid_height = height // self.patch_size + grid_width = width // self.patch_size + patches = pixel_values.reshape( + batch_size, + channels, + grid_height, + self.patch_size, + grid_width, + self.patch_size, + ) + patches = patches.permute(0, 2, 4, 1, 3, 5).reshape( + batch_size * grid_height * grid_width, + channels, + self.patch_size, + self.patch_size, + ) + hidden_states = self.proj(patches).flatten(1) + return hidden_states.reshape(batch_size, grid_height * grid_width, -1) + + +class LLaDAImageSigVQEmbeddings(nn.Module): + def __init__(self, image_size: int, patch_size: int, hidden_size: int): + super().__init__() + num_positions = (image_size // patch_size) ** 2 + self.position_embedding = nn.Embedding(num_positions, hidden_size) + + def forward(self, hidden_states: torch.Tensor, grid_height: int, grid_width: int) -> torch.Tensor: + batch_size = hidden_states.shape[0] + position_embedding = self.position_embedding.weight + hidden_size = position_embedding.shape[1] + original_size = int(position_embedding.shape[0] ** 0.5) + position_embedding = position_embedding.reshape(original_size, original_size, hidden_size) + position_embedding = position_embedding.permute(2, 0, 1).unsqueeze(0).float() + + height_coordinates = torch.arange(grid_height, device=hidden_states.device, dtype=torch.float32) + width_coordinates = torch.arange(grid_width, device=hidden_states.device, dtype=torch.float32) + height_coordinates, width_coordinates = torch.meshgrid( + height_coordinates, + width_coordinates, + indexing="ij", + ) + normalized_width = ((width_coordinates.flatten() + 0.5) / grid_width) * 2 - 1 + normalized_height = ((height_coordinates.flatten() + 0.5) / grid_height) * 2 - 1 + grid = torch.stack((normalized_width, normalized_height), dim=-1) + grid = grid.reshape(1, grid_height * grid_width, 1, 2).expand(batch_size, -1, -1, -1) + + position_embedding = F.grid_sample( + position_embedding.expand(batch_size, -1, -1, -1), + grid, + mode="bilinear", + align_corners=False, + padding_mode="border", + ) + position_embedding = position_embedding.squeeze(-1).transpose(1, 2).to(hidden_states.dtype) + return hidden_states + position_embedding + + +class LLaDAImageSigVQQuantizer(nn.Module): + def __init__(self, num_embeddings: int, embedding_dim: int): + super().__init__() + self.embedding = nn.Embedding(num_embeddings, embedding_dim) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + hidden_states = hidden_states.permute(0, 2, 3, 1).contiguous() + hidden_states = F.normalize(hidden_states.reshape(-1, hidden_states.shape[-1]), p=2, dim=-1) + embedding = F.normalize(self.embedding.weight, p=2, dim=-1) + distances = ( + torch.sum(hidden_states**2, dim=1, keepdim=True) + + torch.sum(embedding**2, dim=1) + - 2 * torch.matmul(hidden_states, embedding.t()) + ) + return torch.argmin(distances, dim=1) + + +class LLaDAImageSigVQModel(ModelMixin, ConfigMixin, AttentionMixin): + r""" + Minimal GLM SigVQ image encoder used by LLaDA-Image editing. + + The model contains only the GLM vision encoder, VQ quantizer, and prior token projection used during inference. + Input images must already be RGB tensors normalized to `[-1, 1]`, have one common size, and be divisible by + `patch_size`. + """ + + _supports_gradient_checkpointing = True + _no_split_modules = ["LLaDAImageSigVQVisionBlock"] + _repeated_blocks = ["LLaDAImageSigVQVisionBlock"] + _skip_layerwise_casting_patterns = ["patch_embed", "position_embedding", "norm", "quantize"] + + @register_to_config + def __init__( + self, + image_size: int = 2048, + patch_size: int = 16, + in_channels: int = 3, + hidden_size: int = 1536, + intermediate_size: int = 6144, + num_hidden_layers: int = 40, + num_attention_heads: int = 16, + attention_bias: bool = True, + attention_dropout: float = 0.0, + norm_eps: float = 1e-6, + codebook_size: int = 16384, + codebook_embed_dim: int = 2048, + semantic_embed_dim: int = 4096, + ): + super().__init__() + if hidden_size % num_attention_heads != 0: + raise ValueError( + f"`hidden_size` ({hidden_size}) must be divisible by `num_attention_heads` ({num_attention_heads})." + ) + + self.visual = nn.Module() + self.visual.patch_embed = LLaDAImageSigVQPatchEmbed(in_channels, hidden_size, patch_size) + self.visual.embeddings = LLaDAImageSigVQEmbeddings(image_size, patch_size, hidden_size) + self.visual.blocks = nn.ModuleList( + [ + LLaDAImageSigVQVisionBlock( + hidden_size, + intermediate_size, + num_attention_heads, + attention_bias, + attention_dropout, + norm_eps, + ) + for _ in range(num_hidden_layers) + ] + ) + + self.vqmodel = nn.Module() + self.vqmodel.quant_conv = nn.Conv2d(hidden_size, codebook_embed_dim, kernel_size=1) + self.vqmodel.quantize = LLaDAImageSigVQQuantizer(codebook_size, codebook_embed_dim) + + self.prior_token_embedding = nn.Embedding(codebook_size, semantic_embed_dim) + self.prior_projector = FeedForward( + semantic_embed_dim, + semantic_embed_dim, + inner_dim=semantic_embed_dim, + activation_fn="linear-silu", + ) + self.gradient_checkpointing = False + + def forward( + self, + pixel_values: torch.Tensor | None = None, + token_ids: torch.Tensor | None = None, + return_dict: bool = True, + ) -> LLaDAImageSigVQOutput | tuple[torch.Tensor, torch.Tensor]: + r""" + Args: + pixel_values (`torch.Tensor` of shape `(batch_size, 3, height, width)`, *optional*): + RGB images normalized to `[-1, 1]`. Mutually exclusive with `token_ids`. + token_ids (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*): + Precomputed VQ codebook IDs. Mutually exclusive with `pixel_values`. + return_dict (`bool`, defaults to `True`): + Whether to return [`LLaDAImageSigVQOutput`] instead of a tuple. + + Returns: + [`LLaDAImageSigVQOutput`] or `tuple`: + The projected semantic features and their discrete token IDs. + """ + if (pixel_values is None) == (token_ids is None): + raise ValueError("Provide exactly one of `pixel_values` or `token_ids`.") + + if pixel_values is not None: + if pixel_values.ndim != 4: + raise ValueError(f"`pixel_values` must have 4 dimensions, got shape {tuple(pixel_values.shape)}.") + height, width = pixel_values.shape[-2:] + if height % self.config.patch_size != 0 or width % self.config.patch_size != 0: + raise ValueError( + f"Image height and width must be divisible by {self.config.patch_size}, got {height}x{width}." + ) + + grid_height = height // self.config.patch_size + grid_width = width // self.config.patch_size + hidden_states = self.visual.patch_embed(pixel_values) + hidden_states = self.visual.embeddings(hidden_states, grid_height, grid_width) + + for block in self.visual.blocks: + if torch.is_grad_enabled() and self.gradient_checkpointing: + hidden_states = self._gradient_checkpointing_func(block, hidden_states) + else: + hidden_states = block(hidden_states) + + hidden_states = hidden_states.transpose(1, 2).reshape( + pixel_values.shape[0], + self.config.hidden_size, + grid_height, + grid_width, + ) + hidden_states = self.vqmodel.quant_conv(hidden_states) + token_ids = self.vqmodel.quantize(hidden_states).reshape(pixel_values.shape[0], -1) + elif token_ids.ndim != 2: + raise ValueError(f"`token_ids` must have 2 dimensions, got shape {tuple(token_ids.shape)}.") + + semantic_features = self.prior_projector(self.prior_token_embedding(token_ids)) + + if not return_dict: + return semantic_features, token_ids + return LLaDAImageSigVQOutput(semantic_features=semantic_features, token_ids=token_ids) diff --git a/pipelines/model_llada.py b/pipelines/model_llada.py new file mode 100644 index 000000000..647cd059c --- /dev/null +++ b/pipelines/model_llada.py @@ -0,0 +1,80 @@ +import diffusers +from modules import shared, devices, sd_models, sd_hijack_te, sd_hijack_vae +from modules.logger import log +from pipelines import generic + + +def load_llada_image(checkpoint_info, diffusers_load_config=None): + if diffusers_load_config is None: + diffusers_load_config = {} + repo_id = sd_models.path_to_repo(checkpoint_info) + sd_models.hf_auth_check(checkpoint_info) + log.debug(f'Load model: type=LLaDAImage repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype}') + + from pipelines.llada import LLaDAImagePipeline + from pipelines.llada.transformer_llada_image import LLaDAImageTransformer2DModel + from pipelines.llada.modeling_llada2uni_moe import LLaDA2MoeModelLM + + generic.set_pipeline('LLaDAImage', LLaDAImagePipeline) + if repo_id is None or repo_id.lower() == 'none': + return None + + if 'Model' in shared.opts.sdnq_quantize_weights: + if any(x in shared.opts.sdnq_quantize_weights_mode for x in ['2', '3', '4', '5', '6']): + shared.opts.sdnq_quantize_weights_mode = 'uint8' + log.warning('LLaDAImage: cls=LLaDAImageTransformer2DModel quant=uint8 override') + if 'TE' in shared.opts.sdnq_quantize_weights: + if any(x in shared.opts.sdnq_quantize_weights_mode_te for x in ['2', '3', '4', '5', '6']): + shared.opts.sdnq_quantize_weights_mode_te = 'uint8' + log.warning('LLaDAImage: cls=LLaDA2MoeModelLM quant=uint8 override') + if shared.opts.sdnq_quantize_matmul_mode_te != 'disabled': + shared.opts.sdnq_quantize_matmul_mode_te = 'disabled' + log.warning('LLaDAImage: cls=LLaDA2MoeModelLM matmul=disabled override') + + transformer = generic.load_transformer( + repo_id, + cls_name=LLaDAImageTransformer2DModel, + load_config=diffusers_load_config, + modules_to_not_convert=[ + 'all_x_embedder', + 'all_final_layer', + 't_embedder', + 'cap_embedder', + 'semantic_embedder', + 'sigvq_embedder', + ], + ) + text_encoder = generic.load_text_encoder( + repo_id, + cls_name=LLaDA2MoeModelLM, + load_config=diffusers_load_config, + allow_shared=False, + trust_remote_code=True, + modules_to_not_convert=[ + '.model.language_model.word_embeddings', + '.model.language_model.norm', + '.model.lm_head', + ], + ) + + diffusers.pipelines.auto_pipeline.AUTO_TEXT2IMAGE_PIPELINES_MAPPING['llada-image'] = LLaDAImagePipeline + diffusers.pipelines.auto_pipeline.AUTO_IMAGE2IMAGE_PIPELINES_MAPPING['llada-image'] = LLaDAImagePipeline + + pipe = LLaDAImagePipeline.from_pretrained( + repo_id, + cache_dir=shared.opts.diffusers_dir, + torch_dtype=devices.dtype, + transformer=transformer, + text_encoder=text_encoder, + ) + pipe.task_args = { + 'output_type': 'np', + 'generation_mode': 'text', + } + # generation_mode = "text", "vq", "editing" + + del transformer, text_encoder + sd_hijack_te.init_hijack(pipe) + sd_hijack_vae.init_hijack(pipe) + devices.torch_gc(force=True, reason='load') + return pipe From 9b06cfef808b284cd6e696ac042fde4f24c8d141 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 13:36:18 +0200 Subject: [PATCH 136/270] add llada editing Signed-off-by: Vladimir Mandic --- modules/processing_args.py | 5 +++++ pipelines/llada/transformer_llada_image.py | 10 ++++++++-- pipelines/model_llada.py | 1 - 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/modules/processing_args.py b/modules/processing_args.py index 52a68cdce..42088f8b9 100644 --- a/modules/processing_args.py +++ b/modules/processing_args.py @@ -110,6 +110,11 @@ def task_specific_kwargs(p, model): 'height': p.height, 'input_images': [p.init_images], # omnigen expects list-of-lists } + elif model_cls == 'LLaDAImagePipeline': + task_args = { + 'generation_mode': 'editing', + 'image': p.init_images[0], + } elif task_type == sd_models.DiffusersTaskType.INSTRUCT and len(getattr(p, 'init_images', [])) > 0: p.ops.append('instruct') task_args = { diff --git a/pipelines/llada/transformer_llada_image.py b/pipelines/llada/transformer_llada_image.py index d1aa783d2..29cb06d00 100644 --- a/pipelines/llada/transformer_llada_image.py +++ b/pipelines/llada/transformer_llada_image.py @@ -1705,7 +1705,10 @@ class LLaDAImageSigVQEmbeddings(nn.Module): hidden_size = position_embedding.shape[1] original_size = int(position_embedding.shape[0] ** 0.5) position_embedding = position_embedding.reshape(original_size, original_size, hidden_size) - position_embedding = position_embedding.permute(2, 0, 1).unsqueeze(0).float() + position_embedding = position_embedding.permute(2, 0, 1).unsqueeze(0).to( + device=hidden_states.device, + dtype=torch.float32, + ) height_coordinates = torch.arange(grid_height, device=hidden_states.device, dtype=torch.float32) width_coordinates = torch.arange(grid_width, device=hidden_states.device, dtype=torch.float32) @@ -1738,7 +1741,10 @@ class LLaDAImageSigVQQuantizer(nn.Module): def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: hidden_states = hidden_states.permute(0, 2, 3, 1).contiguous() hidden_states = F.normalize(hidden_states.reshape(-1, hidden_states.shape[-1]), p=2, dim=-1) - embedding = F.normalize(self.embedding.weight, p=2, dim=-1) + embedding = F.normalize(self.embedding.weight, p=2, dim=-1).to( + device=hidden_states.device, + dtype=hidden_states.dtype, + ) distances = ( torch.sum(hidden_states**2, dim=1, keepdim=True) + torch.sum(embedding**2, dim=1) diff --git a/pipelines/model_llada.py b/pipelines/model_llada.py index 647cd059c..bd0a1297e 100644 --- a/pipelines/model_llada.py +++ b/pipelines/model_llada.py @@ -69,7 +69,6 @@ def load_llada_image(checkpoint_info, diffusers_load_config=None): ) pipe.task_args = { 'output_type': 'np', - 'generation_mode': 'text', } # generation_mode = "text", "vq", "editing" From b59e693364cc566fad76694be32530179d2aeb34 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 13:43:09 +0200 Subject: [PATCH 137/270] lint Signed-off-by: Vladimir Mandic --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 53d33f768..03a0db4c2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -136,6 +136,7 @@ main.ignore-paths=[ "pipelines/flex2", "pipelines/hdm", "pipelines/hidream", + "pipelines/llada", "pipelines/lumina_dimmo", "pipelines/mageflow", "pipelines/meissonic", From cd88d2ae3416fc3c83a4864071cbad85fafe54b6 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 5 Sep 2026 18:39:04 +0100 Subject: [PATCH 138/270] fix(lora): route codebook layers on the mean level gap SDNQ codebook layers keep their Lloyd levels in the scale slot, so reading scale.mean() as the grid step returned the levels' near-zero mean and sent sub-step deltas to requantize, where the grid erases them. grid_step returns the mean adjacent-level gap for those layers and the plain scale mean otherwise. --- modules/lora/lora_sdnq.py | 12 ++++++++++-- test/test-sdnq-lora-factors.py | 29 ++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/modules/lora/lora_sdnq.py b/modules/lora/lora_sdnq.py index 3c39979db..94a5ab965 100644 --- a/modules/lora/lora_sdnq.py +++ b/modules/lora/lora_sdnq.py @@ -290,6 +290,14 @@ def host_candidate(self, network_layer_name, wanted_names): return True +def grid_step(self): + """Mean grid step in weight units; a codebook layer keeps its Lloyd levels in the scale slot, so its step is their mean adjacent gap.""" + scale = self.scale.detach().float() + if self.sdnq_dequantizer.use_codebook: + return float(scale.diff(dim=-1).mean()) + return float(scale.mean()) + + def apply_cached(self, network_layer_name, wanted_names): """Attach a hosted set straight from the factor cache, before the delta exists. @@ -322,7 +330,7 @@ def apply_cached(self, network_layer_name, wanted_names): if factors is not None: members.append(factors) if not stack_dense and len(members) == 0 and self.svd_up is None: - step = float(self.scale.detach().float().mean()) + step = grid_step(self) if step > 0 and rms / step > REQUANT_RATIO and energy < REQUANT_ENERGY: return None # routed to the grid: the caller assembles the delta and requantizes ups, downs = [], [] @@ -382,7 +390,7 @@ def apply_hosted(self, network_layer_name, updown, wanted_names): delta_rms = float(updown.detach().float().square().mean().sqrt()) maybe_requant = not stack_dense and len(members) == 0 and self.svd_up is None if maybe_requant: - step = float(self.scale.detach().float().mean()) + step = grid_step(self) maybe_requant = step > 0 and delta_rms / step > REQUANT_RATIO lora_factor_cache.begin_pass(wanted_names) diff --git a/test/test-sdnq-lora-factors.py b/test/test-sdnq-lora-factors.py index 82a125283..f6ffa00b7 100644 --- a/test/test-sdnq-lora-factors.py +++ b/test/test-sdnq-lora-factors.py @@ -119,13 +119,13 @@ def run_test(cat: str, fn): traceback.print_exc() -def build_layer(weights_dtype='uint4', use_quantized_matmul=False, seed=0, use_hadamard=True, use_svd=False): +def build_layer(weights_dtype='uint4', use_quantized_matmul=False, seed=0, use_hadamard=True, use_svd=False, use_codebook=False): torch.manual_seed(seed) lin = torch.nn.Linear(IN_F, OUT_F, bias=False, dtype=torch.bfloat16, device=DEVICE) with torch.no_grad(): lin.weight.copy_(torch.randn(OUT_F, IN_F, device=DEVICE) * 0.04) cfg = SDNQConfig(weights_dtype=weights_dtype, group_size=0, hadamard_group_size=256, use_hadamard=use_hadamard, - use_svd=use_svd, svd_rank=32, use_quantized_matmul=use_quantized_matmul, dequantize_fp32=False, + use_svd=use_svd, svd_rank=32, use_quantized_matmul=use_quantized_matmul, dequantize_fp32=False, use_codebook=use_codebook, quantization_device=str(DEVICE), return_device=str(DEVICE)) layer, _ = sdnq_quantize_layer(lin, cfg, torch_dtype=torch.bfloat16, param_name='test.weight') layer.network_layer_name = 'lora_transformer_test' @@ -956,6 +956,29 @@ def test_route_rule_terms_gate_both_ways(): return True +def test_route_codebook_layer_uses_level_gap(): + layer = build_layer('uint4', use_codebook=True) + scale = layer.scale.detach().float() + assert layer.sdnq_dequantizer.use_codebook and scale.shape[-1] == 16, f'the fixture must keep its lloyd levels in the scale slot, got {tuple(scale.shape)}' + step = lora_sdnq.grid_step(layer) + gap = float(scale.diff(dim=-1).mean()) + assert step > 0 and abs(step - gap) <= 1e-6 * gap, f'a codebook layer routes on the mean adjacent-level gap: step={step:.3e} gap={gap:.3e}' + affine = lora_sdnq.grid_step(build_layer('uint4')) + assert 0.5 < step / affine < 2.0, f'codebook and affine steps on the same weights must agree in magnitude: cb={step:.3e} affine={affine:.3e}' + torch.manual_seed(31) + D = torch.randn(OUT_F, IN_F, device=DEVICE) * 3e-3 # dense and below the true step: hosted on the affine fixture, while the level mean misreads it as fat and requantizes it away + net = make_dense_net('cbmid', layer, D) + with host_rank(256), mock_model(lin=layer): + Wdq0 = dq(layer) + activate(net) + assert hasattr(layer, 'sdnq_lora_svd_stash'), 'a sub-step dense delta must stay hosted on a codebook layer' + rho = rho_of(dq(layer) - Wdq0, D) + assert rho > 0.7, f'hosting must retain the sub-step delta the grid would erase: rho={rho:.3f}' + activate() + assert torch.equal(dq(layer), Wdq0), 'removing the hosted set must restore the codebook layer bit-exactly' + return True + + def test_route_low_rank_fat_delta_stays_hosted(): layer = build_layer('uint4') _A, _B, D = make_delta(seed=22, sigma=3e-3) # rank-8: fat against the grid, exact under the cap @@ -2989,7 +3012,7 @@ def run_tests(): for fn in [test_hosted_low_rank_delta_is_kept, test_hosted_dense_delta_beats_requant, test_hosted_skips_int8, test_hosted_disabled_by_option, test_hosted_transitions_and_rng_isolation, test_route_fat_dense_delta_requantizes, test_declined_host_delta_is_not_recomputed, test_pass_presents_one_wanted_names_tuple, - test_route_rule_terms_gate_both_ways, test_route_low_rank_fat_delta_stays_hosted, + test_route_rule_terms_gate_both_ways, test_route_codebook_layer_uses_level_gap, test_route_low_rank_fat_delta_stays_hosted, test_route_mixed_set_keeps_hosting, test_route_svd_checkpoint_keeps_hosting, test_route_dense_stack_keeps_hosting, test_route_replay_from_cache, test_hosted_null_tail_collapses_to_effective_rank, test_hosted_flat_spectrum_keeps_cap]: run_test(CAT_HOST, fn) From 29de324ff769eb68af0c0a91f8284fa97f5a2c4a Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 21:53:29 +0200 Subject: [PATCH 139/270] update all google stuff Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 11 +++ constraints.txt | 2 +- modules/caption/gemini.py | 2 +- modules/caption/models_def.py | 12 +-- modules/modular.py | 2 +- modules/processing.py | 2 +- modules/video_models/google_omni.py | 137 ++++++++++++++++++++++++++++ modules/video_models/google_veo.py | 36 +++----- modules/video_models/models_def.py | 49 +++++++++- modules/video_models/video_load.py | 4 + pipelines/model_google.py | 2 +- scripts/prompt_enhance/options.py | 20 ++-- 12 files changed, 234 insertions(+), 45 deletions(-) create mode 100644 modules/video_models/google_omni.py diff --git a/CHANGELOG.md b/CHANGELOG.md index b3ae5858a..b53f17b52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,17 @@ All-about-optimizations: - implement progress and preview - intercept and profiling hooks - on-demand convert standard model on-demand +- **Google** + - updated support for google models in text, image and video workflows + *note*: requires google api key + - [Google Veo](https://ai.google.dev/gemini-api/docs/veo) in *preview*, *fast* and *lite* variants + workflows: *t2v, i2v* + - [Google Omni](https://ai.google.dev/gemini-api/docs/omni) in *flash* variant + workflows: *t2v, i2v* + - [Google Nano Banana](https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-image) in *2* and *2 lite* and *pro* variants + workflows: *caption* + - [Google Gemini](https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash) in *flash* and *pro* variants + workflows: *caption, prompt-enhance* - **Compute** - cuda: update `torch==2.14.0` with `cuda==13.2` - openvino: update `openvino==2026.3.1` with `torch==2.13.0` diff --git a/constraints.txt b/constraints.txt index 1eb39948b..2ba2bddf7 100644 --- a/constraints.txt +++ b/constraints.txt @@ -1,3 +1,3 @@ fastapi==0.124.4 -numpy==2.5.2 Pillow==12.2.0 +# numpy==2.5.2 diff --git a/modules/caption/gemini.py b/modules/caption/gemini.py index c5a6f8e70..b36021205 100644 --- a/modules/caption/gemini.py +++ b/modules/caption/gemini.py @@ -11,7 +11,7 @@ class GoogleGeminiPipeline(): def __init__(self, model_name: str): self.model = model_name.split(' (')[0] from installer import install - install('google-genai==1.52.0') + install('google-genai==2.22.0') from google import genai # pylint: disable=no-name-in-module args = self.get_args() self.client = genai.Client(**args) diff --git a/modules/caption/models_def.py b/modules/caption/models_def.py index 82d529616..63519cd1d 100644 --- a/modules/caption/models_def.py +++ b/modules/caption/models_def.py @@ -74,13 +74,13 @@ vlm_models = { "AIDC Ovis2 2B": "AIDC-AI/Ovis2-2B", "AIDC Ovis2 1B": "AIDC-AI/Ovis2-1B", # cloud - f"Google Gemini 3.5 Flash {ui_symbols.cloud}": "google/gemini-3.5-flash", - f"Google Gemini 3.1 Pro {ui_symbols.cloud}": "gemini-3.1-pro-preview", + f"Google Gemini 3.8 Flash {ui_symbols.cloud}": "gemini-3.8-flash", + f"Google Gemini 3.7 Flash {ui_symbols.cloud}": "gemini-3.7-flash", + f"Google Gemini 3.6 Flash {ui_symbols.cloud}": "gemini-3.6-flash", + f"Google Gemini 3.5 Flash {ui_symbols.cloud}": "gemini-3.5-flash", + f"Google Gemini 3.5 Flash Lite {ui_symbols.cloud}": "gemini-3.5-flash-lite", f"Google Gemini 3.1 Flash Lite {ui_symbols.cloud}": "gemini-3.1-flash-lite", - f"Google Gemini 3.1 Flash Lite Preview {ui_symbols.cloud}": "gemini-3.1-flash-lite-preview", - f"Google Gemini 2.5 Pro {ui_symbols.cloud}": "gemini-2.5-pro", - f"Google Gemini 2.5 Flash {ui_symbols.cloud}": "gemini-2.5-flash", - f"Google Gemini 2.5 Flash Lite {ui_symbols.cloud}": "gemini-2.5-flash-lite", + f"Google Gemini 3.1 Pro {ui_symbols.cloud}": "gemini-3.1-pro-preview", } # Default model diff --git a/modules/modular.py b/modules/modular.py index 34fd7d75b..5e8eeb9c6 100644 --- a/modules/modular.py +++ b/modules/modular.py @@ -27,7 +27,7 @@ def is_compatible(diffusion_pipeline: diffusers.DiffusionPipeline) -> bool: return False compatible = get_modular_class(diffusion_pipeline) is not None if not compatible: - log.debug(f'Modular: source={diffusion_pipeline.__class__.__name__} incompatible pipeline') + log.warning(f'Modular: source={diffusion_pipeline.__class__.__name__} incompatible pipeline') return compatible diff --git a/modules/processing.py b/modules/processing.py index 7f5eb0557..010b28d72 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -541,7 +541,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner): p.scripts.postprocess_batch(p, samples, batch_number=n) - if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner): + if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner) and isinstance(samples, list): p.prompts = p.all_prompts[(n * p.batch_size):((n+1) * p.batch_size)] p.negative_prompts = p.all_negative_prompts[(n * p.batch_size):((n+1) * p.batch_size)] batch_params = scripts_manager.PostprocessBatchListArgs(list(samples)) diff --git a/modules/video_models/google_omni.py b/modules/video_models/google_omni.py new file mode 100644 index 000000000..33989eec6 --- /dev/null +++ b/modules/video_models/google_omni.py @@ -0,0 +1,137 @@ +import io +import os +import base64 +import time + +import sys +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))) + +from PIL import Image +from modules.logger import log + + +image_size_buckets = { + '360p': 640*360, + '720p': 1280*720, + '1080p': 1920*1080, + '4k': 3840*2160, +} +aspect_ratios_buckets = { + '16:9': 16/9, + '9:16': 9/16, +} + + +def google_requirements(): + from installer import install + install('google-genai==2.22.0') + # install('pydantic==2.11.7', ignore=True, quiet=True) + # reload('pydantic', '2.11.7') + + +def get_size_buckets(width: int, height: int) -> tuple[str, str]: + aspect_ratio = width / height + pixel_count = width * height + closest_size = min(image_size_buckets.items(), key=lambda x: abs(x[1] - pixel_count))[0] + closest_aspect_ratio = min(aspect_ratios_buckets.items(), key=lambda x: abs(x[1] - aspect_ratio))[0] + return closest_size, closest_aspect_ratio + + +class GoogleOmniVideoPipeline: + def __init__(self, model_name: str): + self.model = model_name + self.client = None + google_requirements() + log.debug(f'Load model: type=GoogleOmni model="{model_name}"') + + def get_args(self): + from modules.shared import opts + # Use UI settings only - env vars are intentionally ignored + api_key = opts.google_api_key + project_id = opts.google_project_id + location_id = opts.google_location_id + use_vertexai = opts.google_use_vertexai + + has_api_key = api_key and len(api_key) > 0 + has_project = project_id and len(project_id) > 0 + has_location = location_id and len(location_id) > 0 + + if use_vertexai: + if has_api_key and (has_project or has_location): + # Invalid: can't have both api_key AND project/location + log.error(f'Cloud: model="{self.model}" API key and project/location are mutually exclusive') + return None + elif has_api_key: + # Vertex AI Express Mode: api_key + vertexai, no project/location + args = {'api_key': api_key, 'vertexai': True} + elif has_project and has_location: + # Standard Vertex AI: project/location, no api_key + args = {'vertexai': True, 'project': project_id, 'location': location_id} + else: + log.error(f'Cloud: model="{self.model}" Vertex AI requires either API key (Express Mode) or project ID + location ID') + return None + else: + # Gemini Developer API: api_key only + if not has_api_key: + log.error(f'Cloud: model="{self.model}" API key not provided') + return None + args = {'api_key': api_key} + + # Debug logging + args_log = args.copy() + if args_log.get('api_key'): + args_log['api_key'] = '...' + args_log['api_key'][-4:] + log.debug(f'Cloud: model="{self.model}" args={args_log}') + return args + + def __call__(self, prompt: list[str], width: int, height: int, image: Image.Image = None): + if isinstance(prompt, list) and len(prompt) > 0: + prompt = prompt[0] + if self.client is None: + args = self.get_args() + if args is None: + return None + from google import genai # pylint: disable=no-name-in-module + self.client = genai.Client(**args) + + resolution, aspect_ratio = get_size_buckets(width, height) + response_format = { + 'type': 'video', + 'aspect_ratio': aspect_ratio, + 'resolution': resolution, + } + if image is not None: + image_bytes = io.BytesIO() + image.save(image_bytes, format='JPEG') + input_content = [ + {'type': 'image', 'data': base64.b64encode(image_bytes.getvalue()).decode('utf-8'), 'mime_type': 'image/jpeg'}, + {'type': 'text', 'text': prompt}, + ] + else: + input_content = prompt + log.debug(f'Cloud: prompt="{prompt}" size={resolution} ar={aspect_ratio} image={image} model="{self.model}" genai={genai.__version__}') + + t0 = time.time() + try: + interaction = self.client.interactions.create( + model=self.model, + input=input_content, + response_format=response_format, + ) + except Exception as e: + log.error(f'Cloud video: model="{self.model}" {e}') + return None + t1 = time.time() + log.debug(f'Cloud processing: model="{self.model}" elapsed={t1-t0:.2f}') + + try: + video_bytes = base64.b64decode(interaction.output_video.data) + return { 'bytes': video_bytes, 'images': [] } + except Exception as e: + log.error(f'Cloud download: model="{self.model}" {e}') + return None + + +def load_omni(model_name): # pylint: disable=unused-argument + pipe = GoogleOmniVideoPipeline(model_name = model_name) + return pipe diff --git a/modules/video_models/google_veo.py b/modules/video_models/google_veo.py index d0c5b3666..7c7941a9a 100644 --- a/modules/video_models/google_veo.py +++ b/modules/video_models/google_veo.py @@ -6,13 +6,13 @@ import sys sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))) from PIL import Image -from installer import install from modules.logger import log image_size_buckets = { '720p': 1280*720, '1080p': 1920*1080, + '4k': 3840*2160, } aspect_ratios_buckets = { '1:1': 1/1, @@ -30,7 +30,9 @@ aspect_ratios_buckets = { def google_requirements(): - install('google-genai==1.52.0') + from installer import install + install('google-genai==2.22.0') + # install('google-genai==1.75.0') # install('pydantic==2.11.7', ignore=True, quiet=True) # reload('pydantic', '2.11.7') @@ -110,7 +112,7 @@ class GoogleVeoVideoPipeline: log.debug(f'Cloud: model="{self.model}" args={args_log}') return args - def __call__(self, prompt: list[str], width: int, height: int, image: Image.Image = None, num_frames: int = 4*24): + def __call__(self, prompt: list[str], width: int = 1280, height: int = 720, image: Image.Image = None, num_frames: int = 4*24): from google import genai # pylint: disable=no-name-in-module if isinstance(prompt, list) and len(prompt) > 0: @@ -127,28 +129,30 @@ class GoogleVeoVideoPipeline: duration = 4 if duration > 8: duration = 8 - self.config=genai.types.GenerateVideosConfig( - # seed=42, - # fps=24, + self.config = genai.types.GenerateVideosConfig( duration_seconds=duration, aspect_ratio=aspect_ratio, resolution=resolution, - # person_generation='ALLOW_ALL', + person_generation='ALLOW_ALL', + # negative_prompt=negative_prompt, + # seed=42, + # fps=24, # safety_filter_level='BLOCK_NONE', - # negative_prompt=None, # enhance_prompt=True, # generate_audio=True, ) - log.debug(f'Cloud: prompt="{prompt}" size={resolution} ar={aspect_ratio} image={image} model="{self.model}" frames={num_frames} duration={duration}') + log.debug(f'Cloud: prompt="{prompt}" size={resolution} ar={aspect_ratio} image={image} model="{self.model}" duration={duration} genai={genai.__version__}') operation = None try: + t0 = time.time() if image is not None: operation = self.img2vid(prompt, image) else: operation = self.txt2vid(prompt) while not operation.done: - log.debug(f"Cloud processing: {operation}") + t1 = time.time() + log.debug(f"Cloud processing: {operation} elapsed={t1-t0:.2f}") time.sleep(10) operation = self.client.operations.get(operation) except Exception as e: @@ -172,15 +176,3 @@ class GoogleVeoVideoPipeline: def load_veo(model_name): # pylint: disable=unused-argument pipe = GoogleVeoVideoPipeline(model_name = model_name) return pipe - - -if __name__ == "__main__": - from installer import setup_logging # pylint: disable=ungrouped-imports - setup_logging() - log.info('test') - model = GoogleVeoVideoPipeline('veo-3.1-generate-preview') - img = Image.open('C:\\Users\\mandi\\OneDrive\\Generative\\Samples\\cartoon.png') - vid = model(['A beautiful young woman walking through the fantasy city'], 1280, 720, image=img) - if vid is not None: - with open("veo.mp4", "wb") as f: - f.write(vid['video']) diff --git a/modules/video_models/models_def.py b/modules/video_models/models_def.py index 9bd08ff88..370f1af82 100644 --- a/modules/video_models/models_def.py +++ b/modules/video_models/models_def.py @@ -750,19 +750,63 @@ try: ], 'Google Veo': [ Model(name='Google Veo 3.1 T2V', - url='https://gemini.google/overview/video-generation/', + url='https://ai.google.dev/gemini-api/docs/veo', repo='veo-3.1-generate-preview', custom='GoogleVeoVideoPipeline', repo_cls=None, te_cls=None, dit_cls=None), Model(name='Google Veo 3.1 I2V', - url='https://gemini.google/overview/video-generation/', + url='https://ai.google.dev/gemini-api/docs/veo', repo='veo-3.1-generate-preview', custom='GoogleVeoVideoPipeline', repo_cls=None, te_cls=None, dit_cls=None), + Model(name='Google Veo 3.1 Fast T2V', + url='https://ai.google.dev/gemini-api/docs/veo', + repo='veo-3.1-fast-generate-preview', + custom='GoogleVeoVideoPipeline', + repo_cls=None, + te_cls=None, + dit_cls=None), + Model(name='Google Veo 3.1 Fast I2V', + url='https://ai.google.dev/gemini-api/docs/veo', + repo='veo-3.1-fast-generate-preview', + custom='GoogleVeoVideoPipeline', + repo_cls=None, + te_cls=None, + dit_cls=None), + Model(name='Google Veo 3.1 Lite T2V', + url='https://ai.google.dev/gemini-api/docs/veo', + repo='veo-3.1-lite-generate-preview', + custom='GoogleVeoVideoPipeline', + repo_cls=None, + te_cls=None, + dit_cls=None), + Model(name='Google Veo 3.1 Lite I2V', + url='https://ai.google.dev/gemini-api/docs/veo', + repo='veo-3.1-lite-generate-preview', + custom='GoogleVeoVideoPipeline', + repo_cls=None, + te_cls=None, + dit_cls=None), + ], + 'Google Omni': [ + Model(name='Google Omni 1.1 Flash T2V', + url='https://ai.google.dev/gemini-api/docs/omni', + repo='gemini-omni-1.1-flash', + custom='GoogleOmniVideoPipeline', + repo_cls=None, + te_cls=None, + dit_cls=None), + Model(name='Google Omni 1.1 Flash I2V', + url='https://ai.google.dev/gemini-api/docs/omni', + repo='gemini-omni-1.1-flash', + custom='GoogleOmniVideoPipeline', + repo_cls=None, + te_cls=None, + dit_cls=None), ], } t1 = time.time() @@ -866,6 +910,7 @@ CLASS_MODES = { # the mode a pipeline class implies, for rows whose name declare 'Kandinsky5I2VPipeline': 'i2v', 'MiniMaxH3ModularPipeline': 'workflow', 'GoogleVeoVideoPipeline': 't2v', + 'GoogleOmniVideoPipeline': 't2v', } diff --git a/modules/video_models/video_load.py b/modules/video_models/video_load.py index 1e4343846..ada9533dd 100644 --- a/modules/video_models/video_load.py +++ b/modules/video_models/video_load.py @@ -50,6 +50,10 @@ def load_custom(model_name: str): from modules.video_models.google_veo import load_veo pipe = load_veo(model_name) return pipe + if 'gemini-omni' in model_name: + from modules.video_models.google_omni import load_omni + pipe = load_omni(model_name) + return pipe return None diff --git a/pipelines/model_google.py b/pipelines/model_google.py index 7048cc365..b19163962 100644 --- a/pipelines/model_google.py +++ b/pipelines/model_google.py @@ -27,7 +27,7 @@ aspect_ratios_buckets = { def google_requirements(): from installer import install # , reload - install('google-genai==1.52.0') + install('google-genai==2.22.0') def get_size_buckets(width: int, height: int) -> tuple[str, str]: diff --git a/scripts/prompt_enhance/options.py b/scripts/prompt_enhance/options.py index 1913de1bb..dc943406f 100644 --- a/scripts/prompt_enhance/options.py +++ b/scripts/prompt_enhance/options.py @@ -36,13 +36,13 @@ class Options: 'trohrbaugh/Qwen3.5-9B-heretic-v2', ] cloud = [ + 'google/gemini-3.8-flash', + 'google/gemini-3.7-flash', + 'google/gemini-3.6-flash', 'google/gemini-3.5-flash', - 'google/gemini-3.1-pro-preview', + 'google/gemini-3.5-flash-lite', 'google/gemini-3.1-flash-lite', - 'google/gemini-3.1-flash-lite-preview', - 'google/gemini-2.5-flash', - 'google/gemini-2.5-flash-lite', - 'google/gemini-2.5-pro', + 'google/gemini-3.1-pro-preview', ] models = { # Gemma @@ -83,13 +83,13 @@ class Options: 'cognitivecomputations/Dolphin3.0-Llama3.2-1B': {}, 'cognitivecomputations/Dolphin3.0-Llama3.2-3B': {}, # Gemini + 'google/gemini-3.8-flash': {}, + 'google/gemini-3.7-flash': {}, + 'google/gemini-3.6-flash': {}, 'google/gemini-3.5-flash': {}, - 'google/gemini-3.1-pro-preview': {}, + 'google/gemini-3.5-flash-lite': {}, 'google/gemini-3.1-flash-lite': {}, - 'google/gemini-3.1-flash-lite-preview': {}, - 'google/gemini-2.5-flash': {}, - 'google/gemini-2.5-flash-lite': {}, - 'google/gemini-2.5-pro': {}, + 'google/gemini-3.1-pro-preview': {}, # SmolLM 'HuggingFaceTB/SmolLM2-135M-Instruct': {}, 'HuggingFaceTB/SmolLM2-360M-Instruct': {}, From f446cca02da868513f2a917e97d962213a6661b9 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 22:54:56 +0200 Subject: [PATCH 140/270] installer handler for numpy Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + constraints.txt | 1 - installer.py | 16 + launch.py | 1 + modules/ben2/__init__.py | 24 - modules/ben2/ben2_model.py | 1298 ------------------------------- modules/masking.py | 2 +- modules/rembg/rembg_api.py | 4 +- requirements.txt | 1 - scripts/postprocessing_rembg.py | 4 +- 10 files changed, 23 insertions(+), 1329 deletions(-) delete mode 100644 modules/ben2/__init__.py delete mode 100644 modules/ben2/ben2_model.py diff --git a/CHANGELOG.md b/CHANGELOG.md index b53f17b52..9547c05f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -94,6 +94,7 @@ All-about-optimizations: - log: ansi color handling - compile: keep model compiled state - prompt: cache checks when cfg changes + - lucida: handle requirements ## Update for 2026-08-26 diff --git a/constraints.txt b/constraints.txt index 2ba2bddf7..34078295e 100644 --- a/constraints.txt +++ b/constraints.txt @@ -1,3 +1,2 @@ fastapi==0.124.4 Pillow==12.2.0 -# numpy==2.5.2 diff --git a/installer.py b/installer.py index 73aa1fa01..f8db6404c 100644 --- a/installer.py +++ b/installer.py @@ -640,6 +640,22 @@ def check_onnx(): ts('onnx', t_start) +# check numpy version +def check_numpy(): + t_start = time.time() + if args.skip_all or args.skip_requirements: + return + torch_ver = package_version('torch') + torch_minor = int(torch_ver.split('.')[1]) if torch_ver else 99 + if torch_minor < 11: + if not installed('numpy==2.1.2', quiet=True): + install('numpy==2.1.2', 'numpy==2.1.2', ignore=True) + else: + if not installed('numpy==2.4.6', quiet=True): + install('numpy==2.4.6', 'numpy==2.4.6', ignore=True) + ts('numpy', t_start) + + def install_cuda(): t_start = time.time() log.info('CUDA: nVidia toolkit detected') diff --git a/launch.py b/launch.py index 8583f403b..34c007331 100755 --- a/launch.py +++ b/launch.py @@ -262,6 +262,7 @@ def main(): installer.install('uv', 'uv') installer.install_gradio() installer.check_torch() + installer.check_numpy() installer.check_onnx() installer.check_transformers() installer.check_diffusers() diff --git a/modules/ben2/__init__.py b/modules/ben2/__init__.py deleted file mode 100644 index f9375a990..000000000 --- a/modules/ben2/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -model = None - - -def remove(image, refine: bool = True): - global model # pylint: disable=global-statement - from modules import shared, devices - - if model is None: - from huggingface_hub import hf_hub_download - from .ben2_model import BEN_Base - model = BEN_Base() - model_file = hf_hub_download( - repo_id='PramaLLC/BEN2', - filename='BEN2_Base.pth', - cache_dir=shared.opts.hfcache_dir) - model.loadcheckpoints(model_file) - model = model.to(device=devices.device, dtype=devices.dtype).eval() - - model = model.to(device=devices.device) - foreground = model.inference(image, refine_foreground=refine) - model = model.to(device=devices.cpu) - if foreground is None: - return image - return foreground diff --git a/modules/ben2/ben2_model.py b/modules/ben2/ben2_model.py deleted file mode 100644 index c36f40b21..000000000 --- a/modules/ben2/ben2_model.py +++ /dev/null @@ -1,1298 +0,0 @@ -import os -import math -import subprocess -import tempfile -import cv2 -import torch -import torch.nn as nn -import torch.nn.functional as F -import torch.utils.checkpoint as checkpoint -import numpy as np -from timm.models.layers import DropPath, to_2tuple, trunc_normal_ -from PIL import Image -from torchvision import transforms -from einops import rearrange - - -class Mlp(nn.Module): - """ Multilayer perceptron.""" - - def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.): - super().__init__() - out_features = out_features or in_features - hidden_features = hidden_features or in_features - self.fc1 = nn.Linear(in_features, hidden_features) - self.act = act_layer() - self.fc2 = nn.Linear(hidden_features, out_features) - self.drop = nn.Dropout(drop) - - def forward(self, x): - x = self.fc1(x) - x = self.act(x) - x = self.drop(x) - x = self.fc2(x) - x = self.drop(x) - return x - - -def window_partition(x, window_size): - """ - Args: - x: (B, H, W, C) - window_size (int): window size - Returns: - windows: (num_windows*B, window_size, window_size, C) - """ - B, H, W, C = x.shape - x = x.view(B, H // window_size, window_size, W // window_size, window_size, C) - windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C) - return windows - - -def window_reverse(windows, window_size, H, W): - """ - Args: - windows: (num_windows*B, window_size, window_size, C) - window_size (int): Window size - H (int): Height of image - W (int): Width of image - Returns: - x: (B, H, W, C) - """ - B = int(windows.shape[0] / (H * W / window_size / window_size)) - x = windows.view(B, H // window_size, W // window_size, window_size, window_size, -1) - x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1) - return x - - -class WindowAttention(nn.Module): - """ Window based multi-head self attention (W-MSA) module with relative position bias. - It supports both of shifted and non-shifted window. - Args: - dim (int): Number of input channels. - window_size (tuple[int]): The height and width of the window. - num_heads (int): Number of attention heads. - qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True - qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set - attn_drop (float, optional): Dropout ratio of attention weight. Default: 0.0 - proj_drop (float, optional): Dropout ratio of output. Default: 0.0 - """ - - def __init__(self, dim, window_size, num_heads, qkv_bias=True, qk_scale=None, attn_drop=0., proj_drop=0.): - - super().__init__() - self.dim = dim - self.window_size = window_size # Wh, Ww - self.num_heads = num_heads - head_dim = dim // num_heads - self.scale = qk_scale or head_dim ** -0.5 - - # define a parameter table of relative position bias - self.relative_position_bias_table = nn.Parameter( - torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)) # 2*Wh-1 * 2*Ww-1, nH - - # get pair-wise relative position index for each token inside the window - coords_h = torch.arange(self.window_size[0]) - coords_w = torch.arange(self.window_size[1]) - coords = torch.stack(torch.meshgrid([coords_h, coords_w])) # 2, Wh, Ww - coords_flatten = torch.flatten(coords, 1) # 2, Wh*Ww - relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :] # 2, Wh*Ww, Wh*Ww - relative_coords = relative_coords.permute(1, 2, 0).contiguous() # Wh*Ww, Wh*Ww, 2 - relative_coords[:, :, 0] += self.window_size[0] - 1 # shift to start from 0 - relative_coords[:, :, 1] += self.window_size[1] - 1 - relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1 - relative_position_index = relative_coords.sum(-1) # Wh*Ww, Wh*Ww - self.register_buffer("relative_position_index", relative_position_index) - - self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) - self.attn_drop = nn.Dropout(attn_drop) - self.proj = nn.Linear(dim, dim) - self.proj_drop = nn.Dropout(proj_drop) - - trunc_normal_(self.relative_position_bias_table, std=.02) - self.softmax = nn.Softmax(dim=-1) - - def forward(self, x, mask=None): - """ Forward function. - Args: - x: input features with shape of (num_windows*B, N, C) - mask: (0/-inf) mask with shape of (num_windows, Wh*Ww, Wh*Ww) or None - """ - B_, N, C = x.shape - qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) - q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) - - q = q * self.scale - attn = q @ k.transpose(-2, -1) - - relative_position_bias = self.relative_position_bias_table[self.relative_position_index.view(-1)].view( - self.window_size[0] * self.window_size[1], self.window_size[0] * self.window_size[1], -1) # Wh*Ww,Wh*Ww,nH - relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous() # nH, Wh*Ww, Wh*Ww - attn = attn + relative_position_bias.unsqueeze(0) - - if mask is not None: - nW = mask.shape[0] - attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0) - attn = attn.view(-1, self.num_heads, N, N) - attn = self.softmax(attn) - else: - attn = self.softmax(attn) - - attn = self.attn_drop(attn) - - x = (attn @ v).transpose(1, 2).reshape(B_, N, C) - x = self.proj(x) - x = self.proj_drop(x) - return x - - -class SwinTransformerBlock(nn.Module): - """ Swin Transformer Block. - Args: - dim (int): Number of input channels. - num_heads (int): Number of attention heads. - window_size (int): Window size. - shift_size (int): Shift size for SW-MSA. - mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. - qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True - qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set. - drop (float, optional): Dropout rate. Default: 0.0 - attn_drop (float, optional): Attention dropout rate. Default: 0.0 - drop_path (float, optional): Stochastic depth rate. Default: 0.0 - act_layer (nn.Module, optional): Activation layer. Default: nn.GELU - norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm - """ - - def __init__(self, dim, num_heads, window_size=7, shift_size=0, - mlp_ratio=4., qkv_bias=True, qk_scale=None, drop=0., attn_drop=0., drop_path=0., - act_layer=nn.GELU, norm_layer=nn.LayerNorm): - super().__init__() - self.dim = dim - self.num_heads = num_heads - self.window_size = window_size - self.shift_size = shift_size - self.mlp_ratio = mlp_ratio - assert 0 <= self.shift_size < self.window_size, "shift_size must in 0-window_size" - - self.norm1 = norm_layer(dim) - self.attn = WindowAttention( - dim, window_size=to_2tuple(self.window_size), num_heads=num_heads, - qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop) - - self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() - self.norm2 = norm_layer(dim) - mlp_hidden_dim = int(dim * mlp_ratio) - self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) - - self.H = None - self.W = None - - def forward(self, x, mask_matrix): - """ Forward function. - Args: - x: Input feature, tensor size (B, H*W, C). - H, W: Spatial resolution of the input feature. - mask_matrix: Attention mask for cyclic shift. - """ - B, L, C = x.shape - H, W = self.H, self.W - assert L == H * W, "input feature has wrong size" - - shortcut = x - x = self.norm1(x) - x = x.view(B, H, W, C) - - # pad feature maps to multiples of window size - pad_l = pad_t = 0 - pad_r = (self.window_size - W % self.window_size) % self.window_size - pad_b = (self.window_size - H % self.window_size) % self.window_size - x = F.pad(x, (0, 0, pad_l, pad_r, pad_t, pad_b)) - _, Hp, Wp, _ = x.shape - - # cyclic shift - if self.shift_size > 0: - shifted_x = torch.roll(x, shifts=(-self.shift_size, -self.shift_size), dims=(1, 2)) - attn_mask = mask_matrix - else: - shifted_x = x - attn_mask = None - - # partition windows - x_windows = window_partition(shifted_x, self.window_size) # nW*B, window_size, window_size, C - x_windows = x_windows.view(-1, self.window_size * self.window_size, C) # nW*B, window_size*window_size, C - - # W-MSA/SW-MSA - attn_windows = self.attn(x_windows, mask=attn_mask) # nW*B, window_size*window_size, C - - # merge windows - attn_windows = attn_windows.view(-1, self.window_size, self.window_size, C) - shifted_x = window_reverse(attn_windows, self.window_size, Hp, Wp) # B H' W' C - - # reverse cyclic shift - if self.shift_size > 0: - x = torch.roll(shifted_x, shifts=(self.shift_size, self.shift_size), dims=(1, 2)) - else: - x = shifted_x - - if pad_r > 0 or pad_b > 0: - x = x[:, :H, :W, :].contiguous() - - x = x.view(B, H * W, C) - - # FFN - x = shortcut + self.drop_path(x) - x = x + self.drop_path(self.mlp(self.norm2(x))) - - return x - - -class PatchMerging(nn.Module): - """ Patch Merging Layer - Args: - dim (int): Number of input channels. - norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm - """ - def __init__(self, dim, norm_layer=nn.LayerNorm): - super().__init__() - self.dim = dim - self.reduction = nn.Linear(4 * dim, 2 * dim, bias=False) - self.norm = norm_layer(4 * dim) - - def forward(self, x, H, W): - """ Forward function. - Args: - x: Input feature, tensor size (B, H*W, C). - H, W: Spatial resolution of the input feature. - """ - B, L, C = x.shape - assert L == H * W, "input feature has wrong size" - - x = x.view(B, H, W, C) - - # padding - pad_input = (H % 2 == 1) or (W % 2 == 1) - if pad_input: - x = F.pad(x, (0, 0, 0, W % 2, 0, H % 2)) - - x0 = x[:, 0::2, 0::2, :] # B H/2 W/2 C - x1 = x[:, 1::2, 0::2, :] # B H/2 W/2 C - x2 = x[:, 0::2, 1::2, :] # B H/2 W/2 C - x3 = x[:, 1::2, 1::2, :] # B H/2 W/2 C - x = torch.cat([x0, x1, x2, x3], -1) # B H/2 W/2 4*C - x = x.view(B, -1, 4 * C) # B H/2*W/2 4*C - - x = self.norm(x) - x = self.reduction(x) - - return x - - -class BasicLayer(nn.Module): - """ A basic Swin Transformer layer for one stage. - Args: - dim (int): Number of feature channels - depth (int): Depths of this stage. - num_heads (int): Number of attention head. - window_size (int): Local window size. Default: 7. - mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4. - qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True - qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set. - drop (float, optional): Dropout rate. Default: 0.0 - attn_drop (float, optional): Attention dropout rate. Default: 0.0 - drop_path (float | tuple[float], optional): Stochastic depth rate. Default: 0.0 - norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm - downsample (nn.Module | None, optional): Downsample layer at the end of the layer. Default: None - use_checkpoint (bool): Whether to use checkpointing to save memory. Default: False. - """ - - def __init__(self, - dim, - depth, - num_heads, - window_size=7, - mlp_ratio=4., - qkv_bias=True, - qk_scale=None, - drop=0., - attn_drop=0., - drop_path=0., - norm_layer=nn.LayerNorm, - downsample=None, - use_checkpoint=False): - super().__init__() - self.window_size = window_size - self.shift_size = window_size // 2 - self.depth = depth - self.use_checkpoint = use_checkpoint - - # build blocks - self.blocks = nn.ModuleList([ - SwinTransformerBlock( - dim=dim, - num_heads=num_heads, - window_size=window_size, - shift_size=0 if (i % 2 == 0) else window_size // 2, - mlp_ratio=mlp_ratio, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - drop=drop, - attn_drop=attn_drop, - drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path, - norm_layer=norm_layer) - for i in range(depth)]) - - # patch merging layer - if downsample is not None: - self.downsample = downsample(dim=dim, norm_layer=norm_layer) - else: - self.downsample = None - - def forward(self, x, H, W): - """ Forward function. - Args: - x: Input feature, tensor size (B, H*W, C). - H, W: Spatial resolution of the input feature. - """ - - # calculate attention mask for SW-MSA - Hp = int(np.ceil(H / self.window_size)) * self.window_size - Wp = int(np.ceil(W / self.window_size)) * self.window_size - img_mask = torch.zeros((1, Hp, Wp, 1), device=x.device) # 1 Hp Wp 1 - h_slices = (slice(0, -self.window_size), - slice(-self.window_size, -self.shift_size), - slice(-self.shift_size, None)) - w_slices = (slice(0, -self.window_size), - slice(-self.window_size, -self.shift_size), - slice(-self.shift_size, None)) - cnt = 0 - for h in h_slices: - for w in w_slices: - img_mask[:, h, w, :] = cnt - cnt += 1 - - mask_windows = window_partition(img_mask, self.window_size) # nW, window_size, window_size, 1 - mask_windows = mask_windows.view(-1, self.window_size * self.window_size) - attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2) - attn_mask = attn_mask.masked_fill(attn_mask != 0, (-100.0)).masked_fill(attn_mask == 0, 0.0) - - for blk in self.blocks: - blk.H, blk.W = H, W - if self.use_checkpoint: - x = checkpoint.checkpoint(blk, x, attn_mask) - else: - x = blk(x, attn_mask) - if self.downsample is not None: - x_down = self.downsample(x, H, W) - Wh, Ww = (H + 1) // 2, (W + 1) // 2 - return x, H, W, x_down, Wh, Ww - else: - return x, H, W, x, H, W - - -class PatchEmbed(nn.Module): - """ Image to Patch Embedding - Args: - patch_size (int): Patch token size. Default: 4. - in_chans (int): Number of input image channels. Default: 3. - embed_dim (int): Number of linear projection output channels. Default: 96. - norm_layer (nn.Module, optional): Normalization layer. Default: None - """ - - def __init__(self, patch_size=4, in_chans=3, embed_dim=96, norm_layer=None): - super().__init__() - patch_size = to_2tuple(patch_size) - self.patch_size = patch_size - - self.in_chans = in_chans - self.embed_dim = embed_dim - - self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size) - if norm_layer is not None: - self.norm = norm_layer(embed_dim) - else: - self.norm = None - - def forward(self, x): - """Forward function.""" - # padding - _, _, H, W = x.size() - if W % self.patch_size[1] != 0: - x = F.pad(x, (0, self.patch_size[1] - W % self.patch_size[1])) - if H % self.patch_size[0] != 0: - x = F.pad(x, (0, 0, 0, self.patch_size[0] - H % self.patch_size[0])) - - x = self.proj(x) # B C Wh Ww - if self.norm is not None: - Wh, Ww = x.size(2), x.size(3) - x = x.flatten(2).transpose(1, 2) - x = self.norm(x) - x = x.transpose(1, 2).view(-1, self.embed_dim, Wh, Ww) - - return x - - -class SwinTransformer(nn.Module): - """ Swin Transformer backbone. - A PyTorch impl of : `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows` - - https://arxiv.org/pdf/2103.14030 - Args: - pretrain_img_size (int): Input image size for training the pretrained model, - used in absolute position embedding. Default 224. - patch_size (int | tuple(int)): Patch size. Default: 4. - in_chans (int): Number of input image channels. Default: 3. - embed_dim (int): Number of linear projection output channels. Default: 96. - depths (tuple[int]): Depths of each Swin Transformer stage. - num_heads (tuple[int]): Number of attention head of each stage. - window_size (int): Window size. Default: 7. - mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4. - qkv_bias (bool): If True, add a learnable bias to query, key, value. Default: True - qk_scale (float): Override default qk scale of head_dim ** -0.5 if set. - drop_rate (float): Dropout rate. - attn_drop_rate (float): Attention dropout rate. Default: 0. - drop_path_rate (float): Stochastic depth rate. Default: 0.2. - norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm. - ape (bool): If True, add absolute position embedding to the patch embedding. Default: False. - patch_norm (bool): If True, add normalization after patch embedding. Default: True. - out_indices (Sequence[int]): Output from which stages. - frozen_stages (int): Stages to be frozen (stop grad and set eval mode). - -1 means not freezing any parameters. - use_checkpoint (bool): Whether to use checkpointing to save memory. Default: False. - """ - - def __init__(self, - pretrain_img_size=224, - patch_size=4, - in_chans=3, - embed_dim=96, - depths=None, - num_heads=None, - window_size=7, - mlp_ratio=4., - qkv_bias=True, - qk_scale=None, - drop_rate=0., - attn_drop_rate=0., - drop_path_rate=0.2, - norm_layer=nn.LayerNorm, - ape=False, - patch_norm=True, - out_indices=(0, 1, 2, 3), - frozen_stages=-1, - use_checkpoint=False): - if num_heads is None: - num_heads = [3, 6, 12, 24] - if depths is None: - depths = [2, 2, 6, 2] - super().__init__() - - self.pretrain_img_size = pretrain_img_size - self.num_layers = len(depths) - self.embed_dim = embed_dim - self.ape = ape - self.patch_norm = patch_norm - self.out_indices = out_indices - self.frozen_stages = frozen_stages - - # split image into non-overlapping patches - self.patch_embed = PatchEmbed( - patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim, - norm_layer=norm_layer if self.patch_norm else None) - - # absolute position embedding - if self.ape: - pretrain_img_size = to_2tuple(pretrain_img_size) - patch_size = to_2tuple(patch_size) - patches_resolution = [pretrain_img_size[0] // patch_size[0], pretrain_img_size[1] // patch_size[1]] - - self.absolute_pos_embed = nn.Parameter(torch.zeros(1, embed_dim, patches_resolution[0], patches_resolution[1])) - trunc_normal_(self.absolute_pos_embed, std=.02) - - self.pos_drop = nn.Dropout(p=drop_rate) - - # stochastic depth - dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))] # stochastic depth decay rule - - # build layers - self.layers = nn.ModuleList() - for i_layer in range(self.num_layers): - layer = BasicLayer( - dim=int(embed_dim * 2 ** i_layer), - depth=depths[i_layer], - num_heads=num_heads[i_layer], - window_size=window_size, - mlp_ratio=mlp_ratio, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - drop=drop_rate, - attn_drop=attn_drop_rate, - drop_path=dpr[sum(depths[:i_layer]):sum(depths[:i_layer + 1])], - norm_layer=norm_layer, - downsample=PatchMerging if (i_layer < self.num_layers - 1) else None, - use_checkpoint=use_checkpoint) - self.layers.append(layer) - - num_features = [int(embed_dim * 2 ** i) for i in range(self.num_layers)] - self.num_features = num_features - - # add a norm layer for each output - for i_layer in out_indices: - layer = norm_layer(num_features[i_layer]) - layer_name = f'norm{i_layer}' - self.add_module(layer_name, layer) - - self._freeze_stages() - - def _freeze_stages(self): - if self.frozen_stages >= 0: - self.patch_embed.eval() - for param in self.patch_embed.parameters(): - param.requires_grad = False - - if self.frozen_stages >= 1 and self.ape: - self.absolute_pos_embed.requires_grad = False - - if self.frozen_stages >= 2: - self.pos_drop.eval() - for i in range(0, self.frozen_stages - 1): - m = self.layers[i] - m.eval() - for param in m.parameters(): - param.requires_grad = False - - - def forward(self, x): - - x = self.patch_embed(x) - - Wh, Ww = x.size(2), x.size(3) - if self.ape: - # interpolate the position embedding to the corresponding size - absolute_pos_embed = F.interpolate(self.absolute_pos_embed, size=(Wh, Ww), mode='bicubic') - x = x + absolute_pos_embed # B Wh*Ww C - - outs = [x.contiguous()] - x = x.flatten(2).transpose(1, 2) - x = self.pos_drop(x) - - - for i in range(self.num_layers): - layer = self.layers[i] - x_out, H, W, x, Wh, Ww = layer(x, Wh, Ww) - - - if i in self.out_indices: - norm_layer = getattr(self, f'norm{i}') - x_out = norm_layer(x_out) - - out = x_out.view(-1, H, W, self.num_features[i]).permute(0, 3, 1, 2).contiguous() - outs.append(out) - - - - return tuple(outs) - - - - - - - - -def get_activation_fn(activation): - """Return an activation function given a string""" - if activation == "gelu": - return F.gelu - - raise RuntimeError(F"activation should be gelu, not {activation}.") - - -def make_cbr(in_dim, out_dim): - return nn.Sequential(nn.Conv2d(in_dim, out_dim, kernel_size=3, padding=1), nn.InstanceNorm2d(out_dim), nn.GELU()) - - -def make_cbg(in_dim, out_dim): - return nn.Sequential(nn.Conv2d(in_dim, out_dim, kernel_size=3, padding=1), nn.InstanceNorm2d(out_dim), nn.GELU()) - - -def rescale_to(x, scale_factor: float = 2, interpolation='nearest'): - return F.interpolate(x, scale_factor=scale_factor, mode=interpolation) - - -def resize_as(x, y, interpolation='bilinear'): - return F.interpolate(x, size=y.shape[-2:], mode=interpolation) - - -def image2patches(x): - """b c (hg h) (wg w) -> (hg wg b) c h w""" - x = rearrange(x, 'b c (hg h) (wg w) -> (hg wg b) c h w', hg=2, wg=2 ) - return x - - -def patches2image(x): - """(hg wg b) c h w -> b c (hg h) (wg w)""" - x = rearrange(x, '(hg wg b) c h w -> b c (hg h) (wg w)', hg=2, wg=2) - return x - - - -class PositionEmbeddingSine: - def __init__(self, num_pos_feats=64, temperature=10000, normalize=False, scale=None): - super().__init__() - self.num_pos_feats = num_pos_feats - self.temperature = temperature - self.normalize = normalize - if scale is not None and normalize is False: - raise ValueError("normalize should be True if scale is passed") - if scale is None: - scale = 2 * math.pi - self.scale = scale - self.dim_t = torch.arange(0, self.num_pos_feats, dtype=torch.float32) - - def __call__(self, b, h, w): - device = self.dim_t.device - mask = torch.zeros([b, h, w], dtype=torch.bool, device=device) - assert mask is not None - not_mask = ~mask - y_embed = not_mask.cumsum(dim=1, dtype=torch.float32) - x_embed = not_mask.cumsum(dim=2, dtype=torch.float32) - if self.normalize: - eps = 1e-6 - y_embed = (y_embed - 0.5) / (y_embed[:, -1:, :] + eps) * self.scale - x_embed = (x_embed - 0.5) / (x_embed[:, :, -1:] + eps) * self.scale - - dim_t = self.temperature ** (2 * (self.dim_t.to(device) // 2) / self.num_pos_feats) - pos_x = x_embed[:, :, :, None] / dim_t - pos_y = y_embed[:, :, :, None] / dim_t - - pos_x = torch.stack((pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4).flatten(3) - pos_y = torch.stack((pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4).flatten(3) - - return torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2) - - - -class MCLM(nn.Module): - def __init__(self, d_model, num_heads, pool_ratios=None): - if pool_ratios is None: - pool_ratios = [1, 4, 8] - super().__init__() - self.attention = nn.ModuleList([ - nn.MultiheadAttention(d_model, num_heads, dropout=0.1), - nn.MultiheadAttention(d_model, num_heads, dropout=0.1), - nn.MultiheadAttention(d_model, num_heads, dropout=0.1), - nn.MultiheadAttention(d_model, num_heads, dropout=0.1), - nn.MultiheadAttention(d_model, num_heads, dropout=0.1) - ]) - - self.linear1 = nn.Linear(d_model, d_model * 2) - self.linear2 = nn.Linear(d_model * 2, d_model) - self.linear3 = nn.Linear(d_model, d_model * 2) - self.linear4 = nn.Linear(d_model * 2, d_model) - self.norm1 = nn.LayerNorm(d_model) - self.norm2 = nn.LayerNorm(d_model) - self.dropout = nn.Dropout(0.1) - self.dropout1 = nn.Dropout(0.1) - self.dropout2 = nn.Dropout(0.1) - self.activation = get_activation_fn('gelu') - self.pool_ratios = pool_ratios - self.p_poses = [] - self.g_pos = None - self.positional_encoding = PositionEmbeddingSine(num_pos_feats=d_model // 2, normalize=True) - - def forward(self, l, g): - """ - l: 4,c,h,w - g: 1,c,h,w - """ - self.p_poses = [] - self.g_pos = None - _b, _c, h, w = l.size() - # 4,c,h,w -> 1,c,2h,2w - concated_locs = rearrange(l, '(hg wg b) c h w -> b c (hg h) (wg w)', hg=2, wg=2) - - pools = [] - for pool_ratio in self.pool_ratios: - # b,c,h,w - tgt_hw = (round(h / pool_ratio), round(w / pool_ratio)) - pool = F.adaptive_avg_pool2d(concated_locs, tgt_hw) - pools.append(rearrange(pool, 'b c h w -> (h w) b c')) - if self.g_pos is None: - pos_emb = self.positional_encoding(pool.shape[0], pool.shape[2], pool.shape[3]) - pos_emb = rearrange(pos_emb, 'b c h w -> (h w) b c') - self.p_poses.append(pos_emb) - pools = torch.cat(pools, 0) - if self.g_pos is None: - self.p_poses = torch.cat(self.p_poses, dim=0) - pos_emb = self.positional_encoding(g.shape[0], g.shape[2], g.shape[3]) - self.g_pos = rearrange(pos_emb, 'b c h w -> (h w) b c') - - device = pools.device - self.p_poses = self.p_poses.to(device) - self.g_pos = self.g_pos.to(device) - - - # attention between glb (q) & multisensory concated-locs (k,v) - g_hw_b_c = rearrange(g, 'b c h w -> (h w) b c') - - - g_hw_b_c = g_hw_b_c + self.dropout1(self.attention[0](g_hw_b_c + self.g_pos, pools + self.p_poses, pools)[0]) - g_hw_b_c = self.norm1(g_hw_b_c) - g_hw_b_c = g_hw_b_c + self.dropout2(self.linear2(self.dropout(self.activation(self.linear1(g_hw_b_c)).clone()))) - g_hw_b_c = self.norm2(g_hw_b_c) - - # attention between origin locs (q) & freashed glb (k,v) - l_hw_b_c = rearrange(l, "b c h w -> (h w) b c") - _g_hw_b_c = rearrange(g_hw_b_c, '(h w) b c -> h w b c', h=h, w=w) - _g_hw_b_c = rearrange(_g_hw_b_c, "(ng h) (nw w) b c -> (h w) (ng nw b) c", ng=2, nw=2) - outputs_re = [] - for i, (_l, _g) in enumerate(zip(l_hw_b_c.chunk(4, dim=1), _g_hw_b_c.chunk(4, dim=1), strict=False)): - outputs_re.append(self.attention[i + 1](_l, _g, _g)[0]) # (h w) 1 c - outputs_re = torch.cat(outputs_re, 1) # (h w) 4 c - - l_hw_b_c = l_hw_b_c + self.dropout1(outputs_re) - l_hw_b_c = self.norm1(l_hw_b_c) - l_hw_b_c = l_hw_b_c + self.dropout2(self.linear4(self.dropout(self.activation(self.linear3(l_hw_b_c)).clone()))) - l_hw_b_c = self.norm2(l_hw_b_c) - - l = torch.cat((l_hw_b_c, g_hw_b_c), 1) # hw,b(5),c - return rearrange(l, "(h w) b c -> b c h w", h=h, w=w) ## (5,c,h*w) - - - - - - - - - -class MCRM(nn.Module): - def __init__(self, d_model, num_heads, pool_ratios=None, h=None): # pylint: disable=unused-argument - if pool_ratios is None: - pool_ratios = [4, 8, 16] - super().__init__() - self.attention = nn.ModuleList([ - nn.MultiheadAttention(d_model, num_heads, dropout=0.1), - nn.MultiheadAttention(d_model, num_heads, dropout=0.1), - nn.MultiheadAttention(d_model, num_heads, dropout=0.1), - nn.MultiheadAttention(d_model, num_heads, dropout=0.1) - ]) - self.linear3 = nn.Linear(d_model, d_model * 2) - self.linear4 = nn.Linear(d_model * 2, d_model) - self.norm1 = nn.LayerNorm(d_model) - self.norm2 = nn.LayerNorm(d_model) - self.dropout = nn.Dropout(0.1) - self.dropout1 = nn.Dropout(0.1) - self.dropout2 = nn.Dropout(0.1) - self.sigmoid = nn.Sigmoid() - self.activation = get_activation_fn('gelu') - self.sal_conv = nn.Conv2d(d_model, 1, 1) - self.pool_ratios = pool_ratios - - def forward(self, x): - # device = x.device - _b, c, h, w = x.size() - loc, glb = x.split([4, 1], dim=0) # 4,c,h,w; 1,c,h,w - - patched_glb = rearrange(glb, 'b c (hg h) (wg w) -> (hg wg b) c h w', hg=2, wg=2) - - token_attention_map = self.sigmoid(self.sal_conv(glb)) - token_attention_map = F.interpolate(token_attention_map, size=patches2image(loc).shape[-2:], mode='nearest') - loc = loc * rearrange(token_attention_map, 'b c (hg h) (wg w) -> (hg wg b) c h w', hg=2, wg=2) - - pools = [] - for pool_ratio in self.pool_ratios: - tgt_hw = (round(h / pool_ratio), round(w / pool_ratio)) - pool = F.adaptive_avg_pool2d(patched_glb, tgt_hw) - pools.append(rearrange(pool, 'nl c h w -> nl c (h w)')) # nl(4),c,hw - - pools = rearrange(torch.cat(pools, 2), "nl c nphw -> nl nphw 1 c") - loc_ = rearrange(loc, 'nl c h w -> nl (h w) 1 c') - - outputs = [] - for i, q in enumerate(loc_.unbind(dim=0)): # traverse all local patches - v = pools[i] - k = v - outputs.append(self.attention[i](q, k, v)[0]) - - outputs = torch.cat(outputs, 1) - src = loc.view(4, c, -1).permute(2, 0, 1) + self.dropout1(outputs) - src = self.norm1(src) - src = src + self.dropout2(self.linear4(self.dropout(self.activation(self.linear3(src)).clone()))) - src = self.norm2(src) - src = src.permute(1, 2, 0).reshape(4, c, h, w) # freshed loc - glb = glb + F.interpolate(patches2image(src), size=glb.shape[-2:], mode='nearest') # freshed glb - - return torch.cat((src, glb), 0), token_attention_map - - - -class BEN_Base(nn.Module): - def __init__(self): - super().__init__() - - self.backbone = SwinTransformer(embed_dim=128, depths=[2, 2, 18, 2], num_heads=[4, 8, 16, 32], window_size=12) - emb_dim = 128 - self.sideout5 = nn.Sequential(nn.Conv2d(emb_dim, 1, kernel_size=3, padding=1)) - self.sideout4 = nn.Sequential(nn.Conv2d(emb_dim, 1, kernel_size=3, padding=1)) - self.sideout3 = nn.Sequential(nn.Conv2d(emb_dim, 1, kernel_size=3, padding=1)) - self.sideout2 = nn.Sequential(nn.Conv2d(emb_dim, 1, kernel_size=3, padding=1)) - self.sideout1 = nn.Sequential(nn.Conv2d(emb_dim, 1, kernel_size=3, padding=1)) - - self.output5 = make_cbr(1024, emb_dim) - self.output4 = make_cbr(512, emb_dim) - self.output3 = make_cbr(256, emb_dim) - self.output2 = make_cbr(128, emb_dim) - self.output1 = make_cbr(128, emb_dim) - - self.multifieldcrossatt = MCLM(emb_dim, 1, [1, 4, 8]) - self.conv1 = make_cbr(emb_dim, emb_dim) - self.conv2 = make_cbr(emb_dim, emb_dim) - self.conv3 = make_cbr(emb_dim, emb_dim) - self.conv4 = make_cbr(emb_dim, emb_dim) - self.dec_blk1 = MCRM(emb_dim, 1, [2, 4, 8]) - self.dec_blk2 = MCRM(emb_dim, 1, [2, 4, 8]) - self.dec_blk3 = MCRM(emb_dim, 1, [2, 4, 8]) - self.dec_blk4 = MCRM(emb_dim, 1, [2, 4, 8]) - - self.insmask_head = nn.Sequential( - nn.Conv2d(emb_dim, 384, kernel_size=3, padding=1), - nn.InstanceNorm2d(384), - nn.GELU(), - nn.Conv2d(384, 384, kernel_size=3, padding=1), - nn.InstanceNorm2d(384), - nn.GELU(), - nn.Conv2d(384, emb_dim, kernel_size=3, padding=1) - ) - - self.shallow = nn.Sequential(nn.Conv2d(3, emb_dim, kernel_size=3, padding=1)) - self.upsample1 = make_cbg(emb_dim, emb_dim) - self.upsample2 = make_cbg(emb_dim, emb_dim) - self.output = nn.Sequential(nn.Conv2d(emb_dim, 1, kernel_size=3, padding=1)) - - for m in self.modules(): - if isinstance(m, nn.GELU) or isinstance(m, nn.Dropout): - m.inplace = True - - - @torch.inference_mode() - @torch.autocast(device_type="cuda",dtype=torch.float16) - def forward(self, x): - real_batch = x.size(0) - - shallow_batch = self.shallow(x) - glb_batch = rescale_to(x, scale_factor=0.5, interpolation='bilinear') - - - - final_input = None - for i in range(real_batch): - start = i * 4 - end = (i + 1) * 4 - loc_batch = image2patches(x[i,:,:,:].unsqueeze(dim=0)) - input_ = torch.cat((loc_batch, glb_batch[i,:,:,:].unsqueeze(dim=0)), dim=0) - if final_input is None: - final_input= input_ - else: - final_input = torch.cat((final_input, input_), dim=0) - - features = self.backbone(final_input) - outputs = [] - for i in range(real_batch): - - start = i * 5 - end = (i + 1) * 5 - f4 = features[4][start:end, :, :, :] # shape: [5, C, H, W] - f3 = features[3][start:end, :, :, :] - f2 = features[2][start:end, :, :, :] - f1 = features[1][start:end, :, :, :] - f0 = features[0][start:end, :, :, :] - e5 = self.output5(f4) - e4 = self.output4(f3) - e3 = self.output3(f2) - e2 = self.output2(f1) - e1 = self.output1(f0) - loc_e5, glb_e5 = e5.split([4, 1], dim=0) - e5 = self.multifieldcrossatt(loc_e5, glb_e5) # (4,128,16,16) - - - e4, _tokenattmap4 = self.dec_blk4(e4 + resize_as(e5, e4)) - e4 = self.conv4(e4) - e3, _tokenattmap3 = self.dec_blk3(e3 + resize_as(e4, e3)) - e3 = self.conv3(e3) - e2, _tokenattmap2 = self.dec_blk2(e2 + resize_as(e3, e2)) - e2 = self.conv2(e2) - e1, _tokenattmap1 = self.dec_blk1(e1 + resize_as(e2, e1)) - e1 = self.conv1(e1) - - loc_e1, glb_e1 = e1.split([4, 1], dim=0) - - output1_cat = patches2image(loc_e1) # (1,128,256,256) - - # add glb feat in - output1_cat = output1_cat + resize_as(glb_e1, output1_cat) - # merge - final_output = self.insmask_head(output1_cat) # (1,128,256,256) - # shallow feature merge - shallow = shallow_batch[i,:,:,:].unsqueeze(dim=0) - final_output = final_output + resize_as(shallow, final_output) - final_output = self.upsample1(rescale_to(final_output)) - final_output = rescale_to(final_output + resize_as(shallow, final_output)) - final_output = self.upsample2(final_output) - final_output = self.output(final_output) - mask = final_output.sigmoid() - outputs.append(mask) - - return torch.cat(outputs, dim=0) - - - def loadcheckpoints(self,model_path): - model_dict = torch.load(model_path, map_location="cpu", weights_only=True) - self.load_state_dict(model_dict['model_state_dict'], strict=True) - del model_path - - def inference(self,image,refine_foreground=False): - # image = ImageOps.exif_transpose(image) - if isinstance(image, Image.Image): - image, h, w,original_image = rgb_loader_refiner(image) - if torch.cuda.is_available(): - - img_tensor = img_transform(image).unsqueeze(0).to(next(self.parameters()).device) - else: - img_tensor = img_transform32(image).unsqueeze(0).to(next(self.parameters()).device) - - with torch.no_grad(): - res = self.forward(img_tensor) - - # Show Results - if refine_foreground: - - pred_pil = transforms.ToPILImage()(res.squeeze()) - image_masked = refine_foreground_process(original_image, pred_pil) - image_masked.putalpha(pred_pil.resize(original_image.size)) - return image_masked - - else: - alpha = postprocess_image(res, im_size=[w,h]) - pred_pil = transforms.ToPILImage()(alpha) - mask = pred_pil.resize(original_image.size) - original_image.putalpha(mask) - # mask = Image.fromarray(alpha) - - return original_image - - - else: - foregrounds = [] - for batch in image: - image, h, w,original_image = rgb_loader_refiner(batch) - if torch.cuda.is_available(): - - img_tensor = img_transform(image).unsqueeze(0).to(next(self.parameters()).device) - else: - img_tensor = img_transform32(image).unsqueeze(0).to(next(self.parameters()).device) - - with torch.no_grad(): - res = self.forward(img_tensor) - - if refine_foreground: - - pred_pil = transforms.ToPILImage()(res.squeeze()) - image_masked = refine_foreground_process(original_image, pred_pil) - image_masked.putalpha(pred_pil.resize(original_image.size)) - - foregrounds.append(image_masked) - else: - alpha = postprocess_image(res, im_size=[w,h]) - pred_pil = transforms.ToPILImage()(alpha) - mask = pred_pil.resize(original_image.size) - original_image.putalpha(mask) - # mask = Image.fromarray(alpha) - foregrounds.append(original_image) - - return foregrounds - - - - - def segment_video(self, video_path, output_path="./", fps=0, refine_foreground=False, batch=1, print_frames_processed=True, webm = False, rgb_value= (0, 255, 0)): - """ - Segments the given video to extract the foreground (with alpha) from each frame - and saves the result as either a WebM video (with alpha channel) or MP4 (with a - color background). - - Args: - video_path (str): - Path to the input video file. - - output_path (str, optional): - Directory (or full path) where the output video and/or files will be saved. - Defaults to "./". - - fps (int, optional): - The frames per second (FPS) to use for the output video. If 0 (default), the - original FPS of the input video is used. Otherwise, overrides it. - - refine_foreground (bool, optional): - Whether to run an additional “refine foreground” process on each frame. - Defaults to False. - - batch (int, optional): - Number of frames to process at once (inference batch size). Large batch sizes - may require more GPU memory. Defaults to 1. - - print_frames_processed (bool, optional): - If True (default), prints progress (how many frames have been processed) to - the console. - - webm (bool, optional): - If True (default), exports a WebM video with alpha channel (VP9 / yuva420p). - If False, exports an MP4 video composited over a solid color background. - - rgb_value (tuple, optional): - The RGB background color (e.g., green screen) used to composite frames when - saving to MP4. Defaults to (0, 255, 0). - - Returns: - None. Writes the output video(s) to disk in the specified format. - """ - cap = cv2.VideoCapture(video_path) - if not cap.isOpened(): - raise OSError(f"Cannot open video: {video_path}") - - original_fps = cap.get(cv2.CAP_PROPFPS) - original_fps = 30 if original_fps == 0 else original_fps - fps = original_fps if fps == 0 else fps - - ret, first_frame = cap.read() - if not ret: - raise ValueError("No frames found in the video.") - _height, _width = first_frame.shape[:2] - cap.set(cv2.CAP_PROP_POSFRAMES, 0) - - foregrounds = [] - frame_idx = 0 - processed_count = 0 - batch_frames = [] - total_frames = int(cap.get(cv2.CAP_PROPFRAME_COUNT)) - - while True: - ret, frame = cap.read() - if not ret: - if batch_frames: - batch_results = self.inference(batch_frames, refine_foreground) - if isinstance(batch_results, Image.Image): - foregrounds.append(batch_results) - else: - foregrounds.extend(batch_results) - if print_frames_processed: - print(f"Processed frames {frame_idx-len(batch_frames)+1} to {frame_idx} of {total_frames}") - break - - # Process every frame instead of using intervals - frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) - pil_frame = Image.fromarray(frame_rgb) - batch_frames.append(pil_frame) - if len(batch_frames) == batch: - batch_results = self.inference(batch_frames, refine_foreground) - if isinstance(batch_results, Image.Image): - foregrounds.append(batch_results) - else: - foregrounds.extend(batch_results) - if print_frames_processed: - print(f"Processed frames {frame_idx-batch+1} to {frame_idx} of {total_frames}") - batch_frames = [] - processed_count += batch - - frame_idx += 1 - - - if webm: - alpha_webm_path = os.path.join(output_path, "foreground.webm") - pil_images_to_webm_alpha(foregrounds, alpha_webm_path, fps=original_fps) - - else: - cap.release() - fg_output = os.path.join(output_path, 'foreground.mp4') - pil_images_to_mp4(foregrounds, fg_output, fps=original_fps,rgb_value=rgb_value) - cv2.destroyAllWindows() - try: - fg_audio_output = os.path.join(output_path, 'foreground_output_with_audio.mp4') - add_audio_to_video(fg_output, video_path, fg_audio_output) - except Exception as e: - print("No audio found in the original video") - print(e) - - -def rgb_loader_refiner( original_image): - h, w = original_image.size - image = original_image - # Convert to RGB if necessary - if image.mode != 'RGB': - image = image.convert('RGB') - # Resize the image - image = image.resize((1024, 1024), resample=Image.Resampling.LANCZOS) - return image.convert('RGB'), h, w,original_image - - -# Define the image transformation -img_transform = transforms.Compose([ - transforms.ToTensor(), - transforms.ConvertImageDtype(torch.float16), - transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) -]) - -img_transform32 = transforms.Compose([ - transforms.ToTensor(), - transforms.ConvertImageDtype(torch.float32), - transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) -]) - - -def pil_images_to_mp4(images, output_path, fps=24, rgb_value=(0, 255, 0)): - """ - Converts an array of PIL images to an MP4 video. - Args: - images: List of PIL images - output_path: Path to save the MP4 file - fps: Frames per second (default: 24) - rgb_value: Background RGB color tuple (default: green (0, 255, 0)) - """ - if not images: - raise ValueError("No images provided to convert to MP4.") - - width, height = images[0].size - fourcc = cv2.VideoWriter_fourcc(*'mp4v') - video_writer = cv2.VideoWriter(output_path, fourcc, fps, (width, height)) - - for image in images: - # If image has alpha channel, composite onto the specified background color - if image.mode == 'RGBA': - # Create background image with specified RGB color - background = Image.new('RGB', image.size, rgb_value) - background = background.convert('RGBA') - # Composite the image onto the background - image = Image.alpha_composite(background, image) - image = image.convert('RGB') - else: - # Ensure RGB format for non-alpha images - image = image.convert('RGB') - - # Convert to OpenCV format and write - open_cv_image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) - video_writer.write(open_cv_image) - video_writer.release() - -def pil_images_to_webm_alpha(images, output_path, fps=30): - """ - Converts a list of PIL RGBA images to a VP9 .webm video with alpha channel. - - NOTE: Not all players will display alpha in WebM. - Browsers like Chrome/Firefox typically do support VP9 alpha. - """ - if not images: - raise ValueError("No images provided for WebM with alpha.") - - # Ensure output directory exists - os.makedirs(os.path.dirname(output_path), exist_ok=True) - - with tempfile.TemporaryDirectory() as tmpdir: - # Save frames as PNG (with alpha) - for idx, img in enumerate(images): - if img.mode != "RGBA": - img = img.convert("RGBA") - out_path = os.path.join(tmpdir, f"{idx:06d}.png") - img.save(out_path, "PNG") - - # Construct ffmpeg command - # -c:v libvpx-vp9 => VP9 encoder - # -pix_fmt yuva420p => alpha-enabled pixel format - # -auto-alt-ref 0 => helps preserve alpha frames (libvpx quirk) - ffmpeg_cmd = [ - "ffmpeg", "-y", - "-framerate", str(fps), - "-i", os.path.join(tmpdir, "%06d.png"), - "-c:v", "libvpx-vp9", - "-pix_fmt", "yuva420p", - "-auto-alt-ref", "0", - output_path - ] - - subprocess.run(ffmpeg_cmd, check=True) - - print(f"WebM with alpha saved to {output_path}") - -def add_audio_to_video(video_without_audio_path, original_video_path, output_path): - """ - Check if the original video has an audio stream. If yes, add it. If not, skip. - """ - # 1) Probe original video for audio streams - probe_command = [ - 'ffprobe', '-v', 'error', - '-select_streams', 'a:0', - '-show_entries', 'stream=index', - '-of', 'csv=p=0', - original_video_path - ] - result = subprocess.run(probe_command, capture_output=True, text=True, check=False) - - # result.stdout is empty if no audio stream found - if not result.stdout.strip(): - print("No audio track found in original video, skipping audio addition.") - return - print("Audio track detected; proceeding to mux audio.") - # 2) If audio found, run ffmpeg to add it - command = [ - 'ffmpeg', '-y', - '-i', video_without_audio_path, - '-i', original_video_path, - '-c', 'copy', - '-map', '0:v:0', - '-map', '1:a:0', # we know there's an audio track now - output_path - ] - subprocess.run(command, check=True) - print(f"Audio added successfully => {output_path}") - - -### Thanks to the source: https://huggingface.co/ZhengPeng7/BiRefNet/blob/main/handler.py -def refine_foreground_process(image, mask, r=90): - if mask.size != image.size: - mask = mask.resize(image.size) - image = np.array(image) / 255.0 - mask = np.array(mask) / 255.0 - estimated_foreground = FB_blur_fusion_foreground_estimator_2(image, mask, r=r) - image_masked = Image.fromarray((estimated_foreground * 255.0).astype(np.uint8)) - return image_masked - - -def FB_blur_fusion_foreground_estimator_2(image, alpha, r=90): - # Thanks to the source: https://github.com/Photoroom/fast-foreground-estimation - alpha = alpha[:, :, None] - F, blur_B = FB_blur_fusion_foreground_estimator(image, image, image, alpha, r) - return FB_blur_fusion_foreground_estimator(image, F, blur_B, alpha, r=6)[0] - - -def FB_blur_fusion_foreground_estimator(image, F, B, alpha, r=90): - if isinstance(image, Image.Image): - image = np.array(image) / 255.0 - blurred_alpha = cv2.blur(alpha, (r, r))[:, :, None] - - blurredFA = cv2.blur(F * alpha, (r, r)) - blurredF = blurredFA / (blurred_alpha + 1e-5) - - blurred_B1A = cv2.blur(B * (1 - alpha), (r, r)) - blurred_B = blurred_B1A / ((1 - blurred_alpha) + 1e-5) - F = blurredF + alpha * \ - (image - alpha * blurredF - (1 - alpha) * blurred_B) - F = np.clip(F, 0, 1) - return F, blurred_B - - -def postprocess_image(result: torch.Tensor, im_size: list) -> np.ndarray: - result = torch.squeeze(F.interpolate(result, size=im_size, mode='bilinear'), 0) - ma = torch.max(result) - mi = torch.min(result) - result = (result - mi) / (ma - mi) - im_array = (result * 255).permute(1, 2, 0).cpu().data.numpy().astype(np.uint8) - im_array = np.squeeze(im_array) - return im_array diff --git a/modules/masking.py b/modules/masking.py index 4f2689758..0767f79a7 100644 --- a/modules/masking.py +++ b/modules/masking.py @@ -263,7 +263,7 @@ def run_rembg(input_image: Image.Image, input_mask: np.ndarray): if "U2NET_HOME" not in os.environ: os.environ["U2NET_HOME"] = os.path.join(paths.models_path, "Rembg") if opts.model == 'ben2': - from modules import ben2 + from modules.rembg import ben2 args = { 'image': input_image, 'refine': True, diff --git a/modules/rembg/rembg_api.py b/modules/rembg/rembg_api.py index 0bb30f4dd..c100377b7 100644 --- a/modules/rembg/rembg_api.py +++ b/modules/rembg/rembg_api.py @@ -3,7 +3,7 @@ from fastapi import Body def dependencies(): from installer import install - for pkg in ["dctorch==0.1.2", "pymatting", "pooch", "rembg", "numba"]: + for pkg in ["dctorch==0.1.2", "pymatting", "pooch", "rembg", "numba", "kornia", "kornia-rs"]: install(pkg, no_deps=True, ignore=False) @@ -25,6 +25,7 @@ async def post_rembg( if input_image is None: return {} + dependencies() if model == "ben2": from modules.rembg import ben2 image = ben2.remove(input_image, refine=refine) @@ -32,7 +33,6 @@ async def post_rembg( from modules.rembg import lucida image = lucida.remove(input_image) else: - dependencies() import rembg image = rembg.remove( # pylint: disable=c-extension-no-member input_image, diff --git a/requirements.txt b/requirements.txt index 89a95dbdf..5d77e7432 100644 --- a/requirements.txt +++ b/requirements.txt @@ -34,7 +34,6 @@ accelerate==1.14.0 einops==0.8.2 huggingface_hub==1.30.0 hf_xet==1.6.0 -numpy==2.5.2 pandas==2.3.1 protobuf==7.36.1 pytorch_lightning==2.6.5 diff --git a/scripts/postprocessing_rembg.py b/scripts/postprocessing_rembg.py index 4068f958b..61825e5db 100644 --- a/scripts/postprocessing_rembg.py +++ b/scripts/postprocessing_rembg.py @@ -20,7 +20,7 @@ models = [ def dependencies(): from installer import install - for pkg in ["dctorch==0.1.2", "pymatting", "pooch", "rembg", "numba"]: + for pkg in ["dctorch==0.1.2", "pymatting", "pooch", "rembg", "numba", "kornia", "kornia-rs"]: install(pkg, no_deps=True, ignore=False) @@ -78,6 +78,7 @@ class ScriptPostprocessingRembg(scripts_postprocessing.ScriptPostprocessing): if image is None: return pp log.info(f'RemoveBackground: model={model} merge_alpha={merge_alpha} refine={refine} mask_only={mask_only} postprocess_mask={postprocess_mask} alpha_matting={alpha_matting} alpha_matting_foreground_threshold={alpha_matting_foreground_threshold} alpha_matting_background_threshold={alpha_matting_background_threshold} alpha_matting_erode_size={alpha_matting_erode_size}') + dependencies() if model == 'ben2': try: from modules.rembg import ben2 @@ -96,7 +97,6 @@ class ScriptPostprocessingRembg(scripts_postprocessing.ScriptPostprocessing): return pp else: try: - dependencies() import rembg if "U2NET_HOME" not in os.environ: from modules.paths import models_path From e0a23b0c6ec4d1d04f5f7da389aafa2539c135b6 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 5 Sep 2026 23:00:34 +0200 Subject: [PATCH 141/270] handle scipy Signed-off-by: Vladimir Mandic --- installer.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/installer.py b/installer.py index f8db6404c..6da642eec 100644 --- a/installer.py +++ b/installer.py @@ -1,5 +1,6 @@ from functools import lru_cache import os +import re import sys import json import time @@ -645,14 +646,18 @@ def check_numpy(): t_start = time.time() if args.skip_all or args.skip_requirements: return - torch_ver = package_version('torch') - torch_minor = int(torch_ver.split('.')[1]) if torch_ver else 99 - if torch_minor < 11: - if not installed('numpy==2.1.2', quiet=True): - install('numpy==2.1.2', 'numpy==2.1.2', ignore=True) + torch_ver = package_version('torch') or '' + ver_match = re.match(r'^(\d+)\.(\d+)', torch_ver) + if ver_match: + torch_major, torch_minor = map(int, ver_match.groups()) else: - if not installed('numpy==2.4.6', quiet=True): - install('numpy==2.4.6', 'numpy==2.4.6', ignore=True) + torch_major, torch_minor = 0, 0 + if (torch_major, torch_minor) < (2, 11): + install('numpy==2.1.2', 'numpy', ignore=True) + install('scipy==1.14.1', 'scipy', ignore=True) + else: + install('numpy==2.4.6', 'numpy', ignore=True) + install('scipy==1.18.1', 'scipy', ignore=True) ts('numpy', t_start) @@ -1292,11 +1297,6 @@ def install_pydantic(): reload('pydantic', '2.13.4') -def install_scipy(): - # install('scipy==1.14.1', ignore=True, quiet=True) - install('scipy==1.18.1', ignore=True, quiet=True) - - def install_opencv(): install('opencv-python==4.13.0.92', ignore=True, quiet=True) install('opencv-python-headless==4.13.0.92', ignore=True, quiet=True) @@ -1378,7 +1378,6 @@ def install_requirements(): install_compel() install_pydantic() install_opencv() - install_scipy() if args.profile: pr.disable() print_profile(pr, 'Requirements') From 4a5dc98cb2c5b2b0434150289978ee10a90b9090 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 5 Sep 2026 22:54:28 +0100 Subject: [PATCH 142/270] fix(lora): match the diffusers minimax lora converter The reference fc1 is a fused [gate; value] SwiGLU projection and the diffusers port stores [value; gate]. The native mapping did not swap the halves, so gate and value deltas landed on each other's rows. The mapping now also renames the standalone projections, reads a metadata-only alpha, and accepts the musubi, peft dit and diffusers-named layouts. --- modules/lora/native_adapter.py | 9 + pipelines/minimax/minimax_lora.py | 122 +++-- test/test-minimax-native-adapters.py | 665 +++++++++++++++++++++++++++ 3 files changed, 752 insertions(+), 44 deletions(-) create mode 100644 test/test-minimax-native-adapters.py diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index 4cfe155d9..c73fe5832 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -563,11 +563,15 @@ def try_load_lora(name, network_on_disk, lora_scale, *, bare_prefixes=(), bare_diffusers_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, + network_alpha=None, arch_name="generic"): """Generic LoRA loader (handles DoRA via the universal ``finalize_updown`` hook). Fused targets are chunked at load time by slicing ``lora_up`` along dim 0; the down-side is shared across the resolved targets. + + ``network_alpha`` is a file-level alpha for files without alpha tensors; + a file carrying any alpha of its own keeps those and ignores it. """ t0 = time.time() state_dict = read_state_dict(network_on_disk.filename, what="network") @@ -582,6 +586,8 @@ def try_load_lora(name, network_on_disk, lora_scale, *, bare_prefixes=bare_prefixes, bare_diffusers_prefixes=bare_diffusers_prefixes, ) + if network_alpha is not None and any("alpha" in w for w in groups.values()): + network_alpha = None unmapped = 0 mismatch = 0 @@ -589,6 +595,9 @@ def try_load_lora(name, network_on_disk, lora_scale, *, for (prefix, base), w in groups.items(): if "lora_down.weight" not in w or "lora_up.weight" not in w: continue + if network_alpha is not None: + w = dict(w) + w["alpha"] = torch.tensor(float(network_alpha)) # DoRA magnitude vectors: ai-toolkit saves `magnitude`, PEFT/diffusers # `lora_magnitude_vector`. Both are 1-D per-output row norms with # dora_scale semantics; reshape to (out, 1) so the apply-time diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index 035f4d90e..35011045b 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -3,10 +3,17 @@ MiniMax H3 is a modular video pipeline with a transformer and a text encoder. This loader routes transformer keys to ``lora_transformer_`` and text-encoder keys to ``lora_te_`` when native LoRAs are applied. + +Published LoRAs target the reference module names. The mapping onto +``diffusers.MiniMaxH3Transformer3DModel`` follows the diffusers LoRA converter: +fused ``attn.qkv_proj`` splits into ``to_q``/``to_k``/``to_v``, and ``mlp.fc1`` +lands on the fused SwiGLU projection with its two output halves swapped. """ import re +import torch + from modules.lora import native_adapter @@ -16,14 +23,8 @@ KNOWN_PREFIXES = ( "diffusion_model.transformer.", "diffusion_model.blocks.", "diffusion_model.transformer_blocks.", - "diffusion_model.token_refiner.", "diffusion_model.token_refiner.refiner_blocks.", - "diffusion_model.final_layer.", - "diffusion_model.video_patch_proj.", - "diffusion_model.audio_patch_proj.", - "diffusion_model.condition_proj.", - "diffusion_model.time_embedder.proj_in.", - "diffusion_model.time_embedder.proj_out.", + "diffusion_model.token_refiner.", "diffusion_model.model.language_model.", "text_encoders.", "text_encoder.", @@ -31,16 +32,27 @@ KNOWN_PREFIXES = ( "transformer.", "transformer_blocks.", "blocks.", - "token_refiner.", "token_refiner.refiner_blocks.", - "final_layer.", - "video_patch_proj.", - "audio_patch_proj.", - "condition_proj.", - "time_embedder.proj_in.", - "time_embedder.proj_out.", + "token_refiner.", ) + native_adapter.KNOWN_PREFIXES_DEFAULT +# Reference keys outside the block stacks carry no arch prefix in reference saves; the base is the whole module path. +BARE_PREFIXES = ("video_patch_proj.", "audio_patch_proj.", "condition_proj.", "time_embedder.", "final_layer.") + +# Diffusers module names saved without a component prefix (peft dumps, kohya-suffixed exports) bind verbatim. +BARE_DIFFUSERS_PREFIXES = ("transformer_blocks.", "token_refiner.refiner_blocks.", "proj_in.", "audio_proj_in.", "context_embedder.", "time_embedder.linear_", "norm_out.", "proj_out.", "audio_proj_out.") + +STANDALONE_RENAMES = { + "video_patch_proj": "proj_in", + "audio_patch_proj": "audio_proj_in", + "condition_proj": "context_embedder", + "time_embedder.proj_in": "time_embedder.linear_1", + "time_embedder.proj_out": "time_embedder.linear_2", + "final_layer.adaln_proj.linear": "norm_out.linear", + "final_layer.video_out": "proj_out", + "final_layer.audio_out": "audio_proj_out", +} + # Re-export for tests / compatibility LORA_SUFFIXES = native_adapter.LORA_SUFFIXES @@ -80,26 +92,31 @@ def normalize_mini_max_suffix(suffix: str) -> str: return MINIMAX_SUFFIX_NORMALIZE.get(suffix, suffix) +# musubi-tuner flattens every "." to "_" under a lora_unet_ prefix; the reference module names carry +# underscores of their own, so the dotted path is recovered by matching the whole flattened name. +_FLATTENED_MODULES = [ + (r"blocks_(\d+)_attn_(qkv|out)_proj", r"blocks.\1.attn.\2_proj"), + (r"blocks_(\d+)_mlp_fc([12])", r"blocks.\1.mlp.fc\2"), + (r"blocks_(\d+)_adaln_proj_linear", r"blocks.\1.adaln_proj.linear"), + (r"token_refiner_blocks_(\d+)_attn_(qkv|out)_proj", r"token_refiner.blocks.\1.attn.\2_proj"), + (r"token_refiner_blocks_(\d+)_mlp_fc([12])", r"token_refiner.blocks.\1.mlp.fc\2"), + (r"(video|audio)_patch_proj", r"\1_patch_proj"), + (r"condition_proj", "condition_proj"), + (r"time_embedder_proj_(in|out)", r"time_embedder.proj_\1"), + (r"final_layer_adaln_proj_linear", "final_layer.adaln_proj.linear"), + (r"final_layer_(video|audio)_out", r"final_layer.\1_out"), +] + + def _unflatten_lora_unet_key(key: str) -> str | None: if not key.startswith("lora_unet_"): return None module_key, _, suffix = key[len("lora_unet_"):].partition(".") if not suffix: return None - - patterns = [ - (r"blocks_(\d+)_attn_out_proj", r"blocks.\1.attn.out_proj"), - (r"blocks_(\d+)_attn_qkv_proj", r"blocks.\1.attn.qkv_proj"), - (r"blocks_(\d+)_mlp_fc1", r"blocks.\1.mlp.fc1"), - (r"blocks_(\d+)_mlp_fc2", r"blocks.\1.mlp.fc2"), (r"token_refiner_blocks_(\d+)_attn_out_proj", r"token_refiner.blocks.\1.attn.out_proj"), - (r"token_refiner_blocks_(\d+)_attn_qkv_proj", r"token_refiner.blocks.\1.attn.qkv_proj"), - (r"token_refiner_blocks_(\d+)_mlp_fc1", r"token_refiner.blocks.\1.mlp.fc1"), - (r"token_refiner_blocks_(\d+)_mlp_fc2", r"token_refiner.blocks.\1.mlp.fc2"), ] - - for pattern, replacement in patterns: + for pattern, replacement in _FLATTENED_MODULES: if re.fullmatch(pattern, module_key): return f"{re.sub(pattern, replacement, module_key)}.{suffix}" - return None @@ -108,13 +125,28 @@ def parse_key(key, suffixes): unflattened = _unflatten_lora_unet_key(key) if unflattened is not None: key = unflattened - parsed = native_adapter.parse_key(key, suffixes, prefixes=KNOWN_PREFIXES) + key = native_adapter.unwrap_peft_wrapper(key) + if key.startswith("dit."): + key = "diffusion_model." + key[len("dit."):] + parsed = native_adapter.parse_key(key, suffixes, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_PREFIXES, bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES) if parsed is None: return None prefix_used, base, suffix = parsed return prefix_used, base, normalize_mini_max_suffix(suffix) +def swap_swiglu_halves(slot): + """Reorder fc1 output rows from the reference ``[gate; value]`` to the diffusers SwiGLU ``[value; gate]``.""" + up = slot.get("lora_up.weight") + if up is None: + return + for key in ("lora_up.weight", "bias", "diff_b", "dora_scale"): + t = slot.get(key) + if t is not None and t.ndim >= 1 and t.shape[0] == up.shape[0]: + gate, value = t.chunk(2, dim=0) + slot[key] = torch.cat([value, gate], dim=0) + + def group_by_suffixes(state_dict, suffixes, *, prefixes=None, bare_prefixes=(), bare_diffusers_prefixes=()): # pylint: disable=unused-argument """MiniMax-bound :func:`native_adapter.group_by_suffixes`.""" groups: dict[tuple, dict[str, object]] = {} @@ -128,6 +160,9 @@ def group_by_suffixes(state_dict, suffixes, *, prefixes=None, bare_prefixes=(), slot = {} groups[(prefix_used, base)] = slot slot[suffix] = value + for (_prefix_used, base), slot in groups.items(): + if base.endswith(".mlp.fc1"): + swap_swiglu_halves(slot) return groups @@ -158,14 +193,14 @@ def _transformer_block_targets(target_prefix, base): def resolve_targets(prefix_used, base): """Return ``[(diffusers_path, ChunkSpec | None), ...]`` for MiniMax keys.""" - if prefix_used == "diffusion_model.": + if prefix_used == "diffusion_model." or prefix_used is None: if base.startswith("transformer."): return [(base[len("transformer."):], None)] if base.startswith("text_encoder."): return [(base[len("text_encoder."):], None)] if base.startswith("text_encoders."): return [(base[len("text_encoders."):], None)] - return [(base, None)] + return [(STANDALONE_RENAMES.get(base, base), None)] if prefix_used in ("diffusion_model.transformer.", "transformer.", "lora_transformer_"): return [(base, None)] if prefix_used in ("diffusion_model.transformer_blocks.", "transformer_blocks."): @@ -178,20 +213,6 @@ def resolve_targets(prefix_used, base): if base.startswith("blocks."): return _transformer_block_targets("token_refiner.refiner_blocks", base[len("blocks."):]) return [(f"token_refiner.refiner_{base}", None)] - if prefix_used in ("diffusion_model.final_layer.", "final_layer."): - if base == "adaln_proj.linear": - return [("norm_out.linear", None)] - return [(base, None)] - if prefix_used in ("diffusion_model.video_patch_proj.", "video_patch_proj."): - return [("proj_in." + base.split(".", 1)[1], None)] if "." in base else [("proj_in", None)] - if prefix_used in ("diffusion_model.audio_patch_proj.", "audio_patch_proj."): - return [("audio_proj_in." + base.split(".", 1)[1], None)] if "." in base else [("audio_proj_in", None)] - if prefix_used in ("diffusion_model.condition_proj.", "condition_proj."): - return [("context_embedder." + base.split(".", 1)[1], None)] if "." in base else [("context_embedder", None)] - if prefix_used in ("diffusion_model.time_embedder.proj_in.", "time_embedder.proj_in."): - return [("time_embedder.linear_1." + base.split(".", 1)[1], None)] if "." in base else [("time_embedder.linear_1", None)] - if prefix_used in ("diffusion_model.time_embedder.proj_out.", "time_embedder.proj_out."): - return [("time_embedder.linear_2." + base.split(".", 1)[1], None)] if "." in base else [("time_embedder.linear_2", None)] if prefix_used in ( "diffusion_model.text_encoder.", "diffusion_model.text_encoders.", @@ -219,9 +240,22 @@ def network_prefix_for(prefix_used): return "lora_transformer_" +def file_alpha(network_on_disk): + """The training alpha some trainers record in the safetensors metadata instead of per-key tensors, or None.""" + alpha = (getattr(network_on_disk, "metadata", None) or {}).get("alpha") + if alpha is None: + return None + try: + return float(alpha) + except (TypeError, ValueError): + return None + + _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=KNOWN_PREFIXES, + bare_prefixes=BARE_PREFIXES, + bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, network_prefix=network_prefix_for, group_by_suffixes_fn=group_by_suffixes, arch_name="minimaxh3", @@ -229,7 +263,7 @@ _BIND_KWARGS = dict( def try_load_lora(name, network_on_disk, lora_scale): - return native_adapter.try_load_lora(name, network_on_disk, lora_scale, **_BIND_KWARGS) + return native_adapter.try_load_lora(name, network_on_disk, lora_scale, network_alpha=file_alpha(network_on_disk), **_BIND_KWARGS) def try_load_lokr(name, network_on_disk, lora_scale): diff --git a/test/test-minimax-native-adapters.py b/test/test-minimax-native-adapters.py new file mode 100644 index 000000000..50e4b6b00 --- /dev/null +++ b/test/test-minimax-native-adapters.py @@ -0,0 +1,665 @@ +#!/usr/bin/env python +""" +Offline unit tests for the MiniMax H3 native adapter loader. + +Published MiniMax H3 LoRAs target the reference module names (fused +``attn.qkv_proj``, fused SwiGLU ``mlp.fc1``, ``token_refiner.blocks``), while +sdnext loads upstream ``diffusers.MiniMaxH3Transformer3DModel``. The reference +fc1 is ``[gate; value]`` and diffusers' SwiGLU is ``[value; gate]``, so the +native mapping has to permute fc1 output rows the same way the diffusers LoRA +converter does. These tests pin ``pipelines.minimax.minimax_lora`` against that +converter: same targets, same per-module deltas. + +Save formats exercised, each seen in a published LoRA: + +- comfy / ai-toolkit (``diffusion_model.blocks.0.attn.qkv_proj.lora_A.weight``): + the CivitAI ecosystem and the larryvrh turbo files. +- bare reference names (``blocks.0.attn.qkv_proj.lora_A.weight``): the + unpruned larryvrh saves. +- musubi-tuner (``lora_unet_blocks_0_mlp_fc1.lora_down.weight`` + ``alpha``). +- comfy with block-diagonal fused qkv and tripled alpha: lightx2v's ComfyUI + exports. +- peft dump (``transformer_blocks.0.attn.to_q.lora_A.default.weight``) with the + training alpha in the file metadata: lightx2v's diffusers exports. +- diffusers names with kohya suffixes: the alibaba-pai Acc LoRAs. +- peft wrapper around a ``dit`` attribute (``base_model.model.dit.blocks.0...``): + the mvp-lab RAVEN LoRA. + +The reference module tree is the real ``MiniMaxH3Transformer3DModel`` at tiny +dims, so module names and target shapes are authoritative. Every LoRA file +under the MiniMax H3 LoRA folder is also mapped through both paths and compared +per target, exactly when the file carries no alpha and through random probes +when the converter folds an alpha into the weights. + +No running server required. + +Usage: + python test/test-minimax-native-adapters.py +""" + +import glob +import os +import sys +import tempfile +import time + +import torch +import torch.nn as nn +import safetensors +import safetensors.torch + +script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, script_dir) +os.chdir(script_dir) + +os.environ['SD_INSTALL_QUIET'] = '1' + +# Bootstrap cmd_args before any module that pulls in shared.py. +import modules.cmd_args # pylint: disable=wrong-import-position +import installer # pylint: disable=wrong-import-position +_orig_argv = sys.argv +sys.argv = [sys.argv[0]] +try: + modules.cmd_args.parse_args() +finally: + sys.argv = _orig_argv +installer.add_args(modules.cmd_args.parser) +modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) + +from modules.errors import log # pylint: disable=wrong-import-position +from modules import shared # pylint: disable=wrong-import-position +from modules.lora import native_adapter # pylint: disable=wrong-import-position +from pipelines.minimax import minimax_lora as M # pylint: disable=wrong-import-position +from diffusers import MiniMaxH3Transformer3DModel # pylint: disable=wrong-import-position +from diffusers.loaders.lora_conversion_utils import _convert_non_diffusers_minimax_h3_lora_to_diffusers as convert_diffusers # pylint: disable=wrong-import-position + + +# ============================================================ +# Test infrastructure +# ============================================================ + +results: dict[str, dict] = {} + + +def category(name: str): + if name not in results: + results[name] = {'passed': 0, 'failed': 0, 'tests': []} + return name + + +def record(cat: str, passed: bool, name: str, detail: str = ''): + status = 'PASS' if passed else 'FAIL' + results[cat]['passed' if passed else 'failed'] += 1 + results[cat]['tests'].append((status, name)) + msg = f' {status}: {name}' + if detail: + msg += f' ({detail})' + if passed: + log.info(msg) + else: + log.error(msg) + + +def run_test(cat: str, fn): + name = fn.__name__ + try: + ok = fn() + if ok is False: + record(cat, False, name) + else: + record(cat, True, name) + except AssertionError as e: + record(cat, False, name, str(e)) + except Exception as e: # pylint: disable=broad-except + record(cat, False, name, f'exception: {e}') + import traceback + traceback.print_exc() + + +# ============================================================ +# Reference MiniMax H3 transformer (real class, tiny dims) +# ============================================================ +# Upstream: heads=56, head_dim=128, hidden=5376, layers=50, refiner=2, ffn=14336. +# The attention inner dim exceeds the hidden size upstream; the test dims keep that. + +NUM_LAYERS = 2 +NUM_REFINER = 1 + +REF = MiniMaxH3Transformer3DModel( + num_attention_heads=2, attention_head_dim=8, hidden_size=12, num_layers=NUM_LAYERS, num_refiner_layers=NUM_REFINER, + ffn_dim=16, in_channels=4, audio_in_channels=4, patch_size=(1, 2, 2), text_dim=10, freq_dim=8, + time_embed_hidden_dim=12, time_embed_dim=6, rope_freq_dim=1, +) + +# {diffusers dotted name: (out, in)} for every Linear. +LINEAR_SHAPES = {name: tuple(m.weight.shape) for name, m in REF.named_modules() if isinstance(m, nn.Linear)} +# {network key: module} exactly as assign_network_names_to_compvis_modules stamps it. +LINEAR_NETKEYS = {'lora_transformer_' + name.replace('.', '_') for name in LINEAR_SHAPES} + +# Reference module names and where they land, used only to size synthetic tensors; +# correctness is judged against the diffusers converter, not this table. +STANDALONE = { + 'video_patch_proj': 'proj_in', + 'audio_patch_proj': 'audio_proj_in', + 'condition_proj': 'context_embedder', + 'time_embedder.proj_in': 'time_embedder.linear_1', + 'time_embedder.proj_out': 'time_embedder.linear_2', + 'final_layer.adaln_proj.linear': 'norm_out.linear', + 'final_layer.video_out': 'proj_out', + 'final_layer.audio_out': 'audio_proj_out', +} +BLOCK_LEAVES = { + 'attn.qkv_proj': 'attn.to_q', + 'attn.out_proj': 'attn.to_out.0', + 'mlp.fc1': 'ff.net.0.proj', + 'mlp.fc2': 'ff.net.2', + 'adaln_proj.linear': 'adaln_proj.linear', +} + + +def ref_shape(ref_path: str): + """(out, in) of the reference Linear a LoRA key names, read from the diffusers module it maps to.""" + if ref_path in STANDALONE: + return LINEAR_SHAPES[STANDALONE[ref_path]] + if ref_path.startswith('blocks.'): + _, idx, leaf = ref_path.split('.', 2) + stack = 'transformer_blocks' + else: + _, _, idx, leaf = ref_path.split('.', 3) + stack = 'token_refiner.refiner_blocks' + out, inp = LINEAR_SHAPES[f'{stack}.{idx}.{BLOCK_LEAVES[leaf]}'] + if leaf == 'attn.qkv_proj': + out *= 3 + return out, inp + + +def all_ref_paths(): + paths = list(STANDALONE) + for i in range(NUM_LAYERS): + paths += [f'blocks.{i}.{leaf}' for leaf in BLOCK_LEAVES] + for i in range(NUM_REFINER): + paths += [f'token_refiner.blocks.{i}.{leaf}' for leaf in BLOCK_LEAVES if leaf != 'adaln_proj.linear'] + return paths + + +# ============================================================ +# Mock pipeline wrapping the real transformer +# ============================================================ + + +class _MockPipeline: + def __init__(self, transformer): + self.transformer = transformer + self.text_encoder = None + + +class _MockSdModel: + def __init__(self, pipe): + self.pipe = pipe + self.network_layer_mapping = {} + self.embedding_db = None + self.__class__.__name__ = 'MiniMaxH3ModularPipeline' + + +def install_mock_pipe(): + """Point shared.sd_model at a mock exposing the reference transformer; re-installed per load so stamps do not leak.""" + sd_model = _MockSdModel(_MockPipeline(REF)) + from modules.modeldata import model_data + model_data.sd_model = sd_model + return sd_model + + +# ============================================================ +# Synthesizers and helpers +# ============================================================ + +RANK = 4 +PEFT = ('lora_A.weight', 'lora_B.weight') +KOHYA = ('lora_down.weight', 'lora_up.weight') + + +def lora_pair(key_base, shape, suffix=PEFT, alpha=None, rank=RANK): + out, inp = shape + sd = { + f'{key_base}.{suffix[0]}': torch.randn(rank, inp), + f'{key_base}.{suffix[1]}': torch.randn(out, rank), + } + if alpha is not None: + sd[f'{key_base}.alpha'] = torch.tensor(float(alpha)) + return sd + + +def synth(prefix='diffusion_model.', suffix=PEFT, alpha=None, flatten=False): + """One LoRA pair for every reference Linear, in the requested reference-name layout.""" + sd = {} + for path in all_ref_paths(): + key = f'lora_unet_{path.replace(".", "_")}' if flatten else f'{prefix}{path}' + sd.update(lora_pair(key, ref_shape(path), suffix, alpha)) + return sd + + +def synth_diffusers(prefix='', suffix=PEFT, infix='', alpha=None): + """One LoRA pair for every Linear, keyed by its diffusers name; ``infix`` inserts a peft adapter slot.""" + sd = {} + for path, shape in LINEAR_SHAPES.items(): + pair = lora_pair(f'{prefix}{path}', shape, suffix, alpha) + for key, value in pair.items(): + for marker in ('lora_A', 'lora_B', 'lora_down', 'lora_up'): + key = key.replace(f'.{marker}.weight', f'.{marker}{infix}.weight') + sd[key] = value + return sd + + +class TempLora: + """Context manager: writes a state dict to a temp safetensors file.""" + + def __init__(self, state_dict, name='test', metadata=None): + self.state_dict = state_dict + self.name = name + self.metadata = metadata + self.path = None + + def __enter__(self): + sd = {k: v.contiguous() for k, v in self.state_dict.items()} + fd, self.path = tempfile.mkstemp(suffix='.safetensors', prefix=f'{self.name}_') + os.close(fd) + safetensors.torch.save_file(sd, self.path) + return _MockNetworkOnDisk(self.path, self.name, self.metadata) + + def __exit__(self, exc_type, exc_val, exc_tb): + if self.path and os.path.exists(self.path): + os.unlink(self.path) + + +class _MockNetworkOnDisk: + def __init__(self, filename, name, metadata=None): + self.filename = filename + self.name = name + self.shorthash = '' + self.sd_version = 'unknown' + self.metadata = metadata or {} + + +def load_native(state_dict, name='test', metadata=None): + install_mock_pipe() + with TempLora(state_dict, name=name, metadata=metadata) as nod: + return M.try_load(name, nod, lora_scale=1.0) + + +def native_deltas(net): + """{network key: full delta} as the apply pass would compute it at multiplier 1.""" + out = {} + for key, module in net.modules.items(): + module.network.te_multiplier = 1.0 + module.network.unet_multiplier = 1.0 + up = module.up_model.weight.float() + down = module.down_model.weight.float() + out[key] = (up @ down) * module.calc_scale() + return out + + +def diffusers_deltas(state_dict, rewrite=None): + """{network key: full delta} from the diffusers converter's output.""" + if rewrite is not None: + state_dict = {k.replace(rewrite[0], rewrite[1], 1) if k.startswith(rewrite[0]) else k: v for k, v in state_dict.items()} + converted = convert_diffusers(dict(state_dict)) + out = {} + for key, value in converted.items(): + if not key.endswith('.lora_A.weight'): + continue + path = key[len('transformer.'):-len('.lora_A.weight')] + down = value.float() + up = converted[f'transformer.{path}.lora_B.weight'].float() + out['lora_transformer_' + path.replace('.', '_')] = up @ down + return out + + +def identity_deltas(state_dict, scale=1.0): + """{network key: full delta} for a file already on diffusers names, at a uniform scale.""" + out = {} + for key, value in state_dict.items(): + for marker in ('lora_A', 'lora_down'): + idx = key.find(f'.{marker}') + if idx == -1: + continue + path = key[:idx].removeprefix('transformer.') + up_key = key.replace(marker, 'lora_B' if marker == 'lora_A' else 'lora_up', 1) + out['lora_transformer_' + path.replace('.', '_')] = (state_dict[up_key].float() @ value.float()) * scale + return out + + +def assert_same_deltas(native, reference): + assert set(native) == set(reference), f'targets differ: native-only={sorted(set(native) - set(reference))} reference-only={sorted(set(reference) - set(native))}' + for key, ref in reference.items(): + got = native[key] + assert got.shape == ref.shape, f'{key}: shape {tuple(got.shape)} vs {tuple(ref.shape)}' + assert torch.allclose(got, ref, rtol=1e-5, atol=1e-5), f'{key}: delta differs, max abs {float((got - ref).abs().max()):.3e}' + + +def native_mapping(state_dict, network_alpha=None): + """{diffusers path: (down, up, scale)} the native loader would bind, without a model: parse, resolve, chunk, file alpha.""" + groups = M.group_by_suffixes(state_dict, M.LORA_SUFFIXES) + if network_alpha is not None and any('alpha' in w for w in groups.values()): + network_alpha = None + out = {} + for (prefix, base), w in groups.items(): + if 'lora_down.weight' not in w or 'lora_up.weight' not in w: + continue + for path, chunk in native_adapter.resolve_group_targets(M.resolve_targets, prefix, base): + target = native_adapter._slice_lora_chunk(w, chunk) if chunk is not None else w # pylint: disable=protected-access + alpha = network_alpha if 'alpha' not in target else float(target['alpha']) + scale = 1.0 if alpha is None else alpha / target['lora_down.weight'].shape[0] + out[path] = (target['lora_down.weight'], target['lora_up.weight'], scale) + return out + + +REFERENCE_PREFIXES = ('diffusion_model.', 'blocks.', 'token_refiner.blocks.', 'final_layer.', 'lora_unet_', 'base_model.model.dit.', + 'video_patch_proj.', 'audio_patch_proj.', 'condition_proj.', 'time_embedder.proj_') + + +def oracle_mapping(state_dict, network_alpha=None): + """{diffusers path: (down, up, scale)} plus the keys no LoRA pair claims, from the layout's reference loader. + + Reference-name layouts go through the diffusers converter, which folds any + alpha into the weights. Files already on diffusers names bind verbatim, with + a per-key alpha or else the file-level one applied as ``alpha / rank``. + """ + if any(k.startswith(REFERENCE_PREFIXES) for k in state_dict): + sd = {k.replace('base_model.model.dit.', 'diffusion_model.', 1) if k.startswith('base_model.model.dit.') else k: v for k, v in state_dict.items()} + converted = convert_diffusers(sd) + out = {} + for key, value in converted.items(): + if key.endswith('.lora_A.weight'): + path = key[len('transformer.'):-len('.lora_A.weight')] + out[path] = (value, converted[f'transformer.{path}.lora_B.weight'], 1.0) + return out, [] + has_alpha = any(k.endswith('.alpha') for k in state_dict) + out, ignored = {}, [] + for key, value in state_dict.items(): + marker = next((m for m in ('lora_A', 'lora_down') if f'.{m}' in key), None) + if marker is None: + if not any(f'.{m}' in key for m in ('lora_B', 'lora_up', 'alpha')): + ignored.append(key) + continue + path = key[:key.find(f'.{marker}')].removeprefix('transformer.') + up = state_dict[key.replace(marker, 'lora_B' if marker == 'lora_A' else 'lora_up', 1)] + alpha = state_dict.get(f'{path}.alpha', state_dict.get(f'transformer.{path}.alpha')) + if alpha is not None: + scale = float(alpha) / value.shape[0] + elif network_alpha is not None and not has_alpha: + scale = network_alpha / value.shape[0] + else: + scale = 1.0 + out[path] = (value, up, scale) + return out, ignored + + +def assert_same_factors(native, oracle, label): + """Exact when neither side scales; probe-equal on the effective delta otherwise.""" + assert set(native) == set(oracle), f'{label}: targets differ: native-only={sorted(set(native) - set(oracle))[:4]} oracle-only={sorted(set(oracle) - set(native))[:4]}' + probes = 0 + for path, (down_o, up_o, scale_o) in oracle.items(): + down_n, up_n, scale_n = native[path] + if scale_n == 1.0 and scale_o == 1.0: + assert torch.equal(down_n, down_o), f'{label}: {path} down differs' + assert torch.equal(up_n, up_o), f'{label}: {path} up differs' + continue + probes += 1 + x = torch.randn(4, down_o.shape[1]) + got = (x @ down_n.float().t() @ up_n.float().t()) * scale_n + ref = (x @ down_o.float().t() @ up_o.float().t()) * scale_o + err = float((got - ref).abs().max() / ref.abs().max().clamp(min=1e-12)) + assert err < 1e-4, f'{label}: {path} effective delta differs, relative error {err:.2e}' + return probes + + +# ============================================================ +# Tests - resolution +# ============================================================ + +CAT_RESOLVE = category('resolve') +CAT_LOADER = category('loader') +CAT_REAL = category('real-files') + + +def test_every_reference_module_resolves_to_a_real_linear(): + """Every reference key layout resolves onto a Linear that exists in the diffusers model.""" + for layout in ({'prefix': 'diffusion_model.'}, {'prefix': ''}, {'flatten': True, 'suffix': KOHYA}, {'prefix': 'base_model.model.dit.'}): + sd = synth(**layout) + got = set(native_mapping(sd)) + expected = set(oracle_mapping(sd)[0]) + assert got == expected, f'{layout}: native={sorted(got - expected)} missing={sorted(expected - got)}' + assert got <= set(LINEAR_SHAPES), f'{layout}: not real modules: {sorted(got - set(LINEAR_SHAPES))}' + return True + + +def test_fc1_output_halves_swapped(): + """fc1 gate rows land on the second half of ff.net.0.proj and value rows on the first.""" + sd = lora_pair('diffusion_model.blocks.0.mlp.fc1', ref_shape('blocks.0.mlp.fc1')) + up = sd['diffusion_model.blocks.0.mlp.fc1.lora_B.weight'] + down, bound_up, _scale = native_mapping(sd)['transformer_blocks.0.ff.net.0.proj'] + half = up.shape[0] // 2 + assert torch.equal(bound_up[:half], up[half:]), 'value rows must lead' + assert torch.equal(bound_up[half:], up[:half]), 'gate rows must trail' + assert torch.equal(down, sd['diffusion_model.blocks.0.mlp.fc1.lora_A.weight']), 'down is untouched' + return True + + +def test_fc1_row_extras_follow_the_swap(): + """Per-output extras on fc1 (bias delta, DoRA magnitude) are permuted with the up rows.""" + sd = lora_pair('diffusion_model.blocks.0.mlp.fc1', ref_shape('blocks.0.mlp.fc1')) + out = ref_shape('blocks.0.mlp.fc1')[0] + sd['diffusion_model.blocks.0.mlp.fc1.diff_b'] = torch.arange(out, dtype=torch.float32) + sd['diffusion_model.blocks.0.mlp.fc1.dora_scale'] = torch.arange(out, dtype=torch.float32).reshape(out, 1) + groups = M.group_by_suffixes(sd, M.LORA_SUFFIXES) + slot = groups[('diffusion_model.blocks.', '0.mlp.fc1')] + half = out // 2 + assert torch.equal(slot['diff_b'][:half], torch.arange(half, out, dtype=torch.float32)) + assert torch.equal(slot['dora_scale'][:half, 0], torch.arange(half, out, dtype=torch.float32)) + return True + + +def test_qkv_split_order(): + """Fused qkv rows split as [q; k; v] onto to_q / to_k / to_v.""" + sd = lora_pair('diffusion_model.blocks.1.attn.qkv_proj', ref_shape('blocks.1.attn.qkv_proj')) + up = sd['diffusion_model.blocks.1.attn.qkv_proj.lora_B.weight'] + mapping = native_mapping(sd) + for i, proj in enumerate(('to_q', 'to_k', 'to_v')): + _down, bound_up, _scale = mapping[f'transformer_blocks.1.attn.{proj}'] + assert torch.equal(bound_up, torch.chunk(up, 3, dim=0)[i]), f'{proj} rows' + return True + + +def test_diffusers_peft_keys_bind_verbatim(): + """A diffusers-PEFT save is already on diffusers names and gets no permutation.""" + sd = lora_pair('transformer.transformer_blocks.0.ff.net.0.proj', ref_shape('blocks.0.mlp.fc1')) + down, up, _scale = native_mapping(sd)['transformer_blocks.0.ff.net.0.proj'] + assert torch.equal(up, sd['transformer.transformer_blocks.0.ff.net.0.proj.lora_B.weight']) + assert torch.equal(down, sd['transformer.transformer_blocks.0.ff.net.0.proj.lora_A.weight']) + return True + + +# ============================================================ +# Tests - loader against the reference loaders +# ============================================================ + + +def _loader_matches_converter(layout, name, rewrite=None): + sd = synth(**layout) + net = load_native(sd, name=name) + assert net is not None, 'nothing bound' + assert net.mismatch == 0, f'mismatch={net.mismatch}' + reference = diffusers_deltas(sd, rewrite=rewrite) + assert set(net.modules) <= LINEAR_NETKEYS, f'bound to non-linear keys: {sorted(set(net.modules) - LINEAR_NETKEYS)}' + assert_same_deltas(native_deltas(net), reference) + assert len(net.modules) == len(reference), f'bound {len(net.modules)} modules, converter has {len(reference)}' + return True + + +def test_comfy_layout_matches_converter(): + """diffusion_model.* keys with PEFT suffixes: the published turbo LoRA layout.""" + return _loader_matches_converter({'prefix': 'diffusion_model.'}, 'comfy') + + +def test_bare_reference_layout_matches_converter(): + """Bare reference names, as the reference generate.py saves them.""" + return _loader_matches_converter({'prefix': ''}, 'bare') + + +def test_musubi_kohya_alpha_matches_converter(): + """Flattened lora_unet_ names with kohya suffixes and a non-trivial alpha.""" + return _loader_matches_converter({'flatten': True, 'suffix': KOHYA, 'alpha': RANK / 2}, 'musubi') + + +def test_peft_wrapped_dit_layout_matches_converter(): + """A peft dump wrapping the reference model under a dit attribute maps like diffusion_model.""" + return _loader_matches_converter({'prefix': 'base_model.model.dit.'}, 'dit', rewrite=('base_model.model.dit.', 'diffusion_model.')) + + +def test_block_diagonal_qkv_with_tripled_alpha_matches_converter(): + """A fused qkv stored as stacked A and block-diagonal B with alpha tripled applies each projection at alpha / rank.""" + out_q, inp = LINEAR_SHAPES['transformer_blocks.0.attn.to_q'] + alpha = RANK / 2 + downs = [torch.randn(RANK, inp) for _ in range(3)] + ups = [torch.randn(out_q, RANK) for _ in range(3)] + sd = { + 'diffusion_model.blocks.0.attn.qkv_proj.lora_A.weight': torch.cat(downs, dim=0), + 'diffusion_model.blocks.0.attn.qkv_proj.lora_B.weight': torch.block_diag(*ups), + 'diffusion_model.blocks.0.attn.qkv_proj.alpha': torch.tensor(3 * alpha), + } + net = load_native(sd, name='blockdiag') + got = native_deltas(net) + assert_same_deltas(got, diffusers_deltas(sd)) + for i, proj in enumerate(('to_q', 'to_k', 'to_v')): + expected = (ups[i] @ downs[i]) * (alpha / RANK) + assert torch.allclose(got[f'lora_transformer_transformer_blocks_0_attn_{proj}'], expected, rtol=1e-5, atol=1e-5), f'{proj} is not its own projection at alpha / rank' + return True + + +def test_peft_dump_layout_binds_verbatim(): + """Diffusers names carrying peft's .default. slot and no component prefix bind one to one.""" + sd = synth_diffusers(infix='.default') + net = load_native(sd, name='peftdump') + assert net is not None and net.mismatch == 0 + assert_same_deltas(native_deltas(net), identity_deltas({k.replace('.default.', '.'): v for k, v in sd.items()})) + assert len(net.modules) == len(LINEAR_SHAPES) + return True + + +def test_diffusers_names_with_kohya_suffixes_bind(): + """Diffusers names with lora_down / lora_up suffixes and no alpha bind at scale 1.""" + sd = synth_diffusers(suffix=KOHYA) + net = load_native(sd, name='kohyadiff') + assert net is not None and net.mismatch == 0 + assert_same_deltas(native_deltas(net), identity_deltas(sd)) + return True + + +def test_metadata_alpha_scales_an_alphaless_file(): + """A file-level alpha in the safetensors metadata scales every module by alpha / rank.""" + sd = synth_diffusers(infix='.default') + net = load_native(sd, name='metaalpha', metadata={'alpha': '2'}) + assert_same_deltas(native_deltas(net), identity_deltas({k.replace('.default.', '.'): v for k, v in sd.items()}, scale=2 / RANK)) + return True + + +def test_metadata_alpha_yields_to_alpha_tensors(): + """A file carrying any alpha tensor keeps its own scaling and ignores the metadata alpha.""" + sd = synth_diffusers() + sd['proj_out.alpha'] = torch.tensor(RANK / 2) + net = load_native(sd, name='mixedalpha', metadata={'alpha': '2'}) + got = native_deltas(net) + expected = identity_deltas({k: v for k, v in sd.items() if not k.endswith('.alpha')}) + expected['lora_transformer_proj_out'] = expected['lora_transformer_proj_out'] * 0.5 + assert_same_deltas(got, expected) + return True + + +def test_non_numeric_metadata_alpha_is_ignored(): + """A metadata alpha that is not a number leaves the file at alpha == rank.""" + sd = synth_diffusers() + net = load_native(sd, name='badalpha', metadata={'alpha': 'n/a'}) + assert_same_deltas(native_deltas(net), identity_deltas(sd)) + return True + + +# ============================================================ +# Tests - real files +# ============================================================ + +REAL_FILES = sorted(glob.glob(os.path.join(shared.opts.lora_dir, 'MiniMax H3', '*.safetensors'))) + + +def test_real_files_match_reference_loaders(): + """Every local MiniMax H3 LoRA maps onto the same targets as its reference loader, with the same factors.""" + if not REAL_FILES: + log.warning(' no local MiniMax H3 LoRA files, skipped') + return True + for path in REAL_FILES: + name = os.path.basename(path) + with safetensors.safe_open(path, framework='pt') as f: + metadata = f.metadata() or {} + network_alpha = M.file_alpha(_MockNetworkOnDisk(path, name, metadata)) + sd = safetensors.torch.load_file(path) + native = native_mapping(sd, network_alpha) + oracle, ignored = oracle_mapping(sd, network_alpha) + probes = assert_same_factors(native, oracle, name) + note = f' alpha=file:{network_alpha}' if network_alpha is not None else (' alpha=keys' if probes else '') + note += f' ignored={len(ignored)}' if ignored else '' + log.info(f' {name}: targets={len(native)} {"probed" if probes else "identical"}{note}') + del sd, native, oracle + return True + + +# ============================================================ +# Runner +# ============================================================ + + +def run_tests(): + t0 = time.time() + log.warning('=== MiniMax H3 native adapter tests ===') + log.warning('=== Resolution ===') + for fn in [ + test_every_reference_module_resolves_to_a_real_linear, + test_fc1_output_halves_swapped, + test_fc1_row_extras_follow_the_swap, + test_qkv_split_order, + test_diffusers_peft_keys_bind_verbatim, + ]: + run_test(CAT_RESOLVE, fn) + + log.warning('=== Loader vs reference loaders ===') + for fn in [ + test_comfy_layout_matches_converter, + test_bare_reference_layout_matches_converter, + test_musubi_kohya_alpha_matches_converter, + test_peft_wrapped_dit_layout_matches_converter, + test_block_diagonal_qkv_with_tripled_alpha_matches_converter, + test_peft_dump_layout_binds_verbatim, + test_diffusers_names_with_kohya_suffixes_bind, + test_metadata_alpha_scales_an_alphaless_file, + test_metadata_alpha_yields_to_alpha_tensors, + test_non_numeric_metadata_alpha_is_ignored, + ]: + run_test(CAT_LOADER, fn) + + log.warning('=== Real files ===') + run_test(CAT_REAL, test_real_files_match_reference_loaders) + + elapsed = time.time() - t0 + log.warning('=== Results ===') + total_pass = 0 + total_fail = 0 + for cat, info in results.items(): + status = 'PASS' if info['failed'] == 0 else 'FAIL' + log.info(f' {cat}: {info["passed"]} passed, {info["failed"]} failed [{status}]') + total_pass += info['passed'] + total_fail += info['failed'] + log.warning(f'Total: {total_pass} passed, {total_fail} failed in {elapsed:.2f}s') + return total_fail == 0 + + +if __name__ == '__main__': + ok = run_tests() + sys.exit(0 if ok else 1) From 1c91fb2047e8713d6149f3088d59c51fd6ef6790 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 5 Sep 2026 23:41:30 +0100 Subject: [PATCH 143/270] refactor(lora): make the fused row reorder a chunk capability A ChunkSpec can reorder equal row blocks of the rows it selects, so an arch declares a swapped SwiGLU projection on the target instead of permuting the state dict first. Only the LoRA family applies it; the others skip a reordered target with a warning. --- modules/lora/native_adapter.py | 51 +++++++++++++++++++++------- pipelines/minimax/minimax_lora.py | 19 +---------- test/test-minimax-native-adapters.py | 19 ++++++++--- 3 files changed, 54 insertions(+), 35 deletions(-) diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index c73fe5832..20f771ed7 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -174,9 +174,9 @@ FULL_MARKERS = (".diff",) @dataclass(frozen=True) class ChunkSpec: - """How to slice a fused weight along dim 0 for one target module. + """How to take a fused weight's rows along dim 0 for one target module. - Two forms supported: + Three forms; the reorder composes with either slice: - Equal chunks (``idx`` + ``total``): fused QKV split into Q/K/V via ``torch.chunk(up, total, dim=0)[idx]``. Used by flux2 / z-image where @@ -185,6 +185,11 @@ class ChunkSpec: ``up[start:end]``. Used by chroma's single-block ``linear1`` which fuses Q / K / V / proj_mlp at unequal sizes (``[3072, 3072, 3072, 12288]``). + - Row reorder (``reorder``): the module lays out equal row blocks in a + different order from the save; ``(1, 0)`` swaps the halves of a fused + SwiGLU projection saved ``[gate; value]`` onto a ``[value; gate]`` + module. Applied to the rows the slice selects. Only the LoRA family + permutes rows; the others skip a reordered target. Generic loaders check :attr:`is_equal_chunks` to decide between the two forms and select the appropriate ``NetworkModule*Chunk`` / @@ -194,11 +199,16 @@ class ChunkSpec: total: int | None = None start: int | None = None end: int | None = None + reorder: tuple[int, ...] | None = None @property def is_equal_chunks(self) -> bool: return self.idx is not None and self.total is not None + @property + def is_slice(self) -> bool: + return self.is_equal_chunks or self.start is not None + # === Key normalizations (applied universally by parse_key) === @@ -369,7 +379,7 @@ def lokr_shapes_match(sd_module, kron_shape, chunk: ChunkSpec | None) -> bool: kron_out, kron_in_flat = kron_shape if kron_in_flat != mod_in_flat: return False - if chunk is None: + if chunk is None or not chunk.is_slice: return kron_out == mod_shape[0] if chunk.is_equal_chunks: return kron_out == mod_shape[0] * chunk.total @@ -504,20 +514,27 @@ def resolve_group_targets(resolve_targets, prefix_used, base): def slice_chunk_rows(t, chunk: ChunkSpec): - """Slice dim 0 of ``t`` per ``chunk``. + """Slice dim 0 of ``t`` per ``chunk``, then lay the selected rows out in the chunk's order. Equal-chunks form uses ``torch.chunk`` (faster for the symmetric case); row-range form uses tensor slicing for arbitrary partitions. """ if chunk.is_equal_chunks: - return torch.chunk(t, chunk.total, dim=0)[chunk.idx].contiguous() - return t[chunk.start:chunk.end].contiguous() + t = torch.chunk(t, chunk.total, dim=0)[chunk.idx] + elif chunk.start is not None: + t = t[chunk.start:chunk.end] + if chunk.reorder is not None: + blocks = torch.chunk(t, len(chunk.reorder), dim=0) + t = torch.cat([blocks[i] for i in chunk.reorder], dim=0) + return t.contiguous() def _slice_lora_chunk(w, chunk: ChunkSpec): - """Return a shallow copy of ``w`` with ``lora_up.weight`` sliced per ``chunk``.""" + """Return a shallow copy of ``w`` with ``lora_up.weight`` sliced per ``chunk``; a dense bias follows a pure reorder.""" out = dict(w) out["lora_up.weight"] = slice_chunk_rows(w["lora_up.weight"], chunk) + if "bias" in w and not chunk.is_slice: + out["bias"] = slice_chunk_rows(w["bias"], chunk) return out @@ -618,7 +635,7 @@ def try_load_lora(name, network_on_disk, lora_scale, *, target_w = w if chunk is not None: - if "bias" in w or "bias_indices" in w: + if "bias_indices" in w or ("bias" in w and chunk.is_slice): # Weight-shaped bias residuals (dense or LyCORIS sparse # triplet) are not partitioned onto fused targets. log.warning(f'Network load: type=LoRA name="{name}" arch={arch_name} key={network_key} weight-shaped bias on fused target skipped (unsupported)') @@ -718,6 +735,10 @@ def try_load_lokr(name, network_on_disk, lora_scale, *, continue target_w = w if chunk is not None: + if chunk.reorder is not None: + log.warning(f'Network load: type=LoKR name="{name}" arch={arch_name} key={network_key} row reorder on fused target skipped (unsupported)') + skipped += 1 + continue if "bias" in w: log.warning(f'Network load: type=LoKR name="{name}" arch={arch_name} key={network_key} weight-shaped bias on fused target skipped (unsupported)') skipped += 1 @@ -781,7 +802,7 @@ def try_load_loha(name, network_on_disk, lora_scale, *, targets = resolve_group_targets(resolve_targets, prefix, base) is_fused = any(t[1] is not None for t in targets) if is_fused and is_tucker: - log.warning(f'Network load: type=LoHA name="{name}" arch={arch_name} key={base} Tucker fused QKV skipped (unsupported)') + log.warning(f'Network load: type=LoHA name="{name}" arch={arch_name} key={base} Tucker fused target skipped (unsupported)') skipped += 1 continue arch_prefix = _resolve_prefix(network_prefix, prefix) @@ -793,6 +814,10 @@ def try_load_loha(name, network_on_disk, lora_scale, *, continue target_w = w if chunk is not None: + if chunk.reorder is not None: + log.warning(f'Network load: type=LoHA name="{name}" arch={arch_name} key={network_key} row reorder on fused target skipped (unsupported)') + skipped += 1 + continue if "bias" in w: log.warning(f'Network load: type=LoHA name="{name}" arch={arch_name} key={network_key} weight-shaped bias on fused target skipped (unsupported)') skipped += 1 @@ -856,7 +881,7 @@ def try_load_oft(name, network_on_disk, lora_scale, *, is_boft = "oft_blocks" in w and w["oft_blocks"].ndim == 4 targets = resolve_group_targets(resolve_targets, prefix, base) if any(t[1] is not None for t in targets): - log.warning(f'Network load: type={"BOFT" if is_boft else "OFT"} name="{name}" arch={arch_name} key={base} fused QKV skipped (unsupported)') + log.warning(f'Network load: type={"BOFT" if is_boft else "OFT"} name="{name}" arch={arch_name} key={base} fused target skipped (unsupported)') skipped += 1 continue arch_prefix = _resolve_prefix(network_prefix, prefix) @@ -915,7 +940,7 @@ def try_load_ia3(name, network_on_disk, lora_scale, *, continue targets = resolve_group_targets(resolve_targets, prefix, base) if any(t[1] is not None for t in targets): - log.warning(f'Network load: type=IA3 name="{name}" arch={arch_name} key={base} fused QKV skipped (unsupported)') + log.warning(f'Network load: type=IA3 name="{name}" arch={arch_name} key={base} fused target skipped (unsupported)') skipped += 1 continue arch_prefix = _resolve_prefix(network_prefix, prefix) @@ -967,7 +992,7 @@ def try_load_glora(name, network_on_disk, lora_scale, *, continue targets = resolve_group_targets(resolve_targets, prefix, base) if any(t[1] is not None for t in targets): - log.warning(f'Network load: type=GLoRA name="{name}" arch={arch_name} key={base} fused QKV skipped (unsupported)') + log.warning(f'Network load: type=GLoRA name="{name}" arch={arch_name} key={base} fused target skipped (unsupported)') skipped += 1 continue arch_prefix = _resolve_prefix(network_prefix, prefix) @@ -1085,7 +1110,7 @@ def try_load_full(name, network_on_disk, lora_scale, *, continue targets = resolve_group_targets(resolve_targets, prefix, base) if any(t[1] is not None for t in targets): - log.warning(f'Network load: type=Full name="{name}" arch={arch_name} key={base} fused QKV skipped (unsupported)') + log.warning(f'Network load: type=Full name="{name}" arch={arch_name} key={base} fused target skipped (unsupported)') skipped += 1 continue arch_prefix = _resolve_prefix(network_prefix, prefix) diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index 35011045b..52ca14d25 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -12,8 +12,6 @@ lands on the fused SwiGLU projection with its two output halves swapped. import re -import torch - from modules.lora import native_adapter @@ -135,18 +133,6 @@ def parse_key(key, suffixes): return prefix_used, base, normalize_mini_max_suffix(suffix) -def swap_swiglu_halves(slot): - """Reorder fc1 output rows from the reference ``[gate; value]`` to the diffusers SwiGLU ``[value; gate]``.""" - up = slot.get("lora_up.weight") - if up is None: - return - for key in ("lora_up.weight", "bias", "diff_b", "dora_scale"): - t = slot.get(key) - if t is not None and t.ndim >= 1 and t.shape[0] == up.shape[0]: - gate, value = t.chunk(2, dim=0) - slot[key] = torch.cat([value, gate], dim=0) - - def group_by_suffixes(state_dict, suffixes, *, prefixes=None, bare_prefixes=(), bare_diffusers_prefixes=()): # pylint: disable=unused-argument """MiniMax-bound :func:`native_adapter.group_by_suffixes`.""" groups: dict[tuple, dict[str, object]] = {} @@ -160,9 +146,6 @@ def group_by_suffixes(state_dict, suffixes, *, prefixes=None, bare_prefixes=(), slot = {} groups[(prefix_used, base)] = slot slot[suffix] = value - for (_prefix_used, base), slot in groups.items(): - if base.endswith(".mlp.fc1"): - swap_swiglu_halves(slot) return groups @@ -184,7 +167,7 @@ def _transformer_block_targets(target_prefix, base): return [(f"{target_prefix}.{stem}.attn.to_out.0", None)] if base.endswith(".mlp.fc1"): stem = base[: -len(".mlp.fc1")] - return [(f"{target_prefix}.{stem}.ff.net.0.proj", None)] + return [(f"{target_prefix}.{stem}.ff.net.0.proj", native_adapter.ChunkSpec(reorder=(1, 0)))] # reference [gate; value] onto the diffusers SwiGLU [value; gate] if base.endswith(".mlp.fc2"): stem = base[: -len(".mlp.fc2")] return [(f"{target_prefix}.{stem}.ff.net.2", None)] diff --git a/test/test-minimax-native-adapters.py b/test/test-minimax-native-adapters.py index 50e4b6b00..616f32caf 100644 --- a/test/test-minimax-native-adapters.py +++ b/test/test-minimax-native-adapters.py @@ -451,11 +451,21 @@ def test_fc1_row_extras_follow_the_swap(): out = ref_shape('blocks.0.mlp.fc1')[0] sd['diffusion_model.blocks.0.mlp.fc1.diff_b'] = torch.arange(out, dtype=torch.float32) sd['diffusion_model.blocks.0.mlp.fc1.dora_scale'] = torch.arange(out, dtype=torch.float32).reshape(out, 1) - groups = M.group_by_suffixes(sd, M.LORA_SUFFIXES) - slot = groups[('diffusion_model.blocks.', '0.mlp.fc1')] + net = load_native(sd, name='fc1extras') + module = net.modules['lora_transformer_transformer_blocks_0_ff_net_0_proj'] half = out // 2 - assert torch.equal(slot['diff_b'][:half], torch.arange(half, out, dtype=torch.float32)) - assert torch.equal(slot['dora_scale'][:half, 0], torch.arange(half, out, dtype=torch.float32)) + assert torch.equal(module.ex_bias[:half], torch.arange(half, out, dtype=torch.float32)) + assert torch.equal(module.dora_scale[:half, 0], torch.arange(half, out, dtype=torch.float32)) + return True + + +def test_chunk_reorder_composes_with_slice(): + """A ChunkSpec reorder applies to the rows its slice selects.""" + t = torch.arange(8).reshape(8, 1) + got = native_adapter.slice_chunk_rows(t, native_adapter.ChunkSpec(idx=1, total=2, reorder=(1, 0))) + assert got.flatten().tolist() == [6, 7, 4, 5], got.flatten().tolist() + got = native_adapter.slice_chunk_rows(t, native_adapter.ChunkSpec(reorder=(1, 0))) + assert got.flatten().tolist() == [4, 5, 6, 7, 0, 1, 2, 3], got.flatten().tolist() return True @@ -624,6 +634,7 @@ def run_tests(): test_every_reference_module_resolves_to_a_real_linear, test_fc1_output_halves_swapped, test_fc1_row_extras_follow_the_swap, + test_chunk_reorder_composes_with_slice, test_qkv_split_order, test_diffusers_peft_keys_bind_verbatim, ]: From 783b66c3be88254e792c57d3b86d63bacd9eff31 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 6 Sep 2026 00:00:21 +0100 Subject: [PATCH 144/270] refactor(lora): offer unknown bare keys to the resolver A bare key that matches no known prefix is parsed with the bare-diffusers sentinel and handed to the resolver instead of being dropped at parse time. The per-arch lists of bare diffusers prefixes are gone, and a path that names no live module counts as unmapped. --- modules/lora/native_adapter.py | 63 +++++++++++----------------- pipelines/chroma/chroma_lora.py | 7 ---- pipelines/ernie/ernie_lora.py | 7 ---- pipelines/flux/flux2_lora.py | 5 --- pipelines/krea2/krea2_lora.py | 7 ---- pipelines/minimax/minimax_lora.py | 7 +--- pipelines/z_image/zimage_lora.py | 4 -- test/test-minimax-native-adapters.py | 13 ++++++ test/test-zimage-native-adapters.py | 4 +- 9 files changed, 41 insertions(+), 76 deletions(-) diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index 20f771ed7..e62b9ddb9 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -23,8 +23,7 @@ each loader passes in (how a parsed ``(prefix, base)`` maps to one or more diffusers paths plus optional chunk descriptors). Per-arch loader modules import this module and pass their own ``prefixes``, -``bare_prefixes``, ``bare_diffusers_prefixes``, and ``resolve_targets`` to the -generic helpers. +``bare_prefixes`` and ``resolve_targets`` to the generic helpers. """ import os @@ -55,10 +54,11 @@ from modules.lora import lora_common as l KNOWN_PREFIXES_DEFAULT = ("diffusion_model.", "transformer.", "lora_unet_", "lora_transformer_", "lycoris_") -# Sentinel ``prefix_used`` value emitted by :func:`parse_key` when a bare path -# starting with a member of ``bare_diffusers_prefixes`` matches. A loader +# Sentinel ``prefix_used`` value emitted by :func:`parse_key` for a bare path +# that matched no arch prefix and no ``bare_prefixes`` member. A loader # ``resolve_targets`` may dispatch on this string to rewrite the base path; -# when it declines, :func:`resolve_group_targets` binds the path verbatim. +# when it declines, :func:`resolve_group_targets` binds the path verbatim, and +# a path naming no live module counts as unmapped instead of vanishing. BARE_DIFFUSERS_PREFIX_USED = "bare_diffusers" @@ -389,14 +389,15 @@ def lokr_shapes_match(sd_module, kron_shape, chunk: ChunkSpec | None) -> bool: # === Parsing primitives === -def parse_key(key, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=(), bare_diffusers_prefixes=()): +def parse_key(key, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=()): """Return ``(prefix_used, base, suffix_normalized)`` or ``None``. - ``prefix_used`` is the matched element of ``prefixes``, ``BARE_DIFFUSERS_PREFIX_USED`` - if a member of ``bare_diffusers_prefixes`` matched, or ``None`` for a key - that matched a member of ``bare_prefixes``. ``base`` is the path with prefix - and suffix removed. ``suffix_normalized`` is the suffix (without the leading - dot) after applying :data:`SUFFIX_NORMALIZE` (e.g. ``lora_A.weight`` becomes + ``prefix_used`` is the matched element of ``prefixes``, ``None`` for a key + that matched a member of ``bare_prefixes``, or ``BARE_DIFFUSERS_PREFIX_USED`` + for any other bare key, which the loader offers to the resolver and counts + as unmapped when nothing binds. ``base`` is the path with prefix and suffix + removed. ``suffix_normalized`` is the suffix (without the leading dot) after + applying :data:`SUFFIX_NORMALIZE` (e.g. ``lora_A.weight`` becomes ``lora_down.weight``). Always applies :func:`unwrap_peft_wrapper` and :func:`strip_peft_adapter_name` @@ -411,11 +412,8 @@ def parse_key(key, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=( prefix_used = p stripped = key[len(p):] break - if prefix_used is None: - if any(key.startswith(p) for p in bare_diffusers_prefixes): - prefix_used = BARE_DIFFUSERS_PREFIX_USED - elif not any(key.startswith(p) for p in bare_prefixes): - return None + if prefix_used is None and not any(key.startswith(p) for p in bare_prefixes): + prefix_used = BARE_DIFFUSERS_PREFIX_USED matched_suffix = None split_at = -1 @@ -435,7 +433,7 @@ def parse_key(key, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=( return prefix_used, base, suffix -def group_by_suffixes(state_dict, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=(), bare_diffusers_prefixes=()): +def group_by_suffixes(state_dict, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=()): """Group state-dict entries by ``(prefix_used, base)``. Returns ``{(prefix_used, base): {suffix: tensor, ...}}`` where each suffix @@ -445,12 +443,7 @@ def group_by_suffixes(state_dict, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, """ groups: dict[tuple, dict[str, torch.Tensor]] = {} for key, value in state_dict.items(): - parsed = parse_key( - key, suffixes, - prefixes=prefixes, - bare_prefixes=bare_prefixes, - bare_diffusers_prefixes=bare_diffusers_prefixes, - ) + parsed = parse_key(key, suffixes, prefixes=prefixes, bare_prefixes=bare_prefixes) if parsed is None: continue prefix_used, base, suffix = parsed @@ -577,7 +570,7 @@ def slice_bias_delta(w, chunk: ChunkSpec, fused_out): def try_load_lora(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), bare_diffusers_prefixes=(), + bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, network_alpha=None, @@ -601,7 +594,6 @@ def try_load_lora(name, network_on_disk, lora_scale, *, state_dict, LORA_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, - bare_diffusers_prefixes=bare_diffusers_prefixes, ) if network_alpha is not None and any("alpha" in w for w in groups.values()): network_alpha = None @@ -681,7 +673,7 @@ def try_load_lora(name, network_on_disk, lora_scale, *, def try_load_lokr(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), bare_diffusers_prefixes=(), + bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -705,7 +697,6 @@ def try_load_lokr(name, network_on_disk, lora_scale, *, state_dict, LOKR_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, - bare_diffusers_prefixes=bare_diffusers_prefixes, ) unmapped = 0 @@ -767,7 +758,7 @@ def try_load_lokr(name, network_on_disk, lora_scale, *, def try_load_loha(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), bare_diffusers_prefixes=(), + bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -790,7 +781,6 @@ def try_load_loha(name, network_on_disk, lora_scale, *, state_dict, LOHA_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, - bare_diffusers_prefixes=bare_diffusers_prefixes, ) unmapped = 0 @@ -841,7 +831,7 @@ def try_load_loha(name, network_on_disk, lora_scale, *, def try_load_oft(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), bare_diffusers_prefixes=(), + bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -870,7 +860,6 @@ def try_load_oft(name, network_on_disk, lora_scale, *, state_dict, OFT_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, - bare_diffusers_prefixes=bare_diffusers_prefixes, ) unmapped = 0 @@ -902,7 +891,7 @@ def try_load_oft(name, network_on_disk, lora_scale, *, def try_load_ia3(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), bare_diffusers_prefixes=(), + bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -930,7 +919,6 @@ def try_load_ia3(name, network_on_disk, lora_scale, *, state_dict, IA3_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, - bare_diffusers_prefixes=bare_diffusers_prefixes, ) unmapped = 0 @@ -958,7 +946,7 @@ def try_load_ia3(name, network_on_disk, lora_scale, *, def try_load_glora(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), bare_diffusers_prefixes=(), + bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -982,7 +970,6 @@ def try_load_glora(name, network_on_disk, lora_scale, *, state_dict, GLORA_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, - bare_diffusers_prefixes=bare_diffusers_prefixes, ) unmapped = 0 @@ -1010,7 +997,7 @@ def try_load_glora(name, network_on_disk, lora_scale, *, def try_load_norm(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), bare_diffusers_prefixes=(), + bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): # pylint: disable=unused-argument @@ -1037,7 +1024,6 @@ def try_load_norm(name, network_on_disk, lora_scale, *, state_dict, NORM_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, - bare_diffusers_prefixes=bare_diffusers_prefixes, ) unmapped = 0 @@ -1076,7 +1062,7 @@ def try_load_norm(name, network_on_disk, lora_scale, *, def try_load_full(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), bare_diffusers_prefixes=(), + bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -1099,7 +1085,6 @@ def try_load_full(name, network_on_disk, lora_scale, *, state_dict, FULL_SUFFIXES, prefixes=prefixes, bare_prefixes=bare_prefixes, - bare_diffusers_prefixes=bare_diffusers_prefixes, ) unmapped = 0 diff --git a/pipelines/chroma/chroma_lora.py b/pipelines/chroma/chroma_lora.py index 3cd0395a6..2459318d5 100644 --- a/pipelines/chroma/chroma_lora.py +++ b/pipelines/chroma/chroma_lora.py @@ -53,10 +53,6 @@ BARE_FLUX_PREFIXES = ( "img_in.", "txt_in.", "final_layer.", "distilled_guidance_layer.", ) -BARE_DIFFUSERS_PREFIXES = ( - "transformer_blocks.", "single_transformer_blocks.", -) - # === Fused weight dims === # Defaults match Chroma1-HD (``inner_dim = num_attention_heads * @@ -98,7 +94,6 @@ def parse_key(key, suffixes): key, suffixes, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_FLUX_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, ) @@ -108,7 +103,6 @@ def group_by_suffixes(state_dict, suffixes): state_dict, suffixes, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_FLUX_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, ) @@ -263,7 +257,6 @@ _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_FLUX_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, arch_name="chroma", ) diff --git a/pipelines/ernie/ernie_lora.py b/pipelines/ernie/ernie_lora.py index b0b072be3..2255851f3 100644 --- a/pipelines/ernie/ernie_lora.py +++ b/pipelines/ernie/ernie_lora.py @@ -25,10 +25,6 @@ from modules.lora import native_adapter KNOWN_PREFIXES = native_adapter.KNOWN_PREFIXES_DEFAULT -BARE_DIFFUSERS_PREFIXES = ( - "layers.", "adaLN_modulation.", "final_norm.", "final_linear.", -) - # === Re-exports for test/back-compat === @@ -60,7 +56,6 @@ def parse_key(key, suffixes): return native_adapter.parse_key( key, suffixes, prefixes=KNOWN_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, ) @@ -69,7 +64,6 @@ def group_by_suffixes(state_dict, suffixes): return native_adapter.group_by_suffixes( state_dict, suffixes, prefixes=KNOWN_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, ) @@ -95,7 +89,6 @@ def resolve_targets(prefix_used, base): _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=KNOWN_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, arch_name="ernieimage", ) diff --git a/pipelines/flux/flux2_lora.py b/pipelines/flux/flux2_lora.py index 681c65087..9785ed4a9 100644 --- a/pipelines/flux/flux2_lora.py +++ b/pipelines/flux/flux2_lora.py @@ -64,8 +64,6 @@ BARE_FLUX_PREFIXES = ( "double_stream_modulation_", ) -BARE_DIFFUSERS_PREFIXES = ("single_transformer_blocks.", "transformer_blocks.") - # === BFL to diffusers mapping === @@ -162,7 +160,6 @@ def parse_key(key, suffixes): key, suffixes, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_FLUX_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, ) @@ -172,7 +169,6 @@ def group_by_suffixes(state_dict, suffixes): state_dict, suffixes, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_FLUX_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, ) @@ -257,7 +253,6 @@ _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_FLUX_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, arch_name="f2", ) diff --git a/pipelines/krea2/krea2_lora.py b/pipelines/krea2/krea2_lora.py index af3e54681..30d5df0e4 100644 --- a/pipelines/krea2/krea2_lora.py +++ b/pipelines/krea2/krea2_lora.py @@ -23,10 +23,6 @@ KNOWN_PREFIXES = native_adapter.KNOWN_PREFIXES_DEFAULT # Top-level module names that a bare LoRA key can start with: the transformer's own # checkpoint-style names plus the upstream-diffusers names (as saved by # ``Krea2Transformer2DModel.save_lora_adapter()``). -BARE_DIFFUSERS_PREFIXES = ( - "blocks.", "txtfusion.", "first.", "last.", "tmlp.", "tproj.", "txtmlp.", - "transformer_blocks.", "text_fusion.", "img_in.", "txt_in.", "time_embed.", "time_mod_proj.", "final_layer.", -) # Upstream-diffusers attention/ff leaves -> checkpoint leaves (block-level modules). DIFFUSERS_LEAF_MAP = { @@ -83,7 +79,6 @@ def parse_key(key, suffixes): return native_adapter.parse_key( key, suffixes, prefixes=KNOWN_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, ) @@ -92,7 +87,6 @@ def group_by_suffixes(state_dict, suffixes): return native_adapter.group_by_suffixes( state_dict, suffixes, prefixes=KNOWN_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, ) @@ -145,7 +139,6 @@ def _underscore_to_dotted(base): _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=KNOWN_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, arch_name="krea2", ) diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index 52ca14d25..e9186ccf9 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -37,8 +37,6 @@ KNOWN_PREFIXES = ( # Reference keys outside the block stacks carry no arch prefix in reference saves; the base is the whole module path. BARE_PREFIXES = ("video_patch_proj.", "audio_patch_proj.", "condition_proj.", "time_embedder.", "final_layer.") -# Diffusers module names saved without a component prefix (peft dumps, kohya-suffixed exports) bind verbatim. -BARE_DIFFUSERS_PREFIXES = ("transformer_blocks.", "token_refiner.refiner_blocks.", "proj_in.", "audio_proj_in.", "context_embedder.", "time_embedder.linear_", "norm_out.", "proj_out.", "audio_proj_out.") STANDALONE_RENAMES = { "video_patch_proj": "proj_in", @@ -126,14 +124,14 @@ def parse_key(key, suffixes): key = native_adapter.unwrap_peft_wrapper(key) if key.startswith("dit."): key = "diffusion_model." + key[len("dit."):] - parsed = native_adapter.parse_key(key, suffixes, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_PREFIXES, bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES) + parsed = native_adapter.parse_key(key, suffixes, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_PREFIXES) if parsed is None: return None prefix_used, base, suffix = parsed return prefix_used, base, normalize_mini_max_suffix(suffix) -def group_by_suffixes(state_dict, suffixes, *, prefixes=None, bare_prefixes=(), bare_diffusers_prefixes=()): # pylint: disable=unused-argument +def group_by_suffixes(state_dict, suffixes, *, prefixes=None, bare_prefixes=()): # pylint: disable=unused-argument """MiniMax-bound :func:`native_adapter.group_by_suffixes`.""" groups: dict[tuple, dict[str, object]] = {} for key, value in state_dict.items(): @@ -238,7 +236,6 @@ _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, network_prefix=network_prefix_for, group_by_suffixes_fn=group_by_suffixes, arch_name="minimaxh3", diff --git a/pipelines/z_image/zimage_lora.py b/pipelines/z_image/zimage_lora.py index e8c6d7ec4..534a09551 100644 --- a/pipelines/z_image/zimage_lora.py +++ b/pipelines/z_image/zimage_lora.py @@ -40,7 +40,6 @@ from modules.lora.native_adapter import ChunkSpec KNOWN_PREFIXES = native_adapter.KNOWN_PREFIXES_DEFAULT -BARE_DIFFUSERS_PREFIXES = ("layers.", "noise_refiner.", "context_refiner.") # Checkpoint qk-norm names vs the diffusers attention module names. ZIMAGE_NORM_ALIASES = { @@ -109,7 +108,6 @@ def parse_key(key, suffixes): return native_adapter.parse_key( key, suffixes, prefixes=KNOWN_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, ) @@ -118,7 +116,6 @@ def group_by_suffixes(state_dict, suffixes): return native_adapter.group_by_suffixes( state_dict, suffixes, prefixes=KNOWN_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, ) @@ -199,7 +196,6 @@ def _underscore_to_diffusers_targets(base): _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=KNOWN_PREFIXES, - bare_diffusers_prefixes=BARE_DIFFUSERS_PREFIXES, arch_name="zimage", ) diff --git a/test/test-minimax-native-adapters.py b/test/test-minimax-native-adapters.py index 616f32caf..9d8e7ff30 100644 --- a/test/test-minimax-native-adapters.py +++ b/test/test-minimax-native-adapters.py @@ -489,6 +489,18 @@ def test_diffusers_peft_keys_bind_verbatim(): return True +def test_unknown_bare_key_reaches_the_resolver(): + """A bare key that names no module is offered verbatim and left unbound, not dropped at parse time.""" + sd = lora_pair('transformer_blocks.0.attn.to_q', LINEAR_SHAPES['transformer_blocks.0.attn.to_q']) + sd.update(lora_pair('nowhere.proj', (4, 4))) + mapping = native_mapping(sd) + assert set(mapping) == {'transformer_blocks.0.attn.to_q', 'nowhere.proj'}, sorted(mapping) + net = load_native(sd, name='stray') + assert set(net.modules) == {'lora_transformer_transformer_blocks_0_attn_to_q'}, sorted(net.modules) + assert net.mismatch == 0 + return True + + # ============================================================ # Tests - loader against the reference loaders # ============================================================ @@ -637,6 +649,7 @@ def run_tests(): test_chunk_reorder_composes_with_slice, test_qkv_split_order, test_diffusers_peft_keys_bind_verbatim, + test_unknown_bare_key_reaches_the_resolver, ]: run_test(CAT_RESOLVE, fn) diff --git a/test/test-zimage-native-adapters.py b/test/test-zimage-native-adapters.py index 77004d18e..d7d799694 100644 --- a/test/test-zimage-native-adapters.py +++ b/test/test-zimage-native-adapters.py @@ -456,8 +456,8 @@ def test_parse_key_all_prefixes(): """parse_key recognizes BFL, PEFT, kohya, and bare-diffusers keys. Returns (prefix_used, base, suffix) - prefix_used is the matched - KNOWN_PREFIXES element, BARE_DIFFUSERS_PREFIX_USED for bare paths - matching BARE_DIFFUSERS_PREFIXES, or None when no prefix is recognized. + KNOWN_PREFIXES element, BARE_DIFFUSERS_PREFIX_USED for any other bare + path, or None when no suffix is recognized. """ bd = Z.BARE_DIFFUSERS_PREFIX_USED cases = [ From 8b93d20b1aaf7fc6356e9aaedd52a273b5164735 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 6 Sep 2026 00:04:47 +0100 Subject: [PATCH 145/270] refactor(lora): drive the minimax mapping from one vocabulary Block leaves and standalone renames each live in one table; the block resolver and the musubi unflatten patterns are derived from them. --- pipelines/minimax/minimax_lora.py | 77 +++++++++++++++---------------- 1 file changed, 36 insertions(+), 41 deletions(-) diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index e9186ccf9..42b81c396 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -49,6 +49,20 @@ STANDALONE_RENAMES = { "final_layer.audio_out": "audio_proj_out", } +# Reference block leaves and where each lands in a diffusers block; a leaf not listed here binds verbatim. +BLOCK_LEAF_TARGETS = { + "attn.qkv_proj": tuple((f"attn.{k}", native_adapter.ChunkSpec(idx=i, total=3)) for i, k in enumerate(("to_q", "to_k", "to_v"))), + "attn.out_proj": (("attn.to_out.0", None),), + "mlp.fc1": (("ff.net.0.proj", native_adapter.ChunkSpec(reorder=(1, 0))),), # reference [gate; value] onto the diffusers SwiGLU [value; gate] + "mlp.fc2": (("ff.net.2", None),), + "adaln_proj.linear": (("adaln_proj.linear", None),), +} + +BLOCK_STACKS = { + "blocks": "transformer_blocks", + "token_refiner.blocks": "token_refiner.refiner_blocks", +} + # Re-export for tests / compatibility LORA_SUFFIXES = native_adapter.LORA_SUFFIXES @@ -88,19 +102,15 @@ def normalize_mini_max_suffix(suffix: str) -> str: return MINIMAX_SUFFIX_NORMALIZE.get(suffix, suffix) -# musubi-tuner flattens every "." to "_" under a lora_unet_ prefix; the reference module names carry -# underscores of their own, so the dotted path is recovered by matching the whole flattened name. -_FLATTENED_MODULES = [ - (r"blocks_(\d+)_attn_(qkv|out)_proj", r"blocks.\1.attn.\2_proj"), - (r"blocks_(\d+)_mlp_fc([12])", r"blocks.\1.mlp.fc\2"), - (r"blocks_(\d+)_adaln_proj_linear", r"blocks.\1.adaln_proj.linear"), - (r"token_refiner_blocks_(\d+)_attn_(qkv|out)_proj", r"token_refiner.blocks.\1.attn.\2_proj"), - (r"token_refiner_blocks_(\d+)_mlp_fc([12])", r"token_refiner.blocks.\1.mlp.fc\2"), - (r"(video|audio)_patch_proj", r"\1_patch_proj"), - (r"condition_proj", "condition_proj"), - (r"time_embedder_proj_(in|out)", r"time_embedder.proj_\1"), - (r"final_layer_adaln_proj_linear", "final_layer.adaln_proj.linear"), - (r"final_layer_(video|audio)_out", r"final_layer.\1_out"), +def _flattened(dotted): + return re.escape(dotted.replace(".", "_")) + + +# musubi-tuner flattens every "." to "_" under a lora_unet_ prefix; the reference module names carry underscores +# of their own, so the dotted path is recovered by matching the whole flattened name against the vocabulary above. +_FLATTENED_MODULES = [(re.compile(_flattened(name)), name) for name in STANDALONE_RENAMES] + [ + (re.compile(rf"{_flattened(stack)}_(\d+)_{_flattened(leaf)}"), f"{stack}.{{}}.{leaf}") + for stack in BLOCK_STACKS for leaf in BLOCK_LEAF_TARGETS ] @@ -110,9 +120,10 @@ def _unflatten_lora_unet_key(key: str) -> str | None: module_key, _, suffix = key[len("lora_unet_"):].partition(".") if not suffix: return None - for pattern, replacement in _FLATTENED_MODULES: - if re.fullmatch(pattern, module_key): - return f"{re.sub(pattern, replacement, module_key)}.{suffix}" + for pattern, dotted in _FLATTENED_MODULES: + match = pattern.fullmatch(module_key) + if match: + return f"{dotted.format(*match.groups())}.{suffix}" return None @@ -147,29 +158,13 @@ def group_by_suffixes(state_dict, suffixes, *, prefixes=None, bare_prefixes=()): return groups -def _split_qkv(base, target_prefix): - if not base.endswith(".attn.qkv_proj"): - return [] - stem = base[: -len(".attn.qkv_proj")] - return [ - (f"{target_prefix}.{stem}.attn.{k}", native_adapter.ChunkSpec(idx=i, total=3)) - for i, k in enumerate(("to_q", "to_k", "to_v")) - ] - - -def _transformer_block_targets(target_prefix, base): - if base.endswith(".attn.qkv_proj"): - return _split_qkv(base, target_prefix) - if base.endswith(".attn.out_proj"): - stem = base[: -len(".attn.out_proj")] - return [(f"{target_prefix}.{stem}.attn.to_out.0", None)] - if base.endswith(".mlp.fc1"): - stem = base[: -len(".mlp.fc1")] - return [(f"{target_prefix}.{stem}.ff.net.0.proj", native_adapter.ChunkSpec(reorder=(1, 0)))] # reference [gate; value] onto the diffusers SwiGLU [value; gate] - if base.endswith(".mlp.fc2"): - stem = base[: -len(".mlp.fc2")] - return [(f"{target_prefix}.{stem}.ff.net.2", None)] - return [(f"{target_prefix}.{base}", None)] +def _block_targets(target_stack, base): + """Targets for ``.`` inside a reference block stack.""" + idx, _, leaf = base.partition(".") + targets = BLOCK_LEAF_TARGETS.get(leaf) + if targets is None: + return [(f"{target_stack}.{base}", None)] + return [(f"{target_stack}.{idx}.{path}", chunk) for path, chunk in targets] def resolve_targets(prefix_used, base): @@ -187,12 +182,12 @@ def resolve_targets(prefix_used, base): if prefix_used in ("diffusion_model.transformer_blocks.", "transformer_blocks."): return [(f"transformer_blocks.{base}", None)] if prefix_used in ("diffusion_model.blocks.", "blocks."): - return _transformer_block_targets("transformer_blocks", base) + return _block_targets(BLOCK_STACKS["blocks"], base) if prefix_used in ("diffusion_model.token_refiner.refiner_blocks.", "token_refiner.refiner_blocks."): return [(f"token_refiner.refiner_blocks.{base}", None)] if prefix_used in ("diffusion_model.token_refiner.", "token_refiner."): if base.startswith("blocks."): - return _transformer_block_targets("token_refiner.refiner_blocks", base[len("blocks."):]) + return _block_targets(BLOCK_STACKS["token_refiner.blocks"], base[len("blocks."):]) return [(f"token_refiner.refiner_{base}", None)] if prefix_used in ( "diffusion_model.text_encoder.", From b434eb0c1b6a9739b46b6294f91ee0671944a76c Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 6 Sep 2026 00:10:07 +0100 Subject: [PATCH 146/270] refactor(lora): route every bare key through the resolver The parser no longer takes reference-name prefixes to tell bare reference keys from bare diffusers keys. Any bare key carries the sentinel and the arch resolver renames what it knows and passes the rest through. Flux2 keeps its list for file-format detection only. --- modules/lora/native_adapter.py | 51 ++++++++++------------------- pipelines/chroma/chroma_lora.py | 18 +++------- pipelines/flux/flux2_lora.py | 10 +++--- pipelines/minimax/minimax_lora.py | 10 ++---- test/test-chroma-native-adapters.py | 8 ++--- test/test-flux2-native-adapters.py | 10 +++--- 6 files changed, 37 insertions(+), 70 deletions(-) diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index e62b9ddb9..289dbaf2f 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -22,8 +22,8 @@ of a fused weight is described) and the per-arch ``resolve_targets`` callable each loader passes in (how a parsed ``(prefix, base)`` maps to one or more diffusers paths plus optional chunk descriptors). -Per-arch loader modules import this module and pass their own ``prefixes``, -``bare_prefixes`` and ``resolve_targets`` to the generic helpers. +Per-arch loader modules import this module and pass their own ``prefixes`` +and ``resolve_targets`` to the generic helpers. """ import os @@ -54,11 +54,11 @@ from modules.lora import lora_common as l KNOWN_PREFIXES_DEFAULT = ("diffusion_model.", "transformer.", "lora_unet_", "lora_transformer_", "lycoris_") -# Sentinel ``prefix_used`` value emitted by :func:`parse_key` for a bare path -# that matched no arch prefix and no ``bare_prefixes`` member. A loader -# ``resolve_targets`` may dispatch on this string to rewrite the base path; -# when it declines, :func:`resolve_group_targets` binds the path verbatim, and -# a path naming no live module counts as unmapped instead of vanishing. +# Sentinel ``prefix_used`` value emitted by :func:`parse_key` for a bare path, +# one that matched no arch prefix. A loader ``resolve_targets`` may dispatch on +# this string to rewrite the base path; when it declines, +# :func:`resolve_group_targets` binds the path verbatim, and a path naming no +# live module counts as unmapped instead of vanishing. BARE_DIFFUSERS_PREFIX_USED = "bare_diffusers" @@ -389,16 +389,15 @@ def lokr_shapes_match(sd_module, kron_shape, chunk: ChunkSpec | None) -> bool: # === Parsing primitives === -def parse_key(key, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=()): +def parse_key(key, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT): """Return ``(prefix_used, base, suffix_normalized)`` or ``None``. - ``prefix_used`` is the matched element of ``prefixes``, ``None`` for a key - that matched a member of ``bare_prefixes``, or ``BARE_DIFFUSERS_PREFIX_USED`` - for any other bare key, which the loader offers to the resolver and counts - as unmapped when nothing binds. ``base`` is the path with prefix and suffix - removed. ``suffix_normalized`` is the suffix (without the leading dot) after - applying :data:`SUFFIX_NORMALIZE` (e.g. ``lora_A.weight`` becomes - ``lora_down.weight``). + ``prefix_used`` is the matched element of ``prefixes``, or + ``BARE_DIFFUSERS_PREFIX_USED`` for a bare key, which the loader offers to + the resolver and counts as unmapped when nothing binds. ``base`` is the + path with prefix and suffix removed. ``suffix_normalized`` is the suffix + (without the leading dot) after applying :data:`SUFFIX_NORMALIZE` (e.g. + ``lora_A.weight`` becomes ``lora_down.weight``). Always applies :func:`unwrap_peft_wrapper` and :func:`strip_peft_adapter_name` to the raw key before format detection so callers do not have to opt in. @@ -412,7 +411,7 @@ def parse_key(key, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=( prefix_used = p stripped = key[len(p):] break - if prefix_used is None and not any(key.startswith(p) for p in bare_prefixes): + if prefix_used is None: prefix_used = BARE_DIFFUSERS_PREFIX_USED matched_suffix = None @@ -433,7 +432,7 @@ def parse_key(key, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=( return prefix_used, base, suffix -def group_by_suffixes(state_dict, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, bare_prefixes=()): +def group_by_suffixes(state_dict, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT): """Group state-dict entries by ``(prefix_used, base)``. Returns ``{(prefix_used, base): {suffix: tensor, ...}}`` where each suffix @@ -443,7 +442,7 @@ def group_by_suffixes(state_dict, suffixes, *, prefixes=KNOWN_PREFIXES_DEFAULT, """ groups: dict[tuple, dict[str, torch.Tensor]] = {} for key, value in state_dict.items(): - parsed = parse_key(key, suffixes, prefixes=prefixes, bare_prefixes=bare_prefixes) + parsed = parse_key(key, suffixes, prefixes=prefixes) if parsed is None: continue prefix_used, base, suffix = parsed @@ -570,7 +569,6 @@ def slice_bias_delta(w, chunk: ChunkSpec, fused_out): def try_load_lora(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, network_alpha=None, @@ -593,7 +591,6 @@ def try_load_lora(name, network_on_disk, lora_scale, *, groups = group_by_suffixes_fn( state_dict, LORA_SUFFIXES, prefixes=prefixes, - bare_prefixes=bare_prefixes, ) if network_alpha is not None and any("alpha" in w for w in groups.values()): network_alpha = None @@ -673,7 +670,6 @@ def try_load_lora(name, network_on_disk, lora_scale, *, def try_load_lokr(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -696,7 +692,6 @@ def try_load_lokr(name, network_on_disk, lora_scale, *, groups = group_by_suffixes_fn( state_dict, LOKR_SUFFIXES, prefixes=prefixes, - bare_prefixes=bare_prefixes, ) unmapped = 0 @@ -758,7 +753,6 @@ def try_load_lokr(name, network_on_disk, lora_scale, *, def try_load_loha(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -780,7 +774,6 @@ def try_load_loha(name, network_on_disk, lora_scale, *, groups = group_by_suffixes_fn( state_dict, LOHA_SUFFIXES, prefixes=prefixes, - bare_prefixes=bare_prefixes, ) unmapped = 0 @@ -831,7 +824,6 @@ def try_load_loha(name, network_on_disk, lora_scale, *, def try_load_oft(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -859,7 +851,6 @@ def try_load_oft(name, network_on_disk, lora_scale, *, groups = group_by_suffixes_fn( state_dict, OFT_SUFFIXES, prefixes=prefixes, - bare_prefixes=bare_prefixes, ) unmapped = 0 @@ -891,7 +882,6 @@ def try_load_oft(name, network_on_disk, lora_scale, *, def try_load_ia3(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -918,7 +908,6 @@ def try_load_ia3(name, network_on_disk, lora_scale, *, groups = group_by_suffixes_fn( state_dict, IA3_SUFFIXES, prefixes=prefixes, - bare_prefixes=bare_prefixes, ) unmapped = 0 @@ -946,7 +935,6 @@ def try_load_ia3(name, network_on_disk, lora_scale, *, def try_load_glora(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -969,7 +957,6 @@ def try_load_glora(name, network_on_disk, lora_scale, *, groups = group_by_suffixes_fn( state_dict, GLORA_SUFFIXES, prefixes=prefixes, - bare_prefixes=bare_prefixes, ) unmapped = 0 @@ -997,7 +984,6 @@ def try_load_glora(name, network_on_disk, lora_scale, *, def try_load_norm(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): # pylint: disable=unused-argument @@ -1023,7 +1009,6 @@ def try_load_norm(name, network_on_disk, lora_scale, *, groups = group_by_suffixes_fn( state_dict, NORM_SUFFIXES, prefixes=prefixes, - bare_prefixes=bare_prefixes, ) unmapped = 0 @@ -1062,7 +1047,6 @@ def try_load_norm(name, network_on_disk, lora_scale, *, def try_load_full(name, network_on_disk, lora_scale, *, resolve_targets, prefixes=KNOWN_PREFIXES_DEFAULT, - bare_prefixes=(), network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, arch_name="generic"): @@ -1084,7 +1068,6 @@ def try_load_full(name, network_on_disk, lora_scale, *, groups = group_by_suffixes_fn( state_dict, FULL_SUFFIXES, prefixes=prefixes, - bare_prefixes=bare_prefixes, ) unmapped = 0 diff --git a/pipelines/chroma/chroma_lora.py b/pipelines/chroma/chroma_lora.py index 2459318d5..c84faf036 100644 --- a/pipelines/chroma/chroma_lora.py +++ b/pipelines/chroma/chroma_lora.py @@ -44,15 +44,6 @@ from modules.lora.native_adapter import ChunkSpec KNOWN_PREFIXES = native_adapter.KNOWN_PREFIXES_DEFAULT -# distilled_guidance_layer. is deliberately a bare-BFL prefix, not a -# bare-diffusers one: the resolver renames BFL MLP leaves (in_layer/out_layer) -# and passes diffusers-named leaves (linear_1/linear_2, in_proj, out_proj, -# norms.N) through verbatim, so both namings route correctly. -BARE_FLUX_PREFIXES = ( - "double_blocks.", "single_blocks.", - "img_in.", "txt_in.", "final_layer.", "distilled_guidance_layer.", -) - # === Fused weight dims === # Defaults match Chroma1-HD (``inner_dim = num_attention_heads * @@ -93,7 +84,6 @@ def parse_key(key, suffixes): return native_adapter.parse_key( key, suffixes, prefixes=KNOWN_PREFIXES, - bare_prefixes=BARE_FLUX_PREFIXES, ) @@ -102,7 +92,6 @@ def group_by_suffixes(state_dict, suffixes): return native_adapter.group_by_suffixes( state_dict, suffixes, prefixes=KNOWN_PREFIXES, - bare_prefixes=BARE_FLUX_PREFIXES, ) @@ -116,14 +105,16 @@ def resolve_targets(prefix_used, base): - ``lora_unet_``: kohya underscore-flat Flux path; parse block type/index and module suffix, rename to diffusers. - - ``diffusion_model.`` or bare BFL (None): dotted Flux path; same rewrite. + - ``diffusion_model.`` or bare (the sentinel): dotted Flux path; same + rewrite. BFL MLP leaves under ``distilled_guidance_layer`` rename and + diffusers-named leaves pass through verbatim, so both namings route. Universal passthrough prefixes are handled upstream by :func:`native_adapter.resolve_group_targets`. """ if prefix_used == "lora_unet_": return _kohya_to_diffusers(base) - if prefix_used in (None, "diffusion_model."): + if prefix_used in (BARE_DIFFUSERS_PREFIX_USED, "diffusion_model."): return _bfl_to_diffusers(base) return [] @@ -256,7 +247,6 @@ def _split_single_linear1(block_idx): _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=KNOWN_PREFIXES, - bare_prefixes=BARE_FLUX_PREFIXES, arch_name="chroma", ) diff --git a/pipelines/flux/flux2_lora.py b/pipelines/flux/flux2_lora.py index 9785ed4a9..95651d859 100644 --- a/pipelines/flux/flux2_lora.py +++ b/pipelines/flux/flux2_lora.py @@ -159,7 +159,6 @@ def parse_key(key, suffixes): return native_adapter.parse_key( key, suffixes, prefixes=KNOWN_PREFIXES, - bare_prefixes=BARE_FLUX_PREFIXES, ) @@ -168,7 +167,6 @@ def group_by_suffixes(state_dict, suffixes): return native_adapter.group_by_suffixes( state_dict, suffixes, prefixes=KNOWN_PREFIXES, - bare_prefixes=BARE_FLUX_PREFIXES, ) @@ -179,15 +177,16 @@ def resolve_targets(prefix_used, base): """Return ``[(diffusers_path, ChunkSpec | None), ...]`` for a parsed group key. For ``lora_unet_`` prefix, applies ``KOHYA_SUFFIX_MAP`` then ``F2_*_MAP``. - For BFL / bare-BFL, applies ``F2_*_MAP`` directly. Unrecognized prefixes - return an empty list. + For BFL and bare keys, applies ``F2_*_MAP`` directly; a bare path the maps + do not know binds verbatim upstream. Unrecognized prefixes return an empty + list. Universal passthrough prefixes (including ``lycoris_``) are handled upstream by :func:`native_adapter.resolve_group_targets`. """ if prefix_used == "lora_unet_": return _kohya_to_diffusers_targets(base) - if prefix_used in (None, "diffusion_model."): + if prefix_used in (BARE_DIFFUSERS_PREFIX_USED, "diffusion_model."): return _bfl_to_diffusers_targets(base) return [] @@ -252,7 +251,6 @@ def _bfl_to_diffusers_targets(base): _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=KNOWN_PREFIXES, - bare_prefixes=BARE_FLUX_PREFIXES, arch_name="f2", ) diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index 42b81c396..5709772f4 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -34,9 +34,6 @@ KNOWN_PREFIXES = ( "token_refiner.", ) + native_adapter.KNOWN_PREFIXES_DEFAULT -# Reference keys outside the block stacks carry no arch prefix in reference saves; the base is the whole module path. -BARE_PREFIXES = ("video_patch_proj.", "audio_patch_proj.", "condition_proj.", "time_embedder.", "final_layer.") - STANDALONE_RENAMES = { "video_patch_proj": "proj_in", @@ -135,14 +132,14 @@ def parse_key(key, suffixes): key = native_adapter.unwrap_peft_wrapper(key) if key.startswith("dit."): key = "diffusion_model." + key[len("dit."):] - parsed = native_adapter.parse_key(key, suffixes, prefixes=KNOWN_PREFIXES, bare_prefixes=BARE_PREFIXES) + parsed = native_adapter.parse_key(key, suffixes, prefixes=KNOWN_PREFIXES) if parsed is None: return None prefix_used, base, suffix = parsed return prefix_used, base, normalize_mini_max_suffix(suffix) -def group_by_suffixes(state_dict, suffixes, *, prefixes=None, bare_prefixes=()): # pylint: disable=unused-argument +def group_by_suffixes(state_dict, suffixes, *, prefixes=None): # pylint: disable=unused-argument """MiniMax-bound :func:`native_adapter.group_by_suffixes`.""" groups: dict[tuple, dict[str, object]] = {} for key, value in state_dict.items(): @@ -169,7 +166,7 @@ def _block_targets(target_stack, base): def resolve_targets(prefix_used, base): """Return ``[(diffusers_path, ChunkSpec | None), ...]`` for MiniMax keys.""" - if prefix_used == "diffusion_model." or prefix_used is None: + if prefix_used in ("diffusion_model.", BARE_DIFFUSERS_PREFIX_USED): if base.startswith("transformer."): return [(base[len("transformer."):], None)] if base.startswith("text_encoder."): @@ -230,7 +227,6 @@ def file_alpha(network_on_disk): _BIND_KWARGS = dict( resolve_targets=resolve_targets, prefixes=KNOWN_PREFIXES, - bare_prefixes=BARE_PREFIXES, network_prefix=network_prefix_for, group_by_suffixes_fn=group_by_suffixes, arch_name="minimaxh3", diff --git a/test/test-chroma-native-adapters.py b/test/test-chroma-native-adapters.py index 696746694..b21114a8f 100644 --- a/test/test-chroma-native-adapters.py +++ b/test/test-chroma-native-adapters.py @@ -591,7 +591,7 @@ def test_parse_key_all_prefixes(): # Bare BFL path (no prefix) ('double_blocks.0.img_attn.proj.lora_A.weight', C.LORA_SUFFIXES, - (None, 'double_blocks.0.img_attn.proj', 'lora_down.weight')), + (C.BARE_DIFFUSERS_PREFIX_USED, 'double_blocks.0.img_attn.proj', 'lora_down.weight')), ('random.unrelated.key', C.LORA_SUFFIXES, None), ] for key, suffixes, expected in cases: @@ -649,7 +649,7 @@ def test_resolve_targets_extra_and_guidance(): for bfl_base, diffusers_path in C.CHROMA_EXTRA_MAP.items(): for prefix, base in [ ('diffusion_model.', bfl_base), - (None, bfl_base), + (C.BARE_DIFFUSERS_PREFIX_USED, bfl_base), ('lora_unet_', bfl_base.replace('.', '_')), ]: targets = C.resolve_targets(prefix, base) @@ -657,12 +657,12 @@ def test_resolve_targets_extra_and_guidance(): cases = [ # BFL MLP leaves rename to the PixArt projection names. (('diffusion_model.', 'distilled_guidance_layer.layers.0.in_layer'), 'distilled_guidance_layer.layers.0.linear_1'), - ((None, 'distilled_guidance_layer.layers.1.out_layer'), 'distilled_guidance_layer.layers.1.linear_2'), + ((C.BARE_DIFFUSERS_PREFIX_USED, 'distilled_guidance_layer.layers.1.out_layer'), 'distilled_guidance_layer.layers.1.linear_2'), (('lora_unet_', 'distilled_guidance_layer_layers_0_in_layer'), 'distilled_guidance_layer_layers_0_linear_1'), (('lora_unet_', 'distilled_guidance_layer_layers_1_out_layer'), 'distilled_guidance_layer_layers_1_linear_2'), # Verbatim leaves are untouched in either naming. (('diffusion_model.', 'distilled_guidance_layer.in_proj'), 'distilled_guidance_layer.in_proj'), - ((None, 'distilled_guidance_layer.layers.0.linear_1'), 'distilled_guidance_layer.layers.0.linear_1'), + ((C.BARE_DIFFUSERS_PREFIX_USED, 'distilled_guidance_layer.layers.0.linear_1'), 'distilled_guidance_layer.layers.0.linear_1'), ] for (prefix, base), expected in cases: targets = C.resolve_targets(prefix, base) diff --git a/test/test-flux2-native-adapters.py b/test/test-flux2-native-adapters.py index 1375e25a1..816573570 100644 --- a/test/test-flux2-native-adapters.py +++ b/test/test-flux2-native-adapters.py @@ -670,7 +670,7 @@ def test_parse_key_all_prefixes(): ('transformer.', 'transformer_blocks.0.attn.to_q', 'lora_up.weight')), ('double_blocks.10.img_mlp.0.lora_A.weight', F.LORA_SUFFIXES, - (None, 'double_blocks.10.img_mlp.0', 'lora_down.weight')), + (F.BARE_DIFFUSERS_PREFIX_USED, 'double_blocks.10.img_mlp.0', 'lora_down.weight')), ('random.unrelated.key', F.LORA_SUFFIXES, None), ] for key, suffixes, expected in cases: @@ -712,13 +712,13 @@ def test_resolve_targets_extra_modules(): for bfl_base, diffusers_path in F.F2_EXTRA_MAP.items(): targets = F.resolve_targets('diffusion_model.', bfl_base) assert targets == [(diffusers_path, None)], f'{bfl_base} -> {targets}' - targets = F.resolve_targets(None, bfl_base) + targets = F.resolve_targets(F.BARE_DIFFUSERS_PREFIX_USED, bfl_base) assert targets == [(diffusers_path, None)], f'bare {bfl_base} -> {targets}' targets = F.resolve_targets('lora_unet_', bfl_base.replace('.', '_')) assert targets == [(diffusers_path, None)], f'kohya {bfl_base} -> {targets}' - # guidance_in is a bare BFL prefix in its own right. + # guidance_in is a bare BFL path. got = F.parse_key('guidance_in.in_layer.lora_A.weight', F.LORA_SUFFIXES) - assert got == (None, 'guidance_in.in_layer', 'lora_down.weight'), f'bare guidance_in parse -> {got}' + assert got == (F.BARE_DIFFUSERS_PREFIX_USED, 'guidance_in.in_layer', 'lora_down.weight'), f'bare guidance_in parse -> {got}' return True @@ -734,7 +734,7 @@ def test_parse_key_peft_wrapper_unwrap(): cases = [ ('base_model.model.double_blocks.1.img_attn.proj.lora_A.weight', F.LORA_SUFFIXES, - (None, 'double_blocks.1.img_attn.proj', 'lora_down.weight')), + (F.BARE_DIFFUSERS_PREFIX_USED, 'double_blocks.1.img_attn.proj', 'lora_down.weight')), ('base_model.model.transformer.transformer_blocks.0.attn.to_q.lora_A.weight', F.LORA_SUFFIXES, ('transformer.', 'transformer_blocks.0.attn.to_q', 'lora_down.weight')), From 8b738636d071d3ff3b284ac018edd6f6cddc8bc3 Mon Sep 17 00:00:00 2001 From: Tai An Date: Sat, 5 Sep 2026 21:22:27 -0700 Subject: [PATCH 147/270] fix(todo): drop the unreachable duplicate branch in init_generator The third branch repeats `device.type == "cuda"`, so it can never run, and it cannot be enabled by correcting the condition either: the Generator API rejects MPS outright. The repo's other copy of this helper, modules/hidiffusion/utils.py, has cpu/cuda/else and no third branch. --- modules/todo/todo_merge.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/todo/todo_merge.py b/modules/todo/todo_merge.py index 158bc36b1..c866f1391 100644 --- a/modules/todo/todo_merge.py +++ b/modules/todo/todo_merge.py @@ -29,8 +29,6 @@ def init_generator(device: torch.device, fallback: torch.Generator = None): return torch.Generator(device="cpu").set_state(torch.get_rng_state()) elif device.type == "cuda": return torch.Generator(device=device).set_state(torch.cuda.get_rng_state()) - elif device.type == "cuda": - return torch.Generator(device=device).set_state(torch.mps.get_rng_state()) else: if fallback is None: return init_generator(torch.device("cpu")) From ddec927c90021257ad7f46a044f2da0db9b17009 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 6 Sep 2026 04:48:39 +0100 Subject: [PATCH 148/270] fix(vae): read the scale factor off the autoencoder instance get_vae_scale_factor knew the ratio only for the pipeline and VAE class names in its table and fell back to 8 for everything else. A repo that subclasses a video autoencoder misses the table, so the request size was rounded to a smaller multiple than the pipeline uses and the latent preview unpack failed on heights that are not a multiple of 32. diffusers video autoencoders carry spatial_compression_ratio on the instance; use it before the default. --- modules/sd_vae.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/sd_vae.py b/modules/sd_vae.py index 75dad5592..066cec2ca 100644 --- a/modules/sd_vae.py +++ b/modules/sd_vae.py @@ -49,6 +49,8 @@ def get_vae_scale_factor(model: DiffusionPipeline | None = None): vae_scale_factor = model.pipe.vae_scale_factor elif hasattr(model, 'config') and hasattr(model.config, 'vae_scale_factor'): vae_scale_factor = model.config.vae_scale_factor + elif hasattr(model, 'vae') and hasattr(model.vae, 'spatial_compression_ratio'): + vae_scale_factor = model.vae.spatial_compression_ratio # video autoencoders carry the ratio on the instance, which also covers subclasses the name table misses else: # log.warning(f'VAE: cls={model.__class__.__name__ if model else "None"} scale=unknown') vae_scale_factor = 8 From 6013110e96bf6a8369d7980546f73e165bb3641c Mon Sep 17 00:00:00 2001 From: Ryan Meador <1176600+ryanmeador@users.noreply.github.com> Date: Sun, 6 Sep 2026 10:10:36 -0400 Subject: [PATCH 149/270] fix: honor offline mode in model loaders --- modules/ltx/ltx_util.py | 4 ++++ modules/model_te.py | 9 +++++---- modules/video_models/video_load.py | 3 ++- pipelines/generic_text_encoder.py | 4 ++++ pipelines/generic_transformer.py | 11 +++++------ pipelines/native_transformer.py | 3 ++- 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/modules/ltx/ltx_util.py b/modules/ltx/ltx_util.py index 74f07f52e..bfbffa1bb 100644 --- a/modules/ltx/ltx_util.py +++ b/modules/ltx/ltx_util.py @@ -59,11 +59,13 @@ def load_upsample(upsample_pipe, upsample_repo_id): t0 = time.time() from diffusers.pipelines.ltx.pipeline_ltx_latent_upsample import LTXLatentUpsamplePipeline log.info(f'Load video: cls={LTXLatentUpsamplePipeline.__name__} repo="{upsample_repo_id}"') + offline_args = {'local_files_only': True} if shared.opts.offline_mode else {} upsample_pipe = LTXLatentUpsamplePipeline.from_pretrained( upsample_repo_id, vae=shared.sd_model.vae, cache_dir=shared.opts.hfcache_dir, torch_dtype=devices.dtype, + **offline_args, ) # only the upsampler, since the pipe borrows the model's vae and moving the whole pipe # would drag that along into the meta tensors the caller's offload exclude avoids @@ -85,11 +87,13 @@ def load_upsample_2x(upsample_pipe, upsample_repo_id, variant: str = '2.x'): from diffusers.pipelines.ltx2.latent_upsampler import LTX2LatentUpsamplerModel from modules import sd_checkpoint log.info(f'Load video: cls={LTX2LatentUpsamplePipeline.__name__} repo="{upsample_repo_id}"') + offline_args = {'local_files_only': True} if shared.opts.offline_mode else {} latent_upsampler = LTX2LatentUpsamplerModel.from_pretrained( upsample_repo_id, subfolder='latent_upsampler', cache_dir=shared.opts.hfcache_dir, torch_dtype=devices.dtype, + **offline_args, ).to(devices.device) upsample_pipe = LTX2LatentUpsamplePipeline( vae=shared.sd_model.vae, diff --git a/modules/model_te.py b/modules/model_te.py index 11d5a0087..76f8f10c9 100644 --- a/modules/model_te.py +++ b/modules/model_te.py @@ -17,6 +17,7 @@ def load_t5(name=None, cache_dir=None): if name is None: return None cache_dir = cache_dir or shared.opts.hfcache_dir + offline_args = {'local_files_only': True} if shared.opts.offline_mode else {} from modules import modelloader modelloader.hf_login() repo_id = 'stabilityai/stable-diffusion-3-medium-diffusers' @@ -60,25 +61,25 @@ def load_t5(name=None, cache_dir=None): t5 = transformers.T5EncoderModel.from_pretrained(None, state_dict=state_dict, config=t5_config, cache_dir=cache_dir, torch_dtype=devices.dtype) elif 'fp16' in name.lower(): - t5 = transformers.T5EncoderModel.from_pretrained(repo_id, subfolder='text_encoder_3', cache_dir=cache_dir, torch_dtype=devices.dtype) + t5 = transformers.T5EncoderModel.from_pretrained(repo_id, subfolder='text_encoder_3', cache_dir=cache_dir, torch_dtype=devices.dtype, **offline_args) elif 'int8' in name.lower(): from modules.model_quant import create_sdnq_config quantization_config = create_sdnq_config(kwargs=None, allow=True, module='any', weights_dtype='int8') if quantization_config is not None: - t5 = transformers.T5EncoderModel.from_pretrained(repo_id, subfolder='text_encoder_3', quantization_config=quantization_config, cache_dir=cache_dir, torch_dtype=devices.dtype) + t5 = transformers.T5EncoderModel.from_pretrained(repo_id, subfolder='text_encoder_3', quantization_config=quantization_config, cache_dir=cache_dir, torch_dtype=devices.dtype, **offline_args) elif 'uint4' in name.lower(): from modules.model_quant import create_sdnq_config quantization_config = create_sdnq_config(kwargs=None, allow=True, module='any', weights_dtype='uint4') if quantization_config is not None: - t5 = transformers.T5EncoderModel.from_pretrained(repo_id, subfolder='text_encoder_3', quantization_config=quantization_config, cache_dir=cache_dir, torch_dtype=devices.dtype) + t5 = transformers.T5EncoderModel.from_pretrained(repo_id, subfolder='text_encoder_3', quantization_config=quantization_config, cache_dir=cache_dir, torch_dtype=devices.dtype, **offline_args) elif '/' in name: log.debug(f'Load model: type=T5 repo={name}') quant_config = model_quant.create_config(module='TE') if quant_config is not None: - t5 = transformers.T5EncoderModel.from_pretrained(name, cache_dir=cache_dir, torch_dtype=devices.dtype, **quant_config) + t5 = transformers.T5EncoderModel.from_pretrained(name, cache_dir=cache_dir, torch_dtype=devices.dtype, **quant_config, **offline_args) else: t5 = None diff --git a/modules/video_models/video_load.py b/modules/video_models/video_load.py index ada9533dd..17844f6e1 100644 --- a/modules/video_models/video_load.py +++ b/modules/video_models/video_load.py @@ -221,7 +221,8 @@ def load_upscale_vae(): repo_id = 'spacepxl/Wan2.1-VAE-upscale2x' subfolder = "diffusers/Wan2.1_VAE_upscale2x_imageonly_real_v1" - vae_decode = diffusers.AutoencoderKLWan.from_pretrained(repo_id, subfolder=subfolder, cache_dir=shared.opts.hfcache_dir) + offline_args = {'local_files_only': True} if shared.opts.offline_mode else {} + vae_decode = diffusers.AutoencoderKLWan.from_pretrained(repo_id, subfolder=subfolder, cache_dir=shared.opts.hfcache_dir, **offline_args) vae_decode.requires_grad_(False) vae_decode = vae_decode.to(device=devices.device, dtype=devices.dtype) vae_decode.eval() diff --git a/pipelines/generic_text_encoder.py b/pipelines/generic_text_encoder.py index e03c32dec..62c392476 100644 --- a/pipelines/generic_text_encoder.py +++ b/pipelines/generic_text_encoder.py @@ -64,6 +64,8 @@ def load_local_file(local_file, cls_name, quant_type, repo_id=None, dtype=None, cfg_args = {'cache_dir': shared.opts.hfcache_dir} if extra.get('subfolder') is not None: cfg_args['subfolder'] = extra['subfolder'] + if shared.opts.offline_mode: + cfg_args['local_files_only'] = True log.debug(f'Load model: text_encoder="{local_file}" cls={cls_name.__name__} config="{config_repo}" quant="{quant_type}" loader={get_loader("transformers")} file=safetensors') config = transformers.AutoConfig.from_pretrained(config_repo, **cfg_args) state_dict = load_file(local_file) @@ -120,6 +122,8 @@ def load_text_encoder( load_args['use_safetensors'] = True if trust_remote_code: load_args['trust_remote_code'] = True + if shared.opts.offline_mode: + load_args['local_files_only'] = True # 1. load override from local file local_file = None diff --git a/pipelines/generic_transformer.py b/pipelines/generic_transformer.py index 198bf3483..7b1900eaf 100644 --- a/pipelines/generic_transformer.py +++ b/pipelines/generic_transformer.py @@ -48,6 +48,7 @@ def load_transformer( modules_to_not_convert = [] if modules_dtype_dict is None: modules_dtype_dict = {} + offline_args = {'local_files_only': True} if shared.opts.offline_mode else {} jobid = shared.state.begin('Load DiT') try: load_args, quant_args = model_quant.get_dit_args(load_config, module='Model', device_map=True, allow_quant=allow_quant, modules_to_not_convert=modules_to_not_convert, modules_dtype_dict=modules_dtype_dict) @@ -73,12 +74,11 @@ def load_transformer( load_args['use_safetensors'] = True if trust_remote_code: load_args['trust_remote_code'] = True + load_kwargs = {**load_args, **quant_args, **offline_args, **kwargs} return cls_name.from_pretrained( repo_id, cache_dir=shared.opts.hfcache_dir, - **load_args, - **quant_args, - **kwargs, + **load_kwargs, ) local_file = None @@ -151,12 +151,11 @@ def load_transformer( load_args.pop('device_map', None) # single-file uses different syntax loader = cls_name.from_single_file if hasattr(cls_name, 'from_single_file') else cls_name.from_pretrained log.debug(f'Load model: transformer="{local_file}" cls={cls_name.__name__} quant="{quant_type}" loader={get_loader("diffusers")} method={loader.__name__} args={load_args}') + load_kwargs = {**load_args, **quant_args, **offline_args, **kwargs} transformer = loader( local_file, cache_dir=shared.opts.hfcache_dir, - **load_args, - **quant_args, - **kwargs, + **load_kwargs, ) # 4. default loading from diffusers repo (also the fallback when an diff --git a/pipelines/native_transformer.py b/pipelines/native_transformer.py index 3c77d01cd..5e1b00321 100644 --- a/pipelines/native_transformer.py +++ b/pipelines/native_transformer.py @@ -697,8 +697,9 @@ def partition_siblings( def fetch_component_config(repo_id: str, subfolder: str) -> dict: """Download and parse ``/config.json`` from the base repo.""" relative_path = f"{subfolder}/config.json" + offline_args = {'local_files_only': True} if shared.opts.offline_mode else {} try: - local = hf.hf_hub_download(repo_id, filename=relative_path, cache_dir=shared.opts.diffusers_dir) + local = hf.hf_hub_download(repo_id, filename=relative_path, cache_dir=shared.opts.diffusers_dir, **offline_args) except Exception as e: log.error(f' path="{relative_path}" repo="{repo_id}" failed to download: {e}') raise RuntimeError('') from e From 0a94b2d8aef37465d13b15e0f9aef4a637f72d11 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 7 Sep 2026 07:38:03 +0200 Subject: [PATCH 150/270] update changelog/todo Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 24 ++++++++++++++---------- TODO.md | 1 + pyproject.toml | 2 +- wiki | 2 +- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9547c05f6..6163f5236 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-09-05 +## Update for 2026-09-07 -### Highlights for 2026-09-05 +### Highlights for 2026-09-07 All-about-optimizations: - improved LoRA performance and quality, especially with quantized models @@ -11,7 +11,7 @@ All-about-optimizations: - support for different caching stacks - compute updates across the board -### Details for 2026-09-05 +### Details for 2026-09-07 - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) @@ -21,7 +21,7 @@ All-about-optimizations: with support for text-to-image, vq-conditioned text-to-image and image-editing workflows *note* model is extremely quantization sensitive so minimum allowed quant type is `uint8` - **LoRA** - - *TODO*: see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions + - see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions *note*: lora now has its own settings section in *settings -> lora* - new apply engine that allows lora to be applied much faster - new calibration engine that allows lora to be applied with far smaller error when dealing with highly quantized models @@ -34,21 +34,20 @@ All-about-optimizations: - per-block strength - native support for **MiniMax** - **Attention** - - *TODO*: see [Attention docs](https://vladmandic.github.io/sdnext-docs/Attention) for details and usage instructions + - see [Attention docs](https://vladmandic.github.io/sdnext-docs/Attention) for details and usage instructions *note*: attention now has its own settings section in *settings -> cross attention* *note*: this is a breaking change - if you had custom attention settings in previous releases, you will need to re-apply them in the new settings section - new `sparse-attention` method that can be combined with other attention methods to reduce memory usage and improve performance on large models - new attention mechanisms decision tree and apply method refactor - **Modular Pipelines** - - *TODO*: short note... - see [Modular Pipelines docs](https://vladmandic.github.io/sdnext-docs/Modular-Pipelines) for details and usage instructions + - see [Modular Pipelines docs](https://vladmandic.github.io/sdnext-docs/Modular-Pipelines) for details and usage instructions - new model **Guidance** stack for modular pipelines includes: *CFG, PAG, Auto, Zero, APG, SLG, SEG, TCFG, FDG* - *TODO*: see [Guidance docs](https://vladmandic.github.io/sdnext-docs/Guidance) for details and usage instructions + see [Guidance docs](https://vladmandic.github.io/sdnext-docs/Guidance) for details and usage instructions - new model **Caching** stack for modular pipelines includes: *FasterCache, FirstBlockCache, LayerSkip, MagCache, PyramidAttentionBroadcast, TaylorSeerCache, TextKVCache* - *TODO*: see [Caching docs](https://vladmandic.github.io/sdnext-docs/Caching) for details and usage instructions + see [Caching docs](https://vladmandic.github.io/sdnext-docs/Caching) for details and usage instructions - implement progress and preview - intercept and profiling hooks - on-demand convert standard model on-demand @@ -78,8 +77,10 @@ All-about-optimizations: - **Other** - Video Preview: TAESD support for **MiniMax** - remove `/redocs` as `/docs` are primary api docs + - rebuild docs site index - **Wiki/Docs**: - - [MiniMax](https://vladmandic.github.io/sdnext-docs/MiniMax) updated with LoRA, Turbo and other improvements + - new articles: *Attention, Modular-Pipelines* + - updated: *LoRA, MiniMax* - **Fixes** - prompt: unnecessary secondary prompt if same - ui: js fetch exception handling @@ -95,6 +96,9 @@ All-about-optimizations: - compile: keep model compiled state - prompt: cache checks when cfg changes - lucida: handle requirements + - vae: fetch scale factor from the model + - todo: remove dead code, thanks @Anai-Guo + - offline: honor offline mode for more models, thanks @ryanmeador ## Update for 2026-08-26 diff --git a/TODO.md b/TODO.md index d8ef871fe..e882fa82b 100644 --- a/TODO.md +++ b/TODO.md @@ -28,6 +28,7 @@ ### Roadmap +- Automated testing and integrate models repo - Video upscaling: LTX-Upscaler - Video capabilities to processing tab, add RIFE, upscaling (once available) - Distraction-free UI mode with prompt-only, chat-based interface diff --git a/pyproject.toml b/pyproject.toml index 03a0db4c2..9e53dc46c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -353,7 +353,7 @@ variables.init-import=false variables.redefining-builtins-modules=["six.moves","past.builtins","future.builtins","builtins","io"] [tool.pyright] -pythonVersion = "3.10" +pythonVersion = "3.11" pythonPlatform = "All" typeCheckingMode = "off" venvPath = "./venv" diff --git a/wiki b/wiki index b134e420f..3912bb125 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit b134e420f364e73e9cc86eeaa83ead8d87e93a07 +Subproject commit 3912bb1255862d4b28211bb603a8faa0d1f36b96 From fe03d7b38e1704a8693c6baf573b0d669c5b8cbe Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 7 Sep 2026 09:20:58 +0200 Subject: [PATCH 151/270] add grok to cloud models Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 14 ++++- modules/caption/gemini.py | 17 ++--- modules/caption/grok.py | 99 ++++++++++++++++++++++++++++++ modules/caption/models_def.py | 11 +++- modules/caption/vqa.py | 7 ++- modules/ui_definitions.py | 2 + scripts/prompt_enhance/options.py | 9 +++ scripts/prompt_enhance/template.py | 44 ++++++------- scripts/prompt_enhance_ext.py | 65 ++++++++++++-------- 9 files changed, 210 insertions(+), 58 deletions(-) create mode 100644 modules/caption/grok.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 6163f5236..aa87a33bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,10 @@ All-about-optimizations: - improved LoRA performance and quality, especially with quantized models - newly structured attention mechanisms -- modular pipelines with new guidance +- modular pipelines with new guidance methods - support for different caching stacks - compute updates across the board +- enhanced cloud model support ### Details for 2026-09-07 @@ -51,7 +52,7 @@ All-about-optimizations: - implement progress and preview - intercept and profiling hooks - on-demand convert standard model on-demand -- **Google** +- **Cloud** - updated support for google models in text, image and video workflows *note*: requires google api key - [Google Veo](https://ai.google.dev/gemini-api/docs/veo) in *preview*, *fast* and *lite* variants @@ -62,6 +63,10 @@ All-about-optimizations: workflows: *caption* - [Google Gemini](https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash) in *flash* and *pro* variants workflows: *caption, prompt-enhance* + - added support for xai grok models + - [X.AI Grok](https://x.ai/grok) in *3*, *3 fast*, *3 mini* and *3 mini fast* variants + workflows: *caption, prompt-enhance* + *note*: requires grok api key - **Compute** - cuda: update `torch==2.14.0` with `cuda==13.2` - openvino: update `openvino==2026.3.1` with `torch==2.13.0` @@ -75,7 +80,9 @@ All-about-optimizations: - update `numpy` and `scipy` frozen requirements as required by new compute drivers *note*: this may break compatibility with some legacy packages, so report any finidings - **Other** - - Video Preview: TAESD support for **MiniMax** + - video preview: TAESD support for **MiniMax** + - support `xai grok` for prompt enhance workflows + *note*: requires grok api key - remove `/redocs` as `/docs` are primary api docs - rebuild docs site index - **Wiki/Docs**: @@ -99,6 +106,7 @@ All-about-optimizations: - vae: fetch scale factor from the model - todo: remove dead code, thanks @Anai-Guo - offline: honor offline mode for more models, thanks @ryanmeador + - prompt enhance: cloud models use correct system prompt ## Update for 2026-08-26 diff --git a/modules/caption/gemini.py b/modules/caption/gemini.py index b36021205..3297bec12 100644 --- a/modules/caption/gemini.py +++ b/modules/caption/gemini.py @@ -3,6 +3,7 @@ import os from modules import shared from modules.logger import log + debug_enabled = os.environ.get('SD_CAPTION_DEBUG', None) is not None debug_log = log.trace if debug_enabled else lambda *args, **kwargs: None @@ -63,11 +64,13 @@ class GoogleGeminiPipeline(): config['temperature'] = kwargs['temperature'] if 'max_output_tokens' in kwargs: config['max_output_tokens'] = kwargs['max_output_tokens'] - debug_log(f'Gemini config: {config}') + debug_log(f'LLM config: {config}') + debug_log(f'LLM instructions: "{instructions}"') + debug_log(f'LLM image: {image}') question = question.replace('<', '').replace('>', '').replace('_', ' ') if prefill: question += prefill - debug_log(f'Gemini question: "{question}"') + debug_log(f'LLM question: "{question}"') if image: data = io.BytesIO() @@ -80,9 +83,9 @@ class GoogleGeminiPipeline(): answer = '' try: response = self.client.models.generate_content( - model=model, - contents=contents, - config=config, + model = model, + contents = contents, + config = config, ) debug_log(f'Gemini response: {response}') answer = response.text @@ -94,8 +97,8 @@ class GoogleGeminiPipeline(): ai = None -def predict(question, image, vqa_model, system_prompt, model_name, prefill, thinking, gen_kwargs): +def predict(question, image, model_name, system_prompt, prefill, thinking, gen_kwargs): global ai # pylint: disable=global-statement if ai is None: ai = GoogleGeminiPipeline(model_name) - return ai(question, image, vqa_model, system_prompt, prefill, thinking, gen_kwargs) + return ai(question, image, model_name, system_prompt, prefill, thinking, gen_kwargs) diff --git a/modules/caption/grok.py b/modules/caption/grok.py new file mode 100644 index 000000000..2f7fb9965 --- /dev/null +++ b/modules/caption/grok.py @@ -0,0 +1,99 @@ +import io +import os +import base64 +from modules import shared +from modules.logger import log + + +debug_enabled = os.environ.get('SD_CAPTION_DEBUG', None) is not None +debug_log = log.trace if debug_enabled else lambda *args, **kwargs: None + + +class XAIGrokPipeline(): + def __init__(self, model_name: str): + self.url = 'https://api.x.ai/v1' + self.model = model_name.split(' (')[0].replace('xai/', '') + from installer import install + install('openai') + from openai import OpenAI # pylint: disable=no-name-in-module + args = self.get_args() + if not args: + return + self.client = OpenAI(**args) + log.debug(f'Load model: type=XAIGrok model="{self.model}"') + + def get_args(self): + from modules.shared import opts + # Use UI settings only - env vars are intentionally ignored + api_key = opts.xai_api_key + has_api_key = api_key and len(api_key) > 0 + if not has_api_key: # Gemini Developer API: api_key only + log.error(f'Cloud: model="{self.model}" API key not provided') + return None + args = { + 'api_key': api_key, + 'base_url': self.url, + } + # Debug logging + args_log = args.copy() + if args_log.get('api_key'): + args_log['api_key'] = '...' + args_log['api_key'][-4:] + log.debug(f'Cloud: model="{self.model}" args={args_log}') + return args + + def __call__(self, question, image, model, instructions, prefill, thinking, kwargs): + question = question.replace('<', '').replace('>', '').replace('_', ' ') + if prefill: + question += prefill + debug_log(f'LLM instructions: "{instructions}"') + debug_log(f'LLM question: "{question}"') + debug_log(f'LLM image: {image}') + answer = '' + temperature = kwargs.get('temperature', 0.0) + try: + if image is not None: + image_data = image.convert('RGB') + image_bytes = io.BytesIO() + image_data.save(image_bytes, format='JPEG') + image_bytes.seek(0) + content = [ + { + "type": "image_url", + "image_url": { + "url": f"data:image/jpeg;base64,{base64.b64encode(image_bytes.getvalue()).decode('utf-8')}", + "detail": "high", + }, + }, + { + "type": "text", + "text": question, + }, + ] + else: + content = question + response = self.client.chat.completions.create( + model = self.model, + messages = [ + {"role": "system", "content": instructions or shared.opts.caption_vlm_system}, + {"role": "user", "content": content}, + ], + stream = False, + temperature = temperature, + reasoning_effort = "high" if thinking else "low" + ) + text = (response.choices[0].message.content or "").strip() + debug_log(f'Grok response: {response}') + answer = text + except Exception as e: + log.error(f'Grok: {e}') + answer = f'Error: {e}' + return answer + + +ai = None + +def predict(question, image, model_name, system_prompt, prefill, thinking, gen_kwargs): + global ai # pylint: disable=global-statement + if ai is None: + ai = XAIGrokPipeline(model_name) + return ai(question, image, model_name, system_prompt, prefill, thinking, gen_kwargs) diff --git a/modules/caption/models_def.py b/modules/caption/models_def.py index 63519cd1d..f325a187b 100644 --- a/modules/caption/models_def.py +++ b/modules/caption/models_def.py @@ -81,6 +81,10 @@ vlm_models = { f"Google Gemini 3.5 Flash Lite {ui_symbols.cloud}": "gemini-3.5-flash-lite", f"Google Gemini 3.1 Flash Lite {ui_symbols.cloud}": "gemini-3.1-flash-lite", f"Google Gemini 3.1 Pro {ui_symbols.cloud}": "gemini-3.1-pro-preview", + f"X.AI Grok 3 {ui_symbols.cloud}": "grok-3-latest", + f"X.AI Grok 3 Fast {ui_symbols.cloud}": "grok-3-fast-latest", + f"X.AI Grok 3 Mini {ui_symbols.cloud}": "grok-3-mini-latest", + f"X.AI Grok 3 Mini Fast {ui_symbols.cloud}": "grok-3-mini-fast-latest", } # Default model @@ -224,5 +228,10 @@ Summary: def get_vlm_repo(display_name: str) -> str: """Look up repo ID from display name, stripping any trailing symbols.""" + from modules.logger import log name = display_name.strip() - return vlm_models.get(name, name) + model = vlm_models.get(name, None) + if model is None: + log.warning(f"Model '{name}' not found") + return name + return model diff --git a/modules/caption/vqa.py b/modules/caption/vqa.py index 784f6d941..6a00e2fa3 100644 --- a/modules/caption/vqa.py +++ b/modules/caption/vqa.py @@ -1597,7 +1597,12 @@ class VQA: handler = 'gemini' gen_kwargs = get_kwargs(self.model) from modules.caption import gemini - answer = gemini.predict(question, image, vqa_model, system_prompt, model_name, prefill, thinking_mode, gen_kwargs) + answer = gemini.predict(question, image, vqa_model, system_prompt, prefill, thinking_mode, gen_kwargs) + elif 'grok' in vqa_model.lower(): + handler = 'grok' + gen_kwargs = get_kwargs(self.model) + from modules.caption import grok + answer = grok.predict(question, image, vqa_model, system_prompt, prefill, thinking_mode, gen_kwargs) else: answer = 'unknown model' except Exception as e: diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 66088e8a8..825722aa3 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -113,6 +113,8 @@ def create_settings(cmd_opts): "google_api_key": OptionInfo("", "Google cloud API key", gr.Textbox, secret=True, env_var='GOOGLE_API_KEY'), "google_project_id": OptionInfo("", "Google Cloud project ID", gr.Textbox, secret=True, env_var='GOOGLE_PROJECT_ID'), "google_location_id": OptionInfo("", "Google Cloud location ID", gr.Textbox), + "model_xai_sep": OptionInfo("

    XAI Grok

    ", "", gr.HTML), + "xai_api_key": OptionInfo("", "XAI Grok API key", gr.Textbox, secret=True, env_var='XAI_API_KEY'), "model_krea2_sep": OptionInfo("

    Krea 2

    ", "", gr.HTML), "model_krea2_dense": OptionInfo(False, "Use dense masking"), "model_sd3_sep": OptionInfo("

    Stable Diffusion 3.x

    ", "", gr.HTML), diff --git a/scripts/prompt_enhance/options.py b/scripts/prompt_enhance/options.py index dc943406f..4f7bef4b2 100644 --- a/scripts/prompt_enhance/options.py +++ b/scripts/prompt_enhance/options.py @@ -43,6 +43,10 @@ class Options: 'google/gemini-3.5-flash-lite', 'google/gemini-3.1-flash-lite', 'google/gemini-3.1-pro-preview', + 'xai/grok-3-latest', + 'xai/grok-3-fast-latest', + 'xai/grok-3-mini-latest', + 'xai/grok-3-mini-fast-latest', ] models = { # Gemma @@ -90,6 +94,11 @@ class Options: 'google/gemini-3.5-flash-lite': {}, 'google/gemini-3.1-flash-lite': {}, 'google/gemini-3.1-pro-preview': {}, + # Grok + 'xai/grok-3-latest': {}, + 'xai/grok-3-fast-latest': {}, + 'xai/grok-3-mini-latest': {}, + 'xai/grok-3-mini-fast-latest': {}, # SmolLM 'HuggingFaceTB/SmolLM2-135M-Instruct': {}, 'HuggingFaceTB/SmolLM2-360M-Instruct': {}, diff --git a/scripts/prompt_enhance/template.py b/scripts/prompt_enhance/template.py index e0b6e7c4c..b59154f53 100644 --- a/scripts/prompt_enhance/template.py +++ b/scripts/prompt_enhance/template.py @@ -9,13 +9,24 @@ debug_enabled = os.environ.get('SD_LLM_DEBUG', None) is not None debug_log = log.trace if debug_enabled else lambda *args, **kwargs: None -def get_text_template(system, prompt, options, nsfw, has_system, has_prompt, has_processor, is_video, _image) -> list[dict]: - if not has_system: - system = options.t2v_prompt if is_video else options.t2i_prompt - system += options.nsfw_ok if nsfw else options.nsfw_no - system += options.details_prompt - system += options.details_format - debug_log(f'Prompt enhance: system="{system}"') +def get_system_prompt(system: str | None, options: Options, nsfw: bool, has_prompt: bool, is_video: bool, is_image: bool) -> str: + if system is not None and len(system) > 4: + return system + if is_video: + system = options.t2v_prompt if has_prompt else options.t2v_noprompt + elif is_image: + system = options.i2i_prompt if has_prompt else options.i2i_noprompt + else: + system = options.t2i_prompt if has_prompt else options.t2i_noprompt + system += options.nsfw_ok if nsfw else options.nsfw_no + system += options.details_prompt + system += options.details_format + debug_log(f'Prompt enhance: system="{system}"') + return system + + +def get_text_template(system, prompt, options, nsfw, has_prompt, has_processor, is_video, _image) -> list[dict]: + system = get_system_prompt(system, options, nsfw, has_prompt, is_video, is_image=False) if not has_prompt: prompt = 'be creative!' if not has_processor: @@ -35,16 +46,8 @@ def get_text_template(system, prompt, options, nsfw, has_system, has_prompt, has return chat_template -def get_image_template(system, prompt, options, nsfw, has_system, has_prompt, _has_processor, is_video, image) -> list[dict]: - if not has_system: - if is_video: - system = options.i2v_prompt if has_prompt else options.i2v_noprompt - else: - system = options.i2i_prompt if has_prompt else options.i2i_noprompt - system += options.nsfw_ok if nsfw else options.nsfw_no - system += options.details_prompt - system += options.details_format - debug_log(f'Prompt enhance: system="{system}"') +def get_image_template(system, prompt, options, nsfw, has_prompt, _has_processor, is_video, image) -> list[dict]: + system = get_system_prompt(system, options, nsfw, has_prompt, is_video, is_image=True) if has_prompt: chat_template = [ { "role": "system", "content": [ @@ -78,12 +81,11 @@ def set_template( module: str | None = None, ) -> list[dict] | str: chat_template = [] - has_system = system is not None and len(system) > 4 has_prompt = prompt is not None and len(prompt) > 4 has_image = image is not None and isinstance(image, Image.Image) is_video = module == 'video' - debug_log(f'Prompt enhance template: module={module} system={has_system} prompt={has_prompt} image={has_image} video={is_video} model="{model}" nsfw={nsfw} processor={has_processor}') + debug_log(f'Prompt enhance template: module={module} prompt={has_prompt} image={has_image} video={is_video} model="{model}" nsfw={nsfw} processor={has_processor}') if has_image: if is_cloud_model(model): @@ -93,8 +95,8 @@ def set_template( return prompt if prompt is not None else '' # Return original text part if image cannot be processed if has_image: - chat_template = get_image_template(system, prompt, options, nsfw, has_system, has_prompt, has_processor, is_video, image) + chat_template = get_image_template(system, prompt, options, nsfw, has_prompt, has_processor, is_video, image) else: - chat_template = get_text_template(system, prompt, options, nsfw, has_system, has_prompt, has_processor, is_video, image) + chat_template = get_text_template(system, prompt, options, nsfw, has_prompt, has_processor, is_video, image) return chat_template diff --git a/scripts/prompt_enhance_ext.py b/scripts/prompt_enhance_ext.py index 14d801359..9c11545d5 100644 --- a/scripts/prompt_enhance_ext.py +++ b/scripts/prompt_enhance_ext.py @@ -14,7 +14,7 @@ from modules.caption.logits import LogitsParser from modules.caption import helpers from scripts.prompt_enhance.options import Options from scripts.prompt_enhance.helpers import is_cloud_model, is_vision_model, is_thinking_model, get_model_repo_from_display -from scripts.prompt_enhance.template import set_template +from scripts.prompt_enhance.template import set_template, get_system_prompt debug_enabled = os.environ.get('SD_LLM_DEBUG', None) is not None @@ -389,6 +389,45 @@ class PromptEnhanceScript(scripts_manager.Script): current_image = current_image.convert('RGB') debug_log('Prompt enhance: Converted image to RGB mode') + # Prepare prefill (VQA approach: string concatenation, not assistant message) + prefill_text = (prefill or '').strip() + + t0 = time.time() + self.busy = True + + if is_cloud_model(model): + has_prompt = prompt_text is not None and len(prompt_text) > 4 + system = get_system_prompt(system, self.options, nsfw, has_prompt=has_prompt, is_video=self.parent=='video', is_image=current_image is not None) + if 'gemini' in model: + from modules.caption import gemini + kwargs = { + 'temperature': temperature, + 'min_output_tokens': min_tokens, + 'max_output_tokens': max_tokens, + } + model_name = model.replace('google/', '') + response = gemini.predict(prompt_text, current_image, model_name, system, prefill_text, thinking, kwargs) + t1 = time.time() + log.info(f'Prompt enhance: model="{model}" nsfw={nsfw} time={t1-t0:.2f} prefill="{prefill_text[:20] if prefill_text else None}" response={len(response)}') + debug_log(f'Prompt enhance: response="{response}"') + self.busy = False + return response + elif 'grok' in model: + from modules.caption import grok + kwargs = { + 'temperature': temperature, + } + model_name = model.replace('xai/', '') + response = grok.predict(prompt_text, current_image, model_name, system, prefill_text, thinking, kwargs) + t1 = time.time() + log.info(f'Prompt enhance: model="{model}" nsfw={nsfw} time={t1-t0:.2f} prefill="{prefill_text[:20] if prefill_text else None}" response={len(response)}') + debug_log(f'Prompt enhance: response="{response}"') + self.busy = False + return response + else: + self.busy = False + return 'Model not recognized' + chat_template = set_template( system=system, prompt=prompt_text, @@ -400,35 +439,11 @@ class PromptEnhanceScript(scripts_manager.Script): module=self.parent, ) - # Prepare prefill (VQA approach: string concatenation, not assistant message) - prefill_text = (prefill or '').strip() use_prefill = len(prefill_text) > 0 is_thinking = is_thinking_model(model) - debug_log(f'Prompt enhance: system="{system}"') debug_log(f'Prompt enhance: prompt="{prompt_text}"') debug_log(f'Prompt template: roles={[msg["role"] for msg in chat_template]} thinking={is_thinking}:{thinking} prefill={use_prefill}') - t0 = time.time() - self.busy = True - - if is_cloud_model(model): - if 'gemini' in model: - from modules.caption import gemini - kwargs = { - 'temperature': temperature, - 'min_output_tokens': min_tokens, - 'max_output_tokens': max_tokens, - } - model_name = model.replace('google/', '') - response = gemini.predict(prompt_text, current_image, model_name, system, model, prefill_text, thinking, kwargs) - t1 = time.time() - log.info(f'Prompt enhance: model="{model}" nsfw={nsfw} time={t1-t0:.2f} prefill="{prefill_text[:20] if prefill_text else None}" response={len(response)}') - debug_log(f'Prompt enhance: response="{response}"') - self.busy = False - return response - - else: - return 'Model not recognized' try: # Qwen3.5 uses native enable_thinking parameter in the chat template From a174e94183c6796e69123bcdd034bc91d32daaf6 Mon Sep 17 00:00:00 2001 From: Yifan Chen Date: Mon, 7 Sep 2026 08:29:37 -0700 Subject: [PATCH 152/270] feat(ui): filter generated sampler and upscaler lists --- modules/control/run.py | 2 +- modules/detailer/detailer.py | 8 ++-- modules/generation_parameters_copypaste.py | 17 ++++++++ modules/img2img.py | 2 + modules/processing_helpers.py | 6 ++- modules/txt2img.py | 2 +- modules/ui_choices.py | 17 ++++++++ modules/ui_definitions.py | 12 +++++- modules/ui_sections.py | 50 ++++++++++++++++++++-- modules/video_models/video_ui.py | 24 +++++++++-- test/test-ui-choice-filters.py | 37 ++++++++++++++++ ui/globals.d.ts | 1 + ui/locale/locale_en.json | 5 +++ ui/settings.ts | 11 +++++ 14 files changed, 178 insertions(+), 16 deletions(-) create mode 100644 modules/ui_choices.py create mode 100644 test/test-ui-choice-filters.py diff --git a/modules/control/run.py b/modules/control/run.py index 02c186d55..83b6bb483 100644 --- a/modules/control/run.py +++ b/modules/control/run.py @@ -444,7 +444,7 @@ def control_run(state: str = '', # pylint: disable=keyword-arg-before-vararg if sampler_index is None: log.warning('Sampler: invalid') sampler_index = 0 - if hr_sampler_index is None: + if hr_sampler_index is None or hr_sampler_index == 'Same as primary': hr_sampler_index = sampler_index if isinstance(extra, list): extra = create_override_settings_dict(extra) diff --git a/modules/detailer/detailer.py b/modules/detailer/detailer.py index 4556e242b..10cb1c999 100644 --- a/modules/detailer/detailer.py +++ b/modules/detailer/detailer.py @@ -537,12 +537,12 @@ class Detailer(): renoise_end = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label='Renoise end', value=shared.opts.detailer_sigma_adjust_max, elem_id=f"{tab}_detailer_renoise_end") sampler_block = None if tab == 'extras': # fold the standalone sampler settings into the detailer accordion; values applied per-job in make_processing, never global opts - from modules import sd_samplers - sd_samplers.set_samplers() - sampler_choices = [s.name for s in sd_samplers.visible_samplers() if s.name != 'Same as primary'] + from modules import ui_sections + sampler_choices, default_value, filtered = ui_sections.sampler_choices() with gr.Accordion('Sampler', open=False, elem_id=f"{tab}_detailer_sampler_accordion", elem_classes=["small-accordion"]): with gr.Row(): - d_sampler = gr.Dropdown(label='Sampling method', choices=sampler_choices, value='Default', elem_id=f"{tab}_detailer_sampler") + ui_sections.create_filter_indicator(tab, 'Sampler', filtered) + d_sampler = gr.Dropdown(label='Sampling method', choices=sampler_choices, value=default_value, type='value', elem_id=f"{tab}_detailer_sampler") d_prediction = gr.Dropdown(label='Prediction method', choices=['default', 'epsilon', 'sample', 'v_prediction', 'flow_prediction'], value='default', elem_id=f"{tab}_detailer_prediction") with gr.Row(): d_shift = gr.Slider(label='Flow shift', minimum=0, maximum=10, step=0.1, value=shared.opts.schedulers_shift, elem_id=f"{tab}_detailer_shift") diff --git a/modules/generation_parameters_copypaste.py b/modules/generation_parameters_copypaste.py index 632f3f1aa..f8fd1ab84 100644 --- a/modules/generation_parameters_copypaste.py +++ b/modules/generation_parameters_copypaste.py @@ -296,6 +296,23 @@ def connect_paste(button, local_paste_fields, input_comp, override_settings_comp res.append(v) applied[key] = v else: + if key in ('Sampler', 'Hires sampler') and isinstance(v, str): + from modules import ui_sections + choices, value, _ = ui_sections.sampler_choices(selected=v, same_as_primary=key == 'Hires sampler') + res.append(gr.update(choices=choices, value=value)) + applied[key] = v + continue + if getattr(output, 'elem_id', '').endswith('_resize_name') and isinstance(v, str): + from modules import modelloader, shared, ui_sections + modelloader.load_upscalers() + choices = [upscaler.name for upscaler in shared.sd_upscalers] + if output.elem_id.startswith(('control_after', 'control_mask')): + choices = [choice for choice in choices if not choice.lower().startswith('latent')] + if v in choices: + choices, _ = ui_sections.upscaler_choices(choices, selected=v) + res.append(gr.update(choices=choices, value=v)) + applied[key] = v + continue if isinstance(v, str) and v.strip() == '' and key in {'Prompt', 'Negative prompt'}: debug(f'Paste skip empty: "{key}"') res.append(gr.update()) diff --git a/modules/img2img.py b/modules/img2img.py index 6c178da85..d01992811 100644 --- a/modules/img2img.py +++ b/modules/img2img.py @@ -193,6 +193,8 @@ def img2img(id_task: str, state: str, mode: int, if sampler_index is None: log.warning('Sampler: invalid') sampler_index = 0 + if hr_sampler_index is None or hr_sampler_index == 'Same as primary': + hr_sampler_index = sampler_index mode = int(mode) image = None diff --git a/modules/processing_helpers.py b/modules/processing_helpers.py index dfaabc65d..5e99d1f2b 100644 --- a/modules/processing_helpers.py +++ b/modules/processing_helpers.py @@ -159,9 +159,11 @@ def images_tensor_to_samples(image, approximation=None, model=None): # pylint: d return x_latent -def get_sampler_name(sampler_index: int | None = None, img: bool = False) -> str: +def get_sampler_name(sampler_index: int | str | None = None, img: bool = False) -> str: sampler_index = sampler_index or 0 - if len(sd_samplers.samplers) > sampler_index: + if isinstance(sampler_index, str) and any(sampler.name == sampler_index for sampler in sd_samplers.samplers): + sampler_name = sampler_index + elif isinstance(sampler_index, int) and 0 <= sampler_index < len(sd_samplers.samplers): sampler_name = sd_samplers.samplers[sampler_index].name else: sampler_name = "Default" diff --git a/modules/txt2img.py b/modules/txt2img.py index af0b814bc..4c333f0fa 100644 --- a/modules/txt2img.py +++ b/modules/txt2img.py @@ -41,7 +41,7 @@ def txt2img(id_task, state, if sampler_index is None: log.warning('Sampler: invalid') sampler_index = 0 - if hr_sampler_index is None: + if hr_sampler_index is None or hr_sampler_index == 'Same as primary': hr_sampler_index = sampler_index p = processing.StableDiffusionProcessingTxt2Img( diff --git a/modules/ui_choices.py b/modules/ui_choices.py new file mode 100644 index 000000000..f5c59a986 --- /dev/null +++ b/modules/ui_choices.py @@ -0,0 +1,17 @@ +"""Helpers for filtering display-only UI choice lists.""" + + +def filter_ui_choices(choices: list[str], preferences: list[str] | None = None, selected: str | None = None) -> tuple[list[str], bool]: + """Return choices selected for display without changing the underlying catalog. + + Empty or stale preferences leave the complete list visible. A current value is + always retained so loading a saved workflow cannot silently replace it. + """ + available = list(dict.fromkeys(choices)) + preferred = set(preferences or []) + filtered = [choice for choice in available if choice in preferred] + if not filtered: + return available, False + if selected in available and selected not in filtered: + filtered.append(selected) + return filtered, len(filtered) < len(available) diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 825722aa3..865e55f8e 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -51,6 +51,11 @@ def list_samplers(): return modules.sd_samplers.all_samplers +def list_upscalers(): + from modules import shared # pylint: disable=redefined-outer-name + return [upscaler.name for upscaler in shared.sd_upscalers] + + def get_openvino_device_list(): try: import modules.intel.openvino # pylint: disable=redefined-outer-name @@ -769,6 +774,12 @@ def create_settings(cmd_opts): "disable_all_extensions": OptionInfo("none", "Disable all extensions", gr.Radio, {"choices": ["none", "user", "all"]}), })) + # --- Sampler Settings --- + options_templates.update(options_section(('sampler', "Sampler Settings"), { + "show_samplers": OptionInfo([], "Show samplers in user interface", gr.CheckboxGroup, lambda: {"choices": [x.name for x in list_samplers()]}, refresh=list_samplers), + "show_upscalers": OptionInfo([], "Show upscalers in user interface", gr.CheckboxGroup, lambda: {"choices": list_upscalers()}, refresh=refresh_upscalers), + })) + # --- Hidden Options --- options_templates.update( options_section( @@ -830,7 +841,6 @@ def create_settings(cmd_opts): "control_move_processor": OptionInfo(False, "Processor move to CPU when complete", gr.Checkbox, {"visible": False}), "control_unload_processor": OptionInfo(False, "Processor unload after use", gr.Checkbox, {"visible": False}), # sampler settings are handled separately - "show_samplers": OptionInfo([], "Show samplers in user interface", gr.CheckboxGroup, lambda: {"choices": [x.name for x in list_samplers()], "visible": False}), "eta_noise_seed_delta": OptionInfo(0, "Noise seed delta (eta)", gr.Number, {"precision": 0, "visible": False}), "scheduler_eta": OptionInfo(1.0, "Noise multiplier (eta)", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01, "visible": False}), "schedulers_solver_order": OptionInfo(0, "Solver order (where", gr.Slider, {"minimum": 0, "maximum": 5, "step": 1, "visible": False}), diff --git a/modules/ui_sections.py b/modules/ui_sections.py index a57a99074..4212ffce7 100644 --- a/modules/ui_sections.py +++ b/modules/ui_sections.py @@ -2,6 +2,7 @@ import gradio as gr from modules import shared, modelloader, ui_symbols, ui_common, sd_samplers from modules.logger import log from modules.ui_components import ToolButton +from modules.ui_choices import filter_ui_choices from modules.caption import caption @@ -213,13 +214,41 @@ def create_color_inputs(tab): return grading_brightness, grading_contrast, grading_saturation, grading_hue, grading_gamma, grading_sharpness, grading_color_temp, grading_shadows, grading_midtones, grading_highlights, grading_clahe_clip, grading_clahe_grid, grading_shadows_tint, grading_highlights_tint, grading_split_tone_balance, grading_vignette, grading_grain, grading_lut_cube_file, grading_lut_strength +def sampler_choices(choices=None, selected='Default', same_as_primary=False): + """Build display-only sampler choices without changing the sampler catalog.""" + if choices is None: + sd_samplers.set_samplers() + choices = [sampler for sampler in sd_samplers.samplers if sampler.name != 'Same as primary'] + names = [choice.name if hasattr(choice, 'name') else choice for choice in choices] + visible, filtered = filter_ui_choices(names, shared.opts.show_samplers, selected) + if same_as_primary: + visible.insert(0, 'Same as primary') + value = selected if selected in visible else visible[0] + return visible, value, filtered + + +def upscaler_choices(choices, selected=None): + """Build display-only upscaler choices without changing available upscalers.""" + return filter_ui_choices(choices, shared.opts.show_upscalers, selected) + + +def create_filter_indicator(tabname, kind, filtered): + if not filtered: + return None + indicator = gr.Button(value=f'{kind} list filtered', elem_id=f'{tabname}_{kind.lower()}_filter_indicator', elem_classes=['filter-indicator']) + indicator.click(fn=None, _js="() => openSettingsSection('sampler')", inputs=[], outputs=[], show_progress='hidden') + return indicator + + def create_sampler_and_steps_selection(choices, tabname, default_steps:int=20): if choices is None: sd_samplers.set_samplers() choices = [x for x in sd_samplers.samplers if not x.name == 'Same as primary'] + dropdown_choices, default_value, filtered = sampler_choices(choices) with gr.Row(elem_id=f"{tabname}_sampler_row", elem_classes=['flex-break', 'flexbox']): steps = gr.Slider(minimum=1, maximum=100, step=1, label="Steps", elem_id=f"{tabname}_steps", value=default_steps) - sampler_index = gr.Dropdown(label='Sampling method', elem_id=f"{tabname}_sampling", choices=[x.name for x in choices], value='Default', type="index") + create_filter_indicator(tabname, 'Sampler', filtered) + sampler_index = gr.Dropdown(label='Sampling method', elem_id=f"{tabname}_sampling", choices=dropdown_choices, value=default_value, type="value") return steps, sampler_index @@ -342,7 +371,9 @@ def create_hires_inputs(tab): with gr.Row(elem_id=f"{tab}_hires_fix_row2"): hr_force = gr.Checkbox(label='Force HiRes', value=False, elem_id=f"{tab}_hr_force") with gr.Row(elem_id=f"{tab}_hires_fix_row2"): - hr_sampler_index = gr.Dropdown(label='Refine sampler', elem_id=f"{tab}_sampling_alt", choices=[x.name for x in sd_samplers.samplers], value='Same as primary', type="index") + dropdown_choices, _default_value, filtered = sampler_choices(selected='Same as primary', same_as_primary=True) + create_filter_indicator(tab, 'Sampler', filtered) + hr_sampler_index = gr.Dropdown(label='Refine sampler', elem_id=f"{tab}_sampling_alt", choices=dropdown_choices, value='Same as primary', type="value") with gr.Row(elem_id=f"{tab}_hires_row2"): hr_second_pass_steps = gr.Slider(minimum=0, maximum=99, step=1, label='HiRes steps', elem_id=f"{tab}_steps_alt", value=20) denoising_strength = gr.Slider(minimum=0.0, maximum=0.99, step=0.01, label='Strength', value=0.3, elem_id=f"{tab}_denoising_strength") @@ -365,11 +396,24 @@ def create_resize_inputs(tab, images, accordion=True, latent=False, non_zero=Tru available_upscalers = ['None'] if not latent: available_upscalers = [x for x in available_upscalers if not x.lower().startswith('latent')] + available_upscalers, filtered = upscaler_choices(available_upscalers, available_upscalers[0]) resize_mode = gr.Dropdown(label=f"Mode{prefix}" if non_zero else "Resize mode", elem_id=f"{tab}_resize_mode", choices=shared.resize_modes, type="index", value='Fixed') + create_filter_indicator(tab, 'Upscaler', filtered) resize_name = gr.Dropdown(label=f"Method{prefix}" if non_zero else "Resize method", elem_id=f"{tab}_resize_name", choices=available_upscalers, value=available_upscalers[0], visible=True) resize_context_choices = ["Add with forward", "Remove with forward", "Add with backward", "Remove with backward"] resize_context = gr.Dropdown(label=f"Context{prefix}", elem_id=f"{tab}_resize_context", choices=resize_context_choices, value=resize_context_choices[0], visible=False) - resize_refresh_btn = ui_common.create_refresh_button(resize_name, modelloader.load_upscalers, lambda: {"choices": modelloader.load_upscalers()}, f'{tab}_upscalers_refresh') + + def refresh_upscaler_choices(selected): + modelloader.load_upscalers() + refreshed = [upscaler.name for upscaler in shared.sd_upscalers] + if not latent: + refreshed = [name for name in refreshed if not name.lower().startswith('latent')] + refreshed, _ = upscaler_choices(refreshed, selected) + value = selected if selected in refreshed else refreshed[0] + return gr.update(choices=refreshed, value=value) + + resize_refresh_btn = ToolButton(value=ui_symbols.refresh, elem_id=f'{tab}_upscalers_refresh') + resize_refresh_btn.click(fn=refresh_upscaler_choices, inputs=[resize_name], outputs=[resize_name], show_progress='hidden') def resize_mode_change(mode): if mode is None or mode == 0: diff --git a/modules/video_models/video_ui.py b/modules/video_models/video_ui.py index 74af572aa..07dafb2e5 100644 --- a/modules/video_models/video_ui.py +++ b/modules/video_models/video_ui.py @@ -60,8 +60,15 @@ def refresh_upscalers(): from modules import shared, modelloader modelloader.load_upscalers() # refresh upscalers = [u for u in shared.sd_upscalers if 'output_type' in inspect.signature(u.scaler.do_upscale).parameters.keys()] - upscaler_names = ['None'] + [u.name for u in upscalers] - return upscaler_names + return ['None'] + [u.name for u in upscalers] + + +def video_upscaler_choices(selected='None', refresh=False): + from modules import shared, modelloader + if refresh: + modelloader.load_upscalers() + upscalers = [upscaler for upscaler in shared.sd_upscalers if 'output_type' in inspect.signature(upscaler.scaler.do_upscale).parameters.keys()] + return ui_sections.upscaler_choices(['None'] + [upscaler.name for upscaler in upscalers], selected) def create_ui_outputs(): @@ -96,8 +103,17 @@ def create_ui_outputs(): with gr.Row(): upscale_scale = gr.Slider(label="Video scale", minimum=1, maximum=4, value=1, step=0.1, elem_id="video_outputs_upscale_scale") with gr.Row(): - upscale_upscaler = gr.Dropdown(label="Video Upscaler", choices=['None'], value='None', type='value', elem_id="video_outputs_upscale_upscaler") - _upscale_upscaler_btn = ui_common.create_refresh_button(upscale_upscaler, refresh_upscalers) + upscaler_names, filtered = video_upscaler_choices() + ui_sections.create_filter_indicator('video', 'Upscaler', filtered) + upscale_upscaler = gr.Dropdown(label="Video Upscaler", choices=upscaler_names, value='None', type='value', elem_id="video_outputs_upscale_upscaler") + + def refresh_video_upscalers(selected): + choices, _ = video_upscaler_choices(selected, refresh=True) + value = selected if selected in choices else choices[0] + return gr.update(choices=choices, value=value) + + _upscale_upscaler_btn = ToolButton(value=ui_symbols.refresh, elem_id='video_upscalers_refresh') + _upscale_upscaler_btn.click(fn=refresh_video_upscalers, inputs=[upscale_upscaler], outputs=[upscale_upscaler], show_progress='hidden') return mp4_fps, mp4_interpolate, mp4_codec, mp4_ext, mp4_opt, mp4_video, mp4_frames, mp4_sf, mp4_thumb, upscale_scale, upscale_upscaler diff --git a/test/test-ui-choice-filters.py b/test/test-ui-choice-filters.py new file mode 100644 index 000000000..7bb975a13 --- /dev/null +++ b/test/test-ui-choice-filters.py @@ -0,0 +1,37 @@ +"""CPU-only regression coverage for display-only sampler and upscaler filters.""" + +import pathlib +import sys +import unittest + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1])) +from modules.ui_choices import filter_ui_choices + + +class TestUiChoiceFilters(unittest.TestCase): + def setUp(self): + self.choices = ['Default', 'Euler', 'DPM++ 2M', 'Lanczos'] + + def test_empty_preferences_leave_choices_unfiltered(self): + visible, filtered = filter_ui_choices(self.choices, []) + self.assertEqual(visible, self.choices) + self.assertFalse(filtered) + + def test_preferences_filter_only_current_catalog_choices(self): + visible, filtered = filter_ui_choices(self.choices, ['Euler', 'Lanczos']) + self.assertEqual(visible, ['Euler', 'Lanczos']) + self.assertTrue(filtered) + + def test_stale_preferences_do_not_hide_the_catalog(self): + visible, filtered = filter_ui_choices(self.choices, ['Removed sampler']) + self.assertEqual(visible, self.choices) + self.assertFalse(filtered) + + def test_saved_selection_remains_available_when_not_preferred(self): + visible, filtered = filter_ui_choices(self.choices, ['Euler'], selected='DPM++ 2M') + self.assertEqual(visible, ['Euler', 'DPM++ 2M']) + self.assertTrue(filtered) + + +if __name__ == '__main__': + unittest.main() diff --git a/ui/globals.d.ts b/ui/globals.d.ts index 9def89c66..32f4fb4e5 100644 --- a/ui/globals.d.ts +++ b/ui/globals.d.ts @@ -141,6 +141,7 @@ declare global { onUiUpdate?: (callback: () => void) => void; // ui/script.ts timer?: (name: string, elapsed: number) => Promise; // ui/timers.ts markIfModified?: (setting_name: string, value: unknown) => void; // ui/settings.ts + openSettingsSection?: (sectionId: string) => void; // ui/settings.ts appendContextMenuOption?: (targetElementSelector: string, entryName: string, entryFunction: () => void, primary?: boolean) => string; // ui/contextMenus.ts generateForever?: (genbuttonid: string) => void; // ui/contextMenus.ts removeContextMenuOption?: (id: string) => void; // ui/contextMenus.ts diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 4e84f1f34..47bb4dd2d 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -1275,6 +1275,8 @@ ], "s": [ {"id":"txt2img_sampler","label":"Sampler","localized":"","hint":"Settings related to sampler and seed selection and configuration. Samplers guide the process of turning noise into an image over multiple steps.","ui":"txt2img"}, + {"id":"","label":"Sampler list filtered","localized":"","hint":"This list only shows samplers selected in Sampler Settings. Select to open settings.","ui":"txt2img"}, + {"id":"","label":"Sampler Settings","localized":"","hint":"Preferences for sampler and upscaler lists.","ui":"settings_sampler"}, {"id":"","label":"Scripts","localized":"","hint":"Enable additional features by using selected scripts during generate process","ui":"txt2img"}, {"id":"","label":"Scale","localized":"","hint":"Resize image to target scale. If resize fixed width/height are set this option is ignored","ui":"txt2img"}, {"id":"xy_grid_swap_axes_button","label":"Swap X/Y","localized":"","hint":"","ui":"script_xyz_grid_script"}, @@ -1325,6 +1327,8 @@ {"id":"","label":"Server log","localized":"","hint":""}, {"id":"","label":"Steps","localized":"","hint":"How many times to improve the generated image iteratively; higher values take longer; very low values can produce bad results","ui":"txt2img"}, {"id":"","label":"Sampling method","localized":"","hint":"Which algorithm to use to produce the image","ui":"txt2img"}, + {"id":"","label":"Show samplers in user interface","localized":"","hint":"Select favorite samplers to show in generated dropdowns. Leave empty to show all samplers. Restart the UI after changing this setting.","ui":"settings_sampler"}, + {"id":"","label":"Show upscalers in user interface","localized":"","hint":"Select favorite upscalers to show in generated dropdowns. Leave empty to show all upscalers. Restart the UI after changing this setting.","ui":"settings_sampler"}, {"id":"","label":"Sigma method","localized":"","hint":"Controls how noise levels (sigmas) are distributed across diffusion steps.
    Default: use the scheduler's built-in sigma method.
    Karras: smoother schedule that emphasizes later steps where fine details emerge; generally higher quality with fewer steps.
    Betas: derive sigmas directly from the model's beta schedule (classic DDPM behavior).
    Exponential: exponential decay of noise across steps; aggressive denoising early, slower refinement later.
    Lambdas: Lu's lambdas method from the DPM-Solver paper, specific to the DPM++ family.
    Flowmatch: sigma schedule tuned for flow-matching models (Flux, SD3, video models).","ui":"txt2img"}, {"id":"","label":"Sigma adjust","localized":"","hint":"Multiplier applied to the sampler's step size during the active timestep window. (Sigma is the amount of noise the sampler removes at each step.)
    Values below 1.0 shrink the step for smoother, more conservative denoising. Values above 1.0 enlarge it for sharper, more aggressive sampling.

    Default 1.0 disables the adjustment entirely. Use Adjust start and Adjust end to define the timestep range where the multiplier takes effect.","ui":"txt2img"}, {"id":"","label":"Sampler order","localized":"","hint":"Overrides the solver order of the active sampler when set above 0.
    Higher orders use more historical steps per update for greater stability and accuracy at the cost of extra compute. Lower orders are faster but noisier.

    Default 0 leaves each sampler at its built-in order. Many samplers in the dropdown already encode their order in the name (e.g. DPM++ 2M is order 2, DPM++ 3M is order 3, DPM++ 2M SDE is order 2).

    Within a sampler family, the named variants differ ONLY by this value, so picking DPM++ 2M with the slider at 3 produces a scheduler that is functionally identical to picking DPM++ 3M with the slider at 0. The same equivalence holds across the rest of the DPM++ multistep family (including the SDE and Inverse variants) and across the ER-SDE family.

    Samplers without a configurable solver order (DDIM, plain Euler, ancestrals, etc.) ignore this slider entirely.","ui":"txt2img"}, @@ -1577,6 +1581,7 @@ {"id":"component-5611","label":"Update all","localized":"","hint":"","ui":"models_metadata_tab"}, {"id":"","label":"UNet/DiT","localized":"","hint":""}, {"id":"","label":"Upscale","localized":"","hint":"Upscale image","ui":"extras"}, + {"id":"","label":"Upscaler list filtered","localized":"","hint":"This list only shows upscalers selected in Sampler Settings. Select to open settings.","ui":"txt2img"}, {"id":"","label":"UI Tabs","localized":"","hint":"","ui":"settings_ui"}, {"id":"","label":"Upscaling","localized":"","hint":"","ui":"settings_postprocessing"}, {"id":"","label":"Use segmentation","localized":"","hint":"Use the model's pixel-precise segmentation mask as the inpaint mask instead of the rectangular bounding box.
    Tighter mask means less unintended change around the detection (e.g., the inpaint stays on the face, not on the hair or background behind it). Better blending and smaller seams.

    Requires a segmentation-capable model (filename usually contains -seg). Bounding-box-only models silently fall back to the rectangle.
    Default off.","ui":"txt2img"}, diff --git a/ui/settings.ts b/ui/settings.ts index 7f220b65c..7ef5b5a3a 100644 --- a/ui/settings.ts +++ b/ui/settings.ts @@ -78,6 +78,17 @@ function showAllSettings() { }); } +function openSettingsSection(sectionId: string) { + const settingsTab = gradioApp().getElementById('tab_settings'); + const settingsButton = settingsTab ? gradioApp().querySelector(`button[aria-controls="${settingsTab.id}"]`) : null; + settingsButton?.click(); + const section = gradioApp().getElementById(`settings_section_tab_${sectionId}`); + const sectionButton = section ? gradioApp().querySelector(`button[aria-controls="${section.id}"]`) : null; + sectionButton?.click(); + section?.scrollIntoView({ behavior: 'smooth', block: 'start' }); +} +window.openSettingsSection = openSettingsSection; + function markIfModified(setting_name, value) { if (!opts_metadata[setting_name]) return; const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`); From 8619dbc0af744e24a621211634c1306784abb79c Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 7 Sep 2026 22:32:54 +0100 Subject: [PATCH 153/270] test(offload): address the split offload modules in the placement role tests The group offload functions live in sd_offload_group, sd_offload_utils and sd_offload_state rather than modules.sd_offload, so the tests and their monkeypatches now import and patch those modules directly. --- test/test-offload-roles.py | 106 ++++++++++++++++++------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/test/test-offload-roles.py b/test/test-offload-roles.py index ba97fd3ca..8931caf53 100644 --- a/test/test-offload-roles.py +++ b/test/test-offload-roles.py @@ -1,6 +1,6 @@ #!/usr/bin/env python """ -Offline unit tests for group offload placement in modules.sd_offload. +Offline unit tests for group offload placement in modules.sd_offload_group. Every component takes exactly one role, derived from the component itself: @@ -59,7 +59,7 @@ modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) from diffusers.utils.accelerate_utils import apply_forward_hook # pylint: disable=wrong-import-position from modules.errors import log # pylint: disable=wrong-import-position from modules import shared # pylint: disable=wrong-import-position,unused-import -from modules import sd_offload # pylint: disable=wrong-import-position +from modules import sd_offload_group, sd_offload_state, sd_offload_utils # pylint: disable=wrong-import-position # ============================================================ @@ -246,28 +246,28 @@ ROLE_CASES = [ def test_role_table(): wrong = [] for module_name, cls, expected in ROLE_CASES: - role = sd_offload.group_offload_role(module_name, cls()) + role = sd_offload_group.group_offload_role(module_name, cls()) if role != expected: wrong.append(f'{module_name}/{cls.__name__}: {role} != {expected}') assert not wrong, '; '.join(wrong) def test_role_bridge_overrides_denoiser_slot_name(): - assert sd_offload.group_offload_role('decoder', BridgeModule()) == 'ondemand' + assert sd_offload_group.group_offload_role('decoder', BridgeModule()) == 'ondemand' def test_role_upstream_optout_overrides_denoiser_slot_name(): - assert sd_offload.group_offload_role('transformer', UnsupportedModule()) == 'ondemand' + assert sd_offload_group.group_offload_role('transformer', UnsupportedModule()) == 'ondemand' def test_role_undecorated_entry_points_stay_resident(): # neither group hooks nor the on-demand hook fire for a plain method call, so residency is the only safe placement - assert sd_offload.group_offload_role('vae', NoBridgeModule()) == 'resident' + assert sd_offload_group.group_offload_role('vae', NoBridgeModule()) == 'resident' def test_role_unknown_component_is_aux(): # aux is the direction that stays correct when the guess is wrong - assert sd_offload.group_offload_role('some_future_head', PlainModule()) == 'aux' + assert sd_offload_group.group_offload_role('some_future_head', PlainModule()) == 'aux' def role_with_opts(module_name, module, **opts): @@ -275,7 +275,7 @@ def role_with_opts(module_name, module, **opts): for key, value in opts.items(): setattr(shared.opts, key, value) try: - return sd_offload.group_offload_role(module_name, module) + return sd_offload_group.group_offload_role(module_name, module) finally: for key, value in saved.items(): setattr(shared.opts, key, value) @@ -303,7 +303,7 @@ def test_role_empty_exclusions_match_nothing(): def test_role_main_list_has_no_encoder_names(): - encoders = [n for n in sd_offload.group_offload_main if 'encoder' in n or 'vae' in n] + encoders = [n for n in sd_offload_state.group_offload_main if 'encoder' in n or 'vae' in n] assert not encoders, f'encoder-shaped names in the per-step list: {encoders}' @@ -317,28 +317,28 @@ def dispatch_calls(pipe): seen: dict[str, object] = {} def name_of(module): - return next((n for n in sd_offload.get_module_names(pipe) if getattr(pipe, n, None) is module), module.__class__.__name__) + return next((n for n in sd_offload_utils.get_module_names(pipe) if getattr(pipe, n, None) is module), module.__class__.__name__) def record(name, role, module): calls.setdefault(name, []).append(role) seen[name] = module return True - orig_component = sd_offload.apply_group_offload_component - orig_ondemand = sd_offload.apply_group_offload_ondemand - orig_resident = sd_offload.set_group_resident - orig_stats = sd_offload.report_group_stats - sd_offload.apply_group_offload_component = lambda module, module_name, main: record(module_name, 'main' if main else 'aux', module) - sd_offload.apply_group_offload_ondemand = lambda module: record(name_of(module), 'ondemand', module) - sd_offload.set_group_resident = lambda module: record(name_of(module), 'resident', module) - sd_offload.report_group_stats = lambda sd_model, module_names: None + orig_component = sd_offload_group.apply_group_offload_component + orig_ondemand = sd_offload_group.apply_group_offload_ondemand + orig_resident = sd_offload_group.set_group_resident + orig_stats = sd_offload_group.report_group_stats + sd_offload_group.apply_group_offload_component = lambda module, module_name, main: record(module_name, 'main' if main else 'aux', module) + sd_offload_group.apply_group_offload_ondemand = lambda module: record(name_of(module), 'ondemand', module) + sd_offload_group.set_group_resident = lambda module: record(name_of(module), 'resident', module) + sd_offload_group.report_group_stats = lambda sd_model, module_names: None try: - sd_offload.apply_group_offload(pipe) + sd_offload_group.apply_group_offload(pipe) finally: - sd_offload.apply_group_offload_component = orig_component - sd_offload.apply_group_offload_ondemand = orig_ondemand - sd_offload.set_group_resident = orig_resident - sd_offload.report_group_stats = orig_stats + sd_offload_group.apply_group_offload_component = orig_component + sd_offload_group.apply_group_offload_ondemand = orig_ondemand + sd_offload_group.set_group_resident = orig_resident + sd_offload_group.report_group_stats = orig_stats return calls, seen @@ -369,7 +369,7 @@ def test_force_sweep_moves_only_stamped_components(): stamped.sdnext_ondemand = True unstamped = SweepModule() pipe = FakePipe({'vae': stamped, 'transformer': unstamped}) - sd_offload.offload_ondemand(pipe, reason='test', force=True) + sd_offload_group.offload_ondemand(pipe, reason='test', force=True) assert stamped.moved, 'the stamped component must be swept to cpu' assert not unstamped.moved, 'a component with no onload path must not be swept' @@ -378,34 +378,34 @@ def test_reapply_after_clearing_the_never_list_restores_hooks(): module = PlainModule() pipe = FakePipe({'text_encoder': module}) saved_never = shared.opts.diffusers_offload_never - orig_device = sd_offload.devices.device - orig_stats = sd_offload.report_group_stats - sd_offload.devices.device = torch.device('cpu') # residency moves to the accelerator, so pin the target to cpu - sd_offload.report_group_stats = lambda sd_model, module_names: None + orig_device = sd_offload_group.devices.device + orig_stats = sd_offload_group.report_group_stats + sd_offload_group.devices.device = torch.device('cpu') # residency moves to the accelerator, so pin the target to cpu + sd_offload_group.report_group_stats = lambda sd_model, module_names: None try: shared.opts.diffusers_offload_never = 'text_encoder' - sd_offload.apply_group_offload(pipe) + sd_offload_group.apply_group_offload(pipe) assert getattr(module, 'sdnext_group_offload_sig', None) is None, 'a resident component must carry no group signature' shared.opts.diffusers_offload_never = '' - sd_offload.apply_group_offload(pipe) + sd_offload_group.apply_group_offload(pipe) assert getattr(module, 'sdnext_group_offload_sig', None) not in (None, 'partial'), 'clearing the exclusion must re-place the component' finally: shared.opts.diffusers_offload_never = saved_never - sd_offload.devices.device = orig_device - sd_offload.report_group_stats = orig_stats + sd_offload_group.devices.device = orig_device + sd_offload_group.report_group_stats = orig_stats def test_ondemand_list_tracks_the_stamps(): pipe = FakePipe({'transformer': PlainModule(), 'vae': BridgeModule()}) - orig_component = sd_offload.apply_group_offload_component - orig_stats = sd_offload.report_group_stats - sd_offload.apply_group_offload_component = lambda module, module_name, main: True - sd_offload.report_group_stats = lambda sd_model, module_names: None + orig_component = sd_offload_group.apply_group_offload_component + orig_stats = sd_offload_group.report_group_stats + sd_offload_group.apply_group_offload_component = lambda module, module_name, main: True + sd_offload_group.report_group_stats = lambda sd_model, module_names: None try: - sd_offload.apply_group_offload(pipe) + sd_offload_group.apply_group_offload(pipe) finally: - sd_offload.apply_group_offload_component = orig_component - sd_offload.report_group_stats = orig_stats + sd_offload_group.apply_group_offload_component = orig_component + sd_offload_group.report_group_stats = orig_stats assert pipe.sdnext_ondemand_modules == ['vae'], f'on-demand list is {pipe.sdnext_ondemand_modules}' assert getattr(pipe.vae, 'sdnext_ondemand', False), 'the vae must carry the on-demand stamp' @@ -416,8 +416,8 @@ def test_ondemand_list_tracks_the_stamps(): def test_ondemand_apply_returns_bool_and_is_idempotent(): module = BridgeModule() - first = sd_offload.apply_group_offload_ondemand(module) - second = sd_offload.apply_group_offload_ondemand(module) + first = sd_offload_group.apply_group_offload_ondemand(module) + second = sd_offload_group.apply_group_offload_ondemand(module) assert isinstance(first, bool) and isinstance(second, bool), 'placement must report a bool' assert first is True, 'the first placement changes the component' assert second is False, 'an unchanged component must report no change' @@ -426,19 +426,19 @@ def test_ondemand_apply_returns_bool_and_is_idempotent(): def test_ondemand_apply_leaves_weights_on_cpu(): module = BridgeModule() - sd_offload.apply_group_offload_ondemand(module) + sd_offload_group.apply_group_offload_ondemand(module) assert next(module.parameters()).device.type == 'cpu', 'on-demand components rest on cpu' def test_resident_placement_clears_the_ondemand_stamp(): module = BridgeModule() - sd_offload.apply_group_offload_ondemand(module) - orig_device = sd_offload.devices.device - sd_offload.devices.device = torch.device('cpu') # residency moves to the accelerator, so pin the target to cpu + sd_offload_group.apply_group_offload_ondemand(module) + orig_device = sd_offload_group.devices.device + sd_offload_group.devices.device = torch.device('cpu') # residency moves to the accelerator, so pin the target to cpu try: - changed = sd_offload.set_group_resident(module) + changed = sd_offload_group.set_group_resident(module) finally: - sd_offload.devices.device = orig_device + sd_offload_group.devices.device = orig_device assert isinstance(changed, bool) and changed is True, 'moving off the on-demand hook is a change' assert not getattr(module, 'sdnext_ondemand', False), 'the on-demand stamp must not survive' assert not hasattr(module, '_hf_hook'), 'the on-demand hook must be removed' @@ -451,7 +451,7 @@ def test_resident_placement_clears_the_ondemand_stamp(): def test_module_names_reads_specs_on_modular_pipelines(): # transformer_2 exists only in the specs, so only the specs branch can find it pipe = FakeModularPipe({'transformer': PlainModule(), 'vae': BridgeModule(), 'scheduler': object()}, spec_only={'transformer_2': PlainModule()}) - names = sd_offload.get_module_names(pipe) + names = sd_offload_utils.get_module_names(pipe) assert names == ['transformer', 'transformer_2', 'vae'], f'got {names}' assert 'canvas_short_edge' not in names, 'config scalars must not be enumerated' @@ -464,7 +464,7 @@ def test_module_names_ignores_the_component_registry_on_classic_pipelines(): raise ValueError('config and signature disagree') pipe = RaisingPipe({'transformer': PlainModule(), 'vae': BridgeModule()}) - names = sd_offload.get_module_names(pipe) + names = sd_offload_utils.get_module_names(pipe) assert names == ['transformer', 'vae'], f'got {names}' @@ -474,13 +474,13 @@ def test_module_names_ignores_the_component_registry_on_classic_pipelines(): def test_autoencoders_carry_the_entry_bridge(): from diffusers import AutoencoderKL, VQModel - missing = [cls.__name__ for cls in (AutoencoderKL, VQModel) if not sd_offload.has_entry_bridge(cls)] + missing = [cls.__name__ for cls in (AutoencoderKL, VQModel) if not sd_offload_group.has_entry_bridge(cls)] assert not missing, f'no entry bridge detected on {missing}' def test_denoisers_do_not_carry_the_entry_bridge(): from diffusers import SD3Transformer2DModel, UNet2DConditionModel - bridged = [cls.__name__ for cls in (UNet2DConditionModel, SD3Transformer2DModel) if sd_offload.has_entry_bridge(cls)] + bridged = [cls.__name__ for cls in (UNet2DConditionModel, SD3Transformer2DModel) if sd_offload_group.has_entry_bridge(cls)] assert not bridged, f'entry bridge detected on denoisers {bridged}' @@ -492,7 +492,7 @@ def test_upstream_still_opts_hunyuandit_out_of_group_offload(): def test_mageflow_vae_carries_the_entry_bridge(): from pipelines.mageflow.autoencoder_mage_vae import AutoencoderMageVAE - assert sd_offload.has_entry_bridge(AutoencoderMageVAE), 'the mageflow vae lost its entry decorators' + assert sd_offload_group.has_entry_bridge(AutoencoderMageVAE), 'the mageflow vae lost its entry decorators' # ============================================================ @@ -597,7 +597,7 @@ def inventory_roles(never=''): shared.opts.diffusers_offload_never = never shared.opts.models_not_to_offload = '' try: - return {(pipe, slot, comp.__name__): sd_offload.group_offload_role(slot, weightless(comp)) for pipe, slot, comp in rows} + return {(pipe, slot, comp.__name__): sd_offload_group.group_offload_role(slot, weightless(comp)) for pipe, slot, comp in rows} finally: shared.opts.diffusers_offload_never, shared.opts.models_not_to_offload = saved From 619a25eea689a2fecd176e346130fc2389af8e74 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 7 Sep 2026 22:35:38 +0100 Subject: [PATCH 154/270] fix(offload): key the group stats report by component A checkpoint-name key survives unload, so a reload of the same checkpoint never printed the per-module stats block again, even with a different quantization. Each component now carries its own reported stamp: a task switch rebuilds the pipe around the same modules and stays quiet, while a reload or a component swap brings new modules and reports them. --- modules/sd_offload_group.py | 23 ++++++++++------------- modules/sd_offload_state.py | 1 - test/test-offload-roles.py | 23 +++++++++++++++++++++++ 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/modules/sd_offload_group.py b/modules/sd_offload_group.py index 07776596b..014456be7 100644 --- a/modules/sd_offload_group.py +++ b/modules/sd_offload_group.py @@ -206,20 +206,17 @@ def offload_ondemand(sd_model, include=[], exclude=[], reason='', force=False): def report_group_stats(sd_model, module_names): - """Per-component stats block once per loaded model; balanced mode prints its own from the hook map.""" - checkpoint_name = sd_model.sd_checkpoint_info.name if getattr(sd_model, "sd_checkpoint_info", None) is not None else sd_model.__class__.__name__ - if checkpoint_name in s.group_stats_reported: # keyed by checkpoint since a task switch rebuilds the pipe object + """Per-component stats block once per loaded component; balanced mode prints its own from the hook map.""" + modules = {name: getattr(sd_model, name, None) for name in module_names} + modules = {name: module for name, module in modules.items() if isinstance(module, torch.nn.Module)} + pending = {name: module for name, module in modules.items() if not getattr(module, 'sdnext_stats_reported', False)} # a task switch reuses the modules, a reload brings new ones + if not pending: return - s.group_stats_reported.add(checkpoint_name) - total = 0.0 - counted = [] - for module_name in module_names: - module = getattr(sd_model, module_name, None) - if isinstance(module, torch.nn.Module): - total += get_module_size(module)[0] - counted.append(module_name) - report_model_stats(module_name, module) - log.info(f'Model class={sd_model.__class__.__name__} modules={len(counted)} size={total:.3f}') + for module_name, module in pending.items(): + module.sdnext_stats_reported = True + report_model_stats(module_name, module) + total = sum(get_module_size(module)[0] for module in modules.values()) + log.info(f'Model class={sd_model.__class__.__name__} modules={len(modules)} size={total:.3f}') def apply_group_offload(sd_model): diff --git a/modules/sd_offload_state.py b/modules/sd_offload_state.py index 2c1297675..375340a02 100644 --- a/modules/sd_offload_state.py +++ b/modules/sd_offload_state.py @@ -30,5 +30,4 @@ no_split_module_classes = [ ] accelerate_dtype_byte_size = None # monkey-patch accelerate.utils.modeling.dtype_byte_size -group_stats_reported = set() move_stream = None diff --git a/test/test-offload-roles.py b/test/test-offload-roles.py index 8931caf53..533e4a8d7 100644 --- a/test/test-offload-roles.py +++ b/test/test-offload-roles.py @@ -364,6 +364,28 @@ def test_dispatch_skips_non_modules(): assert list(calls) == ['transformer'], f'dispatched {list(calls)}' +def test_stats_report_once_per_component(): + seen = [] + orig_stats = sd_offload_group.report_model_stats + sd_offload_group.report_model_stats = lambda module_name, module: seen.append(module_name) + try: + transformer, vae = PlainModule(), BridgeModule() + pipe = FakePipe({'transformer': transformer, 'vae': vae}) + names = sd_offload_utils.get_module_names(pipe) + sd_offload_group.report_group_stats(pipe, names) + assert sorted(seen) == ['transformer', 'vae'], f'first report covered {seen}' + sd_offload_group.report_group_stats(pipe, names) + assert len(seen) == 2, f'a reapply reported again: {seen}' + switched = FakePipe({'transformer': transformer, 'vae': vae}) # a task switch rebuilds the pipe around the same components + sd_offload_group.report_group_stats(switched, names) + assert len(seen) == 2, f'a task switch reported again: {seen}' + reloaded = FakePipe({'transformer': PlainModule(), 'vae': vae}) # a reload or a component swap brings a new module + sd_offload_group.report_group_stats(reloaded, names) + assert seen[2:] == ['transformer'], f'a new component was not reported on its own: {seen}' + finally: + sd_offload_group.report_model_stats = orig_stats + + def test_force_sweep_moves_only_stamped_components(): stamped = SweepModule() stamped.sdnext_ondemand = True @@ -671,6 +693,7 @@ def run_all(): for fn in [ test_dispatch_is_one_arm_per_component, test_dispatch_skips_non_modules, + test_stats_report_once_per_component, test_ondemand_list_tracks_the_stamps, test_force_sweep_moves_only_stamped_components, test_reapply_after_clearing_the_never_list_restores_hooks, From 51320d0289f78c2651ecea97ce838d127ce08885 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 8 Sep 2026 01:24:51 +0100 Subject: [PATCH 155/270] fix(llada): initialize the rotary frequency buffer after loading Transformers recreates non-persistent buffers with torch.empty_like during the meta-device load and leaves them to _init_weights, which here covered only Linear and Embedding. The text encoder therefore ran with uninitialized memory as its rotary frequencies: a different table on every load, and non-finite embeddings whenever the garbage overflowed at longer positions. The initializer now recomputes inv_freq for the rotary module. --- pipelines/llada/modeling_llada2uni_moe.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pipelines/llada/modeling_llada2uni_moe.py b/pipelines/llada/modeling_llada2uni_moe.py index 77eb547b3..ad2cb6621 100644 --- a/pipelines/llada/modeling_llada2uni_moe.py +++ b/pipelines/llada/modeling_llada2uni_moe.py @@ -91,6 +91,10 @@ class LLaDA2MoePreTrainedModel(PreTrainedModel): module.weight.data.normal_(mean=0.0, std=std) if module.padding_idx is not None: module.weight.data[module.padding_idx].zero_() + elif isinstance(module, LLaDA2MoeRotaryEmbedding): # non-persistent buffers come back uninitialized from the meta-device load + inv_freq, module.attention_scaling = module.rope_init_fn(module.config, module.inv_freq.device) + module.inv_freq.copy_(inv_freq) + module.original_inv_freq = module.inv_freq def rotate_half(hidden_states): From fa7243b239fe33b1d066414c0e1b94b1a11a74b9 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 8 Sep 2026 02:32:47 +0100 Subject: [PATCH 156/270] fix(processing): round init images to a pipeline-declared multiple The init-image snap rounds to the VAE factor, but the LLaDA pipeline needs 16 for its transformer patch and 32 when editing, since the source image is halved for the semantic encoder. The pipeline now declares patch_size for the shared rounding and init_image_multiple for input images, and get_vae_scale_factor honours the latter when an init image is present. check_inputs reads the same attributes. --- modules/processing_args.py | 2 +- modules/processing_class.py | 2 +- modules/processing_helpers.py | 2 +- modules/sd_vae.py | 9 ++++++--- pipelines/llada/pipeline_llada_image.py | 4 +++- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/modules/processing_args.py b/modules/processing_args.py index 42088f8b9..4ac2781ff 100644 --- a/modules/processing_args.py +++ b/modules/processing_args.py @@ -444,7 +444,7 @@ def set_pipeline_args(p, model, prompts:list, negative_prompts:list, prompts_2:l # handle missing resolution if args.get('image', None) is not None and ('width' not in args or 'height' not in args): if 'width' in possible and 'height' in possible: - vae_scale_factor = sd_vae.get_vae_scale_factor(model) + vae_scale_factor = sd_vae.get_vae_scale_factor(model, init_image=True) if isinstance(args['image'], torch.Tensor) or isinstance(args['image'], np.ndarray): if args['image'].shape[-1] == 3: # nhwc args['width'] = args['image'].shape[-2] diff --git a/modules/processing_class.py b/modules/processing_class.py index 9b05182e8..d55a36147 100644 --- a/modules/processing_class.py +++ b/modules/processing_class.py @@ -738,7 +738,7 @@ class StableDiffusionProcessingImg2Img(StableDiffusionProcessing): def init(self, all_prompts=None, all_seeds=None, all_subseeds=None): if self.init_images is not None and len(self.init_images) > 0: - vae_scale_factor = sd_vae.get_vae_scale_factor() + vae_scale_factor = sd_vae.get_vae_scale_factor(init_image=True) if self.width is None or self.width == 0: self.width = int(vae_scale_factor * (self.init_images[0].width * self.scale_by // vae_scale_factor)) if self.height is None or self.height == 0: diff --git a/modules/processing_helpers.py b/modules/processing_helpers.py index dfaabc65d..64d939074 100644 --- a/modules/processing_helpers.py +++ b/modules/processing_helpers.py @@ -395,7 +395,7 @@ def resize_init_images(p): p.init_images = [p.image] if getattr(p, 'init_images', None) is not None and len(p.init_images) > 0: p.init_images = decode_images(p.init_images) - vae_scale_factor = sd_vae.get_vae_scale_factor() + vae_scale_factor = sd_vae.get_vae_scale_factor(init_image=True) tgt_width = vae_scale_factor * math.ceil(p.init_images[0].width / vae_scale_factor) tgt_height = vae_scale_factor * math.ceil(p.init_images[0].height / vae_scale_factor) if p.init_images[0].size != (tgt_width, tgt_height): diff --git a/modules/sd_vae.py b/modules/sd_vae.py index 066cec2ca..ec5f7053d 100644 --- a/modules/sd_vae.py +++ b/modules/sd_vae.py @@ -28,7 +28,7 @@ vae_scale_override = { } -def get_vae_scale_factor(model: DiffusionPipeline | None = None): +def get_vae_scale_factor(model: DiffusionPipeline | None = None, init_image: bool = False): if not shared.sd_loaded: vae_scale_factor = 8 return vae_scale_factor @@ -58,9 +58,12 @@ def get_vae_scale_factor(model: DiffusionPipeline | None = None): patch_size = model.patch_size if isinstance(patch_size, (tuple, list)): # 3d patch sizes are (t, h, w); spatial term is last patch_size = patch_size[-1] + multiple = vae_scale_factor * patch_size + if init_image and model is not None and hasattr(model, 'init_image_multiple'): # a pipeline that downsamples its source image needs a larger multiple than its output + multiple = max(multiple, int(model.init_image_multiple)) if debug: - log.trace(f'VAE: cls={model.__class__.__name__ if model else "None"} scale={vae_scale_factor} patch={patch_size}') - return vae_scale_factor * patch_size + log.trace(f'VAE: cls={model.__class__.__name__ if model else "None"} scale={vae_scale_factor} patch={patch_size} multiple={multiple}') + return multiple def load_vae_dict(filename: str): diff --git a/pipelines/llada/pipeline_llada_image.py b/pipelines/llada/pipeline_llada_image.py index eabe87622..7010dfadd 100644 --- a/pipelines/llada/pipeline_llada_image.py +++ b/pipelines/llada/pipeline_llada_image.py @@ -90,6 +90,8 @@ class LLaDAImagePipeline(DiffusionPipeline): self.vae_scale_factor = 2 ** (len(self.vae.config.block_out_channels) - 1) if self.vae is not None else 8 self.latent_scale_factor = self.vae_scale_factor * 2 + self.patch_size = 2 # transformer patch size, read by the host to round sizes to the latent multiple + self.init_image_multiple = self.latent_scale_factor * 2 # editing feeds a half-resolution copy of the source image to the semantic encoder self.image_processor = VaeImageProcessor(vae_scale_factor=self.latent_scale_factor) @classmethod @@ -383,7 +385,7 @@ class LLaDAImagePipeline(DiffusionPipeline): if generation_mode == "vq" and (height % 16 != 0 or width % 16 != 0): raise ValueError("`height` and `width` must be divisible by 16 in VQ mode.") - required_multiple = self.latent_scale_factor * (2 if generation_mode == "editing" else 1) + required_multiple = self.init_image_multiple if generation_mode == "editing" else self.latent_scale_factor if height <= 0 or width <= 0 or height % required_multiple != 0 or width % required_multiple != 0: raise ValueError(f"`height` and `width` must be divisible by {required_multiple}.") if num_inference_steps < 1: From c389ce92d0a4580a94cf658ee9a393837667d1bf Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 6 Sep 2026 16:00:03 +0100 Subject: [PATCH 157/270] fix(models): keep pipelines whose class already serves the requested task get_diffusers_task reports image-to-image for any class that diffusers registers under both the text-to-image and image-to-image tables, so every text-to-image generation on such a model (Klein, FLUX.2, Kontext, Qwen-Image-Edit, LongCat) went through AutoPipeline.from_pipe and came back as a new object. The prompt cache is keyed on the pipeline identity, so the text encoder ran again on every image. set_diffuser_pipe now returns the pipeline unchanged when its class is registered for the requested task. --- modules/sd_models.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/modules/sd_models.py b/modules/sd_models.py index bbaf5d008..5e06d03fd 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -1147,6 +1147,17 @@ def get_diffusers_task(pipe: diffusers.DiffusionPipeline) -> DiffusersTaskType: return DiffusersTaskType.TEXT_2_IMAGE +def pipe_serves_task(pipe: diffusers.DiffusionPipeline, task_type: DiffusersTaskType) -> bool: + """True when the pipeline class is registered for the task in the diffusers auto-pipeline tables.""" + mappings = { + DiffusersTaskType.TEXT_2_IMAGE: diffusers.pipelines.auto_pipeline.AUTO_TEXT2IMAGE_PIPELINES_MAPPING, + DiffusersTaskType.IMAGE_2_IMAGE: diffusers.pipelines.auto_pipeline.AUTO_IMAGE2IMAGE_PIPELINES_MAPPING, + DiffusersTaskType.INPAINTING: diffusers.pipelines.auto_pipeline.AUTO_INPAINT_PIPELINES_MAPPING, + } + mapping = mappings.get(task_type) + return mapping is not None and pipe.__class__ in mapping.values() + + def switch_pipe(cls: type[diffusers.DiffusionPipeline] | str, pipeline: diffusers.DiffusionPipeline | None = None, force = False, args: dict | None = None): """ args: @@ -1354,6 +1365,8 @@ def set_diffuser_pipe(pipe, new_pipe_type): return pipe if get_diffusers_task(pipe) == new_pipe_type: return pipe + if pipe_serves_task(pipe, new_pipe_type): # a class registered for several tasks classifies as one of them + return pipe if get_diffusers_task(pipe) == DiffusersTaskType.MODULAR: return pipe From c904585f87d29063e26f99db0ae4f4cb66d86870 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 6 Sep 2026 19:12:41 +0100 Subject: [PATCH 158/270] fix(prompt): cache list prompts again 0dbe27c37 keyed the prompt cache on the negative prompt and the cfg flag and hashed both prompts to tuples for it. The positive prompt was hashed before the list check that builds the key, so a list prompt, which is what every pipeline passes, was never stored or found and the text encoder ran on every generation. Only the negative prompt needs hashing. --- modules/sd_hijack_te.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/sd_hijack_te.py b/modules/sd_hijack_te.py index 2c43f516c..0e949c3fa 100644 --- a/modules/sd_hijack_te.py +++ b/modules/sd_hijack_te.py @@ -22,7 +22,6 @@ class PromptCache: self.cache.clear() self.id = id(shared.sd_model) log.debug(f'Encode: prompt cache activate id={self.id} depth={len(self.cache)}') - prompt = self._hashable(prompt) negative_prompt = self._hashable(negative_prompt) if (isinstance(prompt, list) and len(prompt) == 1 and isinstance(prompt[0], str)): cached = self.cache.get((prompt[0], negative_prompt, cfg_enabled), None) @@ -41,7 +40,6 @@ class PromptCache: if len(self.cache) >= self.max: oldest_key = next(iter(self.cache)) del self.cache[oldest_key] - prompt = self._hashable(prompt) negative_prompt = self._hashable(negative_prompt) if (isinstance(prompt, list) and len(prompt) == 1 and isinstance(prompt[0], str)): self.cache[(prompt[0], negative_prompt, cfg_enabled)] = encoded From ce01461bf5e8fa191e387ac5782fd604f83e11b1 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 8 Sep 2026 08:45:53 +0200 Subject: [PATCH 159/270] update logging Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 6 ++-- installer.py | 7 +++-- launch.py | 2 +- modules/logger.py | 37 +++++++++++++++++------- modules/ui_extra_networks_checkpoints.py | 1 + pipelines/model_llada.py | 14 +++++++++ webui.py | 2 +- 7 files changed, 51 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa87a33bb..2bd841510 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-09-07 +## Update for 2026-09-08 -### Highlights for 2026-09-07 +### Highlights for 2026-09-08 All-about-optimizations: - improved LoRA performance and quality, especially with quantized models @@ -12,7 +12,7 @@ All-about-optimizations: - compute updates across the board - enhanced cloud model support -### Details for 2026-09-07 +### Details for 2026-09-08 - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) diff --git a/installer.py b/installer.py index 6da642eec..4e2288cec 100644 --- a/installer.py +++ b/installer.py @@ -409,7 +409,7 @@ def branch(folder=None): b = 'master' else: b = b.split('\n')[0].replace('*', '').strip() - log.debug(f'Git submodule: {folder} / {b}') + log.debug(f'Submodule: folder="{folder}" branch="{b}"') git(f'checkout {b}', folder, ignore=True, optional=True) ts('branch', t_start) return b @@ -1386,7 +1386,10 @@ def install_requirements(): # set environment variables controlling the behavior of various libraries def set_environment(): + log.debug('Setting environment tuning') + from modules.logger import console + log.debug(f'Console: terminal={console.is_terminal} width={console.width} height={console.height} color={console.color_system} legacy={console.legacy_windows}') os.environ.setdefault('ACCELERATE', 'True') os.environ.setdefault('ATTN_PRECISION', 'fp16') os.environ.setdefault('ClDeviceGlobalMemSizeAvailablePercent', '100') @@ -1704,7 +1707,7 @@ def check_version(reset=True): # pylint: disable=unused-argument else: dt = commits["commit"]["commit"]["author"]["date"] commit = commits["commit"]["sha"][:8] - log.info(f'Version: app=sd.next latest={dt} hash={commit} branch={branch_name}') + log.info(f'Version: app="sd.next" latest={dt} hash={commit} branch={branch_name}') except Exception as e: log.error(f'Repository failed to check version: {e} {commits}') ts('latest', t_start) diff --git a/launch.py b/launch.py index 34c007331..06ba83b29 100755 --- a/launch.py +++ b/launch.py @@ -238,7 +238,7 @@ def main(): init_args() # setup argparser and default folders installer.args = args installer.setup_logging(debug=args.debug, trace=args.trace, filename=args.log) - log.info('Starting SD.Next') + log.info('[bold cyan]SD.Next[/]: starting') installer.get_logfile() try: sys.excepthook = installer.custom_excepthook diff --git a/modules/logger.py b/modules/logger.py index 91f9b2327..b9ec471f7 100644 --- a/modules/logger.py +++ b/modules/logger.py @@ -232,20 +232,26 @@ def setup_logging(debug=None, trace=None, filename=None): log.setLevel(logging.DEBUG) # log to file is always at level debug for facility `sd` log.print = rprint + # use only the 16 standard ANSI color names (+ dim/bold modifiers) so the theme renders correctly on basic 16-color terminals too theme = Theme({ "traceback.border": "black", "inspect.value.border": "black", - "traceback.border.syntax_error": "dark_red", - "logging.level.info": "blue_violet", - "logging.level.debug": "orchid", - "logging.level.trace": "dark_blue", - "repr.attrib_name": "bright_cyan", - "repr.attrib_value": "orchid", - "repr.str": "sandy_brown", - "repr.number": "bright_green", - "repr.bool_true": "bright_green", + "traceback.border.syntax_error": "red", + + "logging.level.trace": "dim cyan", + "logging.level.debug": "cyan", + "logging.level.info": "bright_cyan", + "logging.level.warning": "yellow", + "logging.level.error": "red", + "logging.level.critical": "bold bright_red", + + "repr.attrib_name": "bright_white", + "repr.attrib_value": "cyan", + "repr.str": "bright_cyan", + "repr.none": "yellow", + "repr.number": "bright_yellow", + "repr.bool_true": "green", "repr.bool_false": "bright_red", - "repr.values": "bright_cyan", }) Padding.__rich_console__ = override_padding @@ -270,7 +276,7 @@ def setup_logging(debug=None, trace=None, filename=None): log_filter = LogFilter() # handlers - rh = RichHandler(show_time=True, omit_repeated_times=False, show_level=True, show_path=False, markup=False, rich_tracebacks=True, log_time_format='%H:%M:%S-%f', level=level, console=console) + rh = RichHandler(show_time=True, omit_repeated_times=False, show_level=True, show_path=False, markup=True, rich_tracebacks=True, log_time_format='%H:%M:%S-%f', level=level, console=console) if trace: rh.formatter = logging.Formatter('[%(module)s][%(pathname)s:%(lineno)d] %(message)s') rh.addFilter(log_filter) @@ -319,3 +325,12 @@ def setup_logging(debug=None, trace=None, filename=None): logging.getLogger("torch").setLevel(logging.DEBUG) else: logging.getLogger("torch").setLevel(logging.WARNING) + + +if __name__ == "__main__": + setup_logging(debug=True, trace=False, filename=None) + for l in [logging.TRACE, logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL]: + log.log(l, f"Test log level: {logging.getLevelName(l)}") + values = [None, True, False, "yes", "no", "sd.next", 1, 0, 1.0, [1,2,3], {"key": "value"}, (1,2), {1,2}, object()] + for v in values: + log.info(f"Test values: {type(v).__name__}={v}") diff --git a/modules/ui_extra_networks_checkpoints.py b/modules/ui_extra_networks_checkpoints.py index 56eb1b3bf..a7db53fbc 100644 --- a/modules/ui_extra_networks_checkpoints.py +++ b/modules/ui_extra_networks_checkpoints.py @@ -111,6 +111,7 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): primary = tag.split(',')[0].strip() if len(tag) > 0 else '' else: primary = '' + primary = primary.lower() if ('nunchaku' in tag) and (devices.backend != 'cuda' and not shared.cmd_opts.experimental): count['hidden'] += 1 diff --git a/pipelines/model_llada.py b/pipelines/model_llada.py index bd0a1297e..4a0f65f60 100644 --- a/pipelines/model_llada.py +++ b/pipelines/model_llada.py @@ -19,15 +19,21 @@ def load_llada_image(checkpoint_info, diffusers_load_config=None): if repo_id is None or repo_id.lower() == 'none': return None + sdnq_quantize_weights_mode = None + sdnq_quantize_weights_mode_te = None + sdnq_quantize_matmul_mode_te = None if 'Model' in shared.opts.sdnq_quantize_weights: if any(x in shared.opts.sdnq_quantize_weights_mode for x in ['2', '3', '4', '5', '6']): + sdnq_quantize_weights_mode = shared.opts.sdnq_quantize_weights_mode shared.opts.sdnq_quantize_weights_mode = 'uint8' log.warning('LLaDAImage: cls=LLaDAImageTransformer2DModel quant=uint8 override') if 'TE' in shared.opts.sdnq_quantize_weights: if any(x in shared.opts.sdnq_quantize_weights_mode_te for x in ['2', '3', '4', '5', '6']): + sdnq_quantize_weights_mode_te = shared.opts.sdnq_quantize_weights_mode_te shared.opts.sdnq_quantize_weights_mode_te = 'uint8' log.warning('LLaDAImage: cls=LLaDA2MoeModelLM quant=uint8 override') if shared.opts.sdnq_quantize_matmul_mode_te != 'disabled': + sdnq_quantize_matmul_mode_te = shared.opts.sdnq_quantize_matmul_mode_te shared.opts.sdnq_quantize_matmul_mode_te = 'disabled' log.warning('LLaDAImage: cls=LLaDA2MoeModelLM matmul=disabled override') @@ -72,6 +78,14 @@ def load_llada_image(checkpoint_info, diffusers_load_config=None): } # generation_mode = "text", "vq", "editing" + # restore settings post-load + if sdnq_quantize_weights_mode is not None: + shared.opts.sdnq_quantize_weights_mode = sdnq_quantize_weights_mode + if sdnq_quantize_weights_mode_te is not None: + shared.opts.sdnq_quantize_weights_mode_te = sdnq_quantize_weights_mode_te + if sdnq_quantize_matmul_mode_te is not None: + shared.opts.sdnq_quantize_matmul_mode_te = sdnq_quantize_matmul_mode_te + del transformer, text_encoder sd_hijack_te.init_hijack(pipe) sd_hijack_vae.init_hijack(pipe) diff --git a/webui.py b/webui.py index 70b1595d7..731ec5fea 100644 --- a/webui.py +++ b/webui.py @@ -249,7 +249,7 @@ def async_policy(): if shared.cmd_opts.profile: loop.slow_callback_duration = 0.001 loop.set_debug(shared.cmd_opts.profile) - log.debug(f'AsyncIO: loop={loop}') + log.debug(f'AsyncIO: loop={loop.__class__.__name__}') loop.set_task_factory(verbose_task_factory) loop.set_exception_handler(self.handle_exception) return loop From 5f127650ea1c78da100e47296a65f932ad45536d Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 8 Sep 2026 09:03:14 +0200 Subject: [PATCH 160/270] fix test pass Signed-off-by: Vladimir Mandic --- modules/modelloader.py | 2 +- pipelines/model_lens.py | 3 +-- webui.py | 3 ++- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/modelloader.py b/modules/modelloader.py index 9fcb85b65..a6eb625a4 100644 --- a/modules/modelloader.py +++ b/modules/modelloader.py @@ -490,5 +490,5 @@ def load_upscalers(quiet=False): shared.sd_upscalers = upscalers t1 = time.time() if not quiet: - log.info(f"Available Upscalers: items={len(shared.sd_upscalers)} downloaded={len([x for x in shared.sd_upscalers if x.data_path is not None and os.path.isfile(x.data_path)])} user={len([x for x in shared.sd_upscalers if x.custom])} time={t1-t0:.2f} types={upscaler_types}") + log.info(f"Available Upscalers: items={len(shared.sd_upscalers)} downloaded={len([x for x in shared.sd_upscalers if x.data_path is not None and os.path.isfile(x.data_path)])} user={len([x for x in shared.sd_upscalers if x.custom])} time={t1-t0:.2f}") return [x.name for x in shared.sd_upscalers] diff --git a/pipelines/model_lens.py b/pipelines/model_lens.py index 57f764976..98a17789c 100644 --- a/pipelines/model_lens.py +++ b/pipelines/model_lens.py @@ -12,9 +12,9 @@ def load_lens(checkpoint_info, diffusers_load_config=None): sd_models.hf_auth_check(checkpoint_info) from pipelines import lens - load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config, allow_quant=False) log.debug(f'Load model: type=Lens repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} reasoner={shared.opts.model_lens_enable_pe} args={load_args}') + generic.set_pipeline('Lens', diffusers.Krea2Pipeline) if repo_id is None or repo_id.lower() == 'none': return None @@ -27,7 +27,6 @@ def load_lens(checkpoint_info, diffusers_load_config=None): diffusers.pipelines.auto_pipeline.AUTO_TEXT2IMAGE_PIPELINES_MAPPING["lens"] = lens.LensPipeline diffusers.pipelines.auto_pipeline.AUTO_IMAGE2IMAGE_PIPELINES_MAPPING["lens"] = lens.LensImg2ImgPipeline diffusers.pipelines.auto_pipeline.AUTO_INPAINT_PIPELINES_MAPPING["lens"] = lens.LensInpaintPipeline - generic.set_pipeline('Lens', lens.LensPipeline) pipe = lens.LensPipeline.from_pretrained( repo_id, transformer=transformer, diff --git a/webui.py b/webui.py index 731ec5fea..58521c71b 100644 --- a/webui.py +++ b/webui.py @@ -429,7 +429,8 @@ def start_ui(): uc = shared.demo.server.config get_name = lambda c: getattr(c, '__name__', c) # pylint: disable=unnecessary-lambda-assignment - log.debug(f'Server config: loop={shared.demo.server.loop} http={get_name(uc.http_protocol_class)} ws={get_name(uc.ws_protocol_class)} interface={uc.interface} workers={uc.workers} backlog={uc.backlog} timeout_keep_alive={uc.timeout_keep_alive} timeout_notify={uc.timeout_notify} ws_max_size={uc.ws_max_size} ws_max_queue={uc.ws_max_queue} ws_ping_interval={uc.ws_ping_interval} ws_ping_timeout={uc.ws_ping_timeout}') + log.debug(f'Server config: loop={shared.demo.server.loop} http={get_name(uc.http_protocol_class)} ws={get_name(uc.ws_protocol_class)} interface={uc.interface} workers={uc.workers} backlog={uc.backlog} timeout_keep_alive={uc.timeout_keep_alive}') + # log.debug(f'Server config: loop={shared.demo.server.loop} http={get_name(uc.http_protocol_class)} ws={get_name(uc.ws_protocol_class)} interface={uc.interface} workers={uc.workers} backlog={uc.backlog} timeout_keep_alive={uc.timeout_keep_alive} timeout_notify={uc.timeout_notify} ws_max_size={uc.ws_max_size} ws_max_queue={uc.ws_max_queue} ws_ping_interval={uc.ws_ping_interval} ws_ping_timeout={uc.ws_ping_timeout}') if shared.cmd_opts.data_dir is not None: modules.gr_tempdir.register_tmp_file(shared.demo, os.path.join(shared.cmd_opts.data_dir, 'x')) From 23b800a99b24c5e01e45ebd6b2aa8ba27d09b877 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 8 Sep 2026 10:18:29 +0200 Subject: [PATCH 161/270] stricter lint Signed-off-by: Vladimir Mandic --- installer.py | 3 +-- launch.py | 2 +- modules/extensions.py | 4 +++- modules/logger.py | 13 +++---------- modules/lora/networks.py | 4 ++-- pyproject.toml | 9 +++++---- 6 files changed, 15 insertions(+), 20 deletions(-) diff --git a/installer.py b/installer.py index 4e2288cec..4d544f930 100644 --- a/installer.py +++ b/installer.py @@ -1140,7 +1140,7 @@ def list_extensions_folder(folder, quiet=False): disabled_extensions = opts.get('disabled_extensions', []) enabled_extensions = [x for x in os.listdir(folder) if os.path.isdir(os.path.join(folder, x)) and x not in disabled_extensions and not x.startswith('.')] if not quiet: - log.info(f'Extensions: path="{folder}" enabled={enabled_extensions}') + log.info(f'Extensions: path="{folder}" available={enabled_extensions}') return enabled_extensions @@ -1363,7 +1363,6 @@ def install_requirements(): log.info('Install requirements: this may take a while...') pip('install -r requirements.txt') if args.optional: - quick_allowed = False install_optional() log.info('Install: verifying requirements') if args.new: diff --git a/launch.py b/launch.py index 06ba83b29..b90d01be5 100755 --- a/launch.py +++ b/launch.py @@ -238,7 +238,7 @@ def main(): init_args() # setup argparser and default folders installer.args = args installer.setup_logging(debug=args.debug, trace=args.trace, filename=args.log) - log.info('[bold cyan]SD.Next[/]: starting') + log.info('Starting: [bold cyan]SD.Next[/]') installer.get_logfile() try: sys.excepthook = installer.custom_excepthook diff --git a/modules/extensions.py b/modules/extensions.py index b93fe7f81..7b9c9541d 100644 --- a/modules/extensions.py +++ b/modules/extensions.py @@ -271,4 +271,6 @@ def list_extensions(): enabled = dirname.lower() not in disabled_extensions extension = Extension(name=dirname, path=path, enabled=enabled, is_builtin=is_builtin) extensions.append(extension) - log.debug(f'Extensions: disabled={[e.name for e in extensions if not e.enabled]}') + enabled = [e.name for e in extensions if e.enabled] + disabled = [e.name for e in extensions if not e.enabled] + log.debug(f'Extensions: enabled={enabled} disabled={disabled}') diff --git a/modules/logger.py b/modules/logger.py index b9ec471f7..4aac7dac3 100644 --- a/modules/logger.py +++ b/modules/logger.py @@ -182,21 +182,14 @@ def setup_logging(debug=None, trace=None, filename=None): render_options = render_options.update_height(height=render_options.height - self.top - self.bottom) lines = console.render_lines(self.renderable, render_options, style=style, pad=False) _Segment = Segment - left = _Segment(" " * self.left, style) if self.left else None right = [_Segment.line()] blank_line: list[Segment] | None = None if self.top: blank_line = [_Segment(f'{" " * width}\\n', style)] yield from blank_line * self.top - if left: - for line in lines: - yield left - yield from line - yield from right - else: - for line in lines: - yield from line - yield from right + for line in lines: # self.left is forced to 0 above, so no left-padding segment is ever emitted + yield from line + yield from right if self.bottom: blank_line = blank_line or [_Segment(f'{" " * width}\\n', style)] yield from blank_line * self.bottom diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 2a3a4ee43..4595bbb00 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -72,10 +72,10 @@ class ActivationPass: self.sd_model = getattr(shared.sd_model, "pipe", shared.sd_model) self.fuse = fuse self.elimit = None # the error limiter, bound for the duration of the walk - self.wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () + self.wanted_names: tuple[tuple[str, float, list, int | None], ...] = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () self.stack_sig = lora_stack.signature() + lora_blocks.signature() + lora_sdnq.signature() # tracked beside network_current_names so stack-setting, block-weight and mechanism changes re-apply self.select_active = len(l.loaded_networks) > 0 and lora_stack.active_select(len(l.loaded_networks)) # restore-only walks have nothing to stack; the count warning would fire on every network-free generation - self.component_wanted = () + self.component_wanted: tuple[tuple[str, float, list, int | None], ...] = () self.device = None self.group_offload = shared.opts.diffusers_offload_mode == "group" self.group_stripped = {} diff --git a/pyproject.toml b/pyproject.toml index 9e53dc46c..bd050c124 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -384,9 +384,10 @@ python-version = "3.10" [tool.ty.src] include = [ "*.py", + "modules/*.py", + "pipelines/*.py", + "scripts/*.py", "modules/**/*.py", - "pipelines/**/*.py", - "scripts/**/*.py", "extensions-builtin/**/*.py" ] exclude = [ @@ -412,8 +413,8 @@ exclude = [ "modules/teacache", "modules/face/*.py", "modules/sub_quadratic_attention.py", - "pipelines/**/*.py", - "scripts/**/*.py", + "pipelines/*/**/*.py", + "scripts/*/**/*.py", ] [tool.ty.rules] From 2ef1a0c87b201f5cbed8b77c1c311d2606ff96cb Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 8 Sep 2026 10:22:42 +0200 Subject: [PATCH 162/270] stricter ty Signed-off-by: Vladimir Mandic --- pipelines/generic_text_encoder.py | 2 ++ pipelines/native_transformer.py | 4 ++-- scripts/differential_diffusion.py | 2 +- scripts/softfill.py | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pipelines/generic_text_encoder.py b/pipelines/generic_text_encoder.py index 62c392476..1c2662c11 100644 --- a/pipelines/generic_text_encoder.py +++ b/pipelines/generic_text_encoder.py @@ -21,6 +21,8 @@ def get_shared(cls, repo_id, subfolder=None, variant=None, shared_id: str | None identifiers = [] if isinstance(identifiers, str): identifiers = [identifiers] + if not isinstance(identifiers, list): + identifiers = [] identifiers = [identifier.lower() for identifier in identifiers if identifier is not None] shared_id = shared_id or repo_id.lower() if item['cls'] == cls and (not identifiers or any(identifier in shared_id for identifier in identifiers)): diff --git a/pipelines/native_transformer.py b/pipelines/native_transformer.py index 5e1b00321..b282f92e4 100644 --- a/pipelines/native_transformer.py +++ b/pipelines/native_transformer.py @@ -45,7 +45,7 @@ import os import json import time from dataclasses import dataclass, field -from typing import Callable +from typing import Callable, cast import huggingface_hub as hf import torch @@ -185,7 +185,7 @@ def auto_pickup_converter(cls: type) -> Callable[[dict], dict] | None: fn = entry.get("checkpoint_mapping_fn") if fn is None or is_noop_converter(fn): return None - return fn + return cast('Callable[[dict], dict]', fn) # diffusers' mapping fns vary in signature (extra kwargs/config), all compatible at call sites def is_noop_converter(fn: Callable) -> bool: diff --git a/scripts/differential_diffusion.py b/scripts/differential_diffusion.py index 11eb177af..b5bc5cb1a 100644 --- a/scripts/differential_diffusion.py +++ b/scripts/differential_diffusion.py @@ -869,7 +869,7 @@ class StableDiffusionXLDiffImg2ImgPipeline(DiffusionPipeline, FromSingleFileMixi total_time_steps = num_inference_steps #end diff diff change timesteps, num_inference_steps = self.get_timesteps( - num_inference_steps, strength, device, denoising_start=denoising_start if denoising_value_valid else None # pylint: disable=missing-parentheses-for-call-in-test, using-constant-test + num_inference_steps, strength, device, denoising_start=denoising_start if denoising_value_valid(denoising_start) else None ) latent_timestep = timesteps[:1].repeat(batch_size * num_images_per_prompt) diff --git a/scripts/softfill.py b/scripts/softfill.py index 35b2348e9..ac99afa9f 100644 --- a/scripts/softfill.py +++ b/scripts/softfill.py @@ -964,7 +964,7 @@ class StableDiffusionXLSoftFillPipeline( aesthetic_score: float = 6.0, negative_aesthetic_score: float = 2.5, clip_skip: Optional[int] = None, - callback_on_step_end: Optional[Callable[[int, int, Dict], None]] = None, + callback_on_step_end: Optional[Callable[..., Dict]] = None, # invoked as (self, step_index, timestep, callback_kwargs) -> dict callback_on_step_end_tensor_inputs: List[str] = ["latents"], **kwargs, ): From 37767b3bbcd8de7b40b545d9a88eb4e5b591f0a7 Mon Sep 17 00:00:00 2001 From: Yifan Chen Date: Tue, 8 Sep 2026 22:33:23 -0700 Subject: [PATCH 163/270] fix lint for shared module import --- modules/generation_parameters_copypaste.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/generation_parameters_copypaste.py b/modules/generation_parameters_copypaste.py index f8fd1ab84..f071e2a05 100644 --- a/modules/generation_parameters_copypaste.py +++ b/modules/generation_parameters_copypaste.py @@ -303,7 +303,7 @@ def connect_paste(button, local_paste_fields, input_comp, override_settings_comp applied[key] = v continue if getattr(output, 'elem_id', '').endswith('_resize_name') and isinstance(v, str): - from modules import modelloader, shared, ui_sections + from modules import modelloader, ui_sections modelloader.load_upscalers() choices = [upscaler.name for upscaler in shared.sd_upscalers] if output.elem_id.startswith(('control_after', 'control_mask')): From abec7011914a5c1708abc0df955913b61f5f0e8d Mon Sep 17 00:00:00 2001 From: Oleksandr Liutyi Date: Wed, 9 Sep 2026 11:15:58 +0000 Subject: [PATCH 164/270] LLaDA reference images --- data/reference-base.json | 1 + data/reference-distilled.json | 1 + .../inclusionAI--LLaDA-Image-Turbo.jpg | Bin 0 -> 52784 bytes models/Reference/inclusionAI--LLaDA-Image.jpg | Bin 0 -> 42407 bytes 4 files changed, 2 insertions(+) create mode 100644 models/Reference/inclusionAI--LLaDA-Image-Turbo.jpg create mode 100644 models/Reference/inclusionAI--LLaDA-Image.jpg diff --git a/data/reference-base.json b/data/reference-base.json index 34415efe2..9407512d3 100644 --- a/data/reference-base.json +++ b/data/reference-base.json @@ -986,6 +986,7 @@ }, "inclusionAI LLaDA-Image": { "path": "inclusionAI/LLaDA-Image", + "preview": "inclusionAI--LLaDA-Image.jpg", "desc": "LLaDA-Image is a unified 6B image generation and editing model with text, VQ-conditioned, and reference-image workflows.", "extras": "steps: 50, cfg_scale: 5.0", "size": 37.15, diff --git a/data/reference-distilled.json b/data/reference-distilled.json index b1f07f95e..c7d831f5f 100644 --- a/data/reference-distilled.json +++ b/data/reference-distilled.json @@ -253,6 +253,7 @@ }, "inclusionAI LLaDA-Image Turbo": { "path": "inclusionAI/LLaDA-Image-Turbo", + "preview": "inclusionAI--LLaDA-Image-Turbo.jpg", "desc": "LLaDA-Image-Turbo is the distilled fast-generation and editing variant of LLaDA-Image.", "extras": "steps: 4, cfg_scale: 1.0", "size": 37.15, diff --git a/models/Reference/inclusionAI--LLaDA-Image-Turbo.jpg b/models/Reference/inclusionAI--LLaDA-Image-Turbo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d0ad3c74a5cbc7c1df2d95c7e5002fbbffbcc76 GIT binary patch literal 52784 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 literal 0 HcmV?d00001 diff --git a/models/Reference/inclusionAI--LLaDA-Image.jpg b/models/Reference/inclusionAI--LLaDA-Image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72a93c2af33934b90db42d377875af2cef908e64 GIT binary patch literal 42407 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 z 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 f?h Date: Wed, 9 Sep 2026 12:47:34 +0200 Subject: [PATCH 165/270] dlss initial stable Signed-off-by: Vladimir Mandic --- extensions-builtin/sdnext-modernui | 2 +- modules/processing.py | 14 +- modules/scripts_manager.py | 6 +- modules/ui_definitions.py | 1 + modules/ui_symbols.py | 2 +- scripts/dlss/__init__.py | 0 scripts/dlss/controller_cli.py | 229 +++++++++++++++++ scripts/dlss/controller_srv.py | 400 +++++++++++++++++++++++++++++ scripts/dlss/framegen.py | 209 +++++++++++++++ scripts/dlss/render.py | 162 ++++++++++++ scripts/dlss/supersample.py | 117 +++++++++ scripts/dlss/utils.py | 118 +++++++++ scripts/dlss/verify.py | 201 +++++++++++++++ scripts/dlss_ext.py | 332 ++++++++++++++++++++++++ 14 files changed, 1787 insertions(+), 6 deletions(-) create mode 100644 scripts/dlss/__init__.py create mode 100644 scripts/dlss/controller_cli.py create mode 100644 scripts/dlss/controller_srv.py create mode 100644 scripts/dlss/framegen.py create mode 100644 scripts/dlss/render.py create mode 100644 scripts/dlss/supersample.py create mode 100644 scripts/dlss/utils.py create mode 100644 scripts/dlss/verify.py create mode 100644 scripts/dlss_ext.py diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 8dec87411..2840cb952 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 8dec87411813d6cb413efb4f114c4d96388223ae +Subproject commit 2840cb952665d416768917c780d1acd9175d09cf diff --git a/modules/processing.py b/modules/processing.py index 010b28d72..e6b3b195f 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -356,8 +356,14 @@ def process_samples(p: StableDiffusionProcessing, samples): pp = scripts_manager.PostprocessImageArgs(image) p.scripts.postprocess_image(p, pp) if pp.image is not None: - image = pp.image - + if isinstance(pp.image, list) and len(pp.image) > 0: # post process image can return original+processed + for i, img in enumerate(pp.image): + if i+1 < len(pp.image): + out_images.append(img) + out_infotexts.append(f"Postprocess image {i+1}") + image = pp.image[-1] + else: + image = pp.image grading_params = processing_grading.GradingParams( brightness=getattr(p, 'grading_brightness', 0.0), contrast=getattr(p, 'grading_contrast', 0.0), @@ -609,7 +615,9 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: audio=audio, ) if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner) and not (shared.state.interrupted or shared.state.skipped): - p.scripts.postprocess(p, results) + _results = p.scripts.postprocess(p, results) + if _results is not None: + results = _results timer.process.record('post') p.ops = list(set(p.ops)) t3 = time.time() diff --git a/modules/scripts_manager.py b/modules/scripts_manager.py index f66d4516a..8598fd839 100644 --- a/modules/scripts_manager.py +++ b/modules/scripts_manager.py @@ -743,15 +743,19 @@ class ScriptRunner: def postprocess(self, p: StableDiffusionProcessing, processed): s = ScriptSummary('postprocess') + _processed = processed for script in self.alwayson_scripts: try: args = resolve_script_args(script, p.script_args, p.per_script_args) if args is not None: - script.postprocess(p, processed, *args) + result = script.postprocess(p, _processed, *args) + if result is not None: # allow postprocessing script to optionally modify results + _processed = result except Exception as e: errors.display(e, f'Running script postprocess: {script.filename}') s.record(script.title()) s.report() + return _processed def postprocess_batch(self, p: StableDiffusionProcessing, images, **kwargs): s = ScriptSummary('postprocess-batch') diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 825722aa3..f8f71554a 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -499,6 +499,7 @@ def create_settings(cmd_opts): "openvino_cache_path": OptionInfo('cache', "Folder for OpenVINO cache", folder=True), "onnx_cached_models_path": OptionInfo(os.path.join(paths.models_path, 'ONNX', 'cache'), "Folder for ONNX cached models", folder=True), "onnx_temp_dir": OptionInfo(os.path.join(paths.models_path, 'ONNX', 'temp'), "Folder for ONNX conversion", folder=True), + "dlss_pkg_path": OptionInfo('', "Folder with DLSS package", gr.Textbox, { "visible": False}), })) # --- Image Options --- diff --git a/modules/ui_symbols.py b/modules/ui_symbols.py index 1a82cfc31..01d21a454 100644 --- a/modules/ui_symbols.py +++ b/modules/ui_symbols.py @@ -23,13 +23,13 @@ sort = '⇕' detect = '📐' folder = '📂' random = '🎲️' -reuse = '♻️' info = 'ℹ' # noqa reset = '🔄' upload = '⬆️' loading = '↺' reuse = '⬅️' search = '🔍' +tools = '🛠' preview = '🖼️' image = '🖌️' resize = '⁜' diff --git a/scripts/dlss/__init__.py b/scripts/dlss/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/dlss/controller_cli.py b/scripts/dlss/controller_cli.py new file mode 100644 index 000000000..f50a97696 --- /dev/null +++ b/scripts/dlss/controller_cli.py @@ -0,0 +1,229 @@ +import os +import json +import shutil +import base64 +import select +import threading +import subprocess +import time +import uuid +import numpy as np +from PIL import Image +from modules.logger import log +from modules.errors import display + + +debug = os.environ.get('SD_DLSS_DEBUG', None) is not None + + +def image_to_nchw(image: Image.Image) -> np.ndarray: + arr = np.array(image.convert('RGB'), dtype=np.uint8) # HWC + return np.ascontiguousarray(arr.transpose(2, 0, 1))[np.newaxis, ...] # 1CHW + + +def images_to_nchw(images: list) -> np.ndarray: + # last image is reference, skip all images that do not have same dimensions as the last image + if len(images) > 1: + ref_size = images[-1].size + images = [image for image in images if image.size == ref_size] + return np.concatenate([image_to_nchw(image) for image in images], axis=0) + + +def nchw_to_images(arr) -> list: + arr = np.asarray(arr) + return [Image.fromarray(arr[i].transpose(1, 2, 0), 'RGB') for i in range(arr.shape[0])] + + +def _encode_value(value): + if isinstance(value, np.ndarray): + arr = np.ascontiguousarray(value) + return { '__ndarray__': True, 'dtype': str(arr.dtype), 'shape': list(arr.shape), 'data': base64.b64encode(arr.tobytes()).decode('ascii') } + return value + + +def _decode_value(value): + if isinstance(value, dict) and value.get('__ndarray__'): + data = base64.b64decode(value['data']) + return np.frombuffer(data, dtype=value['dtype']).reshape(value['shape']) + if isinstance(value, dict): + return { k: _decode_value(v) for k, v in value.items() } + if isinstance(value, list): + return [_decode_value(v) for v in value] + return value + + +class DLSSController: + """Persistent stdio bridge to the DLSS package's long-lived controller worker (app/controller.py).""" + + def __init__(self): + self.process: subprocess.Popen | None = None + self.pkg_path: str | None = None + self.lock = threading.Lock() + + def get_python(self, pkg_path: str): + python_exe = os.path.join(pkg_path, 'bin', 'python-3.13.15-embed-amd64', 'python.exe') + if not os.path.exists(python_exe): + log.error(f'DLSS: path={pkg_path} python={python_exe} not found') + return None + return python_exe + + def is_alive(self) -> bool: + return self.process is not None and self.process.poll() is None + + def stop(self): + process = self.process + self.process = None + if process is None: + return + try: + if process.poll() is None and process.stdin is not None: + line = json.dumps({ 'request_id': str(uuid.uuid4()), 'command': 'shutdown', 'args': [], 'kwargs': {} }) + '\n' + process.stdin.write(line.encode('utf-8')) + process.stdin.flush() + except Exception: + pass + try: + if process.poll() is None: + process.terminate() + process.wait(timeout=5.0) + except Exception: + pass + + def ensure_installed(self, pkg_path: str) -> bool: + if self.is_alive() and self.pkg_path == pkg_path: + return True + self.stop() + python_exe = self.get_python(pkg_path) + if not python_exe: + return False + # create _sdnext directory if it doesn't exist + sdnext_path = os.path.join(pkg_path, '_sdnext') + if not os.path.exists(sdnext_path): + if debug: + log.trace(f'DLSS install: create folder="{sdnext_path}"') + try: + os.makedirs(sdnext_path, exist_ok=True) + except Exception as e: + log.error(f'DLSS install: failed to create folder: {e}') + display(e, 'DLSS') + return False + files_to_copy = ['__init__.py', 'controller_srv.py', 'utils.py', 'verify.py', 'render.py', 'supersample.py', 'framegen.py'] + for file_name in files_to_copy: + # src path is current path of this file + src = os.path.join(os.path.dirname(__file__), file_name) + dst = os.path.join(sdnext_path, file_name) + # not exist or newer + if not os.path.exists(dst) or os.path.getmtime(src) > os.path.getmtime(dst): + if debug: + log.trace(f'DLSS install: copy src="{src}" "{dst}"') + try: + shutil.copy2(src, dst) + except Exception as e: + log.error(f'DLSS install: failed to copy {file_name}: {e}') + display(e, 'DLSS') + return False + return True + + def ensure_started(self, pkg_path: str) -> bool: + if self.is_alive() and self.pkg_path == pkg_path: + return True + self.stop() + python_exe = self.get_python(pkg_path) + if not python_exe: + return False + env = { + 'GRADIO_ANALYTICS_ENABLED': 'False', + 'PYTHONNOUSERSITE': '1', + 'PYTHONIOENCODING': 'utf-8' + } + if debug: + env['SD_DLSS_DEBUG'] = 'True' + log.trace(f'DLSS controller start: env={env}') + try: + self.process = subprocess.Popen( # pylint: disable=consider-using-with + [python_exe, '-m', '_sdnext.controller_srv'], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + cwd=pkg_path, + env=env, + bufsize=0, + ) + except Exception as e: + log.error(f'DLSS controller start: {e}') + display(e, 'DLSS') + self.process = None + return False + self.pkg_path = pkg_path + response = self._send({ 'request_id': str(uuid.uuid4()), 'command': 'status', 'args': [], 'kwargs': {} }, timeout=30.0) + if response is None or response.get('status') != 'ok': + log.error(f'DLSS controller start: response={response}') + self.stop() + return False + if debug: + log.trace(f'DLSS controller start: result={response.get("result")}') + return True + + def _send(self, request: dict, timeout: float = 60.0): + process = self.process + if process is None or process.stdin is None or process.stdout is None: + return None + try: + process.stdin.write((json.dumps(request) + '\n').encode('utf-8')) + process.stdin.flush() + except Exception as e: + log.error(f'DLSS: failed to send request: {e}') + display(e, 'DLSS') + self.process = None + return None + deadline = time.time() + timeout + while True: + remaining = deadline - time.time() + if remaining <= 0: + log.error(f'DLSS controller: timeout={timeout}') + return None + try: + ready, _, _ = select.select([process.stdout], [], [], remaining) + except Exception: + ready = [process.stdout] # select() is not supported on pipes on some platforms: fall back to a blocking read + if not ready: + log.error(f'DLSS controller: timeout={timeout}') + return None + try: + raw = process.stdout.readline() + except Exception as e: + log.error(f'DLSS controller read: {e}') + display(e, 'DLSS') + self.process = None + return None + if not raw: + stderr = process.stderr.read().decode('utf-8', errors='ignore') if process.stderr else '' + log.error(f'DLSS controller process: stderr="{stderr.strip()}"') + self.process = None + return None + try: + return json.loads(raw.decode('utf-8')) + except Exception: + if debug: + log.trace(f'DLSS controller stray output: {raw!r}') + continue # skip any non-JSON noise emitted before the JSON response line + + def call(self, pkg_path: str, command: str, kwargs: dict, timeout: float = 60.0) -> dict: + with self.lock: + if not self.ensure_installed(pkg_path): + return { 'status': 'error', 'result': None, 'error': { 'code': 'not_installed', 'message': 'controller is not installed' } } + if not self.ensure_started(pkg_path): + return { 'status': 'error', 'result': None, 'error': { 'code': 'not_ready', 'message': 'controller failed to start' } } + encoded_kwargs = { key: _encode_value(value) for key, value in kwargs.items() } + request = { 'request_id': str(uuid.uuid4()), 'command': command, 'args': [], 'kwargs': encoded_kwargs } + if debug: + log.trace(f'DLSS controller request: command={command}') + response = self._send(request, timeout=timeout) + if response is None: + return { 'status': 'error', 'result': None, 'error': { 'code': 'not_ready', 'message': 'controller is not responding' } } + if isinstance(response.get('result'), (dict, list)): + response['result'] = _decode_value(response['result']) + return response + + +controller = DLSSController() diff --git a/scripts/dlss/controller_srv.py b/scripts/dlss/controller_srv.py new file mode 100644 index 000000000..44117c248 --- /dev/null +++ b/scripts/dlss/controller_srv.py @@ -0,0 +1,400 @@ +from __future__ import annotations + +import sys +from pathlib import Path + +_ROOT = Path(__file__).resolve().parents[1] +if str(_ROOT) not in sys.path: + sys.path.insert(0, str(_ROOT)) + +# when launched directly as the stdio bridge subprocess, keep the real stdout clean of stray +# prints from native imports/libraries below so only explicit JSON response lines reach the pipe +_stdio_stdout = None +if __name__ == "__main__": + _stdio_stdout = sys.stdout + sys.stdout = sys.stderr + +import base64 +import ctypes +import dataclasses +import json +import multiprocessing as mp +import os +import threading +import uuid +from queue import Empty +from typing import Any + +import numpy as np + +from .utils import StandaloneError, log +from .framegen import DLSSFrameGen, InterpolationOptions +from .render import DLSSNeuralRenderer, RenderOptions +from .supersample import DLSSSuperSample, UpscaleOptions +from .verify import DLSSVerify, VerifyOptions + +_SUPPORTED_COMMANDS = { + "status", + "verify", + "render", + "upscale", + "framegen", + "cancel", + "reset", + "shutdown", +} + + +def _response(request_id: str, *, status: str, result: Any = None, error: dict[str, str] | None = None, diagnostics: dict[str, Any] | None = None) -> dict[str, Any]: + return { + "request_id": request_id, + "status": status, + "result": result, + "error": error, + "diagnostics": diagnostics or {}, + } + + +def _coerce_options(options: Any, *, default: Any, option_type: type[Any]) -> Any: + if options is None: + return default + if isinstance(options, option_type): + return options + if isinstance(options, dict): + return option_type(**options) + raise TypeError(f"Expected {option_type.__name__} or dict, got {type(options).__name__}") + + +def _set_shared_text(buffer: Any, value: str) -> None: + with buffer.get_lock(): + for index in range(len(buffer)): + buffer[index] = "\0" + for index, character in enumerate(value[: len(buffer) - 1]): + buffer[index] = character + + +def _get_shared_text(buffer: Any) -> str: + with buffer.get_lock(): + return "".join(buffer).split("\0", 1)[0] + + +def _dispatch_command(command: str, request_id: str, args: tuple[Any, ...], kwargs: dict[str, Any], *, busy: Any = None, current_request_id: Any = None, current_command: Any = None) -> dict[str, Any]: # pylint: disable=unused-argument + log.debug(f'DLSSController dispatch: command={command} id={request_id}') + if command == "status": + is_busy = bool(busy.value) if busy is not None else False + active_request_id = _get_shared_text(current_request_id) if current_request_id is not None else "" + active_command = _get_shared_text(current_command) if current_command is not None else "" + return _response( + request_id, + status="ok", + result={ + "ready": True, + "busy": is_busy, + "pid": os.getpid(), + "id": active_request_id if is_busy else "", + "job": active_command if is_busy else "idle", + }, + diagnostics={"controller": "ready"}, + ) + + if command == "reset": + return _response(request_id, status="ok", result={"reset": True}, diagnostics={"controller": "reset"}) + + if command == "cancel": + target_id = str(kwargs.get("request_id") or "") + return _response(request_id, status="ok", result={"cancelled": bool(target_id), "target_request_id": target_id}, diagnostics={"controller": "cancelled"}) + + if command == "verify": + gpu_uuid = str(kwargs.get("gpu_uuid", "auto")) + options = _coerce_options(kwargs.get("options"), default=VerifyOptions(), option_type=VerifyOptions) + result = DLSSVerify()(gpu_uuid, options) + return _response(request_id, status="ok", result={"ok": result.ok, "report": result.to_dict()}, diagnostics={"gpu": result.gpu or {}}) + + if command == "render": + images = kwargs.get("images") + if images is None: + raise StandaloneError("invalid_arguments", "Missing required 'images' argument for render command.") + options = _coerce_options(kwargs.get("options"), default=RenderOptions(), option_type=RenderOptions) + result = DLSSNeuralRenderer()(np.asarray(images), options) + return _response(request_id, status="ok", result=result, diagnostics={"shape": list(result.shape)}) + + if command == "upscale": + images = kwargs.get("images") + if images is None: + raise StandaloneError("invalid_arguments", "Missing required 'images' argument for upscale command.") + options = _coerce_options(kwargs.get("options"), default=UpscaleOptions(), option_type=UpscaleOptions) + result = DLSSSuperSample()(np.asarray(images), options) + return _response(request_id, status="ok", result=result, diagnostics={"shape": list(result.shape)}) + + if command == "framegen": + frames = kwargs.get("frames") + if frames is None: + raise StandaloneError("invalid_arguments", "Missing required 'frames' argument for framegen command.") + source_fps = kwargs.get("source_fps") + target_fps = kwargs.get("target_fps") + if source_fps is None or target_fps is None: + raise StandaloneError("invalid_arguments", "framegen requires both 'source_fps' and 'target_fps'.") + options = _coerce_options(kwargs.get("options"), default=InterpolationOptions(), option_type=InterpolationOptions) + result = DLSSFrameGen()(np.asarray(frames), source_fps, target_fps, options) + return _response(request_id, status="ok", result=result, diagnostics={"shape": list(result.shape)}) + + raise StandaloneError("invalid_arguments", f"Unsupported controller command: {command!r}") + + +def _controller_worker(request_queue: mp.Queue, response_queue: mp.Queue, busy: Any, current_request_id: Any, current_command: Any) -> None: + worker_lock = threading.Lock() + while True: + try: + request = request_queue.get(timeout=0.25) + except Empty: + continue + + if not isinstance(request, dict): + response_queue.put(_response(str(uuid.uuid4()), status="error", error={"code": "invalid_arguments", "message": "Controller request must be a dict."})) + continue + + request_id = str(request.get("request_id") or uuid.uuid4()) + command = str(request.get("command") or "").strip().lower() + args = tuple(request.get("args", ())) + kwargs = dict(request.get("kwargs", {})) + + if command == "shutdown": + log.debug(f'DLSSController shutdown: id={request_id}') + response_queue.put(_response(request_id, status="ok", result={"shutdown": True}, diagnostics={"controller": "shutdown"})) + return + + if command not in _SUPPORTED_COMMANDS: + log.warning(f'DLSSController: command={command} id={request_id} unsupported') + response_queue.put(_response(request_id, status="error", error={"code": "invalid_arguments", "message": f"Unsupported command: {command!r}"}, diagnostics={"controller": "invalid_command"})) + continue + + try: + if command != "status": + busy.value = True + _set_shared_text(current_request_id, request_id) + _set_shared_text(current_command, command) + with worker_lock: + response = _dispatch_command(command, request_id, args, kwargs, busy=busy, current_request_id=current_request_id, current_command=current_command) + response_queue.put(response) + except StandaloneError as exc: + log.error(f'DLSSController: StandaloneError command={command} id={request_id} code={exc.code} message={exc.message}') + response_queue.put(_response(request_id, status="error", error={"code": exc.code, "message": exc.message}, diagnostics={"controller": "error"})) + except Exception as exc: # pragma: no cover - defensive catch for controller safety + log.error(f'DLSSController: unexpected exception command={command} id={request_id} error={exc}') + response_queue.put(_response(request_id, status="error", error={"code": "processing_failed", "message": str(exc)}, diagnostics={"controller": "error"})) + finally: + if command != "status": + busy.value = False + _set_shared_text(current_request_id, "") + _set_shared_text(current_command, "") + + +class ControllerProcess(mp.Process): + def __init__(self, request_queue: mp.Queue | None = None, response_queue: mp.Queue | None = None, *, busy: Any = None, current_request_id: Any = None, current_command: Any = None, ctx: mp.context.BaseContext | None = None) -> None: + self.ctx = ctx or mp.get_context("spawn") + self.request_queue = request_queue or self.ctx.Queue() + self.response_queue = response_queue or self.ctx.Queue() + self.busy = busy or self.ctx.Value("b", False) + self.current_request_id = current_request_id or self.ctx.Array(ctypes.c_wchar, 256) + self.current_command = current_command or self.ctx.Array(ctypes.c_wchar, 64) + super().__init__(target=_controller_worker, args=(self.request_queue, self.response_queue, self.busy, self.current_request_id, self.current_command)) + + +class ControllerClient: + """Simple client wrapper for callers that want a long-lived controller process.""" + + def __init__(self, request_queue: mp.Queue | None = None, response_queue: mp.Queue | None = None, *, process: ControllerProcess | None = None, timeout: float = 30.0, ctx: mp.context.BaseContext | None = None) -> None: + self.ctx = ctx or mp.get_context("spawn") + self.request_queue = request_queue or self.ctx.Queue() + self.response_queue = response_queue or self.ctx.Queue() + self.timeout = timeout + self.process = process + self.busy = process.busy if process is not None else self.ctx.Value("b", False) + self.current_request_id = process.current_request_id if process is not None else self.ctx.Array(ctypes.c_wchar, 256) + self.current_command = process.current_command if process is not None else self.ctx.Array(ctypes.c_wchar, 64) + self._pending: dict[str, dict[str, Any]] = {} + + def start(self) -> "ControllerClient": + if self.process is None or not self.process.is_alive(): + self.process = ControllerProcess(self.request_queue, self.response_queue, busy=self.busy, current_request_id=self.current_request_id, current_command=self.current_command, ctx=self.ctx) + self.process.start() + log.info(f'DLSSController: pid={self.process.pid} started') + return self + + def _send_and_wait(self, command: str, *args: Any, **kwargs: Any) -> dict[str, Any]: + if self.process is None or not self.process.is_alive(): + self.start() + request_id = str(uuid.uuid4()) + request = {"request_id": request_id, "command": command, "args": list(args), "kwargs": kwargs} + self.request_queue.put(request) + + while True: + try: + response = self.response_queue.get(timeout=self.timeout) + except Empty as exc: + raise TimeoutError(f"Controller request timed out for command {command!r}.") from exc + if response.get("request_id") == request_id: + return response + self._pending[response.get("request_id", str(uuid.uuid4()))] = response + + def status(self) -> dict[str, Any]: + if self.process is None or not self.process.is_alive(): + self.start() + is_busy = bool(self.busy.value) + active_request_id = _get_shared_text(self.current_request_id) + active_command = _get_shared_text(self.current_command) + return _response( + str(uuid.uuid4()), + status="ok", + result={ + "ready": self.process.is_alive(), + "busy": is_busy, + "pid": self.process.pid, + "id": active_request_id if is_busy else "", + "job": active_command if is_busy else "idle", + }, + diagnostics={"controller": "busy" if is_busy else "ready"}, + ) + + def verify(self, *, gpu_uuid: str = "auto", options: VerifyOptions | dict[str, Any] | None = None) -> dict[str, Any]: + return self._send_and_wait("verify", gpu_uuid=gpu_uuid, options=options) + + def render(self, *, images: np.ndarray, options: RenderOptions | dict[str, Any] | None = None) -> dict[str, Any]: + return self._send_and_wait("render", images=images, options=options) + + def upscale(self, *, images: np.ndarray, options: UpscaleOptions | dict[str, Any] | None = None) -> dict[str, Any]: + return self._send_and_wait("upscale", images=images, options=options) + + def framegen(self, *, frames: np.ndarray, source_fps: float | str, target_fps: float | str, options: InterpolationOptions | dict[str, Any] | None = None) -> dict[str, Any]: + return self._send_and_wait("framegen", frames=frames, source_fps=source_fps, target_fps=target_fps, options=options) + + def cancel(self, request_id: str) -> dict[str, Any]: + return self._send_and_wait("cancel", request_id=request_id) + + def reset(self) -> dict[str, Any]: + return self._send_and_wait("reset") + + def shutdown(self) -> dict[str, Any]: + if self.process is None or not self.process.is_alive(): + return {"request_id": "shutdown", "status": "ok", "result": {"shutdown": True}, "error": None, "diagnostics": {}} + response = self._send_and_wait("shutdown") + if self.process.is_alive(): + self.process.join(timeout=5.0) + return response + + def close(self) -> None: + try: + self.shutdown() + except Exception: + pass + if self.process is not None and self.process.is_alive(): + self.process.terminate() + self.process.join(timeout=5.0) + + def __enter__(self) -> "ControllerClient": + return self.start() + + def __exit__(self, exc_type: Any, exc: Any, tb: Any) -> None: + self.close() + + +def start_controller(*, request_queue: mp.Queue | None = None, response_queue: mp.Queue | None = None, timeout: float = 30.0, ctx: mp.context.BaseContext | None = None) -> ControllerClient: + client = ControllerClient(request_queue=request_queue, response_queue=response_queue, timeout=timeout, ctx=ctx) + return client.start() + + +# ---- stdio bridge ----------------------------------------------------------------- +# Used only when this module is launched directly as a subprocess, e.g. +# `python.exe app/controller.py`, to drive the same dispatch logic over a single +# stdin/stdout JSON-lines protocol instead of multiprocessing queues. This allows an +# external caller running a different Python interpreter (for example WSL/Linux Python +# invoking the packaged Windows embedded python.exe) to reuse one long-lived worker. + + +def _stdio_encode(value: Any) -> Any: + if isinstance(value, np.ndarray): + arr = np.ascontiguousarray(value) + return {"__ndarray__": True, "dtype": str(arr.dtype), "shape": list(arr.shape), "data": base64.b64encode(arr.tobytes()).decode("ascii")} + if hasattr(value, "to_dict") and callable(value.to_dict): + return _stdio_encode(value.to_dict()) + if dataclasses.is_dataclass(value) and not isinstance(value, type): + return {k: _stdio_encode(v) for k, v in dataclasses.asdict(value).items()} + if isinstance(value, dict): + return {k: _stdio_encode(v) for k, v in value.items()} + if isinstance(value, (list, tuple)): + return [_stdio_encode(v) for v in value] + return value + + +def _stdio_decode(value: Any) -> Any: + if isinstance(value, dict) and value.get("__ndarray__"): + data = base64.b64decode(value["data"]) + return np.frombuffer(data, dtype=value["dtype"]).reshape(value["shape"]) + if isinstance(value, dict): + return {k: _stdio_decode(v) for k, v in value.items()} + if isinstance(value, list): + return [_stdio_decode(v) for v in value] + return value + + +def _stdio_write(payload: dict[str, Any]) -> None: + _stdio_stdout.write(json.dumps(payload) + "\n") + _stdio_stdout.flush() + + +def _stdio_error(request_id: str, code: str, message: str) -> dict[str, Any]: + return {"request_id": request_id, "status": "error", "result": None, "error": {"code": code, "message": message}, "diagnostics": {}} + + +def _stdio_main() -> None: + # long-lived worker: one JSON request per line on stdin, one JSON response per line on the real stdout + for raw_line in sys.stdin: + line = raw_line.strip() + if not line: + continue + try: + request = json.loads(line) + except json.JSONDecodeError as exc: + _stdio_write(_stdio_error("", "invalid_arguments", f"Malformed request: {exc}")) + continue + + request_id = str(request.get("request_id") or "") + command = str(request.get("command") or "").strip().lower() + args = tuple(request.get("args", ())) + try: + kwargs = _stdio_decode(dict(request.get("kwargs", {}))) + except Exception as exc: + _stdio_write(_stdio_error(request_id, "invalid_arguments", f"Failed to decode request payload: {exc}")) + continue + + if command == "shutdown": + _stdio_write({"request_id": request_id, "status": "ok", "result": {"shutdown": True}, "error": None, "diagnostics": {}}) + return + if command not in _SUPPORTED_COMMANDS: + _stdio_write(_stdio_error(request_id, "invalid_arguments", f"Unsupported command: {command!r}")) + continue + + try: + response = _dispatch_command(command, request_id, args, kwargs) + except StandaloneError as exc: + response = _stdio_error(request_id, exc.code, exc.message) + except Exception as exc: # pragma: no cover - defensive catch for controller safety + response = _stdio_error(request_id, "processing_failed", str(exc)) + _stdio_write(_stdio_encode(response)) + + +if __name__ == "__main__": + _stdio_main() + + def __enter__(self) -> "ControllerClient": + return self.start() + + def __exit__(self, exc_type: Any, exc: Any, tb: Any) -> None: # pylint: disable=unused-argument + self.close() + + +__all__ = [ + "ControllerClient", + "ControllerProcess", + "start_controller", +] diff --git a/scripts/dlss/framegen.py b/scripts/dlss/framegen.py new file mode 100644 index 000000000..4dda189b0 --- /dev/null +++ b/scripts/dlss/framegen.py @@ -0,0 +1,209 @@ +from __future__ import annotations + +from dataclasses import dataclass +from fractions import Fraction +from typing import Any + +import numpy as np + +from src.core.jobs import JobController, active_job +from src.frame_interpolation.capabilities import probe_frame_interpolation_capabilities +from src.frame_interpolation.guides import DLSSGGuideGenerator +from src.frame_interpolation.models import ENGINE_CHOICES, resolve_target_rate +from src.frame_interpolation.native import DirectDLSSGSession +from src.frame_interpolation.scheduler import choose_interpolation_plan, output_frame_count + +from .utils import StandaloneError, nchw_image_to_hwc, rgba_to_rgb_nchw, validate_nchw, rgb_to_rgba, log + + +@dataclass(frozen=True, slots=True) +class InterpolationOptions: + ai_gpu_uuid: str = "auto" + engine: str = "Auto" + + def validate(self) -> None: + if self.engine not in ENGINE_CHOICES: + raise ValueError(f"Unknown frame interpolation engine: {self.engine!r}.") + + +@dataclass(frozen=True, slots=True) +class _TimedFrame: + rgba: np.ndarray + timestamp: Fraction + + +class _Stage: + def __init__(self, session: DirectDLSSGSession, width: int, height: int) -> None: + self.session = session + self.guides = DLSSGGuideGenerator(width, height) + self.previous: _TimedFrame | None = None + + def push(self, frame: _TimedFrame) -> list[_TimedFrame]: + previous = self.previous + guide = self.guides.process(frame.rgba, force_reset=previous is not None and frame.timestamp <= previous.timestamp) + self.previous = frame + generated = self.session.process_frame( + frame.rgba, + guide.motion, + frame.timestamp, + reset=previous is None or guide.reset, + ) + result: list[_TimedFrame] = [] + if previous is not None and not guide.reset: + interval = frame.timestamp - previous.timestamp + count = len(generated) + for index, rgba in enumerate(generated, start=1): + result.append(_TimedFrame( + rgba, + previous.timestamp + interval * Fraction(index, count + 1), + )) + result.append(frame) + return result + + +class DLSSFrameGen: + """In-memory RGB NCHW constant-frame-rate DLSS frame interpolation.""" + + def __init__(self) -> None: + log.info('DLSSFrameGen: init') + self.diagnostics: dict[str, Any] = {} + self.last_report: dict[str, Any] = {} + + def __call__( + self, + frames: np.ndarray, + source_fps: str | int | float | Fraction, + target_fps: str | int | float | Fraction, + options: InterpolationOptions | None = None, + *, + controller: JobController | None = None, + ) -> np.ndarray: + log.info('DLSSFrameGen: call') + options = options or InterpolationOptions() + options.validate() + batch, _, height, width = validate_nchw(frames, name="frames") + if width < 64 or height < 64: + raise StandaloneError("invalid_dimensions", "Frame interpolation requires frames at least 64x64 pixels.") + source_rate = resolve_target_rate(source_fps) + target_rate = resolve_target_rate(target_fps) + own_controller = controller or JobController() + log.debug(f'DLSSFrameGen: controller={own_controller}') + try: + with active_job(own_controller) as active_controller: + capabilities = probe_frame_interpolation_capabilities(options.ai_gpu_uuid) + log.debug(f'DLSSFrameGen: capabilities={capabilities}') + if not capabilities.available: + raise StandaloneError( + "feature_unavailable", + "DLSS Frame Generation is unavailable. " + capabilities.detail, + ) + plan = choose_interpolation_plan( + source_rate, + target_rate, + options.engine, + capabilities.native_multiplier, + cfr=True, + ) + source_frames = [ + _TimedFrame(rgb_to_rgba(nchw_image_to_hwc(frames, index, name="frames")), Fraction(index, 1) / source_rate) + for index in range(batch) + ] + if plan.generated_per_interval == 0: + result = self._resample_source(source_frames, target_rate, source_rate) + else: + result = self._generate(source_frames, plan, active_controller, width, height) + expected = output_frame_count(Fraction(batch, 1) / source_rate, target_rate) + if len(result) != expected: + log.error(f'DLSSFrameGen: result length={len(result)} expected={expected}') + raise StandaloneError( + "invalid_native_output", + f"Interpolation produced {len(result)} frames; expected {expected}.", + ) + output = np.stack([rgba_to_rgb_nchw(item.rgba)[0] for item in result], axis=0) + log.debug(f'DLSSFrameGen: output={output.shape}') + self.diagnostics = { + "gpu": capabilities.gpu, + "driver": capabilities.driver, + "runtime_version": capabilities.runtime_version, + "worker_version": capabilities.worker_version, + "selected_path": plan.path, + "native_multiplier": plan.native_multiplier, + "cascade_stages": plan.cascade_stages, + } + except StandaloneError: + raise + except Exception as exc: + log.error(f'DLSSFrameGen: unexpected exception {exc}') + raise StandaloneError("processing_failed", f"DLSS frame interpolation failed: {exc}") from exc + self.last_report = { + "input_shape": tuple(frames.shape), + "output_shape": tuple(output.shape), + "source_fps": str(source_rate), + "target_fps": str(target_rate), + } + return np.ascontiguousarray(output) + + @staticmethod + def _resample_source(frames: list[_TimedFrame], target_rate: Fraction, source_rate: Fraction) -> list[_TimedFrame]: + count = output_frame_count(Fraction(len(frames), 1) / source_rate, target_rate) + result: list[_TimedFrame] = [] + for index in range(count): + ideal = Fraction(index, 1) / target_rate + selected = min(frames, key=lambda frame, target=ideal: abs(frame.timestamp - target)) + result.append(_TimedFrame(selected.rgba.copy(), ideal)) + return result + + @staticmethod + def _generate(source_frames, plan, controller, width, height) -> list[_TimedFrame]: + sessions: list[DirectDLSSGSession] = [] + stages: list[_Stage] = [] + try: + stage_count = plan.cascade_stages or 1 + for stage_index in range(stage_count): + generated_count = ( + plan.generated_per_interval + if plan.path == "Native DLSSG" + else 1 + ) + expected_frames = ( + len(source_frames) + if stage_index == 0 + else max(1, (len(source_frames) - 1) * (1 << stage_index) + 1) + ) + session = DirectDLSSGSession( + width, + height, + expected_frames, + generated_count, + controller, + ) + sessions.append(session) + stages.append(_Stage(session, width, height)) + candidates: list[_TimedFrame] = [] + for source in source_frames: + if controller.cancel.is_set(): + raise StandaloneError("cancelled", "Frame interpolation was cancelled.") + items = [source] + for stage in stages: + next_items: list[_TimedFrame] = [] + for item in items: + next_items.extend(stage.push(item)) + items = next_items + candidates.extend(items) + duration = Fraction(len(source_frames), 1) / plan.source_rate + count = output_frame_count(duration, plan.target_rate) + result: list[_TimedFrame] = [] + for index in range(count): + ideal = Fraction(index, 1) / plan.target_rate + selected = min(candidates, key=lambda frame, target=ideal: abs(frame.timestamp - target)) + result.append(_TimedFrame(selected.rgba.copy(), ideal)) + return result + finally: + for session in reversed(sessions): + try: + session.close() + except (OSError, RuntimeError, ValueError): + session.abort() + + +__all__ = ["DLSSFrameGen", "InterpolationOptions"] diff --git a/scripts/dlss/render.py b/scripts/dlss/render.py new file mode 100644 index 000000000..4e34b6e65 --- /dev/null +++ b/scripts/dlss/render.py @@ -0,0 +1,162 @@ +from __future__ import annotations + +from dataclasses import dataclass +from typing import Any + +import numpy as np + +from src.core.jobs import JobController, active_job +from src.core.runtime import ( + DLSSFrameSession, + prepare_runtime, + resolve_native_settings, + resolve_output_size, + resolve_runtime_ai_gpu, + resolve_upscaling_mode, + resize_fit, +) +from src.neural_rendering.image.models import ImageConversionOptions + +from .utils import StandaloneError, nchw_image_to_hwc, rgba_to_rgb_nchw, validate_nchw, rgb_to_rgba, log + + +@dataclass(frozen=True, slots=True) +class RenderOptions: + ai_gpu_uuid: str = "auto" + nr_style: str = "Default" + nr_intensity: float = 1.0 + local_tone_strength: float = 1.0 + local_structure_strength: float = 1.0 + skin_structure_strength: float = -1.0 + upscaling_factor: float = 1.0 + warmup_frames: int = 0 + nr_preset: str = "Default" + automatic_mask: bool = False + dlss_model_preset: str = "Default" + + def source_options(self) -> ImageConversionOptions: + return ImageConversionOptions( + ai_gpu_uuid=self.ai_gpu_uuid, + nr_style=self.nr_style, + nr_intensity=self.nr_intensity, + local_tone_strength=self.local_tone_strength, + local_structure_strength=self.local_structure_strength, + skin_structure_strength=self.skin_structure_strength, + upscaling_factor=self.upscaling_factor, + warmup_frames=self.warmup_frames, + nr_preset=self.nr_preset, + automatic_mask=self.automatic_mask, + dlss_model_preset=self.dlss_model_preset, + ) + + def validate(self) -> None: + if isinstance(self.warmup_frames, bool) or not isinstance(self.warmup_frames, int) or self.warmup_frames < 0: + raise ValueError("warmup_frames must be a non-negative integer.") + if not isinstance(self.automatic_mask, bool): + raise ValueError("automatic_mask must be a boolean.") + options = self.source_options() + resolve_upscaling_mode(options.upscaling_factor) + resolve_native_settings(options) + + +class DLSSNeuralRenderer: + """RGB NCHW adapter for still-image DLSS Neural Rendering.""" + + def __init__(self) -> None: + log.info('DLSSNeuralRenderer: init') + self.diagnostics: dict[str, Any] = {} + self.last_report: dict[str, Any] = {} + + def __call__( + self, + images: np.ndarray, + options: RenderOptions | None = None, + *, + controller: JobController | None = None, + ) -> np.ndarray: + log.info('DLSSNeuralRenderer: call') + options = options or RenderOptions() + options.validate() + batch, _, height, width = validate_nchw(images, name="images") + if width < 64 or height < 64: + raise StandaloneError("invalid_dimensions", "DLSS Neural Rendering requires images at least 64x64 pixels.") + output_width, output_height = resolve_output_size(width, height, options.upscaling_factor) + own_controller = controller or JobController() + log.debug(f'DLSSNeuralRenderer: controller={own_controller}') + outputs: list[np.ndarray] = [] + try: + with active_job(own_controller) as active_controller: + prepared = prepare_runtime() + log.debug(f'DLSSNeuralRenderer: runtime={prepared}') + gpu = resolve_runtime_ai_gpu(prepared.gpus, prepared.runtime_bundle, options.ai_gpu_uuid) + log.debug(f'DLSSNeuralRenderer: gpu={gpu}') + factor, mode = resolve_upscaling_mode(options.upscaling_factor) + native_settings = resolve_native_settings(options.source_options()) + session_diagnostics: list[dict[str, Any]] = [] + for index in range(batch): + if active_controller.cancel.is_set(): + raise StandaloneError("cancelled", "Neural rendering was cancelled.") + try: + session = DLSSFrameSession( + input_width=width, + input_height=height, + output_width=output_width, + output_height=output_height, + frame_count=1, + warmup_frames=options.warmup_frames, + factor=factor, + mode=mode, + native_settings=native_settings, + gpu=gpu, + runtime_bundle=prepared.runtime_bundle, + controller=active_controller, + ) + log.debug(f'DLSSNeuralRenderer: session={session}') + rgb = nchw_image_to_hwc(images, index, name="images") + rgba = rgb_to_rgba(rgb) + render_input = resize_fit(rgba, session.render_width, session.render_height) + motion = np.zeros((session.render_height, session.render_width, 2), dtype=np.float16) + processed, _ = session.process( + index=0, + rgba=render_input, + motion=motion, + reset=True, + pts=0, + ) + log.debug(f'DLSSNeuralRenderer: processed={processed.shape}') + outputs.append(rgba_to_rgb_nchw(processed)[0]) + session_diagnostics.append({ + "render_width": session.render_width, + "render_height": session.render_height, + "applied_dlss_model_preset": session.applied_dlss_model_preset, + "worker_logs": session.worker_logs, + "completed_frames": session.completed_frames, + }) + for l in session.worker_logs or []: + log.debug(f'DLSSNeuralRenderer worker: {l}') + session.close() + except Exception as e: + log.error(f'DLSSNeuralRenderer: exception {e}') + if session is not None and not session.closed: + session.abort() + raise + self.diagnostics = { + "gpu": dict(gpu), + "runtime_bundle": prepared.runtime_bundle, + "sessions": session_diagnostics, + } + except StandaloneError: + raise + except Exception as exc: + log.error(f'DLSSNeuralRenderer: unexpected exception {exc}') + raise StandaloneError("processing_failed", f"DLSS Neural Rendering failed: {exc}") from exc + result = np.ascontiguousarray(np.stack(outputs, axis=0)) + self.last_report = { + "input_shape": tuple(images.shape), + "output_shape": tuple(result.shape), + "completed_images": batch, + } + return result + + +__all__ = ["DLSSNeuralRenderer", "RenderOptions"] diff --git a/scripts/dlss/supersample.py b/scripts/dlss/supersample.py new file mode 100644 index 000000000..cf874ed29 --- /dev/null +++ b/scripts/dlss/supersample.py @@ -0,0 +1,117 @@ +from __future__ import annotations + +from dataclasses import dataclass +from typing import Any + +import numpy as np + +from src.core.jobs import JobController, active_job +from src.upscale.image.models import ImageUpscaleOptions, output_size as source_output_size +from src.upscale.video.models import UpscaleOptions as NativeUpscaleOptions +from src.upscale.video.native import RTXVideoSession, probe_capabilities + +from .utils import StandaloneError, nchw_image_to_hwc, hwc_to_nchw, validate_nchw, srgb_to_worker, worker_to_srgb_rgb, log + + +@dataclass(frozen=True, slots=True) +class UpscaleOptions: + vsr_quality: int = 4 + size_mode: str = "Scale factor" + scale_factor: float = 2.0 + width: int = 3840 + height: int = 2160 + aspect_lock: bool = True + ai_gpu_uuid: str = "auto" + + def source_options(self) -> ImageUpscaleOptions: + return ImageUpscaleOptions( + vsr_quality=self.vsr_quality, + size_mode=self.size_mode, + scale_factor=self.scale_factor, + width=self.width, + height=self.height, + aspect_lock=self.aspect_lock, + ai_gpu_uuid=self.ai_gpu_uuid, + ) + + def validate(self) -> None: + source = self.source_options() + source.validate() + + +class DLSSSuperSample: + """RGB NCHW adapter for the native RTX Video Super Resolution worker.""" + + def __init__(self) -> None: + log.info('DLSSSuperSample: init') + self.diagnostics: dict[str, Any] = {} + self.last_report: dict[str, Any] = {} + + def __call__( + self, + images: np.ndarray, + options: UpscaleOptions | None = None, + *, + controller: JobController | None = None, + ) -> np.ndarray: + log.info('DLSSSuperSample: call') + options = options or UpscaleOptions() + options.validate() + batch, _, height, width = validate_nchw(images, name="images") + source = options.source_options() + output_width, output_height = source_output_size(width, height, source) + own_controller = controller or JobController() + log.debug(f'DLSSSuperSample: controller={own_controller}') + outputs: list[np.ndarray] = [] + try: + with active_job(own_controller) as active_controller: + capabilities = probe_capabilities(options.ai_gpu_uuid, controller=active_controller) + log.debug(f'DLSSSuperSample: capabilities={capabilities}') + native_options = NativeUpscaleOptions( + vsr_enabled=True, + vsr_quality=int(options.vsr_quality), + ai_gpu_uuid=options.ai_gpu_uuid, + ) + native_options.validate(for_render=False) + with RTXVideoSession( + width, + height, + output_width, + output_height, + native_options, + 1, + capabilities, + active_controller, + ) as session: + log.debug(f'DLSSSuperSample: session={session}') + for index in range(batch): + if active_controller.cancel.is_set(): + raise StandaloneError("cancelled", "Upscale was cancelled.") + frame = nchw_image_to_hwc(images, index, name="images") + worker_input = srgb_to_worker(frame) + worker_output = session.process_frame(worker_input) + rgb = worker_to_srgb_rgb(worker_output, output_width, output_height) + log.debug(f'DLSSSuperSample: processed={rgb.shape}') + outputs.append(hwc_to_nchw(rgb, name="upscaled RGB output")[0]) + self.diagnostics = { + "gpu": dict(capabilities.gpu), + "sdk_version": capabilities.sdk_version, + "worker_version": capabilities.worker_version, + "completed_frames": session.completed_frames, + "last_results": session.last_results, + } + except StandaloneError: + raise + except Exception as exc: + log.error(f'DLSSSuperSample: unexpected exception {exc}') + raise StandaloneError("processing_failed", f"RTX Video upscaling failed: {exc}") from exc + result = np.ascontiguousarray(np.stack(outputs, axis=0)) + self.last_report = { + "input_shape": tuple(images.shape), + "output_shape": tuple(result.shape), + "completed_images": batch, + } + return result + + +__all__ = ["DLSSSuperSample", "UpscaleOptions"] diff --git a/scripts/dlss/utils.py b/scripts/dlss/utils.py new file mode 100644 index 000000000..19c749048 --- /dev/null +++ b/scripts/dlss/utils.py @@ -0,0 +1,118 @@ +from __future__ import annotations +import logging +import numpy as np + + +MAX_DIMENSION = 16_384 + +logging.getLogger().handlers.clear() +logging.basicConfig( + level=logging.DEBUG, + filename='dlss.log', + encoding='utf-8', + filemode='a', + format='%(asctime)s %(levelname)s %(message)s', + # datefmt='%Y-%m-%d %H:%M:%S-%f', + force=True, +) +log = logging.getLogger(__name__) +log.debug('DLSSInit') + + +class StandaloneError(RuntimeError): + """Base error with a stable machine-readable code.""" + + def __init__(self, code: str, message: str) -> None: + super().__init__(message) + self.code = code + self.message = message + + +class InvalidArrayError(StandaloneError): + def __init__(self, message: str) -> None: + super().__init__("invalid_array", message) + + +class VerificationError(StandaloneError): + def __init__(self, message: str) -> None: + super().__init__("verification_failed", message) + + +class ProcessingError(StandaloneError): + def __init__(self, message: str, *, code: str = "processing_failed") -> None: + super().__init__(code, message) + + +def validate_nchw(array: np.ndarray, *, name: str = "array") -> tuple[int, int, int, int]: + if not isinstance(array, np.ndarray): + raise InvalidArrayError(f"{name} must be a NumPy array.") + if array.ndim != 4: + raise InvalidArrayError(f"{name} must have shape (N, 3, H, W); got {array.shape}.") + batch, channels, height, width = array.shape + if batch < 1: + raise InvalidArrayError(f"{name} must contain at least one image.") + if channels != 3: + raise InvalidArrayError(f"{name} must contain RGB data with C=3; got C={channels}.") + if not 1 <= height <= MAX_DIMENSION or not 1 <= width <= MAX_DIMENSION: + raise InvalidArrayError( + f"{name} dimensions must be between 1 and {MAX_DIMENSION}; got {width}x{height}." + ) + if array.dtype != np.uint8: + raise InvalidArrayError(f"{name} must use dtype uint8; got {array.dtype}.") + return batch, channels, height, width + + +def copy_nchw(array: np.ndarray, *, name: str = "array") -> np.ndarray: + validate_nchw(array, name=name) + return np.ascontiguousarray(array.copy()) + + +def nchw_image_to_hwc(array: np.ndarray, index: int = 0, *, name: str = "array") -> np.ndarray: + batch, _, _, _ = validate_nchw(array, name=name) + if not 0 <= index < batch: + raise InvalidArrayError(f"{name} image index {index} is outside batch size {batch}.") + return np.ascontiguousarray(array[index].transpose(1, 2, 0)) + + +def hwc_to_nchw(array: np.ndarray, *, name: str = "image") -> np.ndarray: + if not isinstance(array, np.ndarray) or array.ndim != 3 or array.shape[2] != 3: + raise InvalidArrayError(f"{name} must have HWC RGB shape (H, W, 3); got {getattr(array, 'shape', None)}.") + if array.dtype != np.uint8: + raise InvalidArrayError(f"{name} must use dtype uint8; got {array.dtype}.") + return np.ascontiguousarray(array.transpose(2, 0, 1)[None, ...]) + + +def rgb_to_rgba(array: np.ndarray) -> np.ndarray: + """Add opaque alpha only at the private native-worker boundary.""" + if array.ndim != 3 or array.shape[2] != 3 or array.dtype != np.uint8: + raise InvalidArrayError("Native RGB input must have HWC uint8 shape with three channels.") + result = np.empty((*array.shape[:2], 4), dtype=np.uint8) + result[..., :3] = array + result[..., 3] = 255 + return np.ascontiguousarray(result) + + +def rgba_to_rgb_nchw(array: np.ndarray) -> np.ndarray: + if array.ndim != 3 or array.shape[2] != 4 or array.dtype != np.uint8: + raise InvalidArrayError("Native RGBA output must have HWC uint8 shape with four channels.") + return hwc_to_nchw(np.ascontiguousarray(array[..., :3]), name="native RGB output") + + +def srgb_to_worker(rgb: np.ndarray) -> np.ndarray: + """Convert HWC sRGB RGB data to the RTX Video worker's gamma-2.2 RGBA data.""" + if rgb.ndim != 3 or rgb.shape[2] != 3 or rgb.dtype != np.uint8: + raise InvalidArrayError("RGB input must have HWC uint8 shape with three channels.") + rgba = rgb_to_rgba(rgb) + values = rgba[..., :3].astype(np.float32) / 255.0 + linear = np.where(values <= 0.04045, values / 12.92, ((values + 0.055) / 1.055) ** 2.4) + rgba[..., :3] = np.rint(np.clip(linear, 0.0, 1.0) ** (1.0 / 2.2) * 255.0).astype(np.uint8) # pylint: disable=unsupported-assignment-operation + return np.ascontiguousarray(rgba) + + +def worker_to_srgb_rgb(data: bytes | bytearray | memoryview, width: int, height: int) -> np.ndarray: + """Convert packed worker RGBA output to an HWC sRGB RGB array.""" + rgba = np.frombuffer(data, dtype=np.uint8).reshape(height, width, 4).copy() + values = (rgba[..., :3].astype(np.float32) / 255.0) ** 2.2 + rgb = np.where(values <= 0.0031308, values * 12.92, 1.055 * values ** (1.0 / 2.4) - 0.055) + rgba[..., :3] = np.rint(np.clip(rgb, 0.0, 1.0) * 255.0).astype(np.uint8) + return np.ascontiguousarray(rgba[..., :3]) diff --git a/scripts/dlss/verify.py b/scripts/dlss/verify.py new file mode 100644 index 000000000..22ee46b12 --- /dev/null +++ b/scripts/dlss/verify.py @@ -0,0 +1,201 @@ +from __future__ import annotations + +import importlib.util +import platform +import sys +from dataclasses import dataclass, field +from typing import Any + +from src.core.gpu_selection import resolve_ai_gpu +from src.core.gpu_detection import detect_gpus +from src.core.paths import ADDON, DLSS_SUPERRES, FFMPEG, FFPROBE, HOST_DXGI, NEURAL_RUNTIME, WORKER +from src.core.runtime import validate_runtime_files + +from .utils import log + + +@dataclass(frozen=True, slots=True) +class VerifyOptions: + level: str = "basic" + check_neural: bool = True + check_upscale: bool = True + check_interpolation: bool = True + + def validate(self) -> None: + if self.level not in {"basic", "deep"}: + raise ValueError("Verification level must be 'basic' or 'deep'.") + for name in ("check_neural", "check_upscale", "check_interpolation"): + if not isinstance(getattr(self, name), bool): + raise ValueError(f"{name} must be a boolean.") + + +@dataclass(frozen=True, slots=True) +class VerificationCheck: + name: str + passed: bool + detail: str = "" + + def to_dict(self) -> dict[str, Any]: + log.debug(f'DLSSVerify: check="{self.name}" passed={self.passed} detail="{self.detail}"') + result = {"name": self.name, "passed": self.passed, "detail": self.detail} + return result + + +@dataclass(frozen=True, slots=True) +class VerificationReport: + ok: bool + level: str + python: str + platform: str + gpu: dict[str, Any] | None + paths: dict[str, str] + checks: tuple[VerificationCheck, ...] + diagnostics: tuple[str, ...] = field(default_factory=tuple) + + @property + def failed(self) -> tuple[VerificationCheck, ...]: + return tuple(check for check in self.checks if not check.passed) + + def to_dict(self) -> dict[str, Any]: + log.info(f'DLSSVerify: level="{self.level}" python="{self.python}" platform="{self.platform}"') + log.info(f'DLSSVerify: paths={self.paths}') + log.info(f'DLSSVerify: gpu={self.gpu}') + log.debug(f'DLSSVerify: diagnostics={self.diagnostics}') + return { + "ok": self.ok, + "python": self.python, + "platform": self.platform, + "gpu": self.gpu, + "paths": self.paths, + "checks": [check.to_dict() for check in self.checks], + "diagnostics": self.diagnostics, + } + + +_RUNTIME_PATHS = { + "ffmpeg": FFMPEG, + "ffprobe": FFPROBE, + "worker": WORKER, + "host_dxgi": HOST_DXGI, + "dlss_addon": ADDON, + "dlss_superres": DLSS_SUPERRES, + "dlss_neural": NEURAL_RUNTIME, +} + + +class DLSSVerify: + """Perform side-effect-free runtime preflight checks by default.""" + + def __init__(self) -> None: + self.last_report: VerificationReport | None = None + + def __call__(self, gpu_uuid: str = "auto", options: VerifyOptions | None = None) -> VerificationReport: + options = options or VerifyOptions() + options.validate() + checks: list[VerificationCheck] = [] + diagnostics: list[str] = [] + selected_gpu: dict[str, Any] | None = None + + checks.extend(self._check_files()) + checks.append(self._check_import("numpy")) + checks.append(self._check_import("PIL")) + checks.append(self._check_import("cv2")) + checks.append(self._check_import("av")) + + try: + gpus = detect_gpus() + selected_gpu = resolve_ai_gpu(gpus, gpu_uuid) + checks.append(VerificationCheck("gpu", True, self._gpu_detail(selected_gpu))) + except (OSError, RuntimeError, ValueError) as exc: + checks.append(VerificationCheck("gpu", False, str(exc))) + diagnostics.append(str(exc)) + + try: + validate_runtime_files() + checks.append(VerificationCheck("runtime", True, "Required runtime files are present.")) + except (OSError, RuntimeError, ValueError) as exc: + checks.append(VerificationCheck("runtime", False, str(exc))) + diagnostics.append(str(exc)) + + if options.level == "deep": + checks.extend(self._deep_checks(options, gpu_uuid, selected_gpu)) + else: + checks.append(VerificationCheck("deep_capabilities", True, "Deep capability checks were not requested.")) + + filtered = tuple(check for check in checks if self._feature_enabled(check.name, options)) + report = VerificationReport( + ok=all(check.passed or check.status == "not_run" for check in filtered), + level=options.level, + python=platform.python_version(), + platform=sys.platform, + gpu=selected_gpu, + paths={name: str(path) for name, path in _RUNTIME_PATHS.items()}, + checks=filtered, + diagnostics=tuple(diagnostics), + ) + self.last_report = report + return report + + @staticmethod + def _check_files() -> list[VerificationCheck]: + return [ + VerificationCheck( + name=f"file:{name}", + passed=path.is_file(), + detail=str(path), + ) + for name, path in _RUNTIME_PATHS.items() + ] + + @staticmethod + def _check_import(name: str) -> VerificationCheck: + available = importlib.util.find_spec(name) is not None + return VerificationCheck( + name=f"dependency:{name}", + passed=available, + detail="available" if available else "not installed", + ) + + @staticmethod + def _gpu_detail(gpu: dict[str, Any]) -> str: + return f"{gpu.get('name', 'NVIDIA GPU')} driver={gpu.get('driver', 'unknown')} uuid={gpu.get('uuid', 'unknown')}" + + @staticmethod + def _feature_enabled(name: str, options: VerifyOptions) -> bool: + if name.startswith("neural:"): + return options.check_neural + if name.startswith("upscale:"): + return options.check_upscale + if name.startswith("interpolation:"): + return options.check_interpolation + return True + + @staticmethod + def _deep_checks(options: VerifyOptions, gpu_uuid: str, selected_gpu: dict[str, Any] | None) -> list[VerificationCheck]: + del selected_gpu + checks: list[VerificationCheck] = [] + if options.check_neural: + try: + from src.core.runtime import prepare_runtime + + prepared = prepare_runtime() + checks.append(VerificationCheck("neural:runtime", True, f"Prepared {len(prepared.warmed_files)} runtime components.")) + except (ImportError, OSError, RuntimeError, ValueError) as exc: + checks.append(VerificationCheck("neural:runtime", False, str(exc))) + if options.check_upscale: + try: + from src.upscale.video.native import probe_capabilities + + capabilities = probe_capabilities(gpu_uuid) + checks.append(VerificationCheck("upscale:capability", bool(capabilities.vsr.get("available")), str(capabilities.vsr))) + except (ImportError, OSError, RuntimeError, ValueError) as exc: + checks.append(VerificationCheck("upscale:capability", False, str(exc))) + if options.check_interpolation: + try: + from src.frame_interpolation.capabilities import probe_frame_interpolation_capabilities + + capabilities = probe_frame_interpolation_capabilities(gpu_uuid) + checks.append(VerificationCheck("interpolation:capability", capabilities.available, capabilities.detail or f"native_multiplier={capabilities.native_multiplier}")) + except (ImportError, OSError, RuntimeError, ValueError) as exc: + checks.append(VerificationCheck("interpolation:capability", False, str(exc))) + return checks diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py new file mode 100644 index 000000000..13c27fed5 --- /dev/null +++ b/scripts/dlss_ext.py @@ -0,0 +1,332 @@ +import os +import time +import textwrap +import gradio as gr +from modules.logger import log +from modules import scripts_manager, shared, devices, processing, timer, errors +from scripts.dlss import controller_cli as c + + +debug = os.environ.get('SD_DLSS_DEBUG', None) is not None +FPS_CHOICES = ['23.976', '24', '25', '29.97', '30', '50', '59.94', '60', '90', '119.88', '120', '144', '165', '180', '240', '360', '480'] + + +class DLSSScript(scripts_manager.Script): + def title(self): + return 'nVidia DLSS' + + def show(self, _is_img2img): + if devices.backend != 'cuda': + return False + return scripts_manager.AlwaysVisible + + def ui(self, _is_img2img): + with gr.Accordion('nVidia DLSS', open=False, elem_id='dlss'): + with gr.Row(): + pkg_path = gr.Textbox(label='DLSS package path', value=shared.opts.dlss_pkg_path, placeholder='path to dlss 5 visual enhancer', elem_id='dlss_pkg_path') + with gr.Row(): + """ + btn_verify = ui_components.ToolButton(value=ui_symbols.tools, elem_id='dlss_verify') + btn_status = ui_components.ToolButton(value=ui_symbols.info, elem_id='dlss_status_btn') + btn_reset = ui_components.ToolButton(value=ui_symbols.reset, elem_id='dlss_reset') + btn_shutdown = ui_components.ToolButton(value=ui_symbols.close, elem_id='dlss_shutdown') + """ + btn_install = gr.Button(value="Install", elem_id='dlss_install') + btn_verify = gr.Button(value="Verify", elem_id='dlss_verify') + btn_status = gr.Button(value="Status", elem_id='dlss_status_btn') + btn_reset = gr.Button(value="Reset", elem_id='dlss_reset') + btn_shutdown = gr.Button(value="Shutdown", elem_id='dlss_shutdown') + with gr.Row(): + install_note = gr.Markdown("", elem_id='dlss_install_note', visible=False) + with gr.Accordion('DLSS Status', open=True, elem_id='dlss_status'): + ss_status = gr.JSON({ 'Status': 'unknown' if len(shared.opts.dlss_pkg_path) < 4 else 'stored'}) + btn_install.click(self.install, inputs=[], outputs=[install_note]) + btn_verify.click(self.verify, inputs=[pkg_path], outputs=[ss_status]) + btn_status.click(self.status, inputs=[pkg_path], outputs=[ss_status]) + btn_reset.click(self.reset, inputs=[pkg_path], outputs=[ss_status]) + btn_shutdown.click(self.shutdown, inputs=[pkg_path], outputs=[ss_status]) + + with gr.Accordion('DLSS NeuralRender', open=True, elem_id='dlss_nn'): + with gr.Row(): + nr_enabled = gr.Checkbox(label='NR enable', value=False, elem_id='dlss_nr_enabled') + nr_append = gr.Checkbox(label='Append result', value=True, elem_id='dlss_nr_append') + with gr.Row(): + nr_style = gr.Dropdown(label='NR style', choices=['Default', 'Natural', 'Cinematic'], value='Default', elem_id='dlss_nr_style') + nr_intensity = gr.Slider(label='NR intensity', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_intensity') + nr_upscaling_factor = gr.Dropdown(label='NR upscaling factor', choices=["1.0", "1.5", "1.724", "2.0", "3.0"], value="1.0", elem_id='dlss_nr_upscaling_factor') + with gr.Row(): + nr_preset = gr.Dropdown(label='NR preset', choices=['Default', 'Preset #1', 'Preset #2', 'Preset #3'], value='Default', elem_id='dlss_nr_preset') + nr_model_preset = gr.Dropdown(label='NR model', choices=['Default', 'J', 'K', 'L', 'M'], value='Default', elem_id='dlss_nr_model_preset') + with gr.Row(): + nr_local_tone = gr.Slider(label='NR tone strength', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_local_tone') + nr_local_structure = gr.Slider(label='NR local structure', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_local_structure') + nr_skin_structure = gr.Slider(label='NR skin structure', minimum=-1.0, maximum=2.0, step=0.05, value=-1.0, elem_id='dlss_nr_skin_structure') + nr_automatic_mask = gr.Checkbox(label='Automatic mask', value=False, elem_id='dlss_nr_automatic_mask') + + with gr.Accordion('DLSS SuperSample', open=True, elem_id='dlss_ss'): + with gr.Row(): + ss_enabled = gr.Checkbox(label='SR enable', value=False, elem_id='dlss_ss_enabled') + ss_append = gr.Checkbox(label='Append result', value=True, elem_id='dlss_ss_append') + with gr.Row(): + ss_vsr_quality = gr.Dropdown(label='SS VSR quality', choices=["1: Low", "2: Medium", "3: High", "4: Ultra"], value="4: Ultra", type='value', elem_id='dlss_ss_vsr_quality') + with gr.Row(): + ss_size_mode = gr.Dropdown(label='SS size mode', choices=['Scale factor', 'Target size'], value='Scale factor', elem_id='dlss_ss_size_mode') + with gr.Row(): + ss_scale_factor = gr.Slider(label='SS scale factor', minimum=1.0, maximum=8.0, step=0.05, value=2.0, elem_id='dlss_ss_scale_factor') + with gr.Row(): + ss_width = gr.Number(label='SS width', minimum=64, maximum=16384, step=8, value=3840, elem_id='dlss_ss_width') + ss_height = gr.Number(label='SS height', minimum=64, maximum=16384, step=8, value=2160, elem_id='dlss_ss_height') + + with gr.Accordion('DLSS FrameGen', open=True, elem_id='dlss_fg'): + with gr.Row(): + fg_enabled = gr.Checkbox(label='FG enable', value=False, elem_id='dlss_fg_enabled') + with gr.Row(): + fg_source_fps = gr.Dropdown(label='Source FPS', choices=FPS_CHOICES, value='24', elem_id='dlss_fg_source_fps') + fg_target_fps = gr.Dropdown(label='Target FPS', choices=FPS_CHOICES, value='60', elem_id='dlss_fg_target_fps') + with gr.Row(): + fg_engine = gr.Dropdown(label='Engine', choices=['Auto', 'Native DLSSG', 'Cascade'], value='Auto', elem_id='dlss_fg_engine') + + return [nr_enabled, nr_append, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset, ss_enabled, ss_append, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height, fg_enabled, fg_source_fps, fg_target_fps, fg_engine] + + def install(self): + note = textwrap.dedent("""\ + ### Install + 1. Download and unpack: [DLSS 5 Visual Enhancer](https://github.com/Merserk/dlss5-visual-enhancer/releases/tag/v7.0) + 2. Enter the path to the unpacked package + 3. Press verify + ### Notes + - Package info is stored for future use on sucessful verification + - DLSS controller process is started on first use + - Use status to check the current state of the DLSS controller + - Use reset to restore the DLSS controller to its default state + - Use shutdown to stop the DLSS controller process + """) + return gr.update(value=note, visible=True) + + def verify(self, pkg_path): + log.info(f'DLSS verify: path="{pkg_path}"') + if not os.path.exists(pkg_path) or not os.path.isdir(pkg_path): + log.error(f'DLSS: path="{pkg_path}" not found') + return { 'error': 'package path not found' } + if not c.controller.get_python(pkg_path): + return { 'error': 'python not found in package path' } + shared.opts.dlss_pkg_path = pkg_path + response = c.controller.call(pkg_path, 'verify', { 'gpu_uuid': 'auto', 'options': { 'level': 'deep' } }) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return { 'error': error.get('message', 'unknown error') } + report = (response.get('result') or {}).get('report', {}) + if debug: + log.trace(f'DLSS raw: {report}') + checks = { 'passed': 0, 'failed': 0 } + for check in report.get('checks', []): + if check.get('passed', False): + checks['passed'] += 1 + else: + checks['failed'] += 1 + log.error(f'DLSS : {check}') + log.debug(f'DLSS: gpu={report.get("gpu", "unknown")} checks={checks}') + return report + + def status(self, pkg_path): + log.info(f'DLSS status: path="{pkg_path}"') + response = c.controller.call(pkg_path, 'status', {}) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return { 'error': error.get('message', 'unknown error') } + return response.get('result', {}) + + def reset(self, pkg_path): + log.info(f'DLSS reset: path="{pkg_path}"') + response = c.controller.call(pkg_path, 'reset', {}) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return { 'error': error.get('message', 'unknown error') } + return response.get('result', {}) + + def shutdown(self, pkg_path): + log.info(f'DLSS shutdown: path="{pkg_path}"') + if not c.controller.is_alive(): + return { 'shutdown': True, 'note': 'controller was not running' } + c.controller.stop() + return { 'shutdown': True } + + def supersample(self, pkg_path, images, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height): + try: + options = { + 'vsr_quality': int(ss_vsr_quality[0]), + 'size_mode': ss_size_mode, + 'scale_factor': float(ss_scale_factor), + 'width': int(ss_width), + 'height': int(ss_height), + 'aspect_lock': False, + } + response = c.controller.call(pkg_path, 'upscale', { 'images': c.images_to_nchw(images), 'options': options }) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return None + return c.nchw_to_images(response.get('result')) + except Exception as e: + log.error(f'DLSS: {e}') + errors.display(e, 'DLSS') + return None + + def neuralrender(self, pkg_path, images, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset): + try: + options = { + 'nr_style': nr_style, + 'nr_intensity': float(nr_intensity), + 'local_tone_strength': float(nr_local_tone), + 'local_structure_strength': float(nr_local_structure), + 'skin_structure_strength': float(nr_skin_structure), + 'upscaling_factor': float(nr_upscaling_factor), + 'warmup_frames': 0, + 'nr_preset': nr_preset, + 'automatic_mask': bool(nr_automatic_mask), + 'dlss_model_preset': nr_model_preset, + } + response = c.controller.call(pkg_path, 'render', { 'images': c.images_to_nchw(images), 'options': options }) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return None + return c.nchw_to_images(response.get('result')) + except Exception as e: + log.error(f'DLSS: {e}') + errors.display(e, 'DLSS') + return None + + def framegen(self, pkg_path, images, fg_source_fps, fg_target_fps, fg_engine): + try: + if len(images) < 2: + log.warning('DLSS: FrameGen requires at least two frames, skipping') + return None + options = { 'ai_gpu_uuid': 'auto', 'engine': fg_engine } + response = c.controller.call( + pkg_path, 'framegen', + { 'frames': c.images_to_nchw(images), 'source_fps': fg_source_fps, 'target_fps': fg_target_fps, 'options': options }, + timeout=120.0, + ) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return None + return c.nchw_to_images(response.get('result')) + except Exception as e: + log.error(f'DLSS: {e}') + errors.display(e, 'DLSS') + return None + + def dlss(self, p, pp, + nr_enabled, nr_append, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset,nr_automatic_mask, nr_model_preset, + ss_enabled, ss_append, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height, + fg_enabled, fg_source_fps, fg_target_fps, fg_engine, + *args, **kwargs + ): + if not (ss_enabled or nr_enabled or fg_enabled): + return None + pkg_path = shared.opts.dlss_pkg_path + if not pkg_path or not c.controller.get_python(pkg_path): + log.error('DLSS: package path not configured') + return None + if debug: + log.trace(f'DLSS: path="{pkg_path}" args={args} kwargs={kwargs}') + + if hasattr(pp, 'images') and pp.images is not None and len(pp.images) > 0: + inputs = pp.images + elif hasattr(pp, 'image') and pp.image is not None: + inputs = [pp.image] + else: + return None + + # cast to appropriate types + nr_intensity = float(nr_intensity) + nr_local_tone = float(nr_local_tone) + nr_local_structure = float(nr_local_structure) + nr_skin_structure = float(nr_skin_structure) + nr_upscaling_factor = float(nr_upscaling_factor) + ss_width = int(ss_width) + ss_height = int(ss_height) + ss_scale_factor = float(ss_scale_factor) + fg_source_fps = float(fg_source_fps) + fg_target_fps = float(fg_target_fps) + + images = [] + originals = [] + current_images = inputs + t = timer.Timer() + + if ss_enabled: + t0 = time.time() + p.extra_generation_params["DLSSSuperSample"] = True + log.debug(f'DLSS: method=SuperSample quality="{ss_vsr_quality}" mode="{ss_size_mode}" scale={ss_scale_factor} width={ss_width} height={ss_height}') + if ss_append: + originals.extend(current_images) + output = self.supersample(pkg_path, current_images, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height) + if debug: + log.trace(f'DLSS: method=SuperSample images={len(output) if output else 0} time={time.time() - t0:.3f}') + if output: + images.extend(output) + current_images = output + t.ts('supersample', t0) + + if nr_enabled: + t0 = time.time() + p.extra_generation_params["DLSSNeuralRender"] = True + log.debug(f'DLSS: method=NeuralRender style={nr_style} intensity={nr_intensity} tone={nr_local_tone} structure={nr_local_structure} skin={nr_skin_structure} scale={nr_upscaling_factor} preset={nr_preset} mask={nr_automatic_mask} model={nr_model_preset}') + if nr_append: + originals.extend(current_images) + output = self.neuralrender(pkg_path, current_images, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset) + if debug: + log.trace(f'DLSS: method=NeuralRender images={len(output) if output else 0} time={time.time() - t0:.3f}') + if output: + images.extend(output) + current_images = output + t.ts('neuralrender', t0) + + if fg_enabled: + t0 = time.time() + p.extra_generation_params["DLSSFrameGen"] = True + log.debug(f'DLSS: method=FrameGen source={fg_source_fps} target={fg_target_fps} engine={fg_engine}') + output = self.framegen(pkg_path, current_images, fg_source_fps, fg_target_fps, fg_engine) + if debug: + log.trace(f'DLSS: method=FrameGen images={len(output) if output else 0} time={time.time() - t0:.3f}') + if output: + images.extend(output) + current_images = output + t.ts('framegen', t0) + + log.debug(f'DLSS: images={len(images)} {t.summary(min_time=0)}') + pp.images = images + pp.originals = originals + return pp + + def postprocess_image(self, p: processing.StableDiffusionProcessing, pp: scripts_manager.PostprocessImageArgs, *args, **kwargs): + # postprocess_image is intended to modify single image in-place so not suited for dlss + pass + + def postprocess(self, p: processing.StableDiffusionProcessing, pp: processing.Processed, *args, **kwargs): # pylint: disable=arguments-differ,unused-argument + _pp = self.dlss(p, pp, *args, **kwargs) + # postprocess triggers after initial images have already been saved + if _pp is not None and hasattr(_pp, 'images') and _pp.images is not None: + pp = _pp + orig_infos = pp.infotexts if hasattr(pp, 'infotexts') else [] + out_images, out_infos = processing.process_samples(p, pp.images) + pp.images = out_images + pp.infotexts = out_infos + if hasattr(pp, 'originals') and pp.originals is not None and len(pp.originals) > 0: + pp.infotexts = orig_infos + pp.infotexts + pp.images = pp.originals + pp.images + return pp + + +""" +add install notes +add postprocessing +add framegen +add video +""" From 64b281e4afb5bcf1ea9a2034ac6f2e8711d25311 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 9 Sep 2026 13:32:49 +0200 Subject: [PATCH 166/270] add dlss to postprocessing Signed-off-by: Vladimir Mandic --- extensions-builtin/sdnext-modernui | 2 +- scripts/dlss_ext.py | 633 ++++++++++++++++------------- 2 files changed, 343 insertions(+), 292 deletions(-) diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 2840cb952..b3e6c8f75 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 2840cb952665d416768917c780d1acd9175d09cf +Subproject commit b3e6c8f75cf65b19a3c3309c2fb6a69336471625 diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index 13c27fed5..94a6490da 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -3,7 +3,7 @@ import time import textwrap import gradio as gr from modules.logger import log -from modules import scripts_manager, shared, devices, processing, timer, errors +from modules import shared, devices, processing, timer, errors, scripts_manager, scripts_postprocessing from scripts.dlss import controller_cli as c @@ -11,6 +11,301 @@ debug = os.environ.get('SD_DLSS_DEBUG', None) is not None FPS_CHOICES = ['23.976', '24', '25', '29.97', '30', '50', '59.94', '60', '90', '119.88', '120', '144', '165', '180', '240', '360', '480'] +def create_ui(parent): + with gr.Accordion('nVidia DLSS', open=False, elem_id=f'{parent}_dlss_accordion'): + with gr.Row(): + btn_install = gr.Button(value="Install", elem_id='dlss_install') + btn_verify = gr.Button(value="Verify", elem_id='dlss_verify') + btn_status = gr.Button(value="Status", elem_id='dlss_status_btn') + btn_reset = gr.Button(value="Reset", elem_id='dlss_reset') + btn_shutdown = gr.Button(value="Shutdown", elem_id='dlss_shutdown') + with gr.Row(): + install_note = gr.Markdown("", elem_id='dlss_install_note', visible=False) + + with gr.Accordion('DLSS NeuralRender', open=False, elem_id='dlss_nn'): + with gr.Row(): + nr_enabled = gr.Checkbox(label='NR enable', value=False, elem_id='dlss_nr_enabled') + nr_append = gr.Checkbox(label='Append result', value=True, elem_id='dlss_nr_append') + with gr.Row(): + nr_style = gr.Dropdown(label='NR style', choices=['Default', 'Natural', 'Cinematic'], value='Default', elem_id='dlss_nr_style') + nr_intensity = gr.Slider(label='NR intensity', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_intensity') + nr_upscaling_factor = gr.Dropdown(label='NR upscaling factor', choices=["1.0", "1.5", "1.724", "2.0", "3.0"], value="1.0", elem_id='dlss_nr_upscaling_factor') + with gr.Row(): + nr_preset = gr.Dropdown(label='NR preset', choices=['Default', 'Preset #1', 'Preset #2', 'Preset #3'], value='Default', elem_id='dlss_nr_preset') + nr_model_preset = gr.Dropdown(label='NR model', choices=['Default', 'J', 'K', 'L', 'M'], value='Default', elem_id='dlss_nr_model_preset') + with gr.Row(): + nr_local_tone = gr.Slider(label='NR tone strength', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_local_tone') + nr_local_structure = gr.Slider(label='NR local structure', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_local_structure') + nr_skin_structure = gr.Slider(label='NR skin structure', minimum=-1.0, maximum=2.0, step=0.05, value=-1.0, elem_id='dlss_nr_skin_structure') + nr_automatic_mask = gr.Checkbox(label='Automatic mask', value=False, elem_id='dlss_nr_automatic_mask') + + with gr.Accordion('DLSS SuperSample', open=False, elem_id='dlss_ss'): + with gr.Row(): + ss_enabled = gr.Checkbox(label='SR enable', value=False, elem_id='dlss_ss_enabled') + ss_append = gr.Checkbox(label='Append result', value=True, elem_id='dlss_ss_append') + with gr.Row(): + ss_vsr_quality = gr.Dropdown(label='SS VSR quality', choices=["1: Low", "2: Medium", "3: High", "4: Ultra"], value="4: Ultra", type='value', elem_id='dlss_ss_vsr_quality') + with gr.Row(): + ss_size_mode = gr.Dropdown(label='SS size mode', choices=['Scale factor', 'Target size'], value='Scale factor', elem_id='dlss_ss_size_mode') + with gr.Row(): + ss_scale_factor = gr.Slider(label='SS scale factor', minimum=1.0, maximum=8.0, step=0.05, value=2.0, elem_id='dlss_ss_scale_factor') + with gr.Row(): + ss_width = gr.Number(label='SS width', minimum=64, maximum=16384, step=8, value=3840, elem_id='dlss_ss_width') + ss_height = gr.Number(label='SS height', minimum=64, maximum=16384, step=8, value=2160, elem_id='dlss_ss_height') + + with gr.Accordion('DLSS FrameGen', open=False, elem_id='dlss_fg'): + with gr.Row(): + fg_enabled = gr.Checkbox(label='FG enable', value=False, elem_id='dlss_fg_enabled') + with gr.Row(): + fg_source_fps = gr.Dropdown(label='Source FPS', choices=FPS_CHOICES, value='24', elem_id='dlss_fg_source_fps') + fg_target_fps = gr.Dropdown(label='Target FPS', choices=FPS_CHOICES, value='60', elem_id='dlss_fg_target_fps') + with gr.Row(): + fg_engine = gr.Dropdown(label='Engine', choices=['Auto', 'Native DLSSG', 'Cascade'], value='Auto', elem_id='dlss_fg_engine') + + with gr.Accordion('DLSS Status', open=True, elem_id='dlss_status'): + ss_status = gr.JSON({ 'Status': 'unknown' if len(shared.opts.dlss_pkg_path) < 4 else 'stored'}) + + with gr.Row(): + pkg_path = gr.Textbox(label='DLSS Package path', value=shared.opts.dlss_pkg_path, placeholder='path to dlss 5 visual enhancer', elem_id='dlss_pkg_path') + + btn_install.click(install, inputs=[], outputs=[install_note]) + btn_verify.click(verify, inputs=[pkg_path], outputs=[ss_status]) + btn_status.click(status, inputs=[pkg_path], outputs=[ss_status]) + btn_reset.click(reset, inputs=[pkg_path], outputs=[ss_status]) + btn_shutdown.click(shutdown, inputs=[pkg_path], outputs=[ss_status]) + + return [nr_enabled, nr_append, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset, ss_enabled, ss_append, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height, fg_enabled, fg_source_fps, fg_target_fps, fg_engine] + + +def install(): + note = textwrap.dedent("""\ + ### Install + 1. Download and unpack: [DLSS 5 Visual Enhancer](https://github.com/Merserk/dlss5-visual-enhancer/releases/tag/v7.0) + 2. Enter the path to the unpacked package + 3. Press verify + ### Notes + - Package info is stored for future use on sucessful verification + - DLSS controller process is started on first use + - Use status to check the current state of the DLSS controller + - Use reset to restore the DLSS controller to its default state + - Use shutdown to stop the DLSS controller process + """) + return gr.update(value=note, visible=True) + + +def verify(pkg_path): + log.info(f'DLSS verify: path="{pkg_path}"') + if not os.path.exists(pkg_path) or not os.path.isdir(pkg_path): + log.error(f'DLSS: path="{pkg_path}" not found') + return { 'error': 'package path not found' } + if not c.controller.get_python(pkg_path): + return { 'error': 'python not found in package path' } + shared.opts.dlss_pkg_path = pkg_path + response = c.controller.call(pkg_path, 'verify', { 'gpu_uuid': 'auto', 'options': { 'level': 'deep' } }) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return { 'error': error.get('message', 'unknown error') } + report = (response.get('result') or {}).get('report', {}) + if debug: + log.trace(f'DLSS raw: {report}') + checks = { 'passed': 0, 'failed': 0 } + for check in report.get('checks', []): + if check.get('passed', False): + checks['passed'] += 1 + else: + checks['failed'] += 1 + log.error(f'DLSS : {check}') + log.debug(f'DLSS: gpu={report.get("gpu", "unknown")} checks={checks}') + return report + + +def status(pkg_path): + log.info(f'DLSS status: path="{pkg_path}"') + response = c.controller.call(pkg_path, 'status', {}) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return { 'error': error.get('message', 'unknown error') } + return response.get('result', {}) + + +def reset(pkg_path): + log.info(f'DLSS reset: path="{pkg_path}"') + response = c.controller.call(pkg_path, 'reset', {}) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return { 'error': error.get('message', 'unknown error') } + return response.get('result', {}) + + +def shutdown(pkg_path): + log.info(f'DLSS shutdown: path="{pkg_path}"') + if not c.controller.is_alive(): + return { 'shutdown': True, 'note': 'controller was not running' } + c.controller.stop() + return { 'shutdown': True } + + +def supersample(pkg_path, images, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height): + try: + options = { + 'vsr_quality': int(ss_vsr_quality[0]), + 'size_mode': ss_size_mode, + 'scale_factor': float(ss_scale_factor), + 'width': int(ss_width), + 'height': int(ss_height), + 'aspect_lock': False, + } + response = c.controller.call(pkg_path, 'upscale', { 'images': c.images_to_nchw(images), 'options': options }) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return None + return c.nchw_to_images(response.get('result')) + except Exception as e: + log.error(f'DLSS: {e}') + errors.display(e, 'DLSS') + return None + + +def neuralrender(pkg_path, images, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset): + try: + options = { + 'nr_style': nr_style, + 'nr_intensity': float(nr_intensity), + 'local_tone_strength': float(nr_local_tone), + 'local_structure_strength': float(nr_local_structure), + 'skin_structure_strength': float(nr_skin_structure), + 'upscaling_factor': float(nr_upscaling_factor), + 'warmup_frames': 0, + 'nr_preset': nr_preset, + 'automatic_mask': bool(nr_automatic_mask), + 'dlss_model_preset': nr_model_preset, + } + response = c.controller.call(pkg_path, 'render', { 'images': c.images_to_nchw(images), 'options': options }) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return None + return c.nchw_to_images(response.get('result')) + except Exception as e: + log.error(f'DLSS: {e}') + errors.display(e, 'DLSS') + return None + + +def framegen(pkg_path, images, fg_source_fps, fg_target_fps, fg_engine): + try: + if len(images) < 2: + log.warning('DLSS: FrameGen requires at least two frames, skipping') + return None + options = { 'ai_gpu_uuid': 'auto', 'engine': fg_engine } + response = c.controller.call( + pkg_path, 'framegen', + { 'frames': c.images_to_nchw(images), 'source_fps': fg_source_fps, 'target_fps': fg_target_fps, 'options': options }, + timeout=120.0, + ) + if response.get('status') != 'ok': + error = response.get('error') or {} + log.error(f'DLSS: {error.get("message")}') + return None + return c.nchw_to_images(response.get('result')) + except Exception as e: + log.error(f'DLSS: {e}') + errors.display(e, 'DLSS') + return None + + +def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processed | scripts_postprocessing.PostprocessedImage, + nr_enabled, nr_append, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset,nr_automatic_mask, nr_model_preset, + ss_enabled, ss_append, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height, + fg_enabled, fg_source_fps, fg_target_fps, fg_engine, + *args, **kwargs + ): + if not (ss_enabled or nr_enabled or fg_enabled): + return None + pkg_path = shared.opts.dlss_pkg_path + if not pkg_path or not c.controller.get_python(pkg_path): + log.error('DLSS: package path not configured') + return None + if debug: + log.trace(f'DLSS: path="{pkg_path}" args={args} kwargs={kwargs}') + + if hasattr(pp, 'images') and pp.images is not None and len(pp.images) > 0: + inputs = pp.images + elif hasattr(pp, 'image') and pp.image is not None: + inputs = [pp.image] + else: + return None + + # cast to appropriate types + nr_intensity = float(nr_intensity) + nr_local_tone = float(nr_local_tone) + nr_local_structure = float(nr_local_structure) + nr_skin_structure = float(nr_skin_structure) + nr_upscaling_factor = float(nr_upscaling_factor) + ss_width = int(ss_width) + ss_height = int(ss_height) + ss_scale_factor = float(ss_scale_factor) + fg_source_fps = float(fg_source_fps) + fg_target_fps = float(fg_target_fps) + + images = [] + originals = [] + current_images = inputs + t = timer.Timer() + + if ss_enabled: + t0 = time.time() + if p: + p.extra_generation_params["DLSSSuperSample"] = True + log.debug(f'DLSS: method=SuperSample quality="{ss_vsr_quality}" mode="{ss_size_mode}" scale={ss_scale_factor} width={ss_width} height={ss_height}') + if ss_append: + originals.extend(current_images) + output = supersample(pkg_path, current_images, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height) + if debug: + log.trace(f'DLSS: method=SuperSample images={len(output) if output else 0} time={time.time() - t0:.3f}') + if output: + images.extend(output) + current_images = output + t.ts('supersample', t0) + + if nr_enabled: + t0 = time.time() + if p: + p.extra_generation_params["DLSSNeuralRender"] = True + log.debug(f'DLSS: method=NeuralRender style={nr_style} intensity={nr_intensity} tone={nr_local_tone} structure={nr_local_structure} skin={nr_skin_structure} scale={nr_upscaling_factor} preset={nr_preset} mask={nr_automatic_mask} model={nr_model_preset}') + if nr_append: + originals.extend(current_images) + output = neuralrender(pkg_path, current_images, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset) + if debug: + log.trace(f'DLSS: method=NeuralRender images={len(output) if output else 0} time={time.time() - t0:.3f}') + if output: + images.extend(output) + current_images = output + t.ts('neuralrender', t0) + + if fg_enabled: + t0 = time.time() + if p: + p.extra_generation_params["DLSSFrameGen"] = True + log.debug(f'DLSS: method=FrameGen source={fg_source_fps} target={fg_target_fps} engine={fg_engine}') + output = framegen(pkg_path, current_images, fg_source_fps, fg_target_fps, fg_engine) + if debug: + log.trace(f'DLSS: method=FrameGen images={len(output) if output else 0} time={time.time() - t0:.3f}') + if output: + images.extend(output) + current_images = output + t.ts('framegen', t0) + + log.debug(f'DLSS: images={len(images)} {t.summary(min_time=0)}') + pp.images = images + pp.originals = originals + return pp + + class DLSSScript(scripts_manager.Script): def title(self): return 'nVidia DLSS' @@ -21,296 +316,14 @@ class DLSSScript(scripts_manager.Script): return scripts_manager.AlwaysVisible def ui(self, _is_img2img): - with gr.Accordion('nVidia DLSS', open=False, elem_id='dlss'): - with gr.Row(): - pkg_path = gr.Textbox(label='DLSS package path', value=shared.opts.dlss_pkg_path, placeholder='path to dlss 5 visual enhancer', elem_id='dlss_pkg_path') - with gr.Row(): - """ - btn_verify = ui_components.ToolButton(value=ui_symbols.tools, elem_id='dlss_verify') - btn_status = ui_components.ToolButton(value=ui_symbols.info, elem_id='dlss_status_btn') - btn_reset = ui_components.ToolButton(value=ui_symbols.reset, elem_id='dlss_reset') - btn_shutdown = ui_components.ToolButton(value=ui_symbols.close, elem_id='dlss_shutdown') - """ - btn_install = gr.Button(value="Install", elem_id='dlss_install') - btn_verify = gr.Button(value="Verify", elem_id='dlss_verify') - btn_status = gr.Button(value="Status", elem_id='dlss_status_btn') - btn_reset = gr.Button(value="Reset", elem_id='dlss_reset') - btn_shutdown = gr.Button(value="Shutdown", elem_id='dlss_shutdown') - with gr.Row(): - install_note = gr.Markdown("", elem_id='dlss_install_note', visible=False) - with gr.Accordion('DLSS Status', open=True, elem_id='dlss_status'): - ss_status = gr.JSON({ 'Status': 'unknown' if len(shared.opts.dlss_pkg_path) < 4 else 'stored'}) - btn_install.click(self.install, inputs=[], outputs=[install_note]) - btn_verify.click(self.verify, inputs=[pkg_path], outputs=[ss_status]) - btn_status.click(self.status, inputs=[pkg_path], outputs=[ss_status]) - btn_reset.click(self.reset, inputs=[pkg_path], outputs=[ss_status]) - btn_shutdown.click(self.shutdown, inputs=[pkg_path], outputs=[ss_status]) - - with gr.Accordion('DLSS NeuralRender', open=True, elem_id='dlss_nn'): - with gr.Row(): - nr_enabled = gr.Checkbox(label='NR enable', value=False, elem_id='dlss_nr_enabled') - nr_append = gr.Checkbox(label='Append result', value=True, elem_id='dlss_nr_append') - with gr.Row(): - nr_style = gr.Dropdown(label='NR style', choices=['Default', 'Natural', 'Cinematic'], value='Default', elem_id='dlss_nr_style') - nr_intensity = gr.Slider(label='NR intensity', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_intensity') - nr_upscaling_factor = gr.Dropdown(label='NR upscaling factor', choices=["1.0", "1.5", "1.724", "2.0", "3.0"], value="1.0", elem_id='dlss_nr_upscaling_factor') - with gr.Row(): - nr_preset = gr.Dropdown(label='NR preset', choices=['Default', 'Preset #1', 'Preset #2', 'Preset #3'], value='Default', elem_id='dlss_nr_preset') - nr_model_preset = gr.Dropdown(label='NR model', choices=['Default', 'J', 'K', 'L', 'M'], value='Default', elem_id='dlss_nr_model_preset') - with gr.Row(): - nr_local_tone = gr.Slider(label='NR tone strength', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_local_tone') - nr_local_structure = gr.Slider(label='NR local structure', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_local_structure') - nr_skin_structure = gr.Slider(label='NR skin structure', minimum=-1.0, maximum=2.0, step=0.05, value=-1.0, elem_id='dlss_nr_skin_structure') - nr_automatic_mask = gr.Checkbox(label='Automatic mask', value=False, elem_id='dlss_nr_automatic_mask') - - with gr.Accordion('DLSS SuperSample', open=True, elem_id='dlss_ss'): - with gr.Row(): - ss_enabled = gr.Checkbox(label='SR enable', value=False, elem_id='dlss_ss_enabled') - ss_append = gr.Checkbox(label='Append result', value=True, elem_id='dlss_ss_append') - with gr.Row(): - ss_vsr_quality = gr.Dropdown(label='SS VSR quality', choices=["1: Low", "2: Medium", "3: High", "4: Ultra"], value="4: Ultra", type='value', elem_id='dlss_ss_vsr_quality') - with gr.Row(): - ss_size_mode = gr.Dropdown(label='SS size mode', choices=['Scale factor', 'Target size'], value='Scale factor', elem_id='dlss_ss_size_mode') - with gr.Row(): - ss_scale_factor = gr.Slider(label='SS scale factor', minimum=1.0, maximum=8.0, step=0.05, value=2.0, elem_id='dlss_ss_scale_factor') - with gr.Row(): - ss_width = gr.Number(label='SS width', minimum=64, maximum=16384, step=8, value=3840, elem_id='dlss_ss_width') - ss_height = gr.Number(label='SS height', minimum=64, maximum=16384, step=8, value=2160, elem_id='dlss_ss_height') - - with gr.Accordion('DLSS FrameGen', open=True, elem_id='dlss_fg'): - with gr.Row(): - fg_enabled = gr.Checkbox(label='FG enable', value=False, elem_id='dlss_fg_enabled') - with gr.Row(): - fg_source_fps = gr.Dropdown(label='Source FPS', choices=FPS_CHOICES, value='24', elem_id='dlss_fg_source_fps') - fg_target_fps = gr.Dropdown(label='Target FPS', choices=FPS_CHOICES, value='60', elem_id='dlss_fg_target_fps') - with gr.Row(): - fg_engine = gr.Dropdown(label='Engine', choices=['Auto', 'Native DLSSG', 'Cascade'], value='Auto', elem_id='dlss_fg_engine') - - return [nr_enabled, nr_append, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset, ss_enabled, ss_append, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height, fg_enabled, fg_source_fps, fg_target_fps, fg_engine] - - def install(self): - note = textwrap.dedent("""\ - ### Install - 1. Download and unpack: [DLSS 5 Visual Enhancer](https://github.com/Merserk/dlss5-visual-enhancer/releases/tag/v7.0) - 2. Enter the path to the unpacked package - 3. Press verify - ### Notes - - Package info is stored for future use on sucessful verification - - DLSS controller process is started on first use - - Use status to check the current state of the DLSS controller - - Use reset to restore the DLSS controller to its default state - - Use shutdown to stop the DLSS controller process - """) - return gr.update(value=note, visible=True) - - def verify(self, pkg_path): - log.info(f'DLSS verify: path="{pkg_path}"') - if not os.path.exists(pkg_path) or not os.path.isdir(pkg_path): - log.error(f'DLSS: path="{pkg_path}" not found') - return { 'error': 'package path not found' } - if not c.controller.get_python(pkg_path): - return { 'error': 'python not found in package path' } - shared.opts.dlss_pkg_path = pkg_path - response = c.controller.call(pkg_path, 'verify', { 'gpu_uuid': 'auto', 'options': { 'level': 'deep' } }) - if response.get('status') != 'ok': - error = response.get('error') or {} - log.error(f'DLSS: {error.get("message")}') - return { 'error': error.get('message', 'unknown error') } - report = (response.get('result') or {}).get('report', {}) - if debug: - log.trace(f'DLSS raw: {report}') - checks = { 'passed': 0, 'failed': 0 } - for check in report.get('checks', []): - if check.get('passed', False): - checks['passed'] += 1 - else: - checks['failed'] += 1 - log.error(f'DLSS : {check}') - log.debug(f'DLSS: gpu={report.get("gpu", "unknown")} checks={checks}') - return report - - def status(self, pkg_path): - log.info(f'DLSS status: path="{pkg_path}"') - response = c.controller.call(pkg_path, 'status', {}) - if response.get('status') != 'ok': - error = response.get('error') or {} - log.error(f'DLSS: {error.get("message")}') - return { 'error': error.get('message', 'unknown error') } - return response.get('result', {}) - - def reset(self, pkg_path): - log.info(f'DLSS reset: path="{pkg_path}"') - response = c.controller.call(pkg_path, 'reset', {}) - if response.get('status') != 'ok': - error = response.get('error') or {} - log.error(f'DLSS: {error.get("message")}') - return { 'error': error.get('message', 'unknown error') } - return response.get('result', {}) - - def shutdown(self, pkg_path): - log.info(f'DLSS shutdown: path="{pkg_path}"') - if not c.controller.is_alive(): - return { 'shutdown': True, 'note': 'controller was not running' } - c.controller.stop() - return { 'shutdown': True } - - def supersample(self, pkg_path, images, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height): - try: - options = { - 'vsr_quality': int(ss_vsr_quality[0]), - 'size_mode': ss_size_mode, - 'scale_factor': float(ss_scale_factor), - 'width': int(ss_width), - 'height': int(ss_height), - 'aspect_lock': False, - } - response = c.controller.call(pkg_path, 'upscale', { 'images': c.images_to_nchw(images), 'options': options }) - if response.get('status') != 'ok': - error = response.get('error') or {} - log.error(f'DLSS: {error.get("message")}') - return None - return c.nchw_to_images(response.get('result')) - except Exception as e: - log.error(f'DLSS: {e}') - errors.display(e, 'DLSS') - return None - - def neuralrender(self, pkg_path, images, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset): - try: - options = { - 'nr_style': nr_style, - 'nr_intensity': float(nr_intensity), - 'local_tone_strength': float(nr_local_tone), - 'local_structure_strength': float(nr_local_structure), - 'skin_structure_strength': float(nr_skin_structure), - 'upscaling_factor': float(nr_upscaling_factor), - 'warmup_frames': 0, - 'nr_preset': nr_preset, - 'automatic_mask': bool(nr_automatic_mask), - 'dlss_model_preset': nr_model_preset, - } - response = c.controller.call(pkg_path, 'render', { 'images': c.images_to_nchw(images), 'options': options }) - if response.get('status') != 'ok': - error = response.get('error') or {} - log.error(f'DLSS: {error.get("message")}') - return None - return c.nchw_to_images(response.get('result')) - except Exception as e: - log.error(f'DLSS: {e}') - errors.display(e, 'DLSS') - return None - - def framegen(self, pkg_path, images, fg_source_fps, fg_target_fps, fg_engine): - try: - if len(images) < 2: - log.warning('DLSS: FrameGen requires at least two frames, skipping') - return None - options = { 'ai_gpu_uuid': 'auto', 'engine': fg_engine } - response = c.controller.call( - pkg_path, 'framegen', - { 'frames': c.images_to_nchw(images), 'source_fps': fg_source_fps, 'target_fps': fg_target_fps, 'options': options }, - timeout=120.0, - ) - if response.get('status') != 'ok': - error = response.get('error') or {} - log.error(f'DLSS: {error.get("message")}') - return None - return c.nchw_to_images(response.get('result')) - except Exception as e: - log.error(f'DLSS: {e}') - errors.display(e, 'DLSS') - return None - - def dlss(self, p, pp, - nr_enabled, nr_append, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset,nr_automatic_mask, nr_model_preset, - ss_enabled, ss_append, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height, - fg_enabled, fg_source_fps, fg_target_fps, fg_engine, - *args, **kwargs - ): - if not (ss_enabled or nr_enabled or fg_enabled): - return None - pkg_path = shared.opts.dlss_pkg_path - if not pkg_path or not c.controller.get_python(pkg_path): - log.error('DLSS: package path not configured') - return None - if debug: - log.trace(f'DLSS: path="{pkg_path}" args={args} kwargs={kwargs}') - - if hasattr(pp, 'images') and pp.images is not None and len(pp.images) > 0: - inputs = pp.images - elif hasattr(pp, 'image') and pp.image is not None: - inputs = [pp.image] - else: - return None - - # cast to appropriate types - nr_intensity = float(nr_intensity) - nr_local_tone = float(nr_local_tone) - nr_local_structure = float(nr_local_structure) - nr_skin_structure = float(nr_skin_structure) - nr_upscaling_factor = float(nr_upscaling_factor) - ss_width = int(ss_width) - ss_height = int(ss_height) - ss_scale_factor = float(ss_scale_factor) - fg_source_fps = float(fg_source_fps) - fg_target_fps = float(fg_target_fps) - - images = [] - originals = [] - current_images = inputs - t = timer.Timer() - - if ss_enabled: - t0 = time.time() - p.extra_generation_params["DLSSSuperSample"] = True - log.debug(f'DLSS: method=SuperSample quality="{ss_vsr_quality}" mode="{ss_size_mode}" scale={ss_scale_factor} width={ss_width} height={ss_height}') - if ss_append: - originals.extend(current_images) - output = self.supersample(pkg_path, current_images, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height) - if debug: - log.trace(f'DLSS: method=SuperSample images={len(output) if output else 0} time={time.time() - t0:.3f}') - if output: - images.extend(output) - current_images = output - t.ts('supersample', t0) - - if nr_enabled: - t0 = time.time() - p.extra_generation_params["DLSSNeuralRender"] = True - log.debug(f'DLSS: method=NeuralRender style={nr_style} intensity={nr_intensity} tone={nr_local_tone} structure={nr_local_structure} skin={nr_skin_structure} scale={nr_upscaling_factor} preset={nr_preset} mask={nr_automatic_mask} model={nr_model_preset}') - if nr_append: - originals.extend(current_images) - output = self.neuralrender(pkg_path, current_images, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset) - if debug: - log.trace(f'DLSS: method=NeuralRender images={len(output) if output else 0} time={time.time() - t0:.3f}') - if output: - images.extend(output) - current_images = output - t.ts('neuralrender', t0) - - if fg_enabled: - t0 = time.time() - p.extra_generation_params["DLSSFrameGen"] = True - log.debug(f'DLSS: method=FrameGen source={fg_source_fps} target={fg_target_fps} engine={fg_engine}') - output = self.framegen(pkg_path, current_images, fg_source_fps, fg_target_fps, fg_engine) - if debug: - log.trace(f'DLSS: method=FrameGen images={len(output) if output else 0} time={time.time() - t0:.3f}') - if output: - images.extend(output) - current_images = output - t.ts('framegen', t0) - - log.debug(f'DLSS: images={len(images)} {t.summary(min_time=0)}') - pp.images = images - pp.originals = originals - return pp + return create_ui(self.parent) def postprocess_image(self, p: processing.StableDiffusionProcessing, pp: scripts_manager.PostprocessImageArgs, *args, **kwargs): # postprocess_image is intended to modify single image in-place so not suited for dlss pass def postprocess(self, p: processing.StableDiffusionProcessing, pp: processing.Processed, *args, **kwargs): # pylint: disable=arguments-differ,unused-argument - _pp = self.dlss(p, pp, *args, **kwargs) + _pp = dlss(p, pp, *args, **kwargs) # postprocess triggers after initial images have already been saved if _pp is not None and hasattr(_pp, 'images') and _pp.images is not None: pp = _pp @@ -324,9 +337,47 @@ class DLSSScript(scripts_manager.Script): return pp -""" -add install notes -add postprocessing -add framegen -add video -""" +class DLSSPostprocessingScript(scripts_postprocessing.ScriptPostprocessing): + name = "nVidia DLSS" + order = 30000 + + def ui(self): + nr_enabled, nr_append, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset, ss_enabled, ss_append, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height, fg_enabled, fg_source_fps, fg_target_fps, fg_engine = create_ui('postprocess') + return { + "nr_enabled": nr_enabled, + "nr_append": nr_append, + "nr_style": nr_style, + "nr_intensity": nr_intensity, + "nr_local_tone": nr_local_tone, + "nr_local_structure": nr_local_structure, + "nr_skin_structure": nr_skin_structure, + "nr_upscaling_factor": nr_upscaling_factor, + "nr_preset": nr_preset, + "nr_automatic_mask": nr_automatic_mask, + "nr_model_preset": nr_model_preset, + "ss_enabled": ss_enabled, + "ss_append": ss_append, + "ss_vsr_quality": ss_vsr_quality, + "ss_size_mode": ss_size_mode, + "ss_scale_factor": ss_scale_factor, + "ss_width": ss_width, + "ss_height": ss_height, + "fg_enabled": fg_enabled, + "fg_source_fps": fg_source_fps, + "fg_target_fps": fg_target_fps, + "fg_engine": fg_engine, + } + + def process(self, pp: scripts_postprocessing.PostprocessedImage, *args, **kwargs): + nr_enabled = kwargs.get("nr_enabled", False) + ss_enabled = kwargs.get("ss_enabled", False) + fg_enabled = kwargs.get("fg_enabled", False) + if not (nr_enabled or ss_enabled or fg_enabled): + return + if pp.image is None: + return + result = dlss(None, pp, *args, **kwargs) + if result is None or not hasattr(result, "images") or len(result.images) == 0: + return + pp.image = result.images[0] + pp.info["DLSS"] = f'NR: {nr_enabled} SS: {ss_enabled} FG: {fg_enabled}' From 6928de6669761b0efd21eda32fb351ff61c4f6f5 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 9 Sep 2026 13:47:02 +0200 Subject: [PATCH 167/270] update changelog Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bd841510..5c18adf53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,18 +1,29 @@ # Change Log for SD.Next -## Update for 2026-09-08 +## Update for 2026-09-09 -### Highlights for 2026-09-08 +### Highlights for 2026-09-09 -All-about-optimizations: -- improved LoRA performance and quality, especially with quantized models -- newly structured attention mechanisms -- modular pipelines with new guidance methods -- support for different caching stacks +*What's New*? Well, code-wise, this is a big one... +First, a-lot-of-optimizations: +- improved **LoRA** performance and quality, especially with quantized models +- newly structured **attention** mechanisms +- modular pipelines with new **guidance** methods +- support for different **caching** stacks - compute updates across the board -- enhanced cloud model support -### Details for 2026-09-08 +And some cool new stuff and models: +- **DLSSv5** integration +- New models: + **Anima 2.9B**, **LLaDa-Image** +- And few cloud models: + *Google's Gemini, NanoBanana, Veo, Omni* and *X.AI's Grok* + +Plus inevitable bug-fixes... + +[Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) + +### Details for 2026-09-09 - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) @@ -34,6 +45,15 @@ All-about-optimizations: can significantly improve lora quality when using multiple loras at once - per-block strength - native support for **MiniMax** +- **DLSS** + - add DLSS support for: *NeuralRender, SuperSample and FrameGen* + dlls 5 caused quite a stir, but combined with generative ai it becomes a nice tool + - available via *extras -> dlss* as part of generate workflow or as a standalone *processing* workflow + *todo*: video support will be added in the future + - *note*: requires nvidia rtx gpu, windows platform and compatible gpu drivers + but...it can be used from wsl2: unpack required package on windows host and you can access it from the wsl2 environment + - *install*: requires [DLSS 5 Visual Enhancer](https://github.com/Merserk/dlss5-visual-enhancer/releases/tag/v7.0) + - *diag*: enable `SD_DLSS_DEBUG=true` and monitor `dlss.log` in the package directory - **Attention** - see [Attention docs](https://vladmandic.github.io/sdnext-docs/Attention) for details and usage instructions *note*: attention now has its own settings section in *settings -> cross attention* From 94d4ccfaec5e2342fcb4fa70acb3c9a7556f4c3f Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 9 Sep 2026 13:48:01 +0200 Subject: [PATCH 168/270] codespell Signed-off-by: Vladimir Mandic --- scripts/dlss_ext.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index 94a6490da..3df979471 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -84,7 +84,7 @@ def install(): 2. Enter the path to the unpacked package 3. Press verify ### Notes - - Package info is stored for future use on sucessful verification + - Package info is stored for future use on successful verification - DLSS controller process is started on first use - Use status to check the current state of the DLSS controller - Use reset to restore the DLSS controller to its default state From e2051bdf28cf237bfea6b3b158dff5e13eb55ad3 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 9 Sep 2026 14:29:38 +0200 Subject: [PATCH 169/270] add ui loading diag Signed-off-by: Vladimir Mandic --- ui/dist/sdnext.mjs | 39 ++++++++++++++++++++++++++++++--------- ui/dist/sdnext.mjs.map | 6 +++--- ui/globals.d.ts | 1 + ui/loader.ts | 10 ++++++++++ ui/script.ts | 7 ++++++- ui/startup.ts | 18 +++++++++++++----- 6 files changed, 63 insertions(+), 18 deletions(-) diff --git a/ui/dist/sdnext.mjs b/ui/dist/sdnext.mjs index 4a64811df..2f470d032 100644 --- a/ui/dist/sdnext.mjs +++ b/ui/dist/sdnext.mjs @@ -10051,6 +10051,7 @@ var ignoreElements = ["logMonitorData", "logWarnings", "logErrors", "tooltip-con var ignoreElementsSet = new Set(ignoreElements); var ignoreClasses = ["wrap"]; var mutationTimer; +var mutationTS; var validMutations = []; async function mutationCallback(mutations) { if (mutations.length <= 0) return; @@ -10064,7 +10065,10 @@ async function mutationCallback(mutations) { if (validMutations.length < 1) return; if (mutationTimer) clearTimeout(mutationTimer); mutationTimer = setTimeout(async () => { + const ts = Date.now() - mutationTS; + if (!executedOnLoaded && ts > 1e3) log("onUiLoaded delayed", { ts, prompts: anyPromptExists() }); if (!executedOnLoaded && anyPromptExists()) { + log("onUiLoaded", ts); executedOnLoaded = true; executeCallbacks(uiLoadedCallbacks); } @@ -10083,6 +10087,7 @@ async function mutationCallback(mutations) { } document.addEventListener("DOMContentLoaded", () => { log("DOMContentLoaded"); + mutationTS = Date.now(); gradioObserver = new MutationObserver(mutationCallback); gradioObserver.observe(gradioApp(), { childList: true, subtree: true, attributes: false }); }); @@ -13569,7 +13574,7 @@ Resolution: ${this.width} x ${this.height}`; } } }; - let ok2 = true; + let ok = true; if (cachedData?.img) { img.src = cachedData.img; this.exif = cachedData.exif; @@ -13582,7 +13587,7 @@ Resolution: ${this.width} x ${this.height}`; try { const json = await delayFetchThumb(this.src, this.#signal); if (!json) { - ok2 = false; + ok = false; pb.stats.failed = (pb.stats.failed || 0) + 1; } else { img.src = json.data; @@ -13617,7 +13622,7 @@ Resolution: ${this.width} x ${this.height}`; pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0); if (this.#signal.aborted) return; galleryHashes.add(this.hash); - if (!ok2) return; + if (!ok) return; img.onclick = () => { setGallerySelectionByElement(this, { send: true }); }; @@ -16086,8 +16091,8 @@ async function createSplash() {
    `; document.body.insertAdjacentHTML("beforeend", splash); - const ok2 = await preloadImages(); - if (!ok2) { + const ok = await preloadImages(); + if (!ok) { removeSplash(); return; } @@ -16106,6 +16111,15 @@ async function createSplash() { if (motdEl) motdEl.innerHTML = clean; }).catch((err) => error(`getMOTD: ${err}`)); log("loadGradioUi"); + const splashMonitor = setInterval(() => { + const splashVisible = !!document.getElementById("splash"); + if (splashVisible) { + log("splashVisible", { visible: true, elapsed: Math.round(performance.now() - appStartTime) }); + } else { + log("splashVisible", { visible: false, elapsed: Math.round(performance.now() - appStartTime) }); + clearInterval(splashMonitor); + } + }, 2500); } window.onload = createSplash; @@ -16124,18 +16138,22 @@ function addLegacyNotice() { window.api = "/sdapi/v1"; window.subpath = ""; var startupPromises = []; -var ok = false; +var optsReady = false; +var initialized = false; async function waitForOpts() { const t0 = performance.now(); let t1 = performance.now(); while (true) { - if (t1 - t0 > 12e4) { + if (t1 - t0 > 15e3) { + log("waitForOpts delayed", t1 - t0); + } + if (t1 - t0 > 6e4) { log("waitForOpts timeout"); break; } if (window.opts && Object.keys(window.opts).length > 0) { - ok = window.opts.theme_type === "Modern" ? "uiux_separator_appearance" in window.opts : true; - if (ok) { + optsReady = window.opts.theme_type === "Modern" ? "uiux_separator_appearance" in window.opts : true; + if (optsReady) { log("waitForOpts", Math.round(t1 - t0)); timer("waitForOpts", t1 - t0); break; @@ -16159,6 +16177,8 @@ async function updateSubpath() { log("API", { url: window.api }); } async function initStartup() { + if (initialized) return; + initialized = true; const t0 = performance.now(); log("initGradio", Math.round(t0 - appStartTime)); timer("initGradio", t0 - appStartTime); @@ -16202,6 +16222,7 @@ async function initStartup() { } onUiLoaded(initStartup); onUiReady(() => log("uiReady")); +window.initStartup = initStartup; // ui/extensions.ts function extensions_apply(_extensionsDisabledList, _extensionsUpdateList, disableAll) { diff --git a/ui/dist/sdnext.mjs.map b/ui/dist/sdnext.mjs.map index 66ac639cc..00c7b538f 100644 --- a/ui/dist/sdnext.mjs.map +++ b/ui/dist/sdnext.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist/jquery.js", "../js/iframeResizer.js", "../../node_modules/.pnpm/exifr@7.1.3/node_modules/exifr/dist/full.umd.js", "../../node_modules/.pnpm/wheel@1.0.0/node_modules/wheel/index.js", "../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js", "../../node_modules/.pnpm/amator@1.1.0/node_modules/amator/index.js", "../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/index.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/kinetic.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeTextSelectionInterceptor.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/transform.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeSvgController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeDomController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/index.js", "../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist-module/wrappers/jquery.node-module-wrapper.js", "../vendor.ts", "../logger.ts", "../authWrap.ts", "../timers.ts", "../script.ts", "../changelog.ts", "../control.ts", "../extraNetworks.ts", "../generationParams.ts", "../imageParams.ts", "../notification.ts", "../progressBar.ts", "../dynamicUI.ts", "../ui.ts", "../inputAccordion.ts", "../indexdb.ts", "../logMonitor.ts", "../settings.ts", "../monitor.ts", "../promptChecker.ts", "../js/sha256.ts", "../gallery.ts", "../imageViewer.ts", "../autocomplete_xn.ts", "../autocomplete.ts", "../setHints.ts", "../contextMenus.ts", "../uiConfig.ts", "../loader.ts", "../legacy.ts", "../startup.ts", "../extensions.ts", "../dragDrop.ts", "../civitai.ts", "../guidance.ts", "../timesheet.ts", "../history.ts", "../storage.ts", "../aspectRatioOverlay.ts", "../resolutionLock.ts", "../editAttention.ts", "../../node_modules/.pnpm/jquery-sparkline@2.4.0/node_modules/jquery-sparkline/jquery.sparkline.js", "../gpu.ts"], - "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet ok = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 120000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n ok = window.opts.theme_type === 'Modern' ? 'uiux_separator_appearance' in window.opts : true;\n if (ok) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nasync function initStartup() {\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], - "mappings": "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", - "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "ok", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "ok", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] + "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 2500);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', t1 - t0);\n }\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAUA,KAAE,SAAUA,SAAQ,SAAU;AAE7B;AAEA,UAAK,OAAO,WAAW,YAAY,OAAO,OAAO,YAAY,UAAW;AAIvE,eAAO,UAAU,QAASA,SAAQ,IAAK;AAAA,MACxC,OAAO;AACN,gBAASA,OAAO;AAAA,MACjB;AAAA,IAGD,GAAK,OAAO,WAAW,cAAc,SAAS,SAAM,SAAUC,SAAQ,UAAW;AAEjF;AAEA,UAAK,CAACA,QAAO,UAAW;AACvB,cAAM,IAAI,MAAO,0CAA2C;AAAA,MAC7D;AAEA,UAAI,MAAM,CAAC;AAEX,UAAI,WAAW,OAAO;AAEtB,UAAI,QAAQ,IAAI;AAIhB,UAAI,OAAO,IAAI,OAAO,SAAU,OAAQ;AACvC,eAAO,IAAI,KAAK,KAAM,KAAM;AAAA,MAC7B,IAAI,SAAU,OAAQ;AACrB,eAAO,IAAI,OAAO,MAAO,CAAC,GAAG,KAAM;AAAA,MACpC;AAEA,UAAI,OAAO,IAAI;AAEf,UAAI,UAAU,IAAI;AAGlB,UAAI,aAAa,CAAC;AAElB,UAAI,WAAW,WAAW;AAE1B,UAAI,SAAS,WAAW;AAExB,UAAI,aAAa,OAAO;AAExB,UAAI,uBAAuB,WAAW,KAAM,MAAO;AAGnD,UAAI,UAAU,CAAC;AAEf,eAAS,OAAQ,KAAM;AACtB,YAAK,OAAO,MAAO;AAClB,iBAAO,MAAM;AAAA,QACd;AAEA,eAAO,OAAO,QAAQ,WACrB,WAAY,SAAS,KAAM,GAAI,CAAE,KAAK,WACtC,OAAO;AAAA,MACT;AAEA,eAAS,SAAU,KAAM;AACxB,eAAO,OAAO,QAAQ,QAAQ,IAAI;AAAA,MACnC;AAEA,eAAS,YAAa,KAAM;AAE3B,YAAI,SAAS,CAAC,CAAC,OAAO,IAAI,QACzB,OAAO,OAAQ,GAAI;AAEpB,YAAK,OAAO,QAAQ,cAAc,SAAU,GAAI,GAAI;AACnD,iBAAO;AAAA,QACR;AAEA,eAAO,SAAS,WAAW,WAAW,KACrC,OAAO,WAAW,YAAY,SAAS,KAAO,SAAS,KAAO;AAAA,MAChE;AAEA,UAAI,aAAaA,QAAO;AAExB,UAAI,4BAA4B;AAAA,QAC/B,MAAM;AAAA,QACN,KAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,MACX;AAEA,eAAS,QAAS,MAAM,MAAM,KAAM;AACnC,cAAM,OAAO;AAEb,YAAIC,IACH,SAAS,IAAI,cAAe,QAAS;AAEtC,eAAO,OAAO;AACd,aAAMA,MAAK,2BAA4B;AACtC,cAAK,QAAQ,KAAMA,EAAE,GAAI;AACxB,mBAAQA,EAAE,IAAI,KAAMA,EAAE;AAAA,UACvB;AAAA,QACD;AAEA,YAAK,IAAI,KAAK,YAAa,MAAO,EAAE,YAAa;AAChD,iBAAO,WAAW,YAAa,MAAO;AAAA,QACvC;AAAA,MACD;AAEA,UAAI,UAAU,SAEb,cAAc,UAGdC,UAAS,SAAU,UAAU,SAAU;AAItC,eAAO,IAAIA,QAAO,GAAG,KAAM,UAAU,OAAQ;AAAA,MAC9C;AAED,MAAAA,QAAO,KAAKA,QAAO,YAAY;AAAA;AAAA,QAG9B,QAAQ;AAAA,QAER,aAAaA;AAAA;AAAA,QAGb,QAAQ;AAAA,QAER,SAAS,WAAW;AACnB,iBAAO,MAAM,KAAM,IAAK;AAAA,QACzB;AAAA;AAAA;AAAA,QAIA,KAAK,SAAU,KAAM;AAGpB,cAAK,OAAO,MAAO;AAClB,mBAAO,MAAM,KAAM,IAAK;AAAA,UACzB;AAGA,iBAAO,MAAM,IAAI,KAAM,MAAM,KAAK,MAAO,IAAI,KAAM,GAAI;AAAA,QACxD;AAAA;AAAA;AAAA,QAIA,WAAW,SAAU,OAAQ;AAG5B,cAAI,MAAMA,QAAO,MAAO,KAAK,YAAY,GAAG,KAAM;AAGlD,cAAI,aAAa;AAGjB,iBAAO;AAAA,QACR;AAAA;AAAA,QAGA,MAAM,SAAU,UAAW;AAC1B,iBAAOA,QAAO,KAAM,MAAM,QAAS;AAAA,QACpC;AAAA,QAEA,KAAK,SAAU,UAAW;AACzB,iBAAO,KAAK,UAAWA,QAAO,IAAK,MAAM,SAAU,MAAMD,IAAI;AAC5D,mBAAO,SAAS,KAAM,MAAMA,IAAG,IAAK;AAAA,UACrC,CAAE,CAAE;AAAA,QACL;AAAA,QAEA,OAAO,WAAW;AACjB,iBAAO,KAAK,UAAW,MAAM,MAAO,MAAM,SAAU,CAAE;AAAA,QACvD;AAAA,QAEA,OAAO,WAAW;AACjB,iBAAO,KAAK,GAAI,CAAE;AAAA,QACnB;AAAA,QAEA,MAAM,WAAW;AAChB,iBAAO,KAAK,GAAI,EAAG;AAAA,QACpB;AAAA,QAEA,MAAM,WAAW;AAChB,iBAAO,KAAK,UAAWC,QAAO,KAAM,MAAM,SAAU,OAAOD,IAAI;AAC9D,oBAASA,KAAI,KAAM;AAAA,UACpB,CAAE,CAAE;AAAA,QACL;AAAA,QAEA,KAAK,WAAW;AACf,iBAAO,KAAK,UAAWC,QAAO,KAAM,MAAM,SAAU,OAAOD,IAAI;AAC9D,mBAAOA,KAAI;AAAA,UACZ,CAAE,CAAE;AAAA,QACL;AAAA,QAEA,IAAI,SAAUA,IAAI;AACjB,cAAI,MAAM,KAAK,QACd,IAAI,CAACA,MAAMA,KAAI,IAAI,MAAM;AAC1B,iBAAO,KAAK,UAAW,KAAK,KAAK,IAAI,MAAM,CAAE,KAAM,CAAE,CAAE,IAAI,CAAC,CAAE;AAAA,QAC/D;AAAA,QAEA,KAAK,WAAW;AACf,iBAAO,KAAK,cAAc,KAAK,YAAY;AAAA,QAC5C;AAAA,MACD;AAEA,MAAAC,QAAO,SAASA,QAAO,GAAG,SAAS,WAAW;AAC7C,YAAI,SAAS,MAAM,KAAK,MAAM,aAAa,OAC1C,SAAS,UAAW,CAAE,KAAK,CAAC,GAC5BD,KAAI,GACJ,SAAS,UAAU,QACnB,OAAO;AAGR,YAAK,OAAO,WAAW,WAAY;AAClC,iBAAO;AAGP,mBAAS,UAAWA,EAAE,KAAK,CAAC;AAC5B,UAAAA;AAAA,QACD;AAGA,YAAK,OAAO,WAAW,YAAY,OAAO,WAAW,YAAa;AACjE,mBAAS,CAAC;AAAA,QACX;AAGA,YAAKA,OAAM,QAAS;AACnB,mBAAS;AACT,UAAAA;AAAA,QACD;AAEA,eAAQA,KAAI,QAAQA,MAAM;AAGzB,eAAO,UAAU,UAAWA,EAAE,MAAO,MAAO;AAG3C,iBAAM,QAAQ,SAAU;AACvB,qBAAO,QAAS,IAAK;AAIrB,kBAAK,SAAS,eAAe,WAAW,MAAO;AAC9C;AAAA,cACD;AAGA,kBAAK,QAAQ,SAAUC,QAAO,cAAe,IAAK,MAC/C,cAAc,MAAM,QAAS,IAAK,KAAQ;AAC5C,sBAAM,OAAQ,IAAK;AAGnB,oBAAK,eAAe,CAAC,MAAM,QAAS,GAAI,GAAI;AAC3C,0BAAQ,CAAC;AAAA,gBACV,WAAY,CAAC,eAAe,CAACA,QAAO,cAAe,GAAI,GAAI;AAC1D,0BAAQ,CAAC;AAAA,gBACV,OAAO;AACN,0BAAQ;AAAA,gBACT;AACA,8BAAc;AAGd,uBAAQ,IAAK,IAAIA,QAAO,OAAQ,MAAM,OAAO,IAAK;AAAA,cAGnD,WAAY,SAAS,QAAY;AAChC,uBAAQ,IAAK,IAAI;AAAA,cAClB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAGA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,OAAQ;AAAA;AAAA,QAGd,SAAS,YAAa,UAAU,KAAK,OAAO,GAAI,QAAS,OAAO,EAAG;AAAA;AAAA,QAGnE,SAAS;AAAA,QAET,OAAO,SAAU,KAAM;AACtB,gBAAM,IAAI,MAAO,GAAI;AAAA,QACtB;AAAA,QAEA,MAAM,WAAW;AAAA,QAAC;AAAA,QAElB,eAAe,SAAU,KAAM;AAC9B,cAAI,OAAO;AAIX,cAAK,CAAC,OAAO,SAAS,KAAM,GAAI,MAAM,mBAAoB;AACzD,mBAAO;AAAA,UACR;AAEA,kBAAQ,SAAU,GAAI;AAGtB,cAAK,CAAC,OAAQ;AACb,mBAAO;AAAA,UACR;AAGA,iBAAO,OAAO,KAAM,OAAO,aAAc,KAAK,MAAM;AACpD,iBAAO,OAAO,SAAS,cAAc,WAAW,KAAM,IAAK,MAAM;AAAA,QAClE;AAAA,QAEA,eAAe,SAAU,KAAM;AAC9B,cAAI;AAEJ,eAAM,QAAQ,KAAM;AACnB,mBAAO;AAAA,UACR;AACA,iBAAO;AAAA,QACR;AAAA;AAAA;AAAA,QAIA,YAAY,SAAU,MAAM,SAAS,KAAM;AAC1C,kBAAS,MAAM,EAAE,OAAO,WAAW,QAAQ,MAAM,GAAG,GAAI;AAAA,QACzD;AAAA,QAEA,MAAM,SAAU,KAAK,UAAW;AAC/B,cAAI,QAAQD,KAAI;AAEhB,cAAK,YAAa,GAAI,GAAI;AACzB,qBAAS,IAAI;AACb,mBAAQA,KAAI,QAAQA,MAAM;AACzB,kBAAK,SAAS,KAAM,IAAKA,EAAE,GAAGA,IAAG,IAAKA,EAAE,CAAE,MAAM,OAAQ;AACvD;AAAA,cACD;AAAA,YACD;AAAA,UACD,OAAO;AACN,iBAAMA,MAAK,KAAM;AAChB,kBAAK,SAAS,KAAM,IAAKA,EAAE,GAAGA,IAAG,IAAKA,EAAE,CAAE,MAAM,OAAQ;AACvD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA;AAAA,QAIA,MAAM,SAAU,MAAO;AACtB,cAAI,MACH,MAAM,IACNA,KAAI,GACJ,WAAW,KAAK;AAEjB,cAAK,CAAC,UAAW;AAGhB,mBAAU,OAAO,KAAMA,IAAI,GAAM;AAGhC,qBAAOC,QAAO,KAAM,IAAK;AAAA,YAC1B;AAAA,UACD;AACA,cAAK,aAAa,KAAK,aAAa,IAAK;AACxC,mBAAO,KAAK;AAAA,UACb;AACA,cAAK,aAAa,GAAI;AACrB,mBAAO,KAAK,gBAAgB;AAAA,UAC7B;AACA,cAAK,aAAa,KAAK,aAAa,GAAI;AACvC,mBAAO,KAAK;AAAA,UACb;AAIA,iBAAO;AAAA,QACR;AAAA;AAAA,QAIA,WAAW,SAAUC,MAAK,SAAU;AACnC,cAAI,MAAM,WAAW,CAAC;AAEtB,cAAKA,QAAO,MAAO;AAClB,gBAAK,YAAa,OAAQA,IAAI,CAAE,GAAI;AACnC,cAAAD,QAAO;AAAA,gBAAO;AAAA,gBACb,OAAOC,SAAQ,WACd,CAAEA,IAAI,IAAIA;AAAA,cACZ;AAAA,YACD,OAAO;AACN,mBAAK,KAAM,KAAKA,IAAI;AAAA,YACrB;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,SAAS,SAAU,MAAMA,MAAKF,IAAI;AACjC,iBAAOE,QAAO,OAAO,KAAK,QAAQ,KAAMA,MAAK,MAAMF,EAAE;AAAA,QACtD;AAAA,QAEA,UAAU,SAAU,MAAO;AAC1B,cAAI,YAAY,QAAQ,KAAK,cAC5B,UAAU,SAAU,KAAK,iBAAiB,MAAO;AAIlD,iBAAO,CAAC,YAAY,KAAM,aAAa,WAAW,QAAQ,YAAY,MAAO;AAAA,QAC9E;AAAA;AAAA,QAGA,UAAU,SAAU,GAAG,GAAI;AAC1B,cAAI,MAAM,KAAK,EAAE;AAEjB,iBAAO,MAAM,OAAO,CAAC,EAAG,OAAO,IAAI,aAAa;AAAA;AAAA,WAI/C,EAAE,WACD,EAAE,SAAU,GAAI,IAChB,EAAE,2BAA2B,EAAE,wBAAyB,GAAI,IAAI;AAAA,QAEnE;AAAA,QAEA,OAAO,SAAU,OAAO,QAAS;AAChC,cAAI,MAAM,CAAC,OAAO,QACjB,IAAI,GACJA,KAAI,MAAM;AAEX,iBAAQ,IAAI,KAAK,KAAM;AACtB,kBAAOA,IAAI,IAAI,OAAQ,CAAE;AAAA,UAC1B;AAEA,gBAAM,SAASA;AAEf,iBAAO;AAAA,QACR;AAAA,QAEA,MAAM,SAAU,OAAO,UAAU,QAAS;AACzC,cAAI,iBACHG,WAAU,CAAC,GACXH,KAAI,GACJ,SAAS,MAAM,QACf,iBAAiB,CAAC;AAInB,iBAAQA,KAAI,QAAQA,MAAM;AACzB,8BAAkB,CAAC,SAAU,MAAOA,EAAE,GAAGA,EAAE;AAC3C,gBAAK,oBAAoB,gBAAiB;AACzC,cAAAG,SAAQ,KAAM,MAAOH,EAAE,CAAE;AAAA,YAC1B;AAAA,UACD;AAEA,iBAAOG;AAAA,QACR;AAAA;AAAA,QAGA,KAAK,SAAU,OAAO,UAAU,KAAM;AACrC,cAAI,QAAQ,OACXH,KAAI,GACJ,MAAM,CAAC;AAGR,cAAK,YAAa,KAAM,GAAI;AAC3B,qBAAS,MAAM;AACf,mBAAQA,KAAI,QAAQA,MAAM;AACzB,sBAAQ,SAAU,MAAOA,EAAE,GAAGA,IAAG,GAAI;AAErC,kBAAK,SAAS,MAAO;AACpB,oBAAI,KAAM,KAAM;AAAA,cACjB;AAAA,YACD;AAAA,UAGD,OAAO;AACN,iBAAMA,MAAK,OAAQ;AAClB,sBAAQ,SAAU,MAAOA,EAAE,GAAGA,IAAG,GAAI;AAErC,kBAAK,SAAS,MAAO;AACpB,oBAAI,KAAM,KAAM;AAAA,cACjB;AAAA,YACD;AAAA,UACD;AAGA,iBAAO,KAAM,GAAI;AAAA,QAClB;AAAA;AAAA,QAGA,MAAM;AAAA;AAAA;AAAA,QAIN;AAAA,MACD,CAAE;AAEF,UAAK,OAAO,WAAW,YAAa;AACnC,QAAAC,QAAO,GAAI,OAAO,QAAS,IAAI,IAAK,OAAO,QAAS;AAAA,MACrD;AAGA,MAAAA,QAAO;AAAA,QAAM,uEAAuE,MAAO,GAAI;AAAA,QAC9F,SAAU,IAAI,MAAO;AACpB,qBAAY,aAAa,OAAO,GAAI,IAAI,KAAK,YAAY;AAAA,QAC1D;AAAA,MAAE;AAEH,eAAS,SAAU,MAAM,MAAO;AAC/B,eAAO,KAAK,YAAY,KAAK,SAAS,YAAY,MAAM,KAAK,YAAY;AAAA,MAC1E;AAEA,UAAI,MAAM,IAAI;AAGd,UAAI,aAAa;AAEjB,UAAI,OAAO,WAAW;AAEtB,UAAI,YAAY,QAAQ,IAAI;AAAA;AAAA;AAAA,QAI3B,2BAMQ,aAAa,UAAU,aAAa,OAC5C,aAAa;AAAA,MAEd;AAEA,UAAI,WAAW,IAAI;AAAA,QAClB,MAAM,aAAa,gCAAgC,aAAa;AAAA,QAChE;AAAA,MACD;AAGA,UAAI,aAAa,4BAA4B,aAC5C;AAED,UAAI,qBAAqB,IAAI,OAAQ,MAAM,aAAa,aACvD,aAAa,MAAM,aAAa,GAAI;AAErC,UAAI,WAAW,IAAI,OAAQ,aAAa,IAAK;AAE7C,UAAI,WAAW;AAEf,UAAI,oBAAoB,WAAW;AAInC,UAAI,UAAU,kBAAkB,WAAW,kBAAkB;AAQ7D,eAAS,cAAc;AACtB,YAAI,OAAO,CAAC;AAEZ,iBAAS,MAAO,KAAK,OAAQ;AAI5B,cAAK,KAAK,KAAM,MAAM,GAAI,IAAIA,QAAO,KAAK,aAAc;AAGvD,mBAAO,MAAO,KAAK,MAAM,CAAE;AAAA,UAC5B;AACA,iBAAS,MAAO,MAAM,GAAI,IAAI;AAAA,QAC/B;AACA,eAAO;AAAA,MACR;AAOA,eAAS,YAAa,SAAU;AAC/B,eAAO,WAAW,OAAO,QAAQ,yBAAyB,eAAe;AAAA,MAC1E;AAGA,UAAI,aAAa,QAAQ,aAAa,OAAO,aAAa,SAAS;AAAA,MAGlE,kBAAkB;AAAA,MAGlB,0DAA6D,aAAa,SAC1E,aAAa;AAEd,UAAI,UAAU,OAAO,aAAa,uFAOJ,aAAa;AAM3C,UAAI,kBAAkB;AAAA,QACrB,IAAI,IAAI,OAAQ,QAAQ,aAAa,GAAI;AAAA,QACzC,OAAO,IAAI,OAAQ,UAAU,aAAa,GAAI;AAAA,QAC9C,KAAK,IAAI,OAAQ,OAAO,aAAa,OAAQ;AAAA,QAC7C,MAAM,IAAI,OAAQ,MAAM,UAAW;AAAA,QACnC,QAAQ,IAAI,OAAQ,MAAM,OAAQ;AAAA,QAClC,OAAO,IAAI;AAAA,UACV,2DACA,aAAa,iCAAiC,aAAa,gBAC3D,aAAa,eAAe,aAAa;AAAA,UAAU;AAAA,QAAI;AAAA,MACzD;AAEA,UAAI,UAAU,IAAI,OAAQ,OAAQ;AAKlC,UAAI,YAAY,IAAI,OAAQ,yBAAyB,aACpD,wBAAwB,GAAI,GAC5B,YAAY,SAAUG,SAAQ,QAAS;AACtC,YAAI,OAAO,OAAOA,QAAO,MAAO,CAAE,IAAI;AAEtC,YAAK,QAAS;AAGb,iBAAO;AAAA,QACR;AAMA,eAAO,OAAO,IACb,OAAO,aAAc,OAAO,KAAQ,IACpC,OAAO,aAAc,QAAQ,KAAK,OAAQ,OAAO,OAAQ,KAAO;AAAA,MAClE;AAED,eAAS,iBAAkB,KAAM;AAChC,eAAO,IAAI,QAAS,WAAW,SAAU;AAAA,MAC1C;AAEA,eAAS,cAAe,KAAM;AAC7B,QAAAH,QAAO,MAAO,4CAA4C,GAAI;AAAA,MAC/D;AAEA,UAAI,SAAS,IAAI,OAAQ,MAAM,aAAa,OAAO,aAAa,GAAI;AAEpE,UAAI,aAAa,YAAY;AAE7B,eAAS,SAAU,UAAU,WAAY;AACxC,YAAI,SAAS,OAAO,QAAQ,MAC3B,OAAO,QAAQ,YACf,SAAS,WAAY,WAAW,GAAI;AAErC,YAAK,QAAS;AACb,iBAAO,YAAY,IAAI,OAAO,MAAO,CAAE;AAAA,QACxC;AAEA,gBAAQ;AACR,iBAAS,CAAC;AACV,qBAAaA,QAAO,KAAK;AAEzB,eAAQ,OAAQ;AAGf,cAAK,CAAC,YAAa,QAAQ,OAAO,KAAM,KAAM,IAAM;AACnD,gBAAK,OAAQ;AAGZ,sBAAQ,MAAM,MAAO,MAAO,CAAE,EAAE,MAAO,KAAK;AAAA,YAC7C;AACA,mBAAO,KAAQ,SAAS,CAAC,CAAI;AAAA,UAC9B;AAEA,oBAAU;AAGV,cAAO,QAAQ,mBAAmB,KAAM,KAAM,GAAM;AACnD,sBAAU,MAAM,MAAM;AACtB,mBAAO,KAAM;AAAA,cACZ,OAAO;AAAA;AAAA,cAGP,MAAM,MAAO,CAAE,EAAE,QAAS,UAAU,GAAI;AAAA,YACzC,CAAE;AACF,oBAAQ,MAAM,MAAO,QAAQ,MAAO;AAAA,UACrC;AAGA,eAAM,QAAQ,iBAAkB;AAC/B,iBAAO,QAAQA,QAAO,KAAK,MAAO,IAAK,EAAE,KAAM,KAAM,OAAS,CAAC,WAAY,IAAK,MAC7E,QAAQ,WAAY,IAAK,EAAG,KAAM,KAAQ;AAC5C,wBAAU,MAAM,MAAM;AACtB,qBAAO,KAAM;AAAA,gBACZ,OAAO;AAAA,gBACP;AAAA,gBACA,SAAS;AAAA,cACV,CAAE;AACF,sBAAQ,MAAM,MAAO,QAAQ,MAAO;AAAA,YACrC;AAAA,UACD;AAEA,cAAK,CAAC,SAAU;AACf;AAAA,UACD;AAAA,QACD;AAKA,YAAK,WAAY;AAChB,iBAAO,MAAM;AAAA,QACd;AAEA,eAAO,QACN,cAAe,QAAS;AAAA;AAAA,UAGxB,WAAY,UAAU,MAAO,EAAE,MAAO,CAAE;AAAA;AAAA,MAC1C;AAEA,UAAI,YAAY;AAAA,QACf,MAAM,SAAU,OAAQ;AACvB,gBAAO,CAAE,IAAI,iBAAkB,MAAO,CAAE,CAAE;AAG1C,gBAAO,CAAE,IAAI,iBAAkB,MAAO,CAAE,KAAK,MAAO,CAAE,KAAK,MAAO,CAAE,KAAK,EAAG;AAE5E,cAAK,MAAO,CAAE,MAAM,MAAO;AAC1B,kBAAO,CAAE,IAAI,MAAM,MAAO,CAAE,IAAI;AAAA,UACjC;AAEA,iBAAO,MAAM,MAAO,GAAG,CAAE;AAAA,QAC1B;AAAA,QAEA,OAAO,SAAU,OAAQ;AAYxB,gBAAO,CAAE,IAAI,MAAO,CAAE,EAAE,YAAY;AAEpC,cAAK,MAAO,CAAE,EAAE,MAAO,GAAG,CAAE,MAAM,OAAQ;AAGzC,gBAAK,CAAC,MAAO,CAAE,GAAI;AAClB,4BAAe,MAAO,CAAE,CAAE;AAAA,YAC3B;AAIA,kBAAO,CAAE,IAAI,EAAG,MAAO,CAAE,IACxB,MAAO,CAAE,KAAM,MAAO,CAAE,KAAK,KAC7B,KAAM,MAAO,CAAE,MAAM,UAAU,MAAO,CAAE,MAAM;AAE/C,kBAAO,CAAE,IAAI,EAAK,MAAO,CAAE,IAAI,MAAO,CAAE,KAAO,MAAO,CAAE,MAAM;AAAA,UAG/D,WAAY,MAAO,CAAE,GAAI;AACxB,0BAAe,MAAO,CAAE,CAAE;AAAA,UAC3B;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,QAAQ,SAAU,OAAQ;AACzB,cAAI,QACH,WAAW,CAAC,MAAO,CAAE,KAAK,MAAO,CAAE;AAEpC,cAAK,gBAAgB,MAAM,KAAM,MAAO,CAAE,CAAE,GAAI;AAC/C,mBAAO;AAAA,UACR;AAGA,cAAK,MAAO,CAAE,GAAI;AACjB,kBAAO,CAAE,IAAI,MAAO,CAAE,KAAK,MAAO,CAAE,KAAK;AAAA,UAG1C,WAAY,YAAY,QAAQ,KAAM,QAAS;AAAA,WAG5C,SAAS,SAAU,UAAU,IAAK;AAAA,WAGlC,SAAS,SAAS,QAAS,KAAK,SAAS,SAAS,MAAO,IAC1D,SAAS,SAAW;AAGrB,kBAAO,CAAE,IAAI,MAAO,CAAE,EAAE,MAAO,GAAG,MAAO;AACzC,kBAAO,CAAE,IAAI,SAAS,MAAO,GAAG,MAAO;AAAA,UACxC;AAGA,iBAAO,MAAM,MAAO,GAAG,CAAE;AAAA,QAC1B;AAAA,MACD;AAEA,eAAS,WAAY,QAAS;AAC7B,YAAID,KAAI,GACP,MAAM,OAAO,QACb,WAAW;AACZ,eAAQA,KAAI,KAAKA,MAAM;AACtB,sBAAY,OAAQA,EAAE,EAAE;AAAA,QACzB;AACA,eAAO;AAAA,MACR;AAIA,eAAS,OAAQ,OAAO,IAAI,KAAK,OAAO,WAAW,UAAU,KAAM;AAClE,YAAIA,KAAI,GACP,MAAM,MAAM,QACZ,OAAO,OAAO;AAGf,YAAK,OAAQ,GAAI,MAAM,UAAW;AACjC,sBAAY;AACZ,eAAMA,MAAK,KAAM;AAChB,mBAAQ,OAAO,IAAIA,IAAG,IAAKA,EAAE,GAAG,MAAM,UAAU,GAAI;AAAA,UACrD;AAAA,QAGD,WAAY,UAAU,QAAY;AACjC,sBAAY;AAEZ,cAAK,OAAO,UAAU,YAAa;AAClC,kBAAM;AAAA,UACP;AAEA,cAAK,MAAO;AAGX,gBAAK,KAAM;AACV,iBAAG,KAAM,OAAO,KAAM;AACtB,mBAAK;AAAA,YAGN,OAAO;AACN,qBAAO;AACP,mBAAK,SAAU,MAAM,MAAMK,QAAQ;AAClC,uBAAO,KAAK,KAAMJ,QAAQ,IAAK,GAAGI,MAAM;AAAA,cACzC;AAAA,YACD;AAAA,UACD;AAEA,cAAK,IAAK;AACT,mBAAQL,KAAI,KAAKA,MAAM;AACtB;AAAA,gBACC,MAAOA,EAAE;AAAA,gBAAG;AAAA,gBAAK,MAChB,QACA,MAAM,KAAM,MAAOA,EAAE,GAAGA,IAAG,GAAI,MAAOA,EAAE,GAAG,GAAI,CAAE;AAAA,cACnD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,YAAK,WAAY;AAChB,iBAAO;AAAA,QACR;AAGA,YAAK,MAAO;AACX,iBAAO,GAAG,KAAM,KAAM;AAAA,QACvB;AAEA,eAAO,MAAM,GAAI,MAAO,CAAE,GAAG,GAAI,IAAI;AAAA,MACtC;AAKA,UAAI,gBAAgB;AAEpB,MAAAC,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,MAAM,OAAQ;AAC7B,iBAAO,OAAQ,MAAMA,QAAO,MAAM,MAAM,OAAO,UAAU,SAAS,CAAE;AAAA,QACrE;AAAA,QAEA,YAAY,SAAU,MAAO;AAC5B,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAAA,QAAO,WAAY,MAAM,IAAK;AAAA,UAC/B,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,OAAQ;AAAA,QACd,MAAM,SAAU,MAAM,MAAM,OAAQ;AACnC,cAAI,KAAK,OACR,QAAQ,KAAK;AAGd,cAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAI;AAChD;AAAA,UACD;AAGA,cAAK,OAAO,KAAK,iBAAiB,aAAc;AAC/C,mBAAOA,QAAO,KAAM,MAAM,MAAM,KAAM;AAAA,UACvC;AAIA,cAAK,UAAU,KAAK,CAACA,QAAO,SAAU,IAAK,GAAI;AAC9C,oBAAQA,QAAO,UAAW,KAAK,YAAY,CAAE;AAAA,UAC9C;AAEA,cAAK,UAAU,QAAY;AAC1B,gBAAK,UAAU;AAAA;AAAA;AAAA;AAAA,YAMZ,UAAU,SAAS,KAAK,YAAY,EAAE,QAAS,OAAQ,MAAM,GAAM;AAErE,cAAAA,QAAO,WAAY,MAAM,IAAK;AAC9B;AAAA,YACD;AAEA,gBAAK,SAAS,SAAS,UACpB,MAAM,MAAM,IAAK,MAAM,OAAO,IAAK,OAAQ,QAAY;AACzD,qBAAO;AAAA,YACR;AAEA,iBAAK,aAAc,MAAM,KAAM;AAC/B,mBAAO;AAAA,UACR;AAEA,cAAK,SAAS,SAAS,UAAW,MAAM,MAAM,IAAK,MAAM,IAAK,OAAQ,MAAO;AAC5E,mBAAO;AAAA,UACR;AAEA,gBAAM,KAAK,aAAc,IAAK;AAG9B,iBAAO,OAAO,OAAO,SAAY;AAAA,QAClC;AAAA,QAEA,WAAW,CAAC;AAAA,QAEZ,YAAY,SAAU,MAAM,OAAQ;AACnC,cAAI,MACHD,KAAI,GAIJ,YAAY,SAAS,MAAM,MAAO,aAAc;AAEjD,cAAK,aAAa,KAAK,aAAa,GAAI;AACvC,mBAAU,OAAO,UAAWA,IAAI,GAAM;AACrC,mBAAK,gBAAiB,IAAK;AAAA,YAC5B;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAIF,UAAK,MAAO;AACX,QAAAC,QAAO,UAAU,OAAO;AAAA,UACvB,KAAK,SAAU,MAAM,OAAQ;AAC5B,gBAAK,UAAU,WAAW,SAAU,MAAM,OAAQ,GAAI;AACrD,kBAAI,MAAM,KAAK;AACf,mBAAK,aAAc,QAAQ,KAAM;AACjC,kBAAK,KAAM;AACV,qBAAK,QAAQ;AAAA,cACd;AACA,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAIA,UAAI,aAAa;AAEjB,eAAS,WAAY,IAAI,aAAc;AACtC,YAAK,aAAc;AAGlB,cAAK,OAAO,MAAO;AAClB,mBAAO;AAAA,UACR;AAGA,iBAAO,GAAG,MAAO,GAAG,EAAG,IAAI,OAAO,GAAG,WAAY,GAAG,SAAS,CAAE,EAAE,SAAU,EAAG,IAAI;AAAA,QACnF;AAGA,eAAO,OAAO;AAAA,MACf;AAEA,MAAAA,QAAO,iBAAiB,SAAU,KAAM;AACvC,gBAAS,MAAM,IAAK,QAAS,YAAY,UAAW;AAAA,MACrD;AAEA,UAAI,OAAO,IAAI;AAEf,UAAI,SAAS,IAAI;AAEjB,UAAI;AAGJ,eAAS,UAAW,GAAG,GAAI;AAG1B,YAAK,MAAM,GAAI;AACd,yBAAe;AACf,iBAAO;AAAA,QACR;AAGA,YAAI,UAAU,CAAC,EAAE,0BAA0B,CAAC,EAAE;AAC9C,YAAK,SAAU;AACd,iBAAO;AAAA,QACR;AAOA,mBAAY,EAAE,iBAAiB,OAAS,EAAE,iBAAiB,KAC1D,EAAE,wBAAyB,CAAE;AAAA;AAAA,UAG7B;AAAA;AAGD,YAAK,UAAU,GAAI;AAOlB,cAAK,KAAK,cAAc,EAAE,iBAAiB,cAC1CA,QAAO,SAAU,YAAY,CAAE,GAAI;AACnC,mBAAO;AAAA,UACR;AAMA,cAAK,KAAK,cAAc,EAAE,iBAAiB,cAC1CA,QAAO,SAAU,YAAY,CAAE,GAAI;AACnC,mBAAO;AAAA,UACR;AAGA,iBAAO;AAAA,QACR;AAEA,eAAO,UAAU,IAAI,KAAK;AAAA,MAC3B;AAMA,MAAAA,QAAO,aAAa,SAAU,SAAU;AACvC,YAAI,MACH,aAAa,CAAC,GACd,IAAI,GACJD,KAAI;AAEL,uBAAe;AAEf,aAAK,KAAM,SAAS,SAAU;AAE9B,YAAK,cAAe;AACnB,iBAAU,OAAO,QAASA,IAAI,GAAM;AACnC,gBAAK,SAAS,QAASA,EAAE,GAAI;AAC5B,kBAAI,WAAW,KAAMA,EAAE;AAAA,YACxB;AAAA,UACD;AACA,iBAAQ,KAAM;AACb,mBAAO,KAAM,SAAS,WAAY,CAAE,GAAG,CAAE;AAAA,UAC1C;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAAC,QAAO,GAAG,aAAa,WAAW;AACjC,eAAO,KAAK,UAAWA,QAAO,WAAY,MAAM,MAAO,IAAK,CAAE,CAAE;AAAA,MACjE;AAEA,UAAI,GACH,kBAGAK,WACA,iBACA,gBAGA,UAAU,GACV,OAAO,GACP,aAAa,YAAY,GACzB,gBAAgB,YAAY,GAC5B,yBAAyB,YAAY,GAKrC,cAAc,IAAI,OAAQ,aAAa,KAAK,GAAI,GAEhD,cAAc,IAAI,OAAQ,MAAM,aAAa,GAAI,GAEjD,YAAYL,QAAO,OAAQ;AAAA;AAAA;AAAA,QAI1B,cAAc,IAAI,OAAQ,MAAM,aAC/B,qDAAqD,aACrD,qBAAqB,aAAa,oBAAoB,GAAI;AAAA,MAC5D,GAAG,eAAgB,GAEnB,UAAU,uCACV,UAAU,UAGV,eAAe,oCAMf,gBAAgB,WAAW;AAC1B,oBAAY;AAAA,MACb,GAEA,qBAAqB;AAAA,QACpB,SAAU,MAAO;AAChB,iBAAO,KAAK,aAAa,QAAQ,SAAU,MAAM,UAAW;AAAA,QAC7D;AAAA,QACA,EAAE,KAAK,cAAc,MAAM,SAAS;AAAA,MACrC;AAED,eAAS,KAAM,UAAU,SAAS,SAAS,MAAO;AACjD,YAAI,GAAGD,IAAG,MAAM,KAAK,OAAO,QAAQ,aACnC,aAAa,WAAW,QAAQ,eAGhC,WAAW,UAAU,QAAQ,WAAW;AAEzC,kBAAU,WAAW,CAAC;AAGtB,YAAK,OAAO,aAAa,YAAY,CAAC,YACrC,aAAa,KAAK,aAAa,KAAK,aAAa,IAAK;AAEtD,iBAAO;AAAA,QACR;AAGA,YAAK,CAAC,MAAO;AACZ,sBAAa,OAAQ;AACrB,oBAAU,WAAWM;AAErB,cAAK,gBAAiB;AAIrB,gBAAK,aAAa,OAAQ,QAAQ,aAAa,KAAM,QAAS,IAAM;AAGnE,kBAAO,IAAI,MAAO,CAAE,GAAM;AAGzB,oBAAK,aAAa,GAAI;AACrB,sBAAO,OAAO,QAAQ,eAAgB,CAAE,GAAM;AAC7C,yBAAK,KAAM,SAAS,IAAK;AAAA,kBAC1B;AACA,yBAAO;AAAA,gBAGR,OAAO;AACN,sBAAK,eAAgB,OAAO,WAAW,eAAgB,CAAE,MACxDL,QAAO,SAAU,SAAS,IAAK,GAAI;AAEnC,yBAAK,KAAM,SAAS,IAAK;AACzB,2BAAO;AAAA,kBACR;AAAA,gBACD;AAAA,cAGD,WAAY,MAAO,CAAE,GAAI;AACxB,qBAAK,MAAO,SAAS,QAAQ,qBAAsB,QAAS,CAAE;AAC9D,uBAAO;AAAA,cAGR,YAAc,IAAI,MAAO,CAAE,MAAO,QAAQ,wBAAyB;AAClE,qBAAK,MAAO,SAAS,QAAQ,uBAAwB,CAAE,CAAE;AACzD,uBAAO;AAAA,cACR;AAAA,YACD;AAGA,gBAAK,CAAC,uBAAwB,WAAW,GAAI,MAC1C,CAAC,aAAa,CAAC,UAAU,KAAM,QAAS,IAAM;AAEhD,4BAAc;AACd,2BAAa;AASb,kBAAK,aAAa,MACf,SAAS,KAAM,QAAS,KAAK,mBAAmB,KAAM,QAAS,IAAM;AAGvE,6BAAa,SAAS,KAAM,QAAS,KACpC,YAAa,QAAQ,UAAW,KAChC;AAQD,oBAAK,cAAc,WAAW,MAAO;AAGpC,sBAAO,MAAM,QAAQ,aAAc,IAAK,GAAM;AAC7C,0BAAMA,QAAO,eAAgB,GAAI;AAAA,kBAClC,OAAO;AACN,4BAAQ,aAAc,MAAQ,MAAMA,QAAO,OAAU;AAAA,kBACtD;AAAA,gBACD;AAGA,yBAAS,SAAU,QAAS;AAC5B,gBAAAD,KAAI,OAAO;AACX,uBAAQA,MAAM;AACb,yBAAQA,EAAE,KAAM,MAAM,MAAM,MAAM,YAAa,MAC9C,WAAY,OAAQA,EAAE,CAAE;AAAA,gBAC1B;AACA,8BAAc,OAAO,KAAM,GAAI;AAAA,cAChC;AAEA,kBAAI;AACH,qBAAK;AAAA,kBAAO;AAAA,kBACX,WAAW,iBAAkB,WAAY;AAAA,gBAC1C;AACA,uBAAO;AAAA,cACR,SAAU,UAAW;AACpB,uCAAwB,UAAU,IAAK;AAAA,cACxC,UAAE;AACD,oBAAK,QAAQC,QAAO,SAAU;AAC7B,0BAAQ,gBAAiB,IAAK;AAAA,gBAC/B;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAGA,eAAO,OAAQ,SAAS,QAAS,UAAU,IAAK,GAAG,SAAS,SAAS,IAAK;AAAA,MAC3E;AAMA,eAAS,aAAc,IAAK;AAC3B,WAAIA,QAAO,OAAQ,IAAI;AACvB,eAAO;AAAA,MACR;AAMA,eAAS,kBAAmB,MAAO;AAClC,eAAO,SAAU,MAAO;AACvB,iBAAO,SAAU,MAAM,OAAQ,KAAK,KAAK,SAAS;AAAA,QACnD;AAAA,MACD;AAMA,eAAS,mBAAoB,MAAO;AACnC,eAAO,SAAU,MAAO;AACvB,kBAAS,SAAU,MAAM,OAAQ,KAAK,SAAU,MAAM,QAAS,MAC9D,KAAK,SAAS;AAAA,QAChB;AAAA,MACD;AAMA,eAAS,qBAAsB,UAAW;AAGzC,eAAO,SAAU,MAAO;AAKvB,cAAK,UAAU,MAAO;AASrB,gBAAK,KAAK,cAAc,KAAK,aAAa,OAAQ;AAGjD,kBAAK,WAAW,MAAO;AACtB,oBAAK,WAAW,KAAK,YAAa;AACjC,yBAAO,KAAK,WAAW,aAAa;AAAA,gBACrC,OAAO;AACN,yBAAO,KAAK,aAAa;AAAA,gBAC1B;AAAA,cACD;AAIA,qBAAO,KAAK,eAAe;AAAA,cAG1B,KAAK,eAAe,CAAC,YACpB,mBAAoB,IAAK,MAAM;AAAA,YAClC;AAEA,mBAAO,KAAK,aAAa;AAAA,UAK1B,WAAY,WAAW,MAAO;AAC7B,mBAAO,KAAK,aAAa;AAAA,UAC1B;AAGA,iBAAO;AAAA,QACR;AAAA,MACD;AAMA,eAAS,uBAAwB,IAAK;AACrC,eAAO,aAAc,SAAU,UAAW;AACzC,qBAAW,CAAC;AACZ,iBAAO,aAAc,SAAU,MAAME,UAAU;AAC9C,gBAAI,GACH,eAAe,GAAI,CAAC,GAAG,KAAK,QAAQ,QAAS,GAC7CH,KAAI,aAAa;AAGlB,mBAAQA,MAAM;AACb,kBAAK,KAAQ,IAAI,aAAcA,EAAE,CAAI,GAAI;AACxC,qBAAM,CAAE,IAAI,EAAGG,SAAS,CAAE,IAAI,KAAM,CAAE;AAAA,cACvC;AAAA,YACD;AAAA,UACD,CAAE;AAAA,QACH,CAAE;AAAA,MACH;AAMA,eAAS,YAAa,MAAO;AAC5B,YAAI,WACH,MAAM,OAAO,KAAK,iBAAiB,OAAO;AAO3C,YAAK,OAAOG,aAAY,IAAI,aAAa,GAAI;AAC5C;AAAA,QACD;AAGA,QAAAA,YAAW;AACX,0BAAkBA,UAAS;AAC3B,yBAAiB,CAACL,QAAO,SAAUK,SAAS;AAQ5C,YAAK,QAAQ,cAAcA,cACxB,YAAYA,UAAS,gBAAiB,UAAU,QAAQ,WAAY;AACtE,oBAAU,iBAAkB,UAAU,aAAc;AAAA,QACrD;AAAA,MACD;AAEA,WAAK,UAAU,SAAU,MAAM,UAAW;AACzC,eAAO,KAAM,MAAM,MAAM,MAAM,QAAS;AAAA,MACzC;AAEA,WAAK,kBAAkB,SAAU,MAAM,MAAO;AAC7C,oBAAa,IAAK;AAElB,YAAK,kBACJ,CAAC,uBAAwB,OAAO,GAAI,MAClC,CAAC,aAAa,CAAC,UAAU,KAAM,IAAK,IAAM;AAE5C,cAAI;AACH,mBAAO,QAAQ,KAAM,MAAM,IAAK;AAAA,UACjC,SAAU,GAAI;AACb,mCAAwB,MAAM,IAAK;AAAA,UACpC;AAAA,QACD;AAEA,eAAO,KAAM,MAAMA,WAAU,MAAM,CAAE,IAAK,CAAE,EAAE,SAAS;AAAA,MACxD;AAEA,MAAAL,QAAO,OAAO;AAAA;AAAA,QAGb,aAAa;AAAA,QAEb,cAAc;AAAA,QAEd,OAAO;AAAA,QAEP,MAAM;AAAA,UACL,IAAI,SAAU,IAAI,SAAU;AAC3B,gBAAK,OAAO,QAAQ,mBAAmB,eAAe,gBAAiB;AACtE,kBAAI,OAAO,QAAQ,eAAgB,EAAG;AACtC,qBAAO,OAAO,CAAE,IAAK,IAAI,CAAC;AAAA,YAC3B;AAAA,UACD;AAAA,UAEA,KAAK,SAAU,KAAK,SAAU;AAC7B,gBAAK,OAAO,QAAQ,yBAAyB,aAAc;AAC1D,qBAAO,QAAQ,qBAAsB,GAAI;AAAA,YAG1C,OAAO;AACN,qBAAO,QAAQ,iBAAkB,GAAI;AAAA,YACtC;AAAA,UACD;AAAA,UAEA,OAAO,SAAU,WAAW,SAAU;AACrC,gBAAK,OAAO,QAAQ,2BAA2B,eAAe,gBAAiB;AAC9E,qBAAO,QAAQ,uBAAwB,SAAU;AAAA,YAClD;AAAA,UACD;AAAA,QACD;AAAA,QAEA,UAAU;AAAA,UACT,KAAK,EAAE,KAAK,cAAc,OAAO,KAAK;AAAA,UACtC,KAAK,EAAE,KAAK,aAAa;AAAA,UACzB,KAAK,EAAE,KAAK,mBAAmB,OAAO,KAAK;AAAA,UAC3C,KAAK,EAAE,KAAK,kBAAkB;AAAA,QAC/B;AAAA,QAEA;AAAA,QAEA,QAAQ;AAAA,UACP,IAAI,SAAU,IAAK;AAClB,gBAAI,SAAS,iBAAkB,EAAG;AAClC,mBAAO,SAAU,MAAO;AACvB,qBAAO,KAAK,aAAc,IAAK,MAAM;AAAA,YACtC;AAAA,UACD;AAAA,UAEA,KAAK,SAAU,kBAAmB;AACjC,gBAAI,mBAAmB,iBAAkB,gBAAiB,EAAE,YAAY;AACxE,mBAAO,qBAAqB,MAE3B,WAAW;AACV,qBAAO;AAAA,YACR,IAEA,SAAU,MAAO;AAChB,qBAAO,SAAU,MAAM,gBAAiB;AAAA,YACzC;AAAA,UACF;AAAA,UAEA,OAAO,SAAU,WAAY;AAC5B,gBAAI,UAAU,WAAY,YAAY,GAAI;AAE1C,mBAAO,YACJ,UAAU,IAAI,OAAQ,QAAQ,aAAa,MAAM,YAClD,MAAM,aAAa,KAAM,MAC1B,WAAY,WAAW,SAAU,MAAO;AACvC,qBAAO,QAAQ;AAAA,gBACd,OAAO,KAAK,cAAc,YAAY,KAAK,aAC1C,OAAO,KAAK,iBAAiB,eAC5B,KAAK,aAAc,OAAQ,KAC5B;AAAA,cACF;AAAA,YACD,CAAE;AAAA,UACJ;AAAA,UAEA,MAAM,SAAU,MAAM,UAAU,OAAQ;AACvC,mBAAO,SAAU,MAAO;AACvB,kBAAI,SAASA,QAAO,KAAM,MAAM,IAAK;AAErC,kBAAK,UAAU,MAAO;AACrB,uBAAO,aAAa;AAAA,cACrB;AACA,kBAAK,CAAC,UAAW;AAChB,uBAAO;AAAA,cACR;AAEA,wBAAU;AAEV,kBAAK,aAAa,KAAM;AACvB,uBAAO,WAAW;AAAA,cACnB;AACA,kBAAK,aAAa,MAAO;AACxB,uBAAO,WAAW;AAAA,cACnB;AACA,kBAAK,aAAa,MAAO;AACxB,uBAAO,SAAS,OAAO,QAAS,KAAM,MAAM;AAAA,cAC7C;AACA,kBAAK,aAAa,MAAO;AACxB,uBAAO,SAAS,OAAO,QAAS,KAAM,IAAI;AAAA,cAC3C;AACA,kBAAK,aAAa,MAAO;AACxB,uBAAO,SAAS,OAAO,MAAO,CAAC,MAAM,MAAO,MAAM;AAAA,cACnD;AACA,kBAAK,aAAa,MAAO;AACxB,wBAAS,MAAM,OAAO,QAAS,aAAa,GAAI,IAAI,KAClD,QAAS,KAAM,IAAI;AAAA,cACtB;AACA,kBAAK,aAAa,MAAO;AACxB,uBAAO,WAAW,SAAS,OAAO,MAAO,GAAG,MAAM,SAAS,CAAE,MAAM,QAAQ;AAAA,cAC5E;AAEA,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,UAEA,OAAO,SAAU,MAAM,MAAM,WAAW,OAAO,MAAO;AACrD,gBAAI,SAAS,KAAK,MAAO,GAAG,CAAE,MAAM,OACnC,UAAU,KAAK,MAAO,EAAG,MAAM,QAC/B,SAAS,SAAS;AAEnB,mBAAO,UAAU,KAAK,SAAS;AAAA;AAAA,cAG9B,SAAU,MAAO;AAChB,uBAAO,CAAC,CAAC,KAAK;AAAA,cACf;AAAA,gBAEA,SAAU,MAAM,UAAU,KAAM;AAC/B,kBAAI,OAAO,YAAY,MAAM,WAAW,OACvCM,OAAM,WAAW,UAAU,gBAAgB,mBAC3CC,UAAS,KAAK,YACd,OAAO,UAAU,KAAK,SAAS,YAAY,GAC3C,WAAW,CAAC,OAAO,CAAC,QACpB,OAAO;AAER,kBAAKA,SAAS;AAGb,oBAAK,QAAS;AACb,yBAAQD,MAAM;AACb,2BAAO;AACP,2BAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,0BAAK,SACJ,SAAU,MAAM,IAAK,IACrB,KAAK,aAAa,GAAI;AAEtB,+BAAO;AAAA,sBACR;AAAA,oBACD;AAGA,4BAAQA,OAAM,SAAS,UAAU,CAAC,SAAS;AAAA,kBAC5C;AACA,yBAAO;AAAA,gBACR;AAEA,wBAAQ,CAAE,UAAUC,QAAO,aAAaA,QAAO,SAAU;AAGzD,oBAAK,WAAW,UAAW;AAG1B,+BAAaA,QAAQP,QAAO,OAAQ,MACjCO,QAAQP,QAAO,OAAQ,IAAI,CAAC;AAC/B,0BAAQ,WAAY,IAAK,KAAK,CAAC;AAC/B,8BAAY,MAAO,CAAE,MAAM,WAAW,MAAO,CAAE;AAC/C,yBAAO,aAAa,MAAO,CAAE;AAC7B,yBAAO,aAAaO,QAAO,WAAY,SAAU;AAEjD,yBAAU,OAAO,EAAE,aAAa,QAAQ,KAAMD,IAAI;AAAA,mBAG/C,OAAO,YAAY,MAAO,MAAM,IAAI,GAAM;AAG5C,wBAAK,KAAK,aAAa,KAAK,EAAE,QAAQ,SAAS,MAAO;AACrD,iCAAY,IAAK,IAAI,CAAE,SAAS,WAAW,IAAK;AAChD;AAAA,oBACD;AAAA,kBACD;AAAA,gBAED,OAAO;AAGN,sBAAK,UAAW;AACf,iCAAa,KAAMN,QAAO,OAAQ,MAC/B,KAAMA,QAAO,OAAQ,IAAI,CAAC;AAC7B,4BAAQ,WAAY,IAAK,KAAK,CAAC;AAC/B,gCAAY,MAAO,CAAE,MAAM,WAAW,MAAO,CAAE;AAC/C,2BAAO;AAAA,kBACR;AAIA,sBAAK,SAAS,OAAQ;AAGrB,2BAAU,OAAO,EAAE,aAAa,QAAQ,KAAMM,IAAI,MAC/C,OAAO,YAAY,MAAO,MAAM,IAAI,GAAM;AAE5C,2BAAO,SACN,SAAU,MAAM,IAAK,IACrB,KAAK,aAAa,MAClB,EAAE,MAAO;AAGT,4BAAK,UAAW;AACf,uCAAa,KAAMN,QAAO,OAAQ,MAC/B,KAAMA,QAAO,OAAQ,IAAI,CAAC;AAC7B,qCAAY,IAAK,IAAI,CAAE,SAAS,IAAK;AAAA,wBACtC;AAEA,4BAAK,SAAS,MAAO;AACpB;AAAA,wBACD;AAAA,sBACD;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AAGA,wBAAQ;AACR,uBAAO,SAAS,SAAW,OAAO,UAAU,KAAK,OAAO,SAAS;AAAA,cAClE;AAAA,YACD;AAAA,UACF;AAAA,UAEA,QAAQ,SAAU,QAAQ,UAAW;AAMpC,gBAAI,KAAKA,QAAO,KAAK,QAAS,MAAO,KACpCA,QAAO,KAAK,WAAY,OAAO,YAAY,CAAE,KAC7C,cAAe,yBAAyB,MAAO;AAKhD,gBAAK,GAAIA,QAAO,OAAQ,GAAI;AAC3B,qBAAO,GAAI,QAAS;AAAA,YACrB;AAEA,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,QAEA,SAAS;AAAA;AAAA,UAGR,KAAK,aAAc,SAAU,UAAW;AAKvC,gBAAI,QAAQ,CAAC,GACZ,UAAU,CAAC,GACX,UAAU,QAAS,SAAS,QAAS,UAAU,IAAK,CAAE;AAEvD,mBAAO,QAASA,QAAO,OAAQ,IAC9B,aAAc,SAAU,MAAME,UAAS,UAAU,KAAM;AACtD,kBAAI,MACH,YAAY,QAAS,MAAM,MAAM,KAAK,CAAC,CAAE,GACzCH,KAAI,KAAK;AAGV,qBAAQA,MAAM;AACb,oBAAO,OAAO,UAAWA,EAAE,GAAM;AAChC,uBAAMA,EAAE,IAAI,EAAGG,SAASH,EAAE,IAAI;AAAA,gBAC/B;AAAA,cACD;AAAA,YACD,CAAE,IACF,SAAU,MAAM,UAAU,KAAM;AAC/B,oBAAO,CAAE,IAAI;AACb,sBAAS,OAAO,MAAM,KAAK,OAAQ;AAInC,oBAAO,CAAE,IAAI;AACb,qBAAO,CAAC,QAAQ,IAAI;AAAA,YACrB;AAAA,UACF,CAAE;AAAA,UAEF,KAAK,aAAc,SAAU,UAAW;AACvC,mBAAO,SAAU,MAAO;AACvB,qBAAO,KAAM,UAAU,IAAK,EAAE,SAAS;AAAA,YACxC;AAAA,UACD,CAAE;AAAA,UAEF,UAAU,aAAc,SAAU,MAAO;AACxC,mBAAO,iBAAkB,IAAK;AAC9B,mBAAO,SAAU,MAAO;AACvB,sBAAS,KAAK,eAAeC,QAAO,KAAM,IAAK,GAAI,QAAS,IAAK,IAAI;AAAA,YACtE;AAAA,UACD,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASF,MAAM,aAAc,SAAU,MAAO;AAGpC,gBAAK,CAAC,YAAY,KAAM,QAAQ,EAAG,GAAI;AACtC,4BAAe,uBAAuB,IAAK;AAAA,YAC5C;AACA,mBAAO,iBAAkB,IAAK,EAAE,YAAY;AAC5C,mBAAO,SAAU,MAAO;AACvB,kBAAI;AACJ,iBAAG;AACF,oBAAO,WAAW,iBACjB,KAAK,OACL,KAAK,aAAc,UAAW,KAAK,KAAK,aAAc,MAAO,GAAM;AAEnE,6BAAW,SAAS,YAAY;AAChC,yBAAO,aAAa,QAAQ,SAAS,QAAS,OAAO,GAAI,MAAM;AAAA,gBAChE;AAAA,cACD,UAAY,OAAO,KAAK,eAAgB,KAAK,aAAa;AAC1D,qBAAO;AAAA,YACR;AAAA,UACD,CAAE;AAAA;AAAA,UAGF,QAAQ,SAAU,MAAO;AACxB,gBAAIQ,QAAOV,QAAO,YAAYA,QAAO,SAAS;AAC9C,mBAAOU,SAAQA,MAAK,MAAO,CAAE,MAAM,KAAK;AAAA,UACzC;AAAA,UAEA,MAAM,SAAU,MAAO;AACtB,mBAAO,SAAS;AAAA,UACjB;AAAA,UAEA,OAAO,SAAU,MAAO;AACvB,mBAAO,SAASH,UAAS,iBACxBA,UAAS,SAAS,KAClB,CAAC,EAAG,KAAK,QAAQ,KAAK,QAAQ,CAAC,KAAK;AAAA,UACtC;AAAA;AAAA,UAGA,SAAS,qBAAsB,KAAM;AAAA,UACrC,UAAU,qBAAsB,IAAK;AAAA,UAErC,SAAS,SAAU,MAAO;AAIzB,mBAAS,SAAU,MAAM,OAAQ,KAAK,CAAC,CAAC,KAAK,WAC1C,SAAU,MAAM,QAAS,KAAK,CAAC,CAAC,KAAK;AAAA,UACzC;AAAA,UAEA,UAAU,SAAU,MAAO;AAM1B,gBAAK,QAAQ,KAAK,YAAa;AAE9B,mBAAK,WAAW;AAAA,YACjB;AAEA,mBAAO,KAAK,aAAa;AAAA,UAC1B;AAAA;AAAA,UAGA,OAAO,SAAU,MAAO;AAMvB,iBAAM,OAAO,KAAK,YAAY,MAAM,OAAO,KAAK,aAAc;AAC7D,kBAAK,KAAK,WAAW,GAAI;AACxB,uBAAO;AAAA,cACR;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA,UAEA,QAAQ,SAAU,MAAO;AACxB,mBAAO,CAACL,QAAO,KAAK,QAAQ,MAAO,IAAK;AAAA,UACzC;AAAA;AAAA,UAGA,QAAQ,SAAU,MAAO;AACxB,mBAAO,QAAQ,KAAM,KAAK,QAAS;AAAA,UACpC;AAAA,UAEA,OAAO,SAAU,MAAO;AACvB,mBAAO,QAAQ,KAAM,KAAK,QAAS;AAAA,UACpC;AAAA,UAEA,QAAQ,SAAU,MAAO;AACxB,mBAAO,SAAU,MAAM,OAAQ,KAAK,KAAK,SAAS,YACjD,SAAU,MAAM,QAAS;AAAA,UAC3B;AAAA,UAEA,MAAM,SAAU,MAAO;AACtB,mBAAO,SAAU,MAAM,OAAQ,KAAK,KAAK,SAAS;AAAA,UACnD;AAAA;AAAA,UAGA,OAAO,uBAAwB,WAAW;AACzC,mBAAO,CAAE,CAAE;AAAA,UACZ,CAAE;AAAA,UAEF,MAAM,uBAAwB,SAAU,eAAe,QAAS;AAC/D,mBAAO,CAAE,SAAS,CAAE;AAAA,UACrB,CAAE;AAAA,UAEF,IAAI,uBAAwB,SAAU,eAAe,QAAQ,UAAW;AACvE,mBAAO,CAAE,WAAW,IAAI,WAAW,SAAS,QAAS;AAAA,UACtD,CAAE;AAAA,UAEF,MAAM,uBAAwB,SAAU,cAAc,QAAS;AAC9D,gBAAID,KAAI;AACR,mBAAQA,KAAI,QAAQA,MAAK,GAAI;AAC5B,2BAAa,KAAMA,EAAE;AAAA,YACtB;AACA,mBAAO;AAAA,UACR,CAAE;AAAA,UAEF,KAAK,uBAAwB,SAAU,cAAc,QAAS;AAC7D,gBAAIA,KAAI;AACR,mBAAQA,KAAI,QAAQA,MAAK,GAAI;AAC5B,2BAAa,KAAMA,EAAE;AAAA,YACtB;AACA,mBAAO;AAAA,UACR,CAAE;AAAA,UAEF,IAAI,uBAAwB,SAAU,cAAc,QAAQ,UAAW;AACtE,gBAAIA;AAEJ,gBAAK,WAAW,GAAI;AACnB,cAAAA,KAAI,WAAW;AAAA,YAChB,WAAY,WAAW,QAAS;AAC/B,cAAAA,KAAI;AAAA,YACL,OAAO;AACN,cAAAA,KAAI;AAAA,YACL;AAEA,mBAAQ,EAAEA,MAAK,KAAK;AACnB,2BAAa,KAAMA,EAAE;AAAA,YACtB;AACA,mBAAO;AAAA,UACR,CAAE;AAAA,UAEF,IAAI,uBAAwB,SAAU,cAAc,QAAQ,UAAW;AACtE,gBAAIA,KAAI,WAAW,IAAI,WAAW,SAAS;AAC3C,mBAAQ,EAAEA,KAAI,UAAU;AACvB,2BAAa,KAAMA,EAAE;AAAA,YACtB;AACA,mBAAO;AAAA,UACR,CAAE;AAAA,QACH;AAAA,MACD;AAEA,MAAAC,QAAO,KAAK,QAAQ,MAAMA,QAAO,KAAK,QAAQ;AAG9C,WAAM,KAAK,EAAE,OAAO,MAAM,UAAU,MAAM,MAAM,MAAM,UAAU,MAAM,OAAO,KAAK,GAAI;AACrF,QAAAA,QAAO,KAAK,QAAS,CAAE,IAAI,kBAAmB,CAAE;AAAA,MACjD;AACA,WAAM,KAAK,EAAE,QAAQ,MAAM,OAAO,KAAK,GAAI;AAC1C,QAAAA,QAAO,KAAK,QAAS,CAAE,IAAI,mBAAoB,CAAE;AAAA,MAClD;AAGA,eAAS,aAAa;AAAA,MAAC;AACvB,iBAAW,YAAYA,QAAO,KAAK;AACnC,MAAAA,QAAO,KAAK,aAAa,IAAI,WAAW;AAExC,eAAS,cAAe,SAAS,YAAY,MAAO;AACnD,YAAIM,OAAM,WAAW,KACpB,OAAO,WAAW,MAClB,MAAM,QAAQA,MACd,mBAAmB,QAAQ,QAAQ,cACnC,WAAW;AAEZ,eAAO,WAAW;AAAA;AAAA,UAGjB,SAAU,MAAM,SAAS,KAAM;AAC9B,mBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,kBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,uBAAO,QAAS,MAAM,SAAS,GAAI;AAAA,cACpC;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA;AAAA;AAAA,UAGA,SAAU,MAAM,SAAS,KAAM;AAC9B,gBAAI,UAAU,YACb,WAAW,CAAE,SAAS,QAAS;AAGhC,gBAAK,KAAM;AACV,qBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,oBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,sBAAK,QAAS,MAAM,SAAS,GAAI,GAAI;AACpC,2BAAO;AAAA,kBACR;AAAA,gBACD;AAAA,cACD;AAAA,YACD,OAAO;AACN,qBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,oBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,+BAAa,KAAMN,QAAO,OAAQ,MAAO,KAAMA,QAAO,OAAQ,IAAI,CAAC;AAEnE,sBAAK,QAAQ,SAAU,MAAM,IAAK,GAAI;AACrC,2BAAO,KAAMM,IAAI,KAAK;AAAA,kBACvB,YAAc,WAAW,WAAY,GAAI,MACxC,SAAU,CAAE,MAAM,WAAW,SAAU,CAAE,MAAM,UAAW;AAG1D,2BAAS,SAAU,CAAE,IAAI,SAAU,CAAE;AAAA,kBACtC,OAAO;AAGN,+BAAY,GAAI,IAAI;AAGpB,wBAAO,SAAU,CAAE,IAAI,QAAS,MAAM,SAAS,GAAI,GAAM;AACxD,6BAAO;AAAA,oBACR;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA;AAAA,MACF;AAEA,eAAS,eAAgB,UAAW;AACnC,eAAO,SAAS,SAAS,IACxB,SAAU,MAAM,SAAS,KAAM;AAC9B,cAAIP,KAAI,SAAS;AACjB,iBAAQA,MAAM;AACb,gBAAK,CAAC,SAAUA,EAAE,EAAG,MAAM,SAAS,GAAI,GAAI;AAC3C,qBAAO;AAAA,YACR;AAAA,UACD;AACA,iBAAO;AAAA,QACR,IACA,SAAU,CAAE;AAAA,MACd;AAEA,eAAS,iBAAkB,UAAU,UAAU,SAAU;AACxD,YAAIA,KAAI,GACP,MAAM,SAAS;AAChB,eAAQA,KAAI,KAAKA,MAAM;AACtB,eAAM,UAAU,SAAUA,EAAE,GAAG,OAAQ;AAAA,QACxC;AACA,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,WAAW,KAAK,QAAQ,SAAS,KAAM;AACzD,YAAI,MACH,eAAe,CAAC,GAChBA,KAAI,GACJ,MAAM,UAAU,QAChB,SAAS,OAAO;AAEjB,eAAQA,KAAI,KAAKA,MAAM;AACtB,cAAO,OAAO,UAAWA,EAAE,GAAM;AAChC,gBAAK,CAAC,UAAU,OAAQ,MAAM,SAAS,GAAI,GAAI;AAC9C,2BAAa,KAAM,IAAK;AACxB,kBAAK,QAAS;AACb,oBAAI,KAAMA,EAAE;AAAA,cACb;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,WAAYU,YAAW,UAAU,SAAS,YAAY,YAAY,cAAe;AACzF,YAAK,cAAc,CAAC,WAAYT,QAAO,OAAQ,GAAI;AAClD,uBAAa,WAAY,UAAW;AAAA,QACrC;AACA,YAAK,cAAc,CAAC,WAAYA,QAAO,OAAQ,GAAI;AAClD,uBAAa,WAAY,YAAY,YAAa;AAAA,QACnD;AACA,eAAO,aAAc,SAAU,MAAM,SAAS,SAAS,KAAM;AAC5D,cAAI,MAAMD,IAAG,MAAM,YAClB,SAAS,CAAC,GACV,UAAU,CAAC,GACX,cAAc,QAAQ,QAGtB,QAAQ,QACP;AAAA,YAAkB,YAAY;AAAA,YAC7B,QAAQ,WAAW,CAAE,OAAQ,IAAI;AAAA,YAAS,CAAC;AAAA,UAAE,GAG/C,YAAYU,eAAe,QAAQ,CAAC,YACnC,SAAU,OAAO,QAAQA,YAAW,SAAS,GAAI,IACjD;AAEF,cAAK,SAAU;AAId,yBAAa,eAAgB,OAAOA,aAAY,eAAe;AAAA;AAAA,cAG9D,CAAC;AAAA;AAAA;AAAA,cAGD;AAAA;AAGD,oBAAS,WAAW,YAAY,SAAS,GAAI;AAAA,UAC9C,OAAO;AACN,yBAAa;AAAA,UACd;AAGA,cAAK,YAAa;AACjB,mBAAO,SAAU,YAAY,OAAQ;AACrC,uBAAY,MAAM,CAAC,GAAG,SAAS,GAAI;AAGnC,YAAAV,KAAI,KAAK;AACT,mBAAQA,MAAM;AACb,kBAAO,OAAO,KAAMA,EAAE,GAAM;AAC3B,2BAAY,QAASA,EAAE,CAAE,IAAI,EAAG,UAAW,QAASA,EAAE,CAAE,IAAI;AAAA,cAC7D;AAAA,YACD;AAAA,UACD;AAEA,cAAK,MAAO;AACX,gBAAK,cAAcU,YAAY;AAC9B,kBAAK,YAAa;AAGjB,uBAAO,CAAC;AACR,gBAAAV,KAAI,WAAW;AACf,uBAAQA,MAAM;AACb,sBAAO,OAAO,WAAYA,EAAE,GAAM;AAGjC,yBAAK,KAAQ,UAAWA,EAAE,IAAI,IAAO;AAAA,kBACtC;AAAA,gBACD;AACA,2BAAY,MAAQ,aAAa,CAAC,GAAK,MAAM,GAAI;AAAA,cAClD;AAGA,cAAAA,KAAI,WAAW;AACf,qBAAQA,MAAM;AACb,qBAAO,OAAO,WAAYA,EAAE,OACzB,OAAO,aAAa,QAAQ,KAAM,MAAM,IAAK,IAAI,OAAQA,EAAE,KAAM,IAAK;AAExE,uBAAM,IAAK,IAAI,EAAG,QAAS,IAAK,IAAI;AAAA,gBACrC;AAAA,cACD;AAAA,YACD;AAAA,UAGD,OAAO;AACN,yBAAa;AAAA,cACZ,eAAe,UACd,WAAW,OAAQ,aAAa,WAAW,MAAO,IAClD;AAAA,YACF;AACA,gBAAK,YAAa;AACjB,yBAAY,MAAM,SAAS,YAAY,GAAI;AAAA,YAC5C,OAAO;AACN,mBAAK,MAAO,SAAS,UAAW;AAAA,YACjC;AAAA,UACD;AAAA,QACD,CAAE;AAAA,MACH;AAEA,eAAS,kBAAmB,QAAS;AACpC,YAAI,cAAc,SAAS,GAC1B,MAAM,OAAO,QACb,kBAAkBC,QAAO,KAAK,SAAU,OAAQ,CAAE,EAAE,IAAK,GACzD,mBAAmB,mBAAmBA,QAAO,KAAK,SAAU,GAAI,GAChED,KAAI,kBAAkB,IAAI,GAG1B,eAAe,cAAe,SAAU,MAAO;AAC9C,iBAAO,SAAS;AAAA,QACjB,GAAG,kBAAkB,IAAK,GAC1B,kBAAkB,cAAe,SAAU,MAAO;AACjD,iBAAO,QAAQ,KAAM,cAAc,IAAK,IAAI;AAAA,QAC7C,GAAG,kBAAkB,IAAK,GAC1B,WAAW,CAAE,SAAU,MAAM,SAAS,KAAM;AAM3C,cAAI,MAAQ,CAAC,oBAAqB,OAAO,WAAW,uBACjD,eAAe,SAAU,WAC1B,aAAc,MAAM,SAAS,GAAI,IACjC,gBAAiB,MAAM,SAAS,GAAI;AAItC,yBAAe;AACf,iBAAO;AAAA,QACR,CAAE;AAEH,eAAQA,KAAI,KAAKA,MAAM;AACtB,cAAO,UAAUC,QAAO,KAAK,SAAU,OAAQD,EAAE,EAAE,IAAK,GAAM;AAC7D,uBAAW,CAAE,cAAe,eAAgB,QAAS,GAAG,OAAQ,CAAE;AAAA,UACnE,OAAO;AACN,sBAAUC,QAAO,KAAK,OAAQ,OAAQD,EAAE,EAAE,IAAK,EAAE,MAAO,MAAM,OAAQA,EAAE,EAAE,OAAQ;AAGlF,gBAAK,QAASC,QAAO,OAAQ,GAAI;AAGhC,kBAAI,EAAED;AACN,qBAAQ,IAAI,KAAK,KAAM;AACtB,oBAAKC,QAAO,KAAK,SAAU,OAAQ,CAAE,EAAE,IAAK,GAAI;AAC/C;AAAA,gBACD;AAAA,cACD;AACA,qBAAO;AAAA,gBACND,KAAI,KAAK,eAAgB,QAAS;AAAA,gBAClCA,KAAI,KAAK;AAAA;AAAA,kBAGR,OAAO,MAAO,GAAGA,KAAI,CAAE,EACrB,OAAQ,EAAE,OAAO,OAAQA,KAAI,CAAE,EAAE,SAAS,MAAM,MAAM,GAAG,CAAE;AAAA,gBAC9D,EAAE,QAAS,UAAU,IAAK;AAAA,gBAC1B;AAAA,gBACAA,KAAI,KAAK,kBAAmB,OAAO,MAAOA,IAAG,CAAE,CAAE;AAAA,gBACjD,IAAI,OAAO,kBAAqB,SAAS,OAAO,MAAO,CAAE,CAAI;AAAA,gBAC7D,IAAI,OAAO,WAAY,MAAO;AAAA,cAC/B;AAAA,YACD;AACA,qBAAS,KAAM,OAAQ;AAAA,UACxB;AAAA,QACD;AAEA,eAAO,eAAgB,QAAS;AAAA,MACjC;AAEA,eAAS,yBAA0B,iBAAiB,aAAc;AACjE,YAAI,QAAQ,YAAY,SAAS,GAChC,YAAY,gBAAgB,SAAS,GACrC,eAAe,SAAU,MAAM,SAAS,KAAK,SAAS,WAAY;AACjE,cAAI,MAAM,GAAG,SACZ,eAAe,GACfA,KAAI,KACJ,YAAY,QAAQ,CAAC,GACrB,aAAa,CAAC,GACd,gBAAgB,kBAGhB,QAAQ,QAAQ,aAAaC,QAAO,KAAK,KAAK,IAAK,KAAK,SAAU,GAGlE,gBAAkB,WAAW,iBAAiB,OAAO,IAAI,KAAK,OAAO,KAAK;AAE3E,cAAK,WAAY;AAMhB,+BAAmB,WAAWK,aAAY,WAAW;AAAA,UACtD;AAGA,kBAAU,OAAO,MAAON,EAAE,MAAO,MAAMA,MAAM;AAC5C,gBAAK,aAAa,MAAO;AACxB,kBAAI;AAMJ,kBAAK,CAAC,WAAW,KAAK,iBAAiBM,WAAW;AACjD,4BAAa,IAAK;AAClB,sBAAM,CAAC;AAAA,cACR;AACA,qBAAU,UAAU,gBAAiB,GAAI,GAAM;AAC9C,oBAAK,QAAS,MAAM,WAAWA,WAAU,GAAI,GAAI;AAChD,uBAAK,KAAM,SAAS,IAAK;AACzB;AAAA,gBACD;AAAA,cACD;AACA,kBAAK,WAAY;AAChB,0BAAU;AAAA,cACX;AAAA,YACD;AAGA,gBAAK,OAAQ;AAGZ,kBAAO,OAAO,CAAC,WAAW,MAAS;AAClC;AAAA,cACD;AAGA,kBAAK,MAAO;AACX,0BAAU,KAAM,IAAK;AAAA,cACtB;AAAA,YACD;AAAA,UACD;AAIA,0BAAgBN;AAShB,cAAK,SAASA,OAAM,cAAe;AAClC,gBAAI;AACJ,mBAAU,UAAU,YAAa,GAAI,GAAM;AAC1C,sBAAS,WAAW,YAAY,SAAS,GAAI;AAAA,YAC9C;AAEA,gBAAK,MAAO;AAGX,kBAAK,eAAe,GAAI;AACvB,uBAAQA,MAAM;AACb,sBAAK,EAAG,UAAWA,EAAE,KAAK,WAAYA,EAAE,IAAM;AAC7C,+BAAYA,EAAE,IAAI,IAAI,KAAM,OAAQ;AAAA,kBACrC;AAAA,gBACD;AAAA,cACD;AAGA,2BAAa,SAAU,UAAW;AAAA,YACnC;AAGA,iBAAK,MAAO,SAAS,UAAW;AAGhC,gBAAK,aAAa,CAAC,QAAQ,WAAW,SAAS,KAC5C,eAAe,YAAY,SAAW,GAAI;AAE5C,cAAAC,QAAO,WAAY,OAAQ;AAAA,YAC5B;AAAA,UACD;AAGA,cAAK,WAAY;AAChB,sBAAU;AACV,+BAAmB;AAAA,UACpB;AAEA,iBAAO;AAAA,QACR;AAED,eAAO,QACN,aAAc,YAAa,IAC3B;AAAA,MACF;AAEA,eAAS,QAAS,UAAU,OAAgC;AAC3D,YAAID,IACH,cAAc,CAAC,GACf,kBAAkB,CAAC,GACnB,SAAS,cAAe,WAAW,GAAI;AAExC,YAAK,CAAC,QAAS;AAGd,cAAK,CAAC,OAAQ;AACb,oBAAQ,SAAU,QAAS;AAAA,UAC5B;AACA,UAAAA,KAAI,MAAM;AACV,iBAAQA,MAAM;AACb,qBAAS,kBAAmB,MAAOA,EAAE,CAAE;AACvC,gBAAK,OAAQC,QAAO,OAAQ,GAAI;AAC/B,0BAAY,KAAM,MAAO;AAAA,YAC1B,OAAO;AACN,8BAAgB,KAAM,MAAO;AAAA,YAC9B;AAAA,UACD;AAGA,mBAAS;AAAA,YAAe;AAAA,YACvB,yBAA0B,iBAAiB,WAAY;AAAA,UAAE;AAG1D,iBAAO,WAAW;AAAA,QACnB;AACA,eAAO;AAAA,MACR;AAWA,eAAS,OAAQ,UAAU,SAAS,SAAS,MAAO;AACnD,YAAID,IAAG,QAAQW,QAAO,MAAMC,OAC3B,WAAW,OAAO,aAAa,cAAc,UAC7C,QAAQ,CAAC,QAAQ,SAAY,WAAW,SAAS,YAAY,QAAW;AAEzE,kBAAU,WAAW,CAAC;AAItB,YAAK,MAAM,WAAW,GAAI;AAGzB,mBAAS,MAAO,CAAE,IAAI,MAAO,CAAE,EAAE,MAAO,CAAE;AAC1C,cAAK,OAAO,SAAS,MAAOD,SAAQ,OAAQ,CAAE,GAAI,SAAS,QACzD,QAAQ,aAAa,KAAK,kBAC1BV,QAAO,KAAK,SAAU,OAAQ,CAAE,EAAE,IAAK,GAAI;AAE5C,uBAAYA,QAAO,KAAK,KAAK;AAAA,cAC5B,iBAAkBU,OAAM,QAAS,CAAE,CAAE;AAAA,cACrC;AAAA,YACD,KAAK,CAAC,GAAK,CAAE;AACb,gBAAK,CAAC,SAAU;AACf,qBAAO;AAAA,YAGR,WAAY,UAAW;AACtB,wBAAU,QAAQ;AAAA,YACnB;AAEA,uBAAW,SAAS,MAAO,OAAO,MAAM,EAAE,MAAM,MAAO;AAAA,UACxD;AAGA,UAAAX,KAAI,UAAU,aAAa,KAAM,QAAS,IAAI,IAAI,OAAO;AACzD,iBAAQA,MAAM;AACb,YAAAW,SAAQ,OAAQX,EAAE;AAGlB,gBAAKC,QAAO,KAAK,SAAY,OAAOU,OAAM,IAAO,GAAI;AACpD;AAAA,YACD;AACA,gBAAOC,QAAOX,QAAO,KAAK,KAAM,IAAK,GAAM;AAG1C,kBAAO,OAAOW;AAAA,gBACb,iBAAkBD,OAAM,QAAS,CAAE,CAAE;AAAA,gBACrC,SAAS,KAAM,OAAQ,CAAE,EAAE,IAAK,KAC/B,YAAa,QAAQ,UAAW,KAAK;AAAA,cACvC,GAAM;AAGL,uBAAO,OAAQX,IAAG,CAAE;AACpB,2BAAW,KAAK,UAAU,WAAY,MAAO;AAC7C,oBAAK,CAAC,UAAW;AAChB,uBAAK,MAAO,SAAS,IAAK;AAC1B,yBAAO;AAAA,gBACR;AAEA;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAIA,SAAE,YAAY,QAAS,UAAU,KAAM;AAAA,UACtC;AAAA,UACA;AAAA,UACA,CAAC;AAAA,UACD;AAAA,UACA,CAAC,WAAW,SAAS,KAAM,QAAS,KAAK,YAAa,QAAQ,UAAW,KAAK;AAAA,QAC/E;AACA,eAAO;AAAA,MACR;AAGA,kBAAY;AAEZ,MAAAC,QAAO,OAAO;AAId,WAAK,UAAU;AACf,WAAK,SAAS;AACd,WAAK,cAAc;AACnB,WAAK,WAAW;AAEhB,eAAS,IAAK,MAAMM,MAAK,OAAQ;AAChC,YAAI,UAAU,CAAC,GACd,WAAW,UAAU;AAEtB,gBAAU,OAAO,KAAMA,IAAI,MAAO,KAAK,aAAa,GAAI;AACvD,cAAK,KAAK,aAAa,GAAI;AAC1B,gBAAK,YAAYN,QAAQ,IAAK,EAAE,GAAI,KAAM,GAAI;AAC7C;AAAA,YACD;AACA,oBAAQ,KAAM,IAAK;AAAA,UACpB;AAAA,QACD;AACA,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,GAAG,MAAO;AAC5B,YAAI,UAAU,CAAC;AAEf,eAAQ,GAAG,IAAI,EAAE,aAAc;AAC9B,cAAK,EAAE,aAAa,KAAK,MAAM,MAAO;AACrC,oBAAQ,KAAM,CAAE;AAAA,UACjB;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,UAAI,gBAAgBA,QAAO,KAAK,MAAM;AAItC,UAAI,aAAa;AAEjB,eAAS,cAAe,OAAQ;AAC/B,eAAO,MAAO,CAAE,MAAM,OACrB,MAAO,MAAM,SAAS,CAAE,MAAM,OAC9B,MAAM,UAAU;AAAA,MAClB;AAGA,eAAS,OAAQ,UAAU,WAAW,KAAM;AAC3C,YAAK,OAAO,cAAc,YAAa;AACtC,iBAAOA,QAAO,KAAM,UAAU,SAAU,MAAMD,IAAI;AACjD,mBAAO,CAAC,CAAC,UAAU,KAAM,MAAMA,IAAG,IAAK,MAAM;AAAA,UAC9C,CAAE;AAAA,QACH;AAGA,YAAK,UAAU,UAAW;AACzB,iBAAOC,QAAO,KAAM,UAAU,SAAU,MAAO;AAC9C,mBAAS,SAAS,cAAgB;AAAA,UACnC,CAAE;AAAA,QACH;AAGA,YAAK,OAAO,cAAc,UAAW;AACpC,iBAAOA,QAAO,KAAM,UAAU,SAAU,MAAO;AAC9C,mBAAS,QAAQ,KAAM,WAAW,IAAK,IAAI,OAAS;AAAA,UACrD,CAAE;AAAA,QACH;AAGA,eAAOA,QAAO,OAAQ,WAAW,UAAU,GAAI;AAAA,MAChD;AAEA,MAAAA,QAAO,SAAS,SAAU,MAAM,OAAO,KAAM;AAC5C,YAAI,OAAO,MAAO,CAAE;AAEpB,YAAK,KAAM;AACV,iBAAO,UAAU,OAAO;AAAA,QACzB;AAEA,YAAK,MAAM,WAAW,KAAK,KAAK,aAAa,GAAI;AAChD,iBAAOA,QAAO,KAAK,gBAAiB,MAAM,IAAK,IAAI,CAAE,IAAK,IAAI,CAAC;AAAA,QAChE;AAEA,eAAOA,QAAO,KAAK,QAAS,MAAMA,QAAO,KAAM,OAAO,SAAUY,OAAO;AACtE,iBAAOA,MAAK,aAAa;AAAA,QAC1B,CAAE,CAAE;AAAA,MACL;AAEA,MAAAZ,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,UAAW;AAC1B,cAAID,IAAG,KACN,MAAM,KAAK,QACXc,QAAO;AAER,cAAK,OAAO,aAAa,UAAW;AACnC,mBAAO,KAAK,UAAWb,QAAQ,QAAS,EAAE,OAAQ,WAAW;AAC5D,mBAAMD,KAAI,GAAGA,KAAI,KAAKA,MAAM;AAC3B,oBAAKC,QAAO,SAAUa,MAAMd,EAAE,GAAG,IAAK,GAAI;AACzC,yBAAO;AAAA,gBACR;AAAA,cACD;AAAA,YACD,CAAE,CAAE;AAAA,UACL;AAEA,gBAAM,KAAK,UAAW,CAAC,CAAE;AAEzB,eAAMA,KAAI,GAAGA,KAAI,KAAKA,MAAM;AAC3B,YAAAC,QAAO,KAAM,UAAUa,MAAMd,EAAE,GAAG,GAAI;AAAA,UACvC;AAEA,iBAAO,MAAM,IAAIC,QAAO,WAAY,GAAI,IAAI;AAAA,QAC7C;AAAA,QACA,QAAQ,SAAU,UAAW;AAC5B,iBAAO,KAAK,UAAW,OAAQ,MAAM,YAAY,CAAC,GAAG,KAAM,CAAE;AAAA,QAC9D;AAAA,QACA,KAAK,SAAU,UAAW;AACzB,iBAAO,KAAK,UAAW,OAAQ,MAAM,YAAY,CAAC,GAAG,IAAK,CAAE;AAAA,QAC7D;AAAA,QACA,IAAI,SAAU,UAAW;AACxB,iBAAO,CAAC,CAAC;AAAA,YACR;AAAA;AAAA;AAAA,YAIA,OAAO,aAAa,YAAY,cAAc,KAAM,QAAS,IAC5DA,QAAQ,QAAS,IACjB,YAAY,CAAC;AAAA,YACd;AAAA,UACD,EAAE;AAAA,QACH;AAAA,MACD,CAAE;AAKF,UAAI,YAMH,aAAa,uCAEb,OAAOA,QAAO,GAAG,OAAO,SAAU,UAAU,SAAU;AACrD,YAAI,OAAO;AAGX,YAAK,CAAC,UAAW;AAChB,iBAAO;AAAA,QACR;AAGA,YAAK,SAAS,UAAW;AACxB,eAAM,CAAE,IAAI;AACZ,eAAK,SAAS;AACd,iBAAO;AAAA,QAIR,WAAY,OAAO,aAAa,YAAa;AAC5C,iBAAO,WAAW,UAAU,SAC3B,WAAW,MAAO,QAAS;AAAA;AAAA,YAG3B,SAAUA,OAAO;AAAA;AAAA,QAEnB,OAAO;AAGN,kBAAQ,WAAW;AACnB,cAAK,cAAe,KAAM,GAAI;AAK7B,oBAAQ,CAAE,MAAM,UAAU,IAAK;AAAA,UAGhC,WAAY,OAAO,aAAa,UAAW;AAC1C,oBAAQ,WAAW,KAAM,QAAS;AAAA,UACnC,OAAO;AACN,mBAAOA,QAAO,UAAW,UAAU,IAAK;AAAA,UACzC;AAIA,cAAK,UAAW,MAAO,CAAE,KAAK,CAAC,UAAY;AAG1C,gBAAK,MAAO,CAAE,GAAI;AACjB,wBAAU,mBAAmBA,UAAS,QAAS,CAAE,IAAI;AAIrD,cAAAA,QAAO,MAAO,MAAMA,QAAO;AAAA,gBAC1B,MAAO,CAAE;AAAA,gBACT,WAAW,QAAQ,WAAW,QAAQ,iBAAiB,UAAU;AAAA,gBACjE;AAAA,cACD,CAAE;AAGF,kBAAK,WAAW,KAAM,MAAO,CAAE,CAAE,KAAKA,QAAO,cAAe,OAAQ,GAAI;AACvE,qBAAM,SAAS,SAAU;AAGxB,sBAAK,OAAO,KAAM,KAAM,MAAM,YAAa;AAC1C,yBAAM,KAAM,EAAG,QAAS,KAAM,CAAE;AAAA,kBAGjC,OAAO;AACN,yBAAK,KAAM,OAAO,QAAS,KAAM,CAAE;AAAA,kBACpC;AAAA,gBACD;AAAA,cACD;AAEA,qBAAO;AAAA,YAGR,OAAO;AACN,qBAAO,WAAW,eAAgB,MAAO,CAAE,CAAE;AAE7C,kBAAK,MAAO;AAGX,qBAAM,CAAE,IAAI;AACZ,qBAAK,SAAS;AAAA,cACf;AACA,qBAAO;AAAA,YACR;AAAA,UAGD,WAAY,CAAC,WAAW,QAAQ,QAAS;AACxC,oBAAS,WAAW,YAAa,KAAM,QAAS;AAAA,UAIjD,OAAO;AACN,mBAAO,KAAK,YAAa,OAAQ,EAAE,KAAM,QAAS;AAAA,UACnD;AAAA,QACD;AAAA,MAED;AAGD,WAAK,YAAYA,QAAO;AAGxB,mBAAaA,QAAQ,UAAW;AAEhC,UAAI,eAAe,kCAGlB,mBAAmB;AAAA,QAClB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,MAAM;AAAA,QACN,MAAM;AAAA,MACP;AAED,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,KAAK,SAAU,QAAS;AACvB,cAAI,UAAUA,QAAQ,QAAQ,IAAK,GAClC,IAAI,QAAQ;AAEb,iBAAO,KAAK,OAAQ,WAAW;AAC9B,gBAAID,KAAI;AACR,mBAAQA,KAAI,GAAGA,MAAM;AACpB,kBAAKC,QAAO,SAAU,MAAM,QAASD,EAAE,CAAE,GAAI;AAC5C,uBAAO;AAAA,cACR;AAAA,YACD;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,SAAS,SAAU,WAAW,SAAU;AACvC,cAAI,KACHA,KAAI,GACJ,IAAI,KAAK,QACT,UAAU,CAAC,GACX,UAAU,OAAO,cAAc,YAAYC,QAAQ,SAAU;AAG9D,cAAK,CAAC,cAAc,KAAM,SAAU,GAAI;AACvC,mBAAQD,KAAI,GAAGA,MAAM;AACpB,mBAAM,MAAM,KAAMA,EAAE,GAAG,OAAO,QAAQ,SAAS,MAAM,IAAI,YAAa;AAGrE,oBAAK,IAAI,WAAW,OAAQ,UAC3B,QAAQ,MAAO,GAAI,IAAI;AAAA;AAAA,kBAGvB,IAAI,aAAa,KAChBC,QAAO,KAAK,gBAAiB,KAAK,SAAU;AAAA,oBAAM;AAEnD,0BAAQ,KAAM,GAAI;AAClB;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAO,KAAK,UAAW,QAAQ,SAAS,IAAIA,QAAO,WAAY,OAAQ,IAAI,OAAQ;AAAA,QACpF;AAAA;AAAA,QAGA,OAAO,SAAU,MAAO;AAGvB,cAAK,CAAC,MAAO;AACZ,mBAAS,KAAM,CAAE,KAAK,KAAM,CAAE,EAAE,aAAe,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS;AAAA,UAChF;AAGA,cAAK,OAAO,SAAS,UAAW;AAC/B,mBAAO,QAAQ,KAAMA,QAAQ,IAAK,GAAG,KAAM,CAAE,CAAE;AAAA,UAChD;AAGA,iBAAO,QAAQ;AAAA,YAAM;AAAA;AAAA,YAGpB,KAAK,SAAS,KAAM,CAAE,IAAI;AAAA,UAC3B;AAAA,QACD;AAAA,QAEA,KAAK,SAAU,UAAU,SAAU;AAClC,iBAAO,KAAK;AAAA,YACXA,QAAO;AAAA,cACNA,QAAO,MAAO,KAAK,IAAI,GAAGA,QAAQ,UAAU,OAAQ,CAAE;AAAA,YACvD;AAAA,UACD;AAAA,QACD;AAAA,QAEA,SAAS,SAAU,UAAW;AAC7B,iBAAO,KAAK;AAAA,YAAK,YAAY,OAC5B,KAAK,aAAa,KAAK,WAAW,OAAQ,QAAS;AAAA,UACpD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,eAAS,QAAS,KAAKM,MAAM;AAC5B,gBAAU,MAAM,IAAKA,IAAI,MAAO,IAAI,aAAa,GAAI;AAAA,QAAC;AACtD,eAAO;AAAA,MACR;AAEA,MAAAN,QAAO,KAAM;AAAA,QACZ,QAAQ,SAAU,MAAO;AACxB,cAAIO,UAAS,KAAK;AAClB,iBAAOA,WAAUA,QAAO,aAAa,KAAKA,UAAS;AAAA,QACpD;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,IAAK,MAAM,YAAa;AAAA,QAChC;AAAA,QACA,cAAc,SAAU,MAAM,IAAI,OAAQ;AACzC,iBAAO,IAAK,MAAM,cAAc,KAAM;AAAA,QACvC;AAAA,QACA,MAAM,SAAU,MAAO;AACtB,iBAAO,QAAS,MAAM,aAAc;AAAA,QACrC;AAAA,QACA,MAAM,SAAU,MAAO;AACtB,iBAAO,QAAS,MAAM,iBAAkB;AAAA,QACzC;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,IAAK,MAAM,aAAc;AAAA,QACjC;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,IAAK,MAAM,iBAAkB;AAAA,QACrC;AAAA,QACA,WAAW,SAAU,MAAM,IAAI,OAAQ;AACtC,iBAAO,IAAK,MAAM,eAAe,KAAM;AAAA,QACxC;AAAA,QACA,WAAW,SAAU,MAAM,IAAI,OAAQ;AACtC,iBAAO,IAAK,MAAM,mBAAmB,KAAM;AAAA,QAC5C;AAAA,QACA,UAAU,SAAU,MAAO;AAC1B,iBAAO,UAAY,KAAK,cAAc,CAAC,GAAI,YAAY,IAAK;AAAA,QAC7D;AAAA,QACA,UAAU,SAAU,MAAO;AAC1B,iBAAO,SAAU,KAAK,UAAW;AAAA,QAClC;AAAA,QACA,UAAU,SAAU,MAAO;AAC1B,cAAK,KAAK,mBAAmB;AAAA;AAAA;AAAA,UAK5B,SAAU,KAAK,eAAgB,GAAI;AAEnC,mBAAO,KAAK;AAAA,UACb;AAKA,cAAK,SAAU,MAAM,UAAW,GAAI;AACnC,mBAAO,KAAK,WAAW;AAAA,UACxB;AAEA,iBAAOP,QAAO,MAAO,CAAC,GAAG,KAAK,UAAW;AAAA,QAC1C;AAAA,MACD,GAAG,SAAU,MAAM,IAAK;AACvB,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,OAAO,UAAW;AAC/C,cAAI,UAAUA,QAAO,IAAK,MAAM,IAAI,KAAM;AAE1C,cAAK,KAAK,MAAO,EAAG,MAAM,SAAU;AACnC,uBAAW;AAAA,UACZ;AAEA,cAAK,YAAY,OAAO,aAAa,UAAW;AAC/C,sBAAUA,QAAO,OAAQ,UAAU,OAAQ;AAAA,UAC5C;AAEA,cAAK,KAAK,SAAS,GAAI;AAGtB,gBAAK,CAAC,iBAAkB,IAAK,GAAI;AAChC,cAAAA,QAAO,WAAY,OAAQ;AAAA,YAC5B;AAGA,gBAAK,aAAa,KAAM,IAAK,GAAI;AAChC,sBAAQ,QAAQ;AAAA,YACjB;AAAA,UACD;AAEA,iBAAO,KAAK,UAAW,OAAQ;AAAA,QAChC;AAAA,MACD,CAAE;AAGF,eAAS,cAAe,SAAU;AACjC,YAAI,SAAS,CAAC;AACd,QAAAA,QAAO,KAAM,QAAQ,MAAO,aAAc,KAAK,CAAC,GAAG,SAAU,GAAG,MAAO;AACtE,iBAAQ,IAAK,IAAI;AAAA,QAClB,CAAE;AACF,eAAO;AAAA,MACR;AAwBA,MAAAA,QAAO,YAAY,SAAU,SAAU;AAItC,kBAAU,OAAO,YAAY,WAC5B,cAAe,OAAQ,IACvBA,QAAO,OAAQ,CAAC,GAAG,OAAQ;AAE5B,YACC,QAGA,QAGA,OAGA,QAGA,OAAO,CAAC,GAGR,QAAQ,CAAC,GAGT,cAAc,IAGd,OAAO,WAAW;AAGjB,mBAAS,UAAU,QAAQ;AAI3B,kBAAQ,SAAS;AACjB,iBAAQ,MAAM,QAAQ,cAAc,IAAK;AACxC,qBAAS,MAAM,MAAM;AACrB,mBAAQ,EAAE,cAAc,KAAK,QAAS;AAGrC,kBAAK,KAAM,WAAY,EAAE,MAAO,OAAQ,CAAE,GAAG,OAAQ,CAAE,CAAE,MAAM,SAC9D,QAAQ,aAAc;AAGtB,8BAAc,KAAK;AACnB,yBAAS;AAAA,cACV;AAAA,YACD;AAAA,UACD;AAGA,cAAK,CAAC,QAAQ,QAAS;AACtB,qBAAS;AAAA,UACV;AAEA,mBAAS;AAGT,cAAK,QAAS;AAGb,gBAAK,QAAS;AACb,qBAAO,CAAC;AAAA,YAGT,OAAO;AACN,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD,GAGAa,QAAO;AAAA;AAAA,UAGN,KAAK,WAAW;AACf,gBAAK,MAAO;AAGX,kBAAK,UAAU,CAAC,QAAS;AACxB,8BAAc,KAAK,SAAS;AAC5B,sBAAM,KAAM,MAAO;AAAA,cACpB;AAEA,eAAE,SAASC,KAAK,MAAO;AACtB,gBAAAd,QAAO,KAAM,MAAM,SAAU,GAAG,KAAM;AACrC,sBAAK,OAAO,QAAQ,YAAa;AAChC,wBAAK,CAAC,QAAQ,UAAU,CAACa,MAAK,IAAK,GAAI,GAAI;AAC1C,2BAAK,KAAM,GAAI;AAAA,oBAChB;AAAA,kBACD,WAAY,OAAO,IAAI,UAAU,OAAQ,GAAI,MAAM,UAAW;AAG7D,oBAAAC,KAAK,GAAI;AAAA,kBACV;AAAA,gBACD,CAAE;AAAA,cACH,GAAK,SAAU;AAEf,kBAAK,UAAU,CAAC,QAAS;AACxB,qBAAK;AAAA,cACN;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA;AAAA,UAGA,QAAQ,WAAW;AAClB,YAAAd,QAAO,KAAM,WAAW,SAAU,GAAG,KAAM;AAC1C,kBAAI;AACJ,sBAAU,QAAQA,QAAO,QAAS,KAAK,MAAM,KAAM,KAAM,IAAK;AAC7D,qBAAK,OAAQ,OAAO,CAAE;AAGtB,oBAAK,SAAS,aAAc;AAC3B;AAAA,gBACD;AAAA,cACD;AAAA,YACD,CAAE;AACF,mBAAO;AAAA,UACR;AAAA;AAAA;AAAA,UAIA,KAAK,SAAU,IAAK;AACnB,mBAAO,KACNA,QAAO,QAAS,IAAI,IAAK,IAAI,KAC7B,KAAK,SAAS;AAAA,UAChB;AAAA;AAAA,UAGA,OAAO,WAAW;AACjB,gBAAK,MAAO;AACX,qBAAO,CAAC;AAAA,YACT;AACA,mBAAO;AAAA,UACR;AAAA;AAAA;AAAA;AAAA,UAKA,SAAS,WAAW;AACnB,qBAAS,QAAQ,CAAC;AAClB,mBAAO,SAAS;AAChB,mBAAO;AAAA,UACR;AAAA,UACA,UAAU,WAAW;AACpB,mBAAO,CAAC;AAAA,UACT;AAAA;AAAA;AAAA;AAAA,UAKA,MAAM,WAAW;AAChB,qBAAS,QAAQ,CAAC;AAClB,gBAAK,CAAC,UAAU,CAAC,QAAS;AACzB,qBAAO,SAAS;AAAA,YACjB;AACA,mBAAO;AAAA,UACR;AAAA,UACA,QAAQ,WAAW;AAClB,mBAAO,CAAC,CAAC;AAAA,UACV;AAAA;AAAA,UAGA,UAAU,SAAU,SAAS,MAAO;AACnC,gBAAK,CAAC,QAAS;AACd,qBAAO,QAAQ,CAAC;AAChB,qBAAO,CAAE,SAAS,KAAK,QAAQ,KAAK,MAAM,IAAI,IAAK;AACnD,oBAAM,KAAM,IAAK;AACjB,kBAAK,CAAC,QAAS;AACd,qBAAK;AAAA,cACN;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA;AAAA,UAGA,MAAM,WAAW;AAChB,YAAAa,MAAK,SAAU,MAAM,SAAU;AAC/B,mBAAO;AAAA,UACR;AAAA;AAAA,UAGA,OAAO,WAAW;AACjB,mBAAO,CAAC,CAAC;AAAA,UACV;AAAA,QACD;AAED,eAAOA;AAAA,MACR;AAEA,eAAS,SAAU,GAAI;AACtB,eAAO;AAAA,MACR;AACA,eAAS,QAAS,IAAK;AACtB,cAAM;AAAA,MACP;AAEA,eAAS,WAAY,OAAO,SAAS,QAAQ,SAAU;AACtD,YAAI;AAEJ,YAAI;AAGH,cAAK,SAAS,QAAQ,SAAS,MAAM,aAAc,YAAa;AAC/D,mBAAO,KAAM,KAAM,EAAE,KAAM,OAAQ,EAAE,KAAM,MAAO;AAAA,UAGnD,WAAY,SAAS,QAAQ,SAAS,MAAM,UAAW,YAAa;AACnE,mBAAO,KAAM,OAAO,SAAS,MAAO;AAAA,UAGrC,OAAO;AAKN,oBAAQ,MAAO,QAAW,CAAE,KAAM,EAAE,MAAO,OAAQ,CAAE;AAAA,UACtD;AAAA,QAKD,SAAUT,QAAQ;AACjB,iBAAQA,MAAM;AAAA,QACf;AAAA,MACD;AAEA,MAAAJ,QAAO,OAAQ;AAAA,QAEd,UAAU,SAAU,MAAO;AAC1B,cAAI,SAAS;AAAA;AAAA;AAAA,YAIX;AAAA,cAAE;AAAA,cAAU;AAAA,cAAYA,QAAO,UAAW,QAAS;AAAA,cAClDA,QAAO,UAAW,QAAS;AAAA,cAAG;AAAA,YAAE;AAAA,YACjC;AAAA,cAAE;AAAA,cAAW;AAAA,cAAQA,QAAO,UAAW,aAAc;AAAA,cACpDA,QAAO,UAAW,aAAc;AAAA,cAAG;AAAA,cAAG;AAAA,YAAW;AAAA,YAClD;AAAA,cAAE;AAAA,cAAU;AAAA,cAAQA,QAAO,UAAW,aAAc;AAAA,cACnDA,QAAO,UAAW,aAAc;AAAA,cAAG;AAAA,cAAG;AAAA,YAAW;AAAA,UACnD,GACA,QAAQ,WACR,UAAU;AAAA,YACT,OAAO,WAAW;AACjB,qBAAO;AAAA,YACR;AAAA,YACA,QAAQ,WAAW;AAClB,uBAAS,KAAM,SAAU,EAAE,KAAM,SAAU;AAC3C,qBAAO;AAAA,YACR;AAAA,YACA,OAAO,SAAU,IAAK;AACrB,qBAAO,QAAQ,KAAM,MAAM,EAAG;AAAA,YAC/B;AAAA;AAAA,YAGA,MAAM,WAA6C;AAClD,kBAAI,MAAM;AAEV,qBAAOA,QAAO,SAAU,SAAU,UAAW;AAC5C,gBAAAA,QAAO,KAAM,QAAQ,SAAU,IAAI,OAAQ;AAG1C,sBAAI,KAAK,OAAO,IAAK,MAAO,CAAE,CAAE,MAAM,cACrC,IAAK,MAAO,CAAE,CAAE;AAKjB,2BAAU,MAAO,CAAE,CAAE,EAAG,WAAW;AAClC,wBAAI,WAAW,MAAM,GAAG,MAAO,MAAM,SAAU;AAC/C,wBAAK,YAAY,OAAO,SAAS,YAAY,YAAa;AACzD,+BAAS,QAAQ,EACf,SAAU,SAAS,MAAO,EAC1B,KAAM,SAAS,OAAQ,EACvB,KAAM,SAAS,MAAO;AAAA,oBACzB,OAAO;AACN,+BAAU,MAAO,CAAE,IAAI,MAAO;AAAA,wBAC7B;AAAA,wBACA,KAAK,CAAE,QAAS,IAAI;AAAA,sBACrB;AAAA,oBACD;AAAA,kBACD,CAAE;AAAA,gBACH,CAAE;AACF,sBAAM;AAAA,cACP,CAAE,EAAE,QAAQ;AAAA,YACb;AAAA,YACA,MAAM,SAAU,aAAa,YAAY,YAAa;AACrD,kBAAI,WAAW;AACf,uBAAS,QAAS,OAAOe,WAAU,SAAS,SAAU;AACrD,uBAAO,WAAW;AACjB,sBAAI,OAAO,MACV,OAAO,WACP,aAAa,WAAW;AACvB,wBAAI,UAAU;AAKd,wBAAK,QAAQ,UAAW;AACvB;AAAA,oBACD;AAEA,+BAAW,QAAQ,MAAO,MAAM,IAAK;AAIrC,wBAAK,aAAaA,UAAS,QAAQ,GAAI;AACtC,4BAAM,IAAI,UAAW,0BAA2B;AAAA,oBACjD;AAMA,2BAAO;AAAA;AAAA;AAAA,qBAKJ,OAAO,aAAa,YACrB,OAAO,aAAa,eACrB,SAAS;AAGV,wBAAK,OAAO,SAAS,YAAa;AAGjC,0BAAK,SAAU;AACd,6BAAK;AAAA,0BACJ;AAAA,0BACA,QAAS,UAAUA,WAAU,UAAU,OAAQ;AAAA,0BAC/C,QAAS,UAAUA,WAAU,SAAS,OAAQ;AAAA,wBAC/C;AAAA,sBAGD,OAAO;AAGN;AAEA,6BAAK;AAAA,0BACJ;AAAA,0BACA,QAAS,UAAUA,WAAU,UAAU,OAAQ;AAAA,0BAC/C,QAAS,UAAUA,WAAU,SAAS,OAAQ;AAAA,0BAC9C;AAAA,4BAAS;AAAA,4BAAUA;AAAA,4BAAU;AAAA,4BAC5BA,UAAS;AAAA,0BAAW;AAAA,wBACtB;AAAA,sBACD;AAAA,oBAGD,OAAO;AAIN,0BAAK,YAAY,UAAW;AAC3B,+BAAO;AACP,+BAAO,CAAE,QAAS;AAAA,sBACnB;AAIA,uBAAE,WAAWA,UAAS,aAAe,MAAM,IAAK;AAAA,oBACjD;AAAA,kBACD,GAGAC,WAAU,UACT,aACA,WAAW;AACV,wBAAI;AACH,iCAAW;AAAA,oBACZ,SAAU,GAAI;AAEb,0BAAKhB,QAAO,SAAS,eAAgB;AACpC,wBAAAA,QAAO,SAAS;AAAA,0BAAe;AAAA,0BAC9BgB,SAAQ;AAAA,wBAAM;AAAA,sBAChB;AAKA,0BAAK,QAAQ,KAAK,UAAW;AAI5B,4BAAK,YAAY,SAAU;AAC1B,iCAAO;AACP,iCAAO,CAAE,CAAE;AAAA,wBACZ;AAEA,wBAAAD,UAAS,WAAY,MAAM,IAAK;AAAA,sBACjC;AAAA,oBACD;AAAA,kBACD;AAMF,sBAAK,OAAQ;AACZ,oBAAAC,SAAQ;AAAA,kBACT,OAAO;AAIN,wBAAKhB,QAAO,SAAS,cAAe;AACnC,sBAAAgB,SAAQ,QAAQhB,QAAO,SAAS,aAAa;AAAA,oBAC9C;AACA,oBAAAF,QAAO,WAAYkB,QAAQ;AAAA,kBAC5B;AAAA,gBACD;AAAA,cACD;AAEA,qBAAOhB,QAAO,SAAU,SAAU,UAAW;AAG5C,uBAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,kBAChB;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA,OAAO,eAAe,aACrB,aACA;AAAA,oBACD,SAAS;AAAA,kBACV;AAAA,gBACD;AAGA,uBAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,kBAChB;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA,OAAO,gBAAgB,aACtB,cACA;AAAA,kBACF;AAAA,gBACD;AAGA,uBAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,kBAChB;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA,OAAO,eAAe,aACrB,aACA;AAAA,kBACF;AAAA,gBACD;AAAA,cACD,CAAE,EAAE,QAAQ;AAAA,YACb;AAAA;AAAA;AAAA,YAIA,SAAS,SAAU,KAAM;AACxB,qBAAO,OAAO,OAAOA,QAAO,OAAQ,KAAK,OAAQ,IAAI;AAAA,YACtD;AAAA,UACD,GACA,WAAW,CAAC;AAGb,UAAAA,QAAO,KAAM,QAAQ,SAAUD,IAAG,OAAQ;AACzC,gBAAI,OAAO,MAAO,CAAE,GACnB,cAAc,MAAO,CAAE;AAKxB,oBAAS,MAAO,CAAE,CAAE,IAAI,KAAK;AAG7B,gBAAK,aAAc;AAClB,mBAAK;AAAA,gBACJ,WAAW;AAIV,0BAAQ;AAAA,gBACT;AAAA;AAAA;AAAA,gBAIA,OAAQ,IAAIA,EAAE,EAAG,CAAE,EAAE;AAAA;AAAA;AAAA,gBAIrB,OAAQ,IAAIA,EAAE,EAAG,CAAE,EAAE;AAAA;AAAA,gBAGrB,OAAQ,CAAE,EAAG,CAAE,EAAE;AAAA;AAAA,gBAGjB,OAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,cAClB;AAAA,YACD;AAKA,iBAAK,IAAK,MAAO,CAAE,EAAE,IAAK;AAK1B,qBAAU,MAAO,CAAE,CAAE,IAAI,WAAW;AACnC,uBAAU,MAAO,CAAE,IAAI,MAAO,EAAG,SAAS,WAAW,SAAY,MAAM,SAAU;AACjF,qBAAO;AAAA,YACR;AAKA,qBAAU,MAAO,CAAE,IAAI,MAAO,IAAI,KAAK;AAAA,UACxC,CAAE;AAGF,kBAAQ,QAAS,QAAS;AAG1B,cAAK,MAAO;AACX,iBAAK,KAAM,UAAU,QAAS;AAAA,UAC/B;AAGA,iBAAO;AAAA,QACR;AAAA;AAAA,QAGA,MAAM,SAAU,aAAc;AAC7B,cAGC,YAAY,UAAU,QAGtBA,KAAI,WAGJ,kBAAkB,MAAOA,EAAE,GAC3B,gBAAgB,MAAM,KAAM,SAAU,GAGtC,UAAUC,QAAO,SAAS,GAG1B,aAAa,SAAUD,IAAI;AAC1B,mBAAO,SAAU,OAAQ;AACxB,8BAAiBA,EAAE,IAAI;AACvB,4BAAeA,EAAE,IAAI,UAAU,SAAS,IAAI,MAAM,KAAM,SAAU,IAAI;AACtE,kBAAK,CAAG,EAAE,WAAc;AACvB,wBAAQ,YAAa,iBAAiB,aAAc;AAAA,cACrD;AAAA,YACD;AAAA,UACD;AAGD,cAAK,aAAa,GAAI;AACrB;AAAA,cAAY;AAAA,cAAa,QAAQ,KAAM,WAAYA,EAAE,CAAE,EAAE;AAAA,cAAS,QAAQ;AAAA,cACzE,CAAC;AAAA,YAAU;AAGZ,gBAAK,QAAQ,MAAM,MAAM,aACxB,QAAQ,cAAeA,EAAE,KAAK,cAAeA,EAAE,EAAE,UAAW,YAAa;AAEzE,qBAAO,QAAQ,KAAK;AAAA,YACrB;AAAA,UACD;AAGA,iBAAQA,MAAM;AACb,uBAAY,cAAeA,EAAE,GAAG,WAAYA,EAAE,GAAG,QAAQ,MAAO;AAAA,UACjE;AAEA,iBAAO,QAAQ,QAAQ;AAAA,QACxB;AAAA,MACD,CAAE;AAIF,UAAI,cAAc;AAKlB,MAAAC,QAAO,SAAS,gBAAgB,SAAUiB,QAAO,YAAa;AAE7D,YAAKA,UAAS,YAAY,KAAMA,OAAM,IAAK,GAAI;AAC9C,UAAAnB,QAAO,QAAQ;AAAA,YACd;AAAA,YACAmB;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,MAAAjB,QAAO,iBAAiB,SAAUiB,QAAQ;AACzC,QAAAnB,QAAO,WAAY,WAAW;AAC7B,gBAAMmB;AAAA,QACP,CAAE;AAAA,MACH;AAGA,UAAI,YAAYjB,QAAO,SAAS;AAEhC,MAAAA,QAAO,GAAG,QAAQ,SAAU,IAAK;AAEhC,kBACE,KAAM,EAAG,EAKT,MAAO,SAAUiB,QAAQ;AACzB,UAAAjB,QAAO,eAAgBiB,MAAM;AAAA,QAC9B,CAAE;AAEH,eAAO;AAAA,MACR;AAEA,MAAAjB,QAAO,OAAQ;AAAA;AAAA,QAGd,SAAS;AAAA;AAAA;AAAA,QAIT,WAAW;AAAA;AAAA,QAGX,OAAO,SAAU,MAAO;AAGvB,cAAK,SAAS,OAAO,EAAEA,QAAO,YAAYA,QAAO,SAAU;AAC1D;AAAA,UACD;AAGA,UAAAA,QAAO,UAAU;AAGjB,cAAK,SAAS,QAAQ,EAAEA,QAAO,YAAY,GAAI;AAC9C;AAAA,UACD;AAGA,oBAAU,YAAa,YAAY,CAAEA,OAAO,CAAE;AAAA,QAC/C;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,MAAM,OAAO,UAAU;AAG9B,eAAS,YAAY;AACpB,mBAAW,oBAAqB,oBAAoB,SAAU;AAC9D,QAAAF,QAAO,oBAAqB,QAAQ,SAAU;AAC9C,QAAAE,QAAO,MAAM;AAAA,MACd;AAIA,UAAK,WAAW,eAAe,WAAY;AAG1C,QAAAF,QAAO,WAAYE,QAAO,KAAM;AAAA,MAEjC,OAAO;AAGN,mBAAW,iBAAkB,oBAAoB,SAAU;AAG3D,QAAAF,QAAO,iBAAkB,QAAQ,SAAU;AAAA,MAC5C;AAGA,UAAI,aAAa;AAGjB,eAAS,WAAY,MAAM,QAAS;AACnC,eAAO,OAAO,YAAY;AAAA,MAC3B;AAGA,eAAS,UAAW,QAAS;AAC5B,eAAO,OAAO,QAAS,YAAY,UAAW;AAAA,MAC/C;AAKA,eAAS,WAAY,OAAQ;AAQ5B,eAAO,MAAM,aAAa,KAAK,MAAM,aAAa,KAAK,CAAG,CAAC,MAAM;AAAA,MAClE;AAEA,eAAS,OAAO;AACf,aAAK,UAAUE,QAAO,UAAU,KAAK;AAAA,MACtC;AAEA,WAAK,MAAM;AAEX,WAAK,YAAY;AAAA,QAEhB,OAAO,SAAU,OAAQ;AAGxB,cAAI,QAAQ,MAAO,KAAK,OAAQ;AAGhC,cAAK,CAAC,OAAQ;AACb,oBAAQ,uBAAO,OAAQ,IAAK;AAK5B,gBAAK,WAAY,KAAM,GAAI;AAI1B,kBAAK,MAAM,UAAW;AACrB,sBAAO,KAAK,OAAQ,IAAI;AAAA,cAKzB,OAAO;AACN,uBAAO,eAAgB,OAAO,KAAK,SAAS;AAAA,kBAC3C;AAAA,kBACA,cAAc;AAAA,gBACf,CAAE;AAAA,cACH;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QACA,KAAK,SAAU,OAAO,MAAM,OAAQ;AACnC,cAAI,MACH,QAAQ,KAAK,MAAO,KAAM;AAI3B,cAAK,OAAO,SAAS,UAAW;AAC/B,kBAAO,UAAW,IAAK,CAAE,IAAI;AAAA,UAG9B,OAAO;AAGN,iBAAM,QAAQ,MAAO;AACpB,oBAAO,UAAW,IAAK,CAAE,IAAI,KAAM,IAAK;AAAA,YACzC;AAAA,UACD;AACA,iBAAO;AAAA,QACR;AAAA,QACA,KAAK,SAAU,OAAO,KAAM;AAC3B,iBAAO,QAAQ,SACd,KAAK,MAAO,KAAM;AAAA;AAAA,YAGlB,MAAO,KAAK,OAAQ,KAAK,MAAO,KAAK,OAAQ,EAAG,UAAW,GAAI,CAAE;AAAA;AAAA,QACnE;AAAA,QACA,QAAQ,SAAU,OAAO,KAAK,OAAQ;AAarC,cAAK,QAAQ,UACP,OAAO,OAAO,QAAQ,YAAc,UAAU,QAAc;AAEjE,mBAAO,KAAK,IAAK,OAAO,GAAI;AAAA,UAC7B;AAQA,eAAK,IAAK,OAAO,KAAK,KAAM;AAI5B,iBAAO,UAAU,SAAY,QAAQ;AAAA,QACtC;AAAA,QACA,QAAQ,SAAU,OAAO,KAAM;AAC9B,cAAID,IACH,QAAQ,MAAO,KAAK,OAAQ;AAE7B,cAAK,UAAU,QAAY;AAC1B;AAAA,UACD;AAEA,cAAK,QAAQ,QAAY;AAGxB,gBAAK,MAAM,QAAS,GAAI,GAAI;AAI3B,oBAAM,IAAI,IAAK,SAAU;AAAA,YAC1B,OAAO;AACN,oBAAM,UAAW,GAAI;AAIrB,oBAAM,OAAO,QACZ,CAAE,GAAI,IACJ,IAAI,MAAO,aAAc,KAAK,CAAC;AAAA,YACnC;AAEA,YAAAA,KAAI,IAAI;AAER,mBAAQA,MAAM;AACb,qBAAO,MAAO,IAAKA,EAAE,CAAE;AAAA,YACxB;AAAA,UACD;AAGA,cAAK,QAAQ,UAAaC,QAAO,cAAe,KAAM,GAAI;AAMzD,gBAAK,MAAM,UAAW;AACrB,oBAAO,KAAK,OAAQ,IAAI;AAAA,YACzB,OAAO;AACN,qBAAO,MAAO,KAAK,OAAQ;AAAA,YAC5B;AAAA,UACD;AAAA,QACD;AAAA,QACA,SAAS,SAAU,OAAQ;AAC1B,cAAI,QAAQ,MAAO,KAAK,OAAQ;AAChC,iBAAO,UAAU,UAAa,CAACA,QAAO,cAAe,KAAM;AAAA,QAC5D;AAAA,MACD;AAEA,UAAI,WAAW,IAAI,KAAK;AAExB,UAAI,WAAW,IAAI,KAAK;AAYxB,UAAI,SAAS,iCACZ,aAAa;AAEd,eAAS,QAAS,MAAO;AACxB,YAAK,SAAS,QAAS;AACtB,iBAAO;AAAA,QACR;AAEA,YAAK,SAAS,SAAU;AACvB,iBAAO;AAAA,QACR;AAEA,YAAK,SAAS,QAAS;AACtB,iBAAO;AAAA,QACR;AAGA,YAAK,SAAS,CAAC,OAAO,IAAK;AAC1B,iBAAO,CAAC;AAAA,QACT;AAEA,YAAK,OAAO,KAAM,IAAK,GAAI;AAC1B,iBAAO,KAAK,MAAO,IAAK;AAAA,QACzB;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,MAAM,KAAK,MAAO;AACpC,YAAI;AAIJ,YAAK,SAAS,UAAa,KAAK,aAAa,GAAI;AAChD,iBAAO,UAAU,IAAI,QAAS,YAAY,KAAM,EAAE,YAAY;AAC9D,iBAAO,KAAK,aAAc,IAAK;AAE/B,cAAK,OAAO,SAAS,UAAW;AAC/B,gBAAI;AACH,qBAAO,QAAS,IAAK;AAAA,YACtB,SAAU,GAAI;AAAA,YAAC;AAGf,qBAAS,IAAK,MAAM,KAAK,IAAK;AAAA,UAC/B,OAAO;AACN,mBAAO;AAAA,UACR;AAAA,QACD;AACA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,OAAQ;AAAA,QACd,SAAS,SAAU,MAAO;AACzB,iBAAO,SAAS,QAAS,IAAK,KAAK,SAAS,QAAS,IAAK;AAAA,QAC3D;AAAA,QAEA,MAAM,SAAU,MAAM,MAAM,MAAO;AAClC,iBAAO,SAAS,OAAQ,MAAM,MAAM,IAAK;AAAA,QAC1C;AAAA,QAEA,YAAY,SAAU,MAAM,MAAO;AAClC,mBAAS,OAAQ,MAAM,IAAK;AAAA,QAC7B;AAAA;AAAA;AAAA,QAIA,OAAO,SAAU,MAAM,MAAM,MAAO;AACnC,iBAAO,SAAS,OAAQ,MAAM,MAAM,IAAK;AAAA,QAC1C;AAAA,QAEA,aAAa,SAAU,MAAM,MAAO;AACnC,mBAAS,OAAQ,MAAM,IAAK;AAAA,QAC7B;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,KAAK,OAAQ;AAC5B,cAAID,IAAG,MAAM,MACZ,OAAO,KAAM,CAAE,GACf,QAAQ,QAAQ,KAAK;AAGtB,cAAK,QAAQ,QAAY;AACxB,gBAAK,KAAK,QAAS;AAClB,qBAAO,SAAS,IAAK,IAAK;AAE1B,kBAAK,KAAK,aAAa,KAAK,CAAC,SAAS,IAAK,MAAM,cAAe,GAAI;AACnE,gBAAAA,KAAI,MAAM;AACV,uBAAQA,MAAM;AAIb,sBAAK,MAAOA,EAAE,GAAI;AACjB,2BAAO,MAAOA,EAAE,EAAE;AAClB,wBAAK,KAAK,QAAS,OAAQ,MAAM,GAAI;AACpC,6BAAO,UAAW,KAAK,MAAO,CAAE,CAAE;AAClC,+BAAU,MAAM,MAAM,KAAM,IAAK,CAAE;AAAA,oBACpC;AAAA,kBACD;AAAA,gBACD;AACA,yBAAS,IAAK,MAAM,gBAAgB,IAAK;AAAA,cAC1C;AAAA,YACD;AAEA,mBAAO;AAAA,UACR;AAGA,cAAK,OAAO,QAAQ,UAAW;AAC9B,mBAAO,KAAK,KAAM,WAAW;AAC5B,uBAAS,IAAK,MAAM,GAAI;AAAA,YACzB,CAAE;AAAA,UACH;AAEA,iBAAO,OAAQ,MAAM,SAAUK,QAAQ;AACtC,gBAAIc;AAOJ,gBAAK,QAAQd,WAAU,QAAY;AAIlC,cAAAc,QAAO,SAAS,IAAK,MAAM,GAAI;AAC/B,kBAAKA,UAAS,QAAY;AACzB,uBAAOA;AAAA,cACR;AAIA,cAAAA,QAAO,SAAU,MAAM,GAAI;AAC3B,kBAAKA,UAAS,QAAY;AACzB,uBAAOA;AAAA,cACR;AAGA;AAAA,YACD;AAGA,iBAAK,KAAM,WAAW;AAGrB,uBAAS,IAAK,MAAM,KAAKd,MAAM;AAAA,YAChC,CAAE;AAAA,UACH,GAAG,MAAM,OAAO,UAAU,SAAS,GAAG,MAAM,IAAK;AAAA,QAClD;AAAA,QAEA,YAAY,SAAU,KAAM;AAC3B,iBAAO,KAAK,KAAM,WAAW;AAC5B,qBAAS,OAAQ,MAAM,GAAI;AAAA,UAC5B,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAJ,QAAO,OAAQ;AAAA,QACd,OAAO,SAAU,MAAM,MAAM,MAAO;AACnC,cAAI;AAEJ,cAAK,MAAO;AACX,oBAAS,QAAQ,QAAS;AAC1B,oBAAQ,SAAS,IAAK,MAAM,IAAK;AAGjC,gBAAK,MAAO;AACX,kBAAK,CAAC,SAAS,MAAM,QAAS,IAAK,GAAI;AACtC,wBAAQ,SAAS,IAAK,MAAM,MAAMA,QAAO,UAAW,IAAK,CAAE;AAAA,cAC5D,OAAO;AACN,sBAAM,KAAM,IAAK;AAAA,cAClB;AAAA,YACD;AACA,mBAAO,SAAS,CAAC;AAAA,UAClB;AAAA,QACD;AAAA,QAEA,SAAS,SAAU,MAAM,MAAO;AAC/B,iBAAO,QAAQ;AAEf,cAAI,QAAQA,QAAO,MAAO,MAAM,IAAK,GACpC,cAAc,MAAM,QACpB,KAAK,MAAM,MAAM,GACjB,QAAQA,QAAO,YAAa,MAAM,IAAK,GACvC,OAAO,WAAW;AACjB,YAAAA,QAAO,QAAS,MAAM,IAAK;AAAA,UAC5B;AAGD,cAAK,OAAO,cAAe;AAC1B,iBAAK,MAAM,MAAM;AACjB;AAAA,UACD;AAEA,cAAK,IAAK;AAIT,gBAAK,SAAS,MAAO;AACpB,oBAAM,QAAS,YAAa;AAAA,YAC7B;AAGA,mBAAO,MAAM;AACb,eAAG,KAAM,MAAM,MAAM,KAAM;AAAA,UAC5B;AAEA,cAAK,CAAC,eAAe,OAAQ;AAC5B,kBAAM,MAAM,KAAK;AAAA,UAClB;AAAA,QACD;AAAA;AAAA,QAGA,aAAa,SAAU,MAAM,MAAO;AACnC,cAAI,MAAM,OAAO;AACjB,iBAAO,SAAS,IAAK,MAAM,GAAI,KAAK,SAAS,IAAK,MAAM,KAAK;AAAA,YAC5D,OAAOA,QAAO,UAAW,aAAc,EAAE,IAAK,WAAW;AACxD,uBAAS,OAAQ,MAAM,CAAE,OAAO,SAAS,GAAI,CAAE;AAAA,YAChD,CAAE;AAAA,UACH,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,OAAO,SAAU,MAAM,MAAO;AAC7B,cAAI,SAAS;AAEb,cAAK,OAAO,SAAS,UAAW;AAC/B,mBAAO;AACP,mBAAO;AACP;AAAA,UACD;AAEA,cAAK,UAAU,SAAS,QAAS;AAChC,mBAAOA,QAAO,MAAO,KAAM,CAAE,GAAG,IAAK;AAAA,UACtC;AAEA,iBAAO,SAAS,SACf,OACA,KAAK,KAAM,WAAW;AACrB,gBAAI,QAAQA,QAAO,MAAO,MAAM,MAAM,IAAK;AAG3C,YAAAA,QAAO,YAAa,MAAM,IAAK;AAE/B,gBAAK,SAAS,QAAQ,MAAO,CAAE,MAAM,cAAe;AACnD,cAAAA,QAAO,QAAS,MAAM,IAAK;AAAA,YAC5B;AAAA,UACD,CAAE;AAAA,QACJ;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAAA,QAAO,QAAS,MAAM,IAAK;AAAA,UAC5B,CAAE;AAAA,QACH;AAAA,QACA,YAAY,SAAU,MAAO;AAC5B,iBAAO,KAAK,MAAO,QAAQ,MAAM,CAAC,CAAE;AAAA,QACrC;AAAA;AAAA;AAAA,QAIA,SAAS,SAAU,MAAM,KAAM;AAC9B,cAAI,KACH,QAAQ,GACR,QAAQA,QAAO,SAAS,GACxB,WAAW,MACXD,KAAI,KAAK,QACT,UAAU,WAAW;AACpB,gBAAK,CAAG,EAAE,OAAU;AACnB,oBAAM,YAAa,UAAU,CAAE,QAAS,CAAE;AAAA,YAC3C;AAAA,UACD;AAED,cAAK,OAAO,SAAS,UAAW;AAC/B,kBAAM;AACN,mBAAO;AAAA,UACR;AACA,iBAAO,QAAQ;AAEf,iBAAQA,MAAM;AACb,kBAAM,SAAS,IAAK,SAAUA,EAAE,GAAG,OAAO,YAAa;AACvD,gBAAK,OAAO,IAAI,OAAQ;AACvB;AACA,kBAAI,MAAM,IAAK,OAAQ;AAAA,YACxB;AAAA,UACD;AACA,kBAAQ;AACR,iBAAO,MAAM,QAAS,GAAI;AAAA,QAC3B;AAAA,MACD,CAAE;AAEF,UAAI,OAAO,sCAAsC;AAEjD,UAAI,UAAU,IAAI,OAAQ,mBAAmB,OAAO,eAAe,GAAI;AAEvE,UAAI,YAAY,CAAE,OAAO,SAAS,UAAU,MAAO;AASnD,eAAS,mBAAoB,MAAMoB,KAAK;AAIvC,eAAOA,OAAM;AAGb,eAAO,KAAK,MAAM,YAAY,UAC7B,KAAK,MAAM,YAAY,MACvBnB,QAAO,IAAK,MAAM,SAAU,MAAM;AAAA,MACpC;AAEA,UAAI,cAAc,UAuBjB,UAAU;AAEX,eAAS,SAAU,MAAO;AAKzB,eAAO,YAAY,KAAM,IAAK,KAC7B,QAAQ,KAAM,KAAM,CAAE,EAAE,YAAY,IAAI,KAAK,MAAO,CAAE,CAAE;AAAA,MAC1D;AAEA,eAAS,UAAW,MAAM,MAAM,YAAY,OAAQ;AACnD,YAAI,UAAU,OACb,gBAAgB,IAChB,eAAe,QACd,WAAW;AACV,iBAAO,MAAM,IAAI;AAAA,QAClB,IACA,WAAW;AACV,iBAAOA,QAAO,IAAK,MAAM,MAAM,EAAG;AAAA,QACnC,GACD,UAAU,aAAa,GACvB,OAAO,cAAc,WAAY,CAAE,MAAO,SAAU,IAAK,IAAI,OAAO,KAGpE,gBAAgB,KAAK,aAClB,CAAC,SAAU,IAAK,KAAK,SAAS,QAAQ,CAAC,YACzC,QAAQ,KAAMA,QAAO,IAAK,MAAM,IAAK,CAAE;AAEzC,YAAK,iBAAiB,cAAe,CAAE,MAAM,MAAO;AAInD,oBAAU,UAAU;AAGpB,iBAAO,QAAQ,cAAe,CAAE;AAGhC,0BAAgB,CAAC,WAAW;AAE5B,iBAAQ,iBAAkB;AAIzB,YAAAA,QAAO,MAAO,MAAM,MAAM,gBAAgB,IAAK;AAC/C,iBAAO,IAAI,UAAY,KAAM,QAAQ,aAAa,IAAI,WAAW,SAAW,GAAI;AAC/E,8BAAgB;AAAA,YACjB;AACA,4BAAgB,gBAAgB;AAAA,UAEjC;AAEA,0BAAgB,gBAAgB;AAChC,UAAAA,QAAO,MAAO,MAAM,MAAM,gBAAgB,IAAK;AAG/C,uBAAa,cAAc,CAAC;AAAA,QAC7B;AAEA,YAAK,YAAa;AACjB,0BAAgB,CAAC,iBAAiB,CAAC,WAAW;AAG9C,qBAAW,WAAY,CAAE,IACxB,iBAAkB,WAAY,CAAE,IAAI,KAAM,WAAY,CAAE,IACxD,CAAC,WAAY,CAAE;AAChB,cAAK,OAAQ;AACZ,kBAAM,OAAO;AACb,kBAAM,QAAQ;AACd,kBAAM,MAAM;AAAA,UACb;AAAA,QACD;AACA,eAAO;AAAA,MACR;AAGA,UAAI,YAAY;AAMhB,eAAS,aAAc,QAAS;AAC/B,eAAO,UAAW,OAAO,QAAS,WAAW,KAAM,CAAE;AAAA,MACtD;AAEA,UAAI,oBAAoB,CAAC;AAEzB,eAAS,kBAAmB,MAAO;AAClC,YAAI,MACH,MAAM,KAAK,eACXoB,YAAW,KAAK,UAChB,UAAU,kBAAmBA,SAAS;AAEvC,YAAK,SAAU;AACd,iBAAO;AAAA,QACR;AAEA,eAAO,IAAI,KAAK,YAAa,IAAI,cAAeA,SAAS,CAAE;AAC3D,kBAAUpB,QAAO,IAAK,MAAM,SAAU;AAEtC,aAAK,WAAW,YAAa,IAAK;AAElC,YAAK,YAAY,QAAS;AACzB,oBAAU;AAAA,QACX;AACA,0BAAmBoB,SAAS,IAAI;AAEhC,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,UAAU,MAAO;AACnC,YAAI,SAAS,MACZ,SAAS,CAAC,GACV,QAAQ,GACR,SAAS,SAAS;AAGnB,eAAQ,QAAQ,QAAQ,SAAU;AACjC,iBAAO,SAAU,KAAM;AACvB,cAAK,CAAC,KAAK,OAAQ;AAClB;AAAA,UACD;AAEA,oBAAU,KAAK,MAAM;AACrB,cAAK,MAAO;AAKX,gBAAK,YAAY,QAAS;AACzB,qBAAQ,KAAM,IAAI,SAAS,IAAK,MAAM,SAAU,KAAK;AACrD,kBAAK,CAAC,OAAQ,KAAM,GAAI;AACvB,qBAAK,MAAM,UAAU;AAAA,cACtB;AAAA,YACD;AACA,gBAAK,KAAK,MAAM,YAAY,MAAM,mBAAoB,IAAK,GAAI;AAC9D,qBAAQ,KAAM,IAAI,kBAAmB,IAAK;AAAA,YAC3C;AAAA,UACD,OAAO;AACN,gBAAK,YAAY,QAAS;AACzB,qBAAQ,KAAM,IAAI;AAGlB,uBAAS,IAAK,MAAM,WAAW,OAAQ;AAAA,YACxC;AAAA,UACD;AAAA,QACD;AAGA,aAAM,QAAQ,GAAG,QAAQ,QAAQ,SAAU;AAC1C,cAAK,OAAQ,KAAM,KAAK,MAAO;AAC9B,qBAAU,KAAM,EAAE,MAAM,UAAU,OAAQ,KAAM;AAAA,UACjD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAApB,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,WAAW;AAChB,iBAAO,SAAU,MAAM,IAAK;AAAA,QAC7B;AAAA,QACA,MAAM,WAAW;AAChB,iBAAO,SAAU,IAAK;AAAA,QACvB;AAAA,QACA,QAAQ,SAAU,OAAQ;AACzB,cAAK,OAAO,UAAU,WAAY;AACjC,mBAAO,QAAQ,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA,UACxC;AAEA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAK,mBAAoB,IAAK,GAAI;AACjC,cAAAA,QAAQ,IAAK,EAAE,KAAK;AAAA,YACrB,OAAO;AACN,cAAAA,QAAQ,IAAK,EAAE,KAAK;AAAA,YACrB;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,UAAI,aAAa,SAAU,MAAO;AAChC,eAAOA,QAAO,SAAU,KAAK,eAAe,IAAK,KAChD,KAAK,YAAa,QAAS,MAAM,KAAK;AAAA,MACxC,GACA,WAAW,EAAE,UAAU,KAAK;AAK7B,UAAK,CAAC,kBAAkB,aAAc;AACrC,qBAAa,SAAU,MAAO;AAC7B,iBAAOA,QAAO,SAAU,KAAK,eAAe,IAAK;AAAA,QAClD;AAAA,MACD;AAKA,UAAI,WAAW;AAEf,UAAI,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOb,OAAO,CAAE,OAAQ;AAAA,QACjB,KAAK,CAAE,YAAY,OAAQ;AAAA,QAC3B,IAAI,CAAE,SAAS,OAAQ;AAAA,QACvB,IAAI,CAAE,MAAM,SAAS,OAAQ;AAAA,MAC9B;AAEA,cAAQ,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,UAAU,QAAQ;AAC7E,cAAQ,KAAK,QAAQ;AAErB,eAAS,OAAQ,SAAS,KAAM;AAI/B,YAAI;AAEJ,YAAK,OAAO,QAAQ,yBAAyB,aAAc;AAG1D,gBAAM,IAAI,MAAM,KAAM,QAAQ,qBAAsB,OAAO,GAAI,CAAE;AAAA,QAElE,WAAY,OAAO,QAAQ,qBAAqB,aAAc;AAC7D,gBAAM,QAAQ,iBAAkB,OAAO,GAAI;AAAA,QAE5C,OAAO;AACN,gBAAM,CAAC;AAAA,QACR;AAEA,YAAK,QAAQ,UAAa,OAAO,SAAU,SAAS,GAAI,GAAI;AAC3D,iBAAOA,QAAO,MAAO,CAAE,OAAQ,GAAG,GAAI;AAAA,QACvC;AAEA,eAAO;AAAA,MACR;AAEA,UAAI,cAAc;AAGlB,eAAS,cAAe,OAAO,aAAc;AAC5C,YAAID,KAAI,GACP,IAAI,MAAM;AAEX,eAAQA,KAAI,GAAGA,MAAM;AACpB,mBAAS;AAAA,YACR,MAAOA,EAAE;AAAA,YACT;AAAA,YACA,CAAC,eAAe,SAAS,IAAK,YAAaA,EAAE,GAAG,YAAa;AAAA,UAC9D;AAAA,QACD;AAAA,MACD;AAEA,UAAI,QAAQ;AAEZ,eAAS,cAAe,OAAO,SAAS,SAAS,WAAW,SAAU;AACrE,YAAI,MAAM,KAAK,KAAK,MAAM,UAAU,GACnC,WAAW,QAAQ,uBAAuB,GAC1C,QAAQ,CAAC,GACTA,KAAI,GACJ,IAAI,MAAM;AAEX,eAAQA,KAAI,GAAGA,MAAM;AACpB,iBAAO,MAAOA,EAAE;AAEhB,cAAK,QAAQ,SAAS,GAAI;AAGzB,gBAAK,OAAQ,IAAK,MAAM,aAAc,KAAK,YAAY,YAAa,IAAK,IAAM;AAC9E,cAAAC,QAAO,MAAO,OAAO,KAAK,WAAW,CAAE,IAAK,IAAI,IAAK;AAAA,YAGtD,WAAY,CAAC,MAAM,KAAM,IAAK,GAAI;AACjC,oBAAM,KAAM,QAAQ,eAAgB,IAAK,CAAE;AAAA,YAG5C,OAAO;AACN,oBAAM,OAAO,SAAS,YAAa,QAAQ,cAAe,KAAM,CAAE;AAGlE,qBAAQ,SAAS,KAAM,IAAK,KAAK,CAAE,IAAI,EAAG,GAAK,CAAE,EAAE,YAAY;AAC/D,qBAAO,QAAS,GAAI,KAAK;AAGzB,kBAAI,KAAK;AACT,qBAAQ,EAAE,IAAI,IAAK;AAClB,sBAAM,IAAI,YAAa,QAAQ,cAAe,KAAM,CAAE,CAAE,CAAE;AAAA,cAC3D;AAEA,kBAAI,YAAYA,QAAO,cAAe,IAAK;AAE3C,cAAAA,QAAO,MAAO,OAAO,IAAI,UAAW;AAGpC,oBAAM,SAAS;AAGf,kBAAI,cAAc;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AAGA,iBAAS,cAAc;AAEvB,QAAAD,KAAI;AACJ,eAAU,OAAO,MAAOA,IAAI,GAAM;AAGjC,cAAK,aAAaC,QAAO,QAAS,MAAM,SAAU,IAAI,IAAK;AAC1D,gBAAK,SAAU;AACd,sBAAQ,KAAM,IAAK;AAAA,YACpB;AACA;AAAA,UACD;AAEA,qBAAW,WAAY,IAAK;AAG5B,gBAAM,OAAQ,SAAS,YAAa,IAAK,GAAG,QAAS;AAGrD,cAAK,UAAW;AACf,0BAAe,GAAI;AAAA,UACpB;AAGA,cAAK,SAAU;AACd,gBAAI;AACJ,mBAAU,OAAO,IAAK,GAAI,GAAM;AAC/B,kBAAK,YAAY,KAAM,KAAK,QAAQ,EAAG,GAAI;AAC1C,wBAAQ,KAAM,IAAK;AAAA,cACpB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAGA,eAAS,cAAe,MAAO;AAC9B,aAAK,QAAS,KAAK,aAAc,MAAO,MAAM,QAAS,MAAM,KAAK;AAClE,eAAO;AAAA,MACR;AACA,eAAS,cAAe,MAAO;AAC9B,aAAO,KAAK,QAAQ,IAAK,MAAO,GAAG,CAAE,MAAM,SAAU;AACpD,eAAK,OAAO,KAAK,KAAK,MAAO,CAAE;AAAA,QAChC,OAAO;AACN,eAAK,gBAAiB,MAAO;AAAA,QAC9B;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,YAAY,MAAM,UAAU,SAAU;AAGxD,eAAO,KAAM,IAAK;AAElB,YAAI,UAAU,OAAO,SAAS,YAAY,MAAM,KAC/CD,KAAI,GACJ,IAAI,WAAW,QACf,WAAW,IAAI,GACf,QAAQ,KAAM,CAAE,GAChB,kBAAkB,OAAO,UAAU;AAEpC,YAAK,iBAAkB;AACtB,iBAAO,WAAW,KAAM,SAAU,OAAQ;AACzC,gBAAIc,QAAO,WAAW,GAAI,KAAM;AAChC,iBAAM,CAAE,IAAI,MAAM,KAAM,MAAM,OAAOA,MAAK,KAAK,CAAE;AACjD,qBAAUA,OAAM,MAAM,UAAU,OAAQ;AAAA,UACzC,CAAE;AAAA,QACH;AAEA,YAAK,GAAI;AACR,qBAAW,cAAe,MAAM,WAAY,CAAE,EAAE,eAAe,OAAO,YAAY,OAAQ;AAC1F,kBAAQ,SAAS;AAEjB,cAAK,SAAS,WAAW,WAAW,GAAI;AACvC,uBAAW;AAAA,UACZ;AAGA,cAAK,SAAS,SAAU;AACvB,sBAAUb,QAAO,IAAK,OAAQ,UAAU,QAAS,GAAG,aAAc;AAClE,yBAAa,QAAQ;AAKrB,mBAAQD,KAAI,GAAGA,MAAM;AACpB,qBAAO;AAEP,kBAAKA,OAAM,UAAW;AACrB,uBAAOC,QAAO,MAAO,MAAM,MAAM,IAAK;AAGtC,oBAAK,YAAa;AACjB,kBAAAA,QAAO,MAAO,SAAS,OAAQ,MAAM,QAAS,CAAE;AAAA,gBACjD;AAAA,cACD;AAEA,uBAAS,KAAM,WAAYD,EAAE,GAAG,MAAMA,EAAE;AAAA,YACzC;AAEA,gBAAK,YAAa;AACjB,oBAAM,QAAS,QAAQ,SAAS,CAAE,EAAE;AAGpC,cAAAC,QAAO,IAAK,SAAS,aAAc;AAGnC,mBAAMD,KAAI,GAAGA,KAAI,YAAYA,MAAM;AAClC,uBAAO,QAASA,EAAE;AAClB,oBAAK,YAAY,KAAM,KAAK,QAAQ,EAAG,KACtC,CAAC,SAAS,IAAK,MAAM,YAAa,KAClCC,QAAO,SAAU,KAAK,IAAK,GAAI;AAE/B,sBAAK,KAAK,QAAS,KAAK,QAAQ,IAAK,YAAY,MAAO,UAAW;AAGlE,wBAAKA,QAAO,YAAY,CAAC,KAAK,UAAW;AACxC,sBAAAA,QAAO,SAAU,KAAK,KAAK;AAAA,wBAC1B,OAAO,KAAK;AAAA,wBACZ,aAAa,KAAK;AAAA,sBACnB,GAAG,GAAI;AAAA,oBACR;AAAA,kBACD,OAAO;AACN,4BAAS,KAAK,aAAa,MAAM,GAAI;AAAA,kBACtC;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,UAAI,iBAAiB;AAErB,UAAI,iBAAiB;AAErB,eAAS,aAAa;AACrB,eAAO;AAAA,MACR;AAEA,eAAS,cAAc;AACtB,eAAO;AAAA,MACR;AAEA,eAAS,GAAI,MAAMqB,QAAO,UAAU,MAAM,IAAI,KAAM;AACnD,YAAI,QAAQ;AAGZ,YAAK,OAAOA,WAAU,UAAW;AAGhC,cAAK,OAAO,aAAa,UAAW;AAGnC,mBAAO,QAAQ;AACf,uBAAW;AAAA,UACZ;AACA,eAAM,QAAQA,QAAQ;AACrB,eAAI,MAAM,MAAM,UAAU,MAAMA,OAAO,IAAK,GAAG,GAAI;AAAA,UACpD;AACA,iBAAO;AAAA,QACR;AAEA,YAAK,QAAQ,QAAQ,MAAM,MAAO;AAGjC,eAAK;AACL,iBAAO,WAAW;AAAA,QACnB,WAAY,MAAM,MAAO;AACxB,cAAK,OAAO,aAAa,UAAW;AAGnC,iBAAK;AACL,mBAAO;AAAA,UACR,OAAO;AAGN,iBAAK;AACL,mBAAO;AACP,uBAAW;AAAA,UACZ;AAAA,QACD;AACA,YAAK,OAAO,OAAQ;AACnB,eAAK;AAAA,QACN,WAAY,CAAC,IAAK;AACjB,iBAAO;AAAA,QACR;AAEA,YAAK,QAAQ,GAAI;AAChB,mBAAS;AACT,eAAK,SAAUC,QAAQ;AAGtB,YAAAtB,QAAO,EAAE,IAAKsB,MAAM;AACpB,mBAAO,OAAO,MAAO,MAAM,SAAU;AAAA,UACtC;AAGA,aAAG,OAAO,OAAO,SAAU,OAAO,OAAOtB,QAAO;AAAA,QACjD;AACA,eAAO,KAAK,KAAM,WAAW;AAC5B,UAAAA,QAAO,MAAM,IAAK,MAAMqB,QAAO,IAAI,MAAM,QAAS;AAAA,QACnD,CAAE;AAAA,MACH;AAMA,MAAArB,QAAO,QAAQ;AAAA,QAEd,KAAK,SAAU,MAAMqB,QAAO,SAAS,MAAM,UAAW;AAErD,cAAI,aAAa,aAAa,KAC7B,QAAQ,GAAG,WACX,SAAS,UAAU,MAAM,YAAY,UACrC,WAAW,SAAS,IAAK,IAAK;AAG/B,cAAK,CAAC,WAAY,IAAK,GAAI;AAC1B;AAAA,UACD;AAGA,cAAK,QAAQ,SAAU;AACtB,0BAAc;AACd,sBAAU,YAAY;AACtB,uBAAW,YAAY;AAAA,UACxB;AAIA,cAAK,UAAW;AACf,YAAArB,QAAO,KAAK,gBAAiB,mBAAmB,QAAS;AAAA,UAC1D;AAGA,cAAK,CAAC,QAAQ,MAAO;AACpB,oBAAQ,OAAOA,QAAO;AAAA,UACvB;AAGA,cAAK,EAAG,SAAS,SAAS,SAAW;AACpC,qBAAS,SAAS,SAAS,uBAAO,OAAQ,IAAK;AAAA,UAChD;AACA,cAAK,EAAG,cAAc,SAAS,SAAW;AACzC,0BAAc,SAAS,SAAS,SAAU,GAAI;AAI7C,qBAAO,OAAOA,YAAW,eAAeA,QAAO,MAAM,cAAc,EAAE,OACpEA,QAAO,MAAM,SAAS,MAAO,MAAM,SAAU,IAAI;AAAA,YACnD;AAAA,UACD;AAGA,UAAAqB,UAAUA,UAAS,IAAK,MAAO,aAAc,KAAK,CAAE,EAAG;AACvD,cAAIA,OAAM;AACV,iBAAQ,KAAM;AACb,kBAAM,eAAe,KAAMA,OAAO,CAAE,CAAE,KAAK,CAAC;AAC5C,mBAAO,WAAW,IAAK,CAAE;AACzB,0BAAe,IAAK,CAAE,KAAK,IAAK,MAAO,GAAI,EAAE,KAAK;AAGlD,gBAAK,CAAC,MAAO;AACZ;AAAA,YACD;AAGA,sBAAUrB,QAAO,MAAM,QAAS,IAAK,KAAK,CAAC;AAG3C,oBAAS,WAAW,QAAQ,eAAe,QAAQ,aAAc;AAGjE,sBAAUA,QAAO,MAAM,QAAS,IAAK,KAAK,CAAC;AAG3C,wBAAYA,QAAO,OAAQ;AAAA,cAC1B;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM,QAAQ;AAAA,cACd;AAAA,cACA,cAAc,YAAYA,QAAO,KAAK,MAAM,aAAa,KAAM,QAAS;AAAA,cACxE,WAAW,WAAW,KAAM,GAAI;AAAA,YACjC,GAAG,WAAY;AAGf,gBAAK,EAAG,WAAW,OAAQ,IAAK,IAAM;AACrC,yBAAW,OAAQ,IAAK,IAAI,CAAC;AAC7B,uBAAS,gBAAgB;AAGzB,kBAAK,CAAC,QAAQ,SACb,QAAQ,MAAM,KAAM,MAAM,MAAM,YAAY,WAAY,MAAM,OAAQ;AAEtE,oBAAK,KAAK,kBAAmB;AAC5B,uBAAK,iBAAkB,MAAM,WAAY;AAAA,gBAC1C;AAAA,cACD;AAAA,YACD;AAEA,gBAAK,QAAQ,KAAM;AAClB,sBAAQ,IAAI,KAAM,MAAM,SAAU;AAElC,kBAAK,CAAC,UAAU,QAAQ,MAAO;AAC9B,0BAAU,QAAQ,OAAO,QAAQ;AAAA,cAClC;AAAA,YACD;AAGA,gBAAK,UAAW;AACf,uBAAS,OAAQ,SAAS,iBAAiB,GAAG,SAAU;AAAA,YACzD,OAAO;AACN,uBAAS,KAAM,SAAU;AAAA,YAC1B;AAAA,UACD;AAAA,QAED;AAAA;AAAA,QAGA,QAAQ,SAAU,MAAMqB,QAAO,SAAS,UAAU,aAAc;AAE/D,cAAI,GAAG,WAAW,KACjB,QAAQ,GAAG,WACX,SAAS,UAAU,MAAM,YAAY,UACrC,WAAW,SAAS,QAAS,IAAK,KAAK,SAAS,IAAK,IAAK;AAE3D,cAAK,CAAC,YAAY,EAAG,SAAS,SAAS,SAAW;AACjD;AAAA,UACD;AAGA,UAAAA,UAAUA,UAAS,IAAK,MAAO,aAAc,KAAK,CAAE,EAAG;AACvD,cAAIA,OAAM;AACV,iBAAQ,KAAM;AACb,kBAAM,eAAe,KAAMA,OAAO,CAAE,CAAE,KAAK,CAAC;AAC5C,mBAAO,WAAW,IAAK,CAAE;AACzB,0BAAe,IAAK,CAAE,KAAK,IAAK,MAAO,GAAI,EAAE,KAAK;AAGlD,gBAAK,CAAC,MAAO;AACZ,mBAAM,QAAQ,QAAS;AACtB,gBAAArB,QAAO,MAAM,OAAQ,MAAM,OAAOqB,OAAO,CAAE,GAAG,SAAS,UAAU,IAAK;AAAA,cACvE;AACA;AAAA,YACD;AAEA,sBAAUrB,QAAO,MAAM,QAAS,IAAK,KAAK,CAAC;AAC3C,oBAAS,WAAW,QAAQ,eAAe,QAAQ,aAAc;AACjE,uBAAW,OAAQ,IAAK,KAAK,CAAC;AAC9B,kBAAM,IAAK,CAAE,KACZ,IAAI,OAAQ,YAAY,WAAW,KAAM,eAAgB,IAAI,SAAU;AAGxE,wBAAY,IAAI,SAAS;AACzB,mBAAQ,KAAM;AACb,0BAAY,SAAU,CAAE;AAExB,mBAAO,eAAe,aAAa,UAAU,cAC1C,CAAC,WAAW,QAAQ,SAAS,UAAU,UACvC,CAAC,OAAO,IAAI,KAAM,UAAU,SAAU,OACtC,CAAC,YAAY,aAAa,UAAU,YACrC,aAAa,QAAQ,UAAU,WAAa;AAC7C,yBAAS,OAAQ,GAAG,CAAE;AAEtB,oBAAK,UAAU,UAAW;AACzB,2BAAS;AAAA,gBACV;AACA,oBAAK,QAAQ,QAAS;AACrB,0BAAQ,OAAO,KAAM,MAAM,SAAU;AAAA,gBACtC;AAAA,cACD;AAAA,YACD;AAIA,gBAAK,aAAa,CAAC,SAAS,QAAS;AACpC,kBAAK,CAAC,QAAQ,YACb,QAAQ,SAAS,KAAM,MAAM,YAAY,SAAS,MAAO,MAAM,OAAQ;AAEvE,gBAAAA,QAAO,YAAa,MAAM,MAAM,SAAS,MAAO;AAAA,cACjD;AAEA,qBAAO,OAAQ,IAAK;AAAA,YACrB;AAAA,UACD;AAGA,cAAKA,QAAO,cAAe,MAAO,GAAI;AACrC,qBAAS,OAAQ,MAAM,eAAgB;AAAA,UACxC;AAAA,QACD;AAAA,QAEA,UAAU,SAAU,aAAc;AAEjC,cAAID,IAAG,GAAG,KAAK,SAAS,WAAW,cAClC,OAAO,IAAI,MAAO,UAAU,MAAO,GAGnCuB,SAAQtB,QAAO,MAAM,IAAK,WAAY,GAEtC,YACC,SAAS,IAAK,MAAM,QAAS,KAAK,uBAAO,OAAQ,IAAK,GACpDsB,OAAM,IAAK,KAAK,CAAC,GACpB,UAAUtB,QAAO,MAAM,QAASsB,OAAM,IAAK,KAAK,CAAC;AAGlD,eAAM,CAAE,IAAIA;AAEZ,eAAMvB,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAM;AACxC,iBAAMA,EAAE,IAAI,UAAWA,EAAE;AAAA,UAC1B;AAEA,UAAAuB,OAAM,iBAAiB;AAGvB,cAAK,QAAQ,eAAe,QAAQ,YAAY,KAAM,MAAMA,MAAM,MAAM,OAAQ;AAC/E;AAAA,UACD;AAGA,yBAAetB,QAAO,MAAM,SAAS,KAAM,MAAMsB,QAAO,QAAS;AAGjE,UAAAvB,KAAI;AACJ,kBAAU,UAAU,aAAcA,IAAI,MAAO,CAACuB,OAAM,qBAAqB,GAAI;AAC5E,YAAAA,OAAM,gBAAgB,QAAQ;AAE9B,gBAAI;AACJ,oBAAU,YAAY,QAAQ,SAAU,GAAI,MAC3C,CAACA,OAAM,8BAA8B,GAAI;AAIzC,kBAAK,CAACA,OAAM,cAAc,UAAU,cAAc,SACjDA,OAAM,WAAW,KAAM,UAAU,SAAU,GAAI;AAE/C,gBAAAA,OAAM,YAAY;AAClB,gBAAAA,OAAM,OAAO,UAAU;AAEvB,wBAAUtB,QAAO,MAAM,QAAS,UAAU,QAAS,KAAK,CAAC,GAAI,UAC5D,UAAU,SAAU,MAAO,QAAQ,MAAM,IAAK;AAE/C,oBAAK,QAAQ,QAAY;AACxB,uBAAOsB,OAAM,SAAS,SAAU,OAAQ;AACvC,oBAAAA,OAAM,eAAe;AACrB,oBAAAA,OAAM,gBAAgB;AAAA,kBACvB;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAGA,cAAK,QAAQ,cAAe;AAC3B,oBAAQ,aAAa,KAAM,MAAMA,MAAM;AAAA,UACxC;AAEA,iBAAOA,OAAM;AAAA,QACd;AAAA,QAEA,UAAU,SAAUA,QAAO,UAAW;AACrC,cAAIvB,IAAG,WAAW,KAAK,iBAAiB,kBACvC,eAAe,CAAC,GAChB,gBAAgB,SAAS,eACzB,MAAMuB,OAAM;AAGb,cAAK;AAAA;AAAA;AAAA;AAAA;AAAA,UAOJ,EAAGA,OAAM,SAAS,WAAWA,OAAM,UAAU,IAAM;AAEnD,mBAAQ,QAAQ,MAAM,MAAM,IAAI,cAAc,MAAO;AAIpD,kBAAK,IAAI,aAAa,KAAK,EAAGA,OAAM,SAAS,WAAW,IAAI,aAAa,OAAS;AACjF,kCAAkB,CAAC;AACnB,mCAAmB,CAAC;AACpB,qBAAMvB,KAAI,GAAGA,KAAI,eAAeA,MAAM;AACrC,8BAAY,SAAUA,EAAE;AAGxB,wBAAM,UAAU,WAAW;AAE3B,sBAAK,iBAAkB,GAAI,MAAM,QAAY;AAC5C,qCAAkB,GAAI,IAAI,UAAU,eACnCC,QAAQ,KAAK,IAAK,EAAE,MAAO,GAAI,IAAI,KACnCA,QAAO,KAAM,KAAK,MAAM,MAAM,CAAE,GAAI,CAAE,EAAE;AAAA,kBAC1C;AACA,sBAAK,iBAAkB,GAAI,GAAI;AAC9B,oCAAgB,KAAM,SAAU;AAAA,kBACjC;AAAA,gBACD;AACA,oBAAK,gBAAgB,QAAS;AAC7B,+BAAa,KAAM,EAAE,MAAM,KAAK,UAAU,gBAAgB,CAAE;AAAA,gBAC7D;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAGA,gBAAM;AACN,cAAK,gBAAgB,SAAS,QAAS;AACtC,yBAAa,KAAM,EAAE,MAAM,KAAK,UAAU,SAAS,MAAO,aAAc,EAAE,CAAE;AAAA,UAC7E;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,SAAS,SAAU,MAAM,MAAO;AAC/B,iBAAO,eAAgBA,QAAO,MAAM,WAAW,MAAM;AAAA,YACpD,YAAY;AAAA,YACZ,cAAc;AAAA,YAEd,KAAK,OAAO,SAAS,aACpB,WAAW;AACV,kBAAK,KAAK,eAAgB;AACzB,uBAAO,KAAM,KAAK,aAAc;AAAA,cACjC;AAAA,YACD,IACA,WAAW;AACV,kBAAK,KAAK,eAAgB;AACzB,uBAAO,KAAK,cAAe,IAAK;AAAA,cACjC;AAAA,YACD;AAAA,YAED,KAAK,SAAU,OAAQ;AACtB,qBAAO,eAAgB,MAAM,MAAM;AAAA,gBAClC,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,UAAU;AAAA,gBACV;AAAA,cACD,CAAE;AAAA,YACH;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,KAAK,SAAU,eAAgB;AAC9B,iBAAO,cAAeA,QAAO,OAAQ,IACpC,gBACA,IAAIA,QAAO,MAAO,aAAc;AAAA,QAClC;AAAA,QAEA,SAASA,QAAO,OAAQ,uBAAO,OAAQ,IAAK,GAAG;AAAA,UAC9C,MAAM;AAAA;AAAA,YAGL,UAAU;AAAA,UACX;AAAA,UACA,OAAO;AAAA;AAAA,YAGN,OAAO,SAAU,MAAO;AAIvB,kBAAImB,MAAK,QAAQ;AAGjB,kBAAK,eAAe,KAAMA,IAAG,IAAK,KACjCA,IAAG,SAAS,SAAUA,KAAI,OAAQ,GAAI;AAGtC,+BAAgBA,KAAI,SAAS,IAAK;AAAA,cACnC;AAGA,qBAAO;AAAA,YACR;AAAA,YACA,SAAS,SAAU,MAAO;AAIzB,kBAAIA,MAAK,QAAQ;AAGjB,kBAAK,eAAe,KAAMA,IAAG,IAAK,KACjCA,IAAG,SAAS,SAAUA,KAAI,OAAQ,GAAI;AAEtC,+BAAgBA,KAAI,OAAQ;AAAA,cAC7B;AAGA,qBAAO;AAAA,YACR;AAAA;AAAA;AAAA,YAIA,UAAU,SAAUG,QAAQ;AAC3B,kBAAI,SAASA,OAAM;AACnB,qBAAO,eAAe,KAAM,OAAO,IAAK,KACvC,OAAO,SAAS,SAAU,QAAQ,OAAQ,KAC1C,SAAS,IAAK,QAAQ,OAAQ,KAC9B,SAAU,QAAQ,GAAI;AAAA,YACxB;AAAA,UACD;AAAA,UAEA,cAAc;AAAA,YACb,cAAc,SAAUA,QAAQ;AAC/B,kBAAKA,OAAM,WAAW,QAAY;AAUjC,gBAAAA,OAAM,eAAe;AAAA,cACtB;AAAA,YACD;AAAA,UACD;AAAA,QACD,CAAE;AAAA,MACH;AAMA,eAAS,eAAgBH,KAAI,MAAM,SAAU;AAG5C,YAAK,CAAC,SAAU;AACf,cAAK,SAAS,IAAKA,KAAI,IAAK,MAAM,QAAY;AAC7C,YAAAnB,QAAO,MAAM,IAAKmB,KAAI,MAAM,UAAW;AAAA,UACxC;AACA;AAAA,QACD;AAGA,iBAAS,IAAKA,KAAI,MAAM,KAAM;AAC9B,QAAAnB,QAAO,MAAM,IAAKmB,KAAI,MAAM;AAAA,UAC3B,WAAW;AAAA,UACX,SAAS,SAAUG,QAAQ;AAC1B,gBAAI,QACH,QAAQ,SAAS,IAAK,MAAM,IAAK;AAiBlC,gBAAOA,OAAM,YAAY,KAAO,KAAM,IAAK,GAAI;AAG9C,kBAAK,CAAC,MAAM,QAAS;AAKpB,wBAAQ,MAAM,KAAM,SAAU;AAC9B,yBAAS,IAAK,MAAM,MAAM,KAAM;AAGhC,qBAAM,IAAK,EAAE;AACb,yBAAS,SAAS,IAAK,MAAM,IAAK;AAClC,yBAAS,IAAK,MAAM,MAAM,KAAM;AAEhC,oBAAK,UAAU,QAAS;AAGvB,kBAAAA,OAAM,yBAAyB;AAC/B,kBAAAA,OAAM,eAAe;AAQrB,yBAAO,UAAU,OAAO;AAAA,gBACzB;AAAA,cAMD,YAActB,QAAO,MAAM,QAAS,IAAK,KAAK,CAAC,GAAI,cAAe;AACjE,gBAAAsB,OAAM,gBAAgB;AAAA,cACvB;AAAA,YAID,WAAY,MAAM,QAAS;AAG1B,uBAAS,IAAK,MAAM,MAAM;AAAA,gBACzB,OAAOtB,QAAO,MAAM;AAAA,kBACnB,MAAO,CAAE;AAAA,kBACT,MAAM,MAAO,CAAE;AAAA,kBACf;AAAA,gBACD;AAAA,cACD,CAAE;AAUF,cAAAsB,OAAM,gBAAgB;AACtB,cAAAA,OAAM,gCAAgC;AAAA,YACvC;AAAA,UACD;AAAA,QACD,CAAE;AAAA,MACH;AAEA,MAAAtB,QAAO,cAAc,SAAU,MAAM,MAAM,QAAS;AAGnD,YAAK,KAAK,qBAAsB;AAC/B,eAAK,oBAAqB,MAAM,MAAO;AAAA,QACxC;AAAA,MACD;AAEA,MAAAA,QAAO,QAAQ,SAAU,KAAK,OAAQ;AAGrC,YAAK,EAAG,gBAAgBA,QAAO,QAAU;AACxC,iBAAO,IAAIA,QAAO,MAAO,KAAK,KAAM;AAAA,QACrC;AAGA,YAAK,OAAO,IAAI,MAAO;AACtB,eAAK,gBAAgB;AACrB,eAAK,OAAO,IAAI;AAIhB,eAAK,qBAAqB,IAAI,mBAC7B,aACA;AAGD,eAAK,SAAS,IAAI;AAClB,eAAK,gBAAgB,IAAI;AACzB,eAAK,gBAAgB,IAAI;AAAA,QAG1B,OAAO;AACN,eAAK,OAAO;AAAA,QACb;AAGA,YAAK,OAAQ;AACZ,UAAAA,QAAO,OAAQ,MAAM,KAAM;AAAA,QAC5B;AAGA,aAAK,YAAY,OAAO,IAAI,aAAa,KAAK,IAAI;AAGlD,aAAMA,QAAO,OAAQ,IAAI;AAAA,MAC1B;AAIA,MAAAA,QAAO,MAAM,YAAY;AAAA,QACxB,aAAaA,QAAO;AAAA,QACpB,oBAAoB;AAAA,QACpB,sBAAsB;AAAA,QACtB,+BAA+B;AAAA,QAC/B,aAAa;AAAA,QAEb,gBAAgB,WAAW;AAC1B,cAAI,IAAI,KAAK;AAEb,eAAK,qBAAqB;AAE1B,cAAK,KAAK,CAAC,KAAK,aAAc;AAC7B,cAAE,eAAe;AAAA,UAClB;AAAA,QACD;AAAA,QACA,iBAAiB,WAAW;AAC3B,cAAI,IAAI,KAAK;AAEb,eAAK,uBAAuB;AAE5B,cAAK,KAAK,CAAC,KAAK,aAAc;AAC7B,cAAE,gBAAgB;AAAA,UACnB;AAAA,QACD;AAAA,QACA,0BAA0B,WAAW;AACpC,cAAI,IAAI,KAAK;AAEb,eAAK,gCAAgC;AAErC,cAAK,KAAK,CAAC,KAAK,aAAc;AAC7B,cAAE,yBAAyB;AAAA,UAC5B;AAEA,eAAK,gBAAgB;AAAA,QACtB;AAAA,MACD;AAGA,MAAAA,QAAO,KAAM;AAAA,QACZ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,UAAU;AAAA,QACV,KAAK;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,QACX,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,eAAe;AAAA,QACf,WAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,MACR,GAAGA,QAAO,MAAM,OAAQ;AAExB,MAAAA,QAAO,KAAM,EAAE,OAAO,WAAW,MAAM,WAAW,GAAG,SAAU,MAAM,cAAe;AAMnF,iBAAS,mBAAoB,aAAc;AAG1C,cAAIsB,SAAQtB,QAAO,MAAM,IAAK,WAAY;AAC1C,UAAAsB,OAAM,OAAO,YAAY,SAAS,YAAY,UAAU;AACxD,UAAAA,OAAM,cAAc;AAIpB,cAAKA,OAAM,WAAWA,OAAM,eAAgB;AAK3C,qBAAS,IAAK,MAAM,QAAS,EAAGA,MAAM;AAAA,UACvC;AAAA,QACD;AAEA,QAAAtB,QAAO,MAAM,QAAS,IAAK,IAAI;AAAA;AAAA,UAG9B,OAAO,WAAW;AAKjB,2BAAgB,MAAM,MAAM,IAAK;AAEjC,gBAAK,MAAO;AACX,mBAAK,iBAAkB,cAAc,kBAAmB;AAAA,YACzD,OAAO;AAGN,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,UACA,SAAS,WAAW;AAGnB,2BAAgB,MAAM,IAAK;AAG3B,mBAAO;AAAA,UACR;AAAA,UAEA,UAAU,WAAW;AACpB,gBAAK,MAAO;AACX,mBAAK,oBAAqB,cAAc,kBAAmB;AAAA,YAC5D,OAAO;AAGN,qBAAO;AAAA,YACR;AAAA,UACD;AAAA;AAAA;AAAA,UAIA,UAAU,SAAUsB,QAAQ;AAC3B,mBAAO,SAAS,IAAKA,OAAM,QAAQ,IAAK;AAAA,UACzC;AAAA,UAEA;AAAA,QACD;AAAA,MACD,CAAE;AAKF,MAAAtB,QAAO,KAAM;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,cAAc;AAAA,MACf,GAAG,SAAU,MAAM,KAAM;AACxB,QAAAA,QAAO,MAAM,QAAS,IAAK,IAAI;AAAA,UAC9B,cAAc;AAAA,UACd,UAAU;AAAA,UAEV,QAAQ,SAAUsB,QAAQ;AACzB,gBAAI,KACH,SAAS,MACT,UAAUA,OAAM,eAChB,YAAYA,OAAM;AAInB,gBAAK,CAAC,WAAa,YAAY,UAAU,CAACtB,QAAO,SAAU,QAAQ,OAAQ,GAAM;AAChF,cAAAsB,OAAM,OAAO,UAAU;AACvB,oBAAM,UAAU,QAAQ,MAAO,MAAM,SAAU;AAC/C,cAAAA,OAAM,OAAO;AAAA,YACd;AACA,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAAtB,QAAO,GAAG,OAAQ;AAAA,QAEjB,IAAI,SAAUqB,QAAO,UAAU,MAAM,IAAK;AACzC,iBAAO,GAAI,MAAMA,QAAO,UAAU,MAAM,EAAG;AAAA,QAC5C;AAAA,QACA,KAAK,SAAUA,QAAO,UAAU,MAAM,IAAK;AAC1C,iBAAO,GAAI,MAAMA,QAAO,UAAU,MAAM,IAAI,CAAE;AAAA,QAC/C;AAAA,QACA,KAAK,SAAUA,QAAO,UAAU,IAAK;AACpC,cAAI,WAAW;AACf,cAAKA,UAASA,OAAM,kBAAkBA,OAAM,WAAY;AAGvD,wBAAYA,OAAM;AAClB,YAAArB,QAAQqB,OAAM,cAAe,EAAE;AAAA,cAC9B,UAAU,YACT,UAAU,WAAW,MAAM,UAAU,YACrC,UAAU;AAAA,cACX,UAAU;AAAA,cACV,UAAU;AAAA,YACX;AACA,mBAAO;AAAA,UACR;AACA,cAAK,OAAOA,WAAU,UAAW;AAGhC,iBAAM,QAAQA,QAAQ;AACrB,mBAAK,IAAK,MAAM,UAAUA,OAAO,IAAK,CAAE;AAAA,YACzC;AACA,mBAAO;AAAA,UACR;AACA,cAAK,aAAa,SAAS,OAAO,aAAa,YAAa;AAG3D,iBAAK;AACL,uBAAW;AAAA,UACZ;AACA,cAAK,OAAO,OAAQ;AACnB,iBAAK;AAAA,UACN;AACA,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAArB,QAAO,MAAM,OAAQ,MAAMqB,QAAO,IAAI,QAAS;AAAA,UAChD,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,UAIC,eAAe;AAGhB,eAAS,mBAAoB,MAAM,SAAU;AAC5C,YAAK,SAAU,MAAM,OAAQ,KAC5B,SAAU,QAAQ,aAAa,KAAK,UAAU,QAAQ,YAAY,IAAK,GAAI;AAE3E,iBAAOrB,QAAQ,IAAK,EAAE,SAAU,OAAQ,EAAG,CAAE,KAAK;AAAA,QACnD;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,eAAgB,KAAK,MAAO;AACpC,YAAI,MAAMD,IAAG,GACZ,SAAS,SAAS,IAAK,KAAK,QAAS;AAEtC,YAAK,KAAK,aAAa,GAAI;AAC1B;AAAA,QACD;AAGA,YAAK,QAAS;AACb,mBAAS,OAAQ,MAAM,eAAgB;AACvC,eAAM,QAAQ,QAAS;AACtB,iBAAMA,KAAI,GAAG,IAAI,OAAQ,IAAK,EAAE,QAAQA,KAAI,GAAGA,MAAM;AACpD,cAAAC,QAAO,MAAM,IAAK,MAAM,MAAM,OAAQ,IAAK,EAAGD,EAAE,CAAE;AAAA,YACnD;AAAA,UACD;AAAA,QACD;AAGA,YAAK,SAAS,QAAS,GAAI,GAAI;AAC9B,mBAAS,IAAK,MAAMC,QAAO,OAAQ,CAAC,GAAG,SAAS,IAAK,GAAI,CAAE,CAAE;AAAA,QAC9D;AAAA,MACD;AAEA,eAAS,OAAQ,MAAM,UAAU,UAAW;AAC3C,YAAI,MACH,QAAQ,WAAWA,QAAO,OAAQ,UAAU,IAAK,IAAI,MACrDD,KAAI;AAEL,gBAAU,OAAO,MAAOA,EAAE,MAAO,MAAMA,MAAM;AAC5C,cAAK,CAAC,YAAY,KAAK,aAAa,GAAI;AACvC,YAAAC,QAAO,UAAW,OAAQ,IAAK,CAAE;AAAA,UAClC;AAEA,cAAK,KAAK,YAAa;AACtB,gBAAK,YAAY,WAAY,IAAK,GAAI;AACrC,4BAAe,OAAQ,MAAM,QAAS,CAAE;AAAA,YACzC;AACA,iBAAK,WAAW,YAAa,IAAK;AAAA,UACnC;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,OAAQ;AAAA,QACd,eAAe,SAAU,MAAO;AAC/B,iBAAO;AAAA,QACR;AAAA,QAEA,OAAO,SAAU,MAAM,eAAe,mBAAoB;AACzD,cAAID,IAAG,GAAG,aAAa,cACtB,QAAQ,KAAK,UAAW,IAAK,GAC7B,SAAS,WAAY,IAAK;AAG3B,cAAK,SAAU,KAAK,aAAa,KAAK,KAAK,aAAa,OACtD,CAACC,QAAO,SAAU,IAAK,GAAI;AAI5B,2BAAe,OAAQ,KAAM;AAC7B,0BAAc,OAAQ,IAAK;AAE3B,iBAAMD,KAAI,GAAG,IAAI,YAAY,QAAQA,KAAI,GAAGA,MAAM;AAKjD,kBAAK,SAAU,aAAcA,EAAE,GAAG,UAAW,GAAI;AAChD,6BAAcA,EAAE,EAAE,eAAe,YAAaA,EAAE,EAAE;AAAA,cACnD;AAAA,YACD;AAAA,UACD;AAGA,cAAK,eAAgB;AACpB,gBAAK,mBAAoB;AACxB,4BAAc,eAAe,OAAQ,IAAK;AAC1C,6BAAe,gBAAgB,OAAQ,KAAM;AAE7C,mBAAMA,KAAI,GAAG,IAAI,YAAY,QAAQA,KAAI,GAAGA,MAAM;AACjD,+BAAgB,YAAaA,EAAE,GAAG,aAAcA,EAAE,CAAE;AAAA,cACrD;AAAA,YACD,OAAO;AACN,6BAAgB,MAAM,KAAM;AAAA,YAC7B;AAAA,UACD;AAGA,yBAAe,OAAQ,OAAO,QAAS;AACvC,cAAK,aAAa,SAAS,GAAI;AAC9B,0BAAe,cAAc,CAAC,UAAU,OAAQ,MAAM,QAAS,CAAE;AAAA,UAClE;AAGA,iBAAO;AAAA,QACR;AAAA,QAEA,WAAW,SAAU,OAAQ;AAC5B,cAAI,MAAM,MAAM,MACf,UAAUC,QAAO,MAAM,SACvBD,KAAI;AAEL,kBAAU,OAAO,MAAOA,EAAE,OAAQ,QAAWA,MAAM;AAClD,gBAAK,WAAY,IAAK,GAAI;AACzB,kBAAO,OAAO,KAAM,SAAS,OAAQ,GAAM;AAC1C,oBAAK,KAAK,QAAS;AAClB,uBAAM,QAAQ,KAAK,QAAS;AAC3B,wBAAK,QAAS,IAAK,GAAI;AACtB,sBAAAC,QAAO,MAAM,OAAQ,MAAM,IAAK;AAAA,oBAGjC,OAAO;AACN,sBAAAA,QAAO,YAAa,MAAM,MAAM,KAAK,MAAO;AAAA,oBAC7C;AAAA,kBACD;AAAA,gBACD;AAIA,qBAAM,SAAS,OAAQ,IAAI;AAAA,cAC5B;AACA,kBAAK,KAAM,SAAS,OAAQ,GAAI;AAI/B,qBAAM,SAAS,OAAQ,IAAI;AAAA,cAC5B;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,QAAQ,SAAU,UAAW;AAC5B,iBAAO,OAAQ,MAAM,UAAU,IAAK;AAAA,QACrC;AAAA,QAEA,QAAQ,SAAU,UAAW;AAC5B,iBAAO,OAAQ,MAAM,QAAS;AAAA,QAC/B;AAAA,QAEA,MAAM,SAAU,OAAQ;AACvB,iBAAO,OAAQ,MAAM,SAAUI,QAAQ;AACtC,mBAAOA,WAAU,SAChBJ,QAAO,KAAM,IAAK,IAClB,KAAK,MAAM,EAAE,KAAM,WAAW;AAC7B,kBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,qBAAK,cAAcI;AAAA,cACpB;AAAA,YACD,CAAE;AAAA,UACJ,GAAG,MAAM,OAAO,UAAU,MAAO;AAAA,QAClC;AAAA,QAEA,QAAQ,WAAW;AAClB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,kBAAI,SAAS,mBAAoB,MAAM,IAAK;AAC5C,qBAAO,YAAa,IAAK;AAAA,YAC1B;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,SAAS,WAAW;AACnB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,kBAAI,SAAS,mBAAoB,MAAM,IAAK;AAC5C,qBAAO,aAAc,MAAM,OAAO,UAAW;AAAA,YAC9C;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,QAAQ,WAAW;AAClB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,YAAa;AACtB,mBAAK,WAAW,aAAc,MAAM,IAAK;AAAA,YAC1C;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,OAAO,WAAW;AACjB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,YAAa;AACtB,mBAAK,WAAW,aAAc,MAAM,KAAK,WAAY;AAAA,YACtD;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,OAAO,WAAW;AACjB,cAAI,MACHL,KAAI;AAEL,kBAAU,OAAO,KAAMA,EAAE,MAAO,MAAMA,MAAM;AAC3C,gBAAK,KAAK,aAAa,GAAI;AAG1B,cAAAC,QAAO,UAAW,OAAQ,MAAM,KAAM,CAAE;AAGxC,mBAAK,cAAc;AAAA,YACpB;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,OAAO,SAAU,eAAe,mBAAoB;AACnD,0BAAgB,iBAAiB,OAAO,QAAQ;AAChD,8BAAoB,qBAAqB,OAAO,gBAAgB;AAEhE,iBAAO,KAAK,IAAK,WAAW;AAC3B,mBAAOA,QAAO,MAAO,MAAM,eAAe,iBAAkB;AAAA,UAC7D,CAAE;AAAA,QACH;AAAA,QAEA,MAAM,SAAU,OAAQ;AACvB,iBAAO,OAAQ,MAAM,SAAUI,QAAQ;AACtC,gBAAI,OAAO,KAAM,CAAE,KAAK,CAAC,GACxBL,KAAI,GACJ,IAAI,KAAK;AAEV,gBAAKK,WAAU,UAAa,KAAK,aAAa,GAAI;AACjD,qBAAO,KAAK;AAAA,YACb;AAGA,gBAAK,OAAOA,WAAU,YAAY,CAAC,aAAa,KAAMA,MAAM,KAC3D,CAAC,SAAW,SAAS,KAAMA,MAAM,KAAK,CAAE,IAAI,EAAG,GAAK,CAAE,EAAE,YAAY,CAAE,GAAI;AAE1E,cAAAA,SAAQJ,QAAO,cAAeI,MAAM;AAEpC,kBAAI;AACH,uBAAQL,KAAI,GAAGA,MAAM;AACpB,yBAAO,KAAMA,EAAE,KAAK,CAAC;AAGrB,sBAAK,KAAK,aAAa,GAAI;AAC1B,oBAAAC,QAAO,UAAW,OAAQ,MAAM,KAAM,CAAE;AACxC,yBAAK,YAAYI;AAAA,kBAClB;AAAA,gBACD;AAEA,uBAAO;AAAA,cAGR,SAAU,GAAI;AAAA,cAAC;AAAA,YAChB;AAEA,gBAAK,MAAO;AACX,mBAAK,MAAM,EAAE,OAAQA,MAAM;AAAA,YAC5B;AAAA,UACD,GAAG,MAAM,OAAO,UAAU,MAAO;AAAA,QAClC;AAAA,QAEA,aAAa,WAAW;AACvB,cAAI,UAAU,CAAC;AAGf,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAIG,UAAS,KAAK;AAElB,gBAAKP,QAAO,QAAS,MAAM,OAAQ,IAAI,GAAI;AAC1C,cAAAA,QAAO,UAAW,OAAQ,IAAK,CAAE;AACjC,kBAAKO,SAAS;AACb,gBAAAA,QAAO,aAAc,MAAM,IAAK;AAAA,cACjC;AAAA,YACD;AAAA,UAGD,GAAG,OAAQ;AAAA,QACZ;AAAA,MACD,CAAE;AAEF,MAAAP,QAAO,KAAM;AAAA,QACZ,UAAU;AAAA,QACV,WAAW;AAAA,QACX,cAAc;AAAA,QACd,aAAa;AAAA,QACb,YAAY;AAAA,MACb,GAAG,SAAU,MAAM,UAAW;AAC7B,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,UAAW;AACxC,cAAI,OACH,MAAM,CAAC,GACP,SAASA,QAAQ,QAAS,GAC1B,OAAO,OAAO,SAAS,GACvBD,KAAI;AAEL,iBAAQA,MAAK,MAAMA,MAAM;AACxB,oBAAQA,OAAM,OAAO,OAAO,KAAK,MAAO,IAAK;AAC7C,YAAAC,QAAQ,OAAQD,EAAE,CAAE,EAAG,QAAS,EAAG,KAAM;AACzC,iBAAK,MAAO,KAAK,KAAM;AAAA,UACxB;AAEA,iBAAO,KAAK,UAAW,GAAI;AAAA,QAC5B;AAAA,MACD,CAAE;AAEF,UAAI,YAAY,IAAI,OAAQ,OAAO,OAAO,mBAAmB,GAAI;AAEjE,UAAI,cAAc;AAElB,eAAS,UAAW,MAAO;AAK1B,YAAI,OAAO,KAAK,cAAc;AAI9B,YAAK,CAAC,MAAO;AACZ,iBAAOD;AAAA,QACR;AAEA,eAAO,KAAK,iBAAkB,IAAK;AAAA,MACpC;AAGA,eAAS,KAAM,MAAM,SAAS,UAAW;AACxC,YAAI,KAAK,MACR,MAAM,CAAC;AAGR,aAAM,QAAQ,SAAU;AACvB,cAAK,IAAK,IAAI,KAAK,MAAO,IAAK;AAC/B,eAAK,MAAO,IAAK,IAAI,QAAS,IAAK;AAAA,QACpC;AAEA,cAAM,SAAS,KAAM,IAAK;AAG1B,aAAM,QAAQ,SAAU;AACvB,eAAK,MAAO,IAAK,IAAI,IAAK,IAAK;AAAA,QAChC;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,OAAQ,MAAM,MAAM,UAAW;AACvC,YAAI,KACH,eAAe,YAAY,KAAM,IAAK;AAEvC,mBAAW,YAAY,UAAW,IAAK;AAGvC,YAAK,UAAW;AAef,gBAAM,SAAS,iBAAkB,IAAK,KAAK,SAAU,IAAK;AAE1D,cAAK,gBAAgB,KAAM;AAiB1B,kBAAM,IAAI,QAAS,UAAU,IAAK,KAAK;AAAA,UACxC;AAEA,cAAK,QAAQ,MAAM,CAAC,WAAY,IAAK,GAAI;AACxC,kBAAME,QAAO,MAAO,MAAM,IAAK;AAAA,UAChC;AAAA,QACD;AAEA,eAAO,QAAQ;AAAA;AAAA;AAAA,UAId,MAAM;AAAA,YACN;AAAA,MACF;AAEA,UAAI,cAAc,CAAE,UAAU,OAAO,IAAK,GACzC,aAAa,WAAW,cAAe,KAAM,EAAE;AAGhD,eAAS,eAAgB,MAAO;AAG/B,YAAI,UAAU,KAAM,CAAE,EAAE,YAAY,IAAI,KAAK,MAAO,CAAE,GACrDD,KAAI,YAAY;AAEjB,eAAQA,MAAM;AACb,iBAAO,YAAaA,EAAE,IAAI;AAC1B,cAAK,QAAQ,YAAa;AACzB,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAGA,eAAS,cAAe,MAAO;AAC9B,YAAK,QAAQ,YAAa;AACzB,iBAAO;AAAA,QACR;AACA,eAAO,eAAgB,IAAK,KAAK;AAAA,MAClC;AAEA,UAAI,yBAAyB,0BAC5B,QAAQ,WAAW,cAAe,OAAQ;AAI3C,eAAS,yBAAyB;AACjC;AAAA;AAAA,UAGC,CAAC;AAAA,UAGD,CAAC,MAAM;AAAA,UACN;AACD;AAAA,QACD;AAEA,YAAI,SACH,MAAM,WAAW,cAAe,KAAM,GACtC,KAAK,WAAW,cAAe,IAAK,GACpC,KAAK,WAAW,cAAe,IAAK;AAErC,cAAM,MAAM,UAAU;AAEtB,WAAG,MAAM,UAAU;AACnB,WAAG,MAAM,UAAU;AAEnB,YAAI,OAAO;AAEX,0BACE,YAAa,KAAM,EACnB,YAAa,GAAI,EACjB,WACA,YAAa,EAAG,EAChB,YAAa,EAAG,EAChB,WACA,YAAa,GAAG,UAAW,IAAK,CAAE;AAGpC,YAAK,MAAM,gBAAgB,GAAI;AAC9B,4BAAkB,YAAa,KAAM;AACrC;AAAA,QACD;AAEA,kBAAUD,QAAO,iBAAkB,EAAG;AAYtC,mCAA2B,QAAQ,KAAK;AAAA,UAAO;AAAA,YAC9CA,QAAO,iBAAkB,GAAI,EAAE;AAAA,UAAM;AAAA,QACtC,MAAM;AAQN,kCAA0B,KAAK,MAAO,WAAY,QAAQ,MAAO,IAChE,WAAY,QAAQ,cAAe,IACnC,WAAY,QAAQ,iBAAkB,CAAE,MAAM,GAAG;AAElD,0BAAkB,YAAa,KAAM;AAIrC,gBAAQ;AAAA,MACT;AAEA,MAAAE,QAAO,OAAQ,SAAS;AAAA,QACvB,sBAAsB,WAAW;AAChC,iCAAuB;AACvB,iBAAO;AAAA,QACR;AAAA,QAEA,uBAAuB,WAAW;AACjC,iCAAuB;AACvB,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAEF,UAAI,UAAU,EAAE,UAAU,YAAY,YAAY,UAAU,SAAS,QAAQ,GAC5E,qBAAqB;AAAA,QACpB,eAAe;AAAA,QACf,YAAY;AAAA,MACb;AAED,eAAS,kBAAmB,OAAO,OAAO,UAAW;AAIpD,YAAIE,WAAU,QAAQ,KAAM,KAAM;AAClC,eAAOA;AAAA;AAAA,UAGN,KAAK,IAAK,GAAGA,SAAS,CAAE,KAAM,YAAY,EAAI,KAAMA,SAAS,CAAE,KAAK;AAAA,YACpE;AAAA,MACF;AAEA,eAAS,mBAAoB,MAAM,WAAW,KAAK,aAAa,QAAQ,aAAc;AACrF,YAAIH,KAAI,cAAc,UAAU,IAAI,GACnC,QAAQ,GACR,QAAQ,GACR,cAAc;AAGf,YAAK,SAAU,cAAc,WAAW,YAAc;AACrD,iBAAO;AAAA,QACR;AAEA,eAAQA,KAAI,GAAGA,MAAK,GAAI;AAKvB,cAAK,QAAQ,UAAW;AACvB,2BAAeC,QAAO,IAAK,MAAM,MAAM,UAAWD,EAAE,GAAG,MAAM,MAAO;AAAA,UACrE;AAGA,cAAK,CAAC,aAAc;AAGnB,qBAASC,QAAO,IAAK,MAAM,YAAY,UAAWD,EAAE,GAAG,MAAM,MAAO;AAGpE,gBAAK,QAAQ,WAAY;AACxB,uBAASC,QAAO,IAAK,MAAM,WAAW,UAAWD,EAAE,IAAI,SAAS,MAAM,MAAO;AAAA,YAG9E,OAAO;AACN,uBAASC,QAAO,IAAK,MAAM,WAAW,UAAWD,EAAE,IAAI,SAAS,MAAM,MAAO;AAAA,YAC9E;AAAA,UAID,OAAO;AAGN,gBAAK,QAAQ,WAAY;AACxB,uBAASC,QAAO,IAAK,MAAM,YAAY,UAAWD,EAAE,GAAG,MAAM,MAAO;AAAA,YACrE;AAGA,gBAAK,QAAQ,UAAW;AACvB,uBAASC,QAAO,IAAK,MAAM,WAAW,UAAWD,EAAE,IAAI,SAAS,MAAM,MAAO;AAAA,YAC9E;AAAA,UACD;AAAA,QACD;AAGA,YAAK,CAAC,eAAe,eAAe,GAAI;AAIvC,mBAAS,KAAK,IAAK,GAAG,KAAK;AAAA,YAC1B,KAAM,WAAW,UAAW,CAAE,EAAE,YAAY,IAAI,UAAU,MAAO,CAAE,CAAE,IACrE,cACA,QACA,QACA;AAAA;AAAA;AAAA,UAID,CAAE,KAAK;AAAA,QACR;AAEA,eAAO,QAAQ;AAAA,MAChB;AAEA,eAAS,iBAAkB,MAAM,WAAW,OAAQ;AAGnD,YAAI,SAAS,UAAW,IAAK,GAI5B,kBAAkB,QAAQ,OAC1B,cAAc,mBACbC,QAAO,IAAK,MAAM,aAAa,OAAO,MAAO,MAAM,cACpD,mBAAmB,aAEnB,MAAM,OAAQ,MAAM,WAAW,MAAO,GACtC,aAAa,WAAW,UAAW,CAAE,EAAE,YAAY,IAAI,UAAU,MAAO,CAAE;AAG3E,YAAK,UAAU,KAAM,GAAI,GAAI;AAC5B,cAAK,CAAC,OAAQ;AACb,mBAAO;AAAA,UACR;AACA,gBAAM;AAAA,QACP;AAGA;AAAA;AAAA;AAAA,WAKE,QAAQ;AAAA;AAAA;AAAA,UAKN,QAAQ,eAER,CAAC,QAAQ,sBAAsB,KAAK,SAAU,MAAM,KAAM,KAE1D,CAAC,QAAQ,qBAAqB,KAAK,SAAU,MAAM,IAAK;AAAA,UAI3D,KAAK,eAAe,EAAE;AAAA,UAAS;AAE/B,wBAAcA,QAAO,IAAK,MAAM,aAAa,OAAO,MAAO,MAAM;AAKjE,6BAAmB,cAAc;AACjC,cAAK,kBAAmB;AACvB,kBAAM,KAAM,UAAW;AAAA,UACxB;AAAA,QACD;AAGA,cAAM,WAAY,GAAI,KAAK;AAG3B,eAAS,MACR;AAAA,UACC;AAAA,UACA;AAAA,UACA,UAAW,cAAc,WAAW;AAAA,UACpC;AAAA,UACA;AAAA;AAAA,UAGA;AAAA,QACD,IACG;AAAA,MACL;AAEA,MAAAA,QAAO,OAAQ;AAAA;AAAA;AAAA,QAId,UAAU,CAAC;AAAA;AAAA,QAGX,OAAO,SAAU,MAAM,MAAM,OAAO,OAAQ;AAG3C,cAAK,CAAC,QAAQ,KAAK,aAAa,KAAK,KAAK,aAAa,KAAK,CAAC,KAAK,OAAQ;AACzE;AAAA,UACD;AAGA,cAAI,KAAK,MAAM,OACd,WAAW,aAAc,IAAK,GAC9B,eAAe,YAAY,KAAM,IAAK,GACtC,QAAQ,KAAK;AAKd,cAAK,CAAC,cAAe;AACpB,mBAAO,cAAe,QAAS;AAAA,UAChC;AAGA,kBAAQA,QAAO,SAAU,IAAK,KAAKA,QAAO,SAAU,QAAS;AAG7D,cAAK,UAAU,QAAY;AAC1B,mBAAO,OAAO;AAGd,gBAAK,SAAS,aAAc,MAAM,QAAQ,KAAM,KAAM,MAAO,IAAK,CAAE,GAAI;AACvE,sBAAQ,UAAW,MAAM,MAAM,GAAI;AAGnC,qBAAO;AAAA,YACR;AAGA,gBAAK,SAAS,QAAQ,UAAU,OAAQ;AACvC;AAAA,YACD;AAGA,gBAAK,SAAS,UAAW;AACxB,uBAAS,OAAO,IAAK,CAAE,MAAO,SAAU,QAAS,IAAI,OAAO;AAAA,YAC7D;AAIA,gBAAK,QAAQ,UAAU,MAAM,KAAK,QAAS,YAAa,MAAM,GAAI;AACjE,oBAAO,IAAK,IAAI;AAAA,YACjB;AAGA,gBAAK,CAAC,SAAS,EAAG,SAAS,WACxB,QAAQ,MAAM,IAAK,MAAM,OAAO,KAAM,OAAQ,QAAY;AAE5D,kBAAK,cAAe;AACnB,sBAAM,YAAa,MAAM,KAAM;AAAA,cAChC,OAAO;AACN,sBAAO,IAAK,IAAI;AAAA,cACjB;AAAA,YACD;AAAA,UAED,OAAO;AAGN,gBAAK,SAAS,SAAS,UACpB,MAAM,MAAM,IAAK,MAAM,OAAO,KAAM,OAAQ,QAAY;AAE1D,qBAAO;AAAA,YACR;AAGA,mBAAO,MAAO,IAAK;AAAA,UACpB;AAAA,QACD;AAAA,QAEA,KAAK,SAAU,MAAM,MAAM,OAAO,QAAS;AAC1C,cAAI,KAAK,KAAK,OACb,WAAW,aAAc,IAAK,GAC9B,eAAe,YAAY,KAAM,IAAK;AAKvC,cAAK,CAAC,cAAe;AACpB,mBAAO,cAAe,QAAS;AAAA,UAChC;AAGA,kBAAQA,QAAO,SAAU,IAAK,KAAKA,QAAO,SAAU,QAAS;AAG7D,cAAK,SAAS,SAAS,OAAQ;AAC9B,kBAAM,MAAM,IAAK,MAAM,MAAM,KAAM;AAAA,UACpC;AAGA,cAAK,QAAQ,QAAY;AACxB,kBAAM,OAAQ,MAAM,MAAM,MAAO;AAAA,UAClC;AAGA,cAAK,QAAQ,YAAY,QAAQ,oBAAqB;AACrD,kBAAM,mBAAoB,IAAK;AAAA,UAChC;AAGA,cAAK,UAAU,MAAM,OAAQ;AAC5B,kBAAM,WAAY,GAAI;AACtB,mBAAO,UAAU,QAAQ,SAAU,GAAI,IAAI,OAAO,IAAI;AAAA,UACvD;AAEA,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,KAAM,CAAE,UAAU,OAAQ,GAAG,SAAU,IAAI,WAAY;AAC7D,QAAAA,QAAO,SAAU,SAAU,IAAI;AAAA,UAC9B,KAAK,SAAU,MAAM,UAAU,OAAQ;AACtC,gBAAK,UAAW;AAIf,qBAAOA,QAAO,IAAK,MAAM,SAAU,MAAM,SACxC,KAAM,MAAM,SAAS,WAAW;AAC/B,uBAAO,iBAAkB,MAAM,WAAW,KAAM;AAAA,cACjD,CAAE,IACF,iBAAkB,MAAM,WAAW,KAAM;AAAA,YAC3C;AAAA,UACD;AAAA,UAEA,KAAK,SAAU,MAAM,OAAO,OAAQ;AACnC,gBAAIE,UACH,SAAS,UAAW,IAAK,GAGzB,cAAc,SACbF,QAAO,IAAK,MAAM,aAAa,OAAO,MAAO,MAAM,cACpD,WAAW,QACV;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACD,IACA;AAGF,gBAAK,aAAcE,WAAU,QAAQ,KAAM,KAAM,OAC9CA,SAAS,CAAE,KAAK,UAAW,MAAO;AAEpC,mBAAK,MAAO,SAAU,IAAI;AAC1B,sBAAQF,QAAO,IAAK,MAAM,SAAU;AAAA,YACrC;AAEA,mBAAO,kBAAmB,MAAM,OAAO,QAAS;AAAA,UACjD;AAAA,QACD;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,KAAM;AAAA,QACZ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,MACT,GAAG,SAAU,QAAQ,QAAS;AAC7B,QAAAA,QAAO,SAAU,SAAS,MAAO,IAAI;AAAA,UACpC,QAAQ,SAAU,OAAQ;AACzB,gBAAID,KAAI,GACP,WAAW,CAAC,GAGZ,QAAQ,OAAO,UAAU,WAAW,MAAM,MAAO,GAAI,IAAI,CAAE,KAAM;AAElE,mBAAQA,KAAI,GAAGA,MAAM;AACpB,uBAAU,SAAS,UAAWA,EAAE,IAAI,MAAO,IAC1C,MAAOA,EAAE,KAAK,MAAOA,KAAI,CAAE,KAAK,MAAO,CAAE;AAAA,YAC3C;AAEA,mBAAO;AAAA,UACR;AAAA,QACD;AAEA,YAAK,WAAW,UAAW;AAC1B,UAAAC,QAAO,SAAU,SAAS,MAAO,EAAE,MAAM;AAAA,QAC1C;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,KAAK,SAAU,MAAM,OAAQ;AAC5B,iBAAO,OAAQ,MAAM,SAAU,MAAMuB,OAAMnB,QAAQ;AAClD,gBAAI,QAAQ,KACX,MAAM,CAAC,GACPL,KAAI;AAEL,gBAAK,MAAM,QAASwB,KAAK,GAAI;AAC5B,uBAAS,UAAW,IAAK;AACzB,oBAAMA,MAAK;AAEX,qBAAQxB,KAAI,KAAKA,MAAM;AACtB,oBAAKwB,MAAMxB,EAAE,CAAE,IAAIC,QAAO,IAAK,MAAMuB,MAAMxB,EAAE,GAAG,OAAO,MAAO;AAAA,cAC/D;AAEA,qBAAO;AAAA,YACR;AAEA,mBAAOK,WAAU,SAChBJ,QAAO,MAAO,MAAMuB,OAAMnB,MAAM,IAChCJ,QAAO,IAAK,MAAMuB,KAAK;AAAA,UACzB,GAAG,MAAM,OAAO,UAAU,SAAS,CAAE;AAAA,QACtC;AAAA,MACD,CAAE;AAEF,eAAS,MAAO,MAAM,SAAS,MAAM,KAAK,QAAS;AAClD,eAAO,IAAI,MAAM,UAAU,KAAM,MAAM,SAAS,MAAM,KAAK,MAAO;AAAA,MACnE;AACA,MAAAvB,QAAO,QAAQ;AAEf,YAAM,YAAY;AAAA,QACjB,aAAa;AAAA,QACb,MAAM,SAAU,MAAM,SAAS,MAAM,KAAK,QAAQ,MAAO;AACxD,eAAK,OAAO;AACZ,eAAK,OAAO;AACZ,eAAK,SAAS,UAAUA,QAAO,OAAO;AACtC,eAAK,UAAU;AACf,eAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,eAAK,MAAM;AACX,eAAK,OAAO,SAAU,SAAU,IAAK,IAAI,OAAO;AAAA,QACjD;AAAA,QACA,KAAK,WAAW;AACf,cAAI,QAAQ,MAAM,UAAW,KAAK,IAAK;AAEvC,iBAAO,SAAS,MAAM,MACrB,MAAM,IAAK,IAAK,IAChB,MAAM,UAAU,SAAS,IAAK,IAAK;AAAA,QACrC;AAAA,QACA,KAAK,SAAU,SAAU;AACxB,cAAI,OACH,QAAQ,MAAM,UAAW,KAAK,IAAK;AAEpC,cAAK,KAAK,QAAQ,UAAW;AAC5B,iBAAK,MAAM,QAAQA,QAAO,OAAQ,KAAK,MAAO;AAAA,cAC7C;AAAA,cAAS,KAAK,QAAQ,WAAW;AAAA,cAAS;AAAA,cAAG;AAAA,cAAG,KAAK,QAAQ;AAAA,YAC9D;AAAA,UACD,OAAO;AACN,iBAAK,MAAM,QAAQ;AAAA,UACpB;AACA,eAAK,OAAQ,KAAK,MAAM,KAAK,SAAU,QAAQ,KAAK;AAEpD,cAAK,KAAK,QAAQ,MAAO;AACxB,iBAAK,QAAQ,KAAK,KAAM,KAAK,MAAM,KAAK,KAAK,IAAK;AAAA,UACnD;AAEA,cAAK,SAAS,MAAM,KAAM;AACzB,kBAAM,IAAK,IAAK;AAAA,UACjB,OAAO;AACN,kBAAM,UAAU,SAAS,IAAK,IAAK;AAAA,UACpC;AACA,iBAAO;AAAA,QACR;AAAA,MACD;AAEA,YAAM,UAAU,KAAK,YAAY,MAAM;AAEvC,YAAM,YAAY;AAAA,QACjB,UAAU;AAAA,UACT,KAAK,SAAU,OAAQ;AACtB,gBAAI;AAIJ,gBAAK,MAAM,KAAK,aAAa,KAC5B,MAAM,KAAM,MAAM,IAAK,KAAK,QAAQ,MAAM,KAAK,MAAO,MAAM,IAAK,KAAK,MAAO;AAC7E,qBAAO,MAAM,KAAM,MAAM,IAAK;AAAA,YAC/B;AAMA,qBAASA,QAAO,IAAK,MAAM,MAAM,MAAM,MAAM,EAAG;AAGhD,mBAAO,CAAC,UAAU,WAAW,SAAS,IAAI;AAAA,UAC3C;AAAA,UACA,KAAK,SAAU,OAAQ;AAKtB,gBAAKA,QAAO,GAAG,KAAM,MAAM,IAAK,GAAI;AACnC,cAAAA,QAAO,GAAG,KAAM,MAAM,IAAK,EAAG,KAAM;AAAA,YACrC,WAAY,MAAM,KAAK,aAAa,MACnCA,QAAO,SAAU,MAAM,IAAK,KAC3B,MAAM,KAAK,MAAO,cAAe,MAAM,IAAK,CAAE,KAAK,OAAS;AAC7D,cAAAA,QAAO,MAAO,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAK;AAAA,YAC9D,OAAO;AACN,oBAAM,KAAM,MAAM,IAAK,IAAI,MAAM;AAAA,YAClC;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,MAAAA,QAAO,SAAS;AAAA,QACf,QAAQ,SAAU,GAAI;AACrB,iBAAO;AAAA,QACR;AAAA,QACA,OAAO,SAAU,GAAI;AACpB,iBAAO,MAAM,KAAK,IAAK,IAAI,KAAK,EAAG,IAAI;AAAA,QACxC;AAAA,QACA,UAAU;AAAA,MACX;AAEA,MAAAA,QAAO,KAAK,MAAM,UAAU;AAG5B,MAAAA,QAAO,GAAG,OAAO,CAAC;AAElB,UACC,OAAO,YACP,WAAW,0BACX,OAAO;AAER,eAASwB,YAAW;AACnB,YAAK,YAAa;AACjB,cAAK,WAAW,WAAW,SAAS1B,QAAO,uBAAwB;AAClE,YAAAA,QAAO,sBAAuB0B,SAAS;AAAA,UACxC,OAAO;AACN,YAAA1B,QAAO,WAAY0B,WAAU,EAAG;AAAA,UACjC;AAEA,UAAAxB,QAAO,GAAG,KAAK;AAAA,QAChB;AAAA,MACD;AAGA,eAAS,cAAc;AACtB,QAAAF,QAAO,WAAY,WAAW;AAC7B,kBAAQ;AAAA,QACT,CAAE;AACF,eAAS,QAAQ,KAAK,IAAI;AAAA,MAC3B;AAGA,eAAS,MAAO,MAAM,cAAe;AACpC,YAAI,OACHC,KAAI,GACJ,QAAQ,EAAE,QAAQ,KAAK;AAIxB,uBAAe,eAAe,IAAI;AAClC,eAAQA,KAAI,GAAGA,MAAK,IAAI,cAAe;AACtC,kBAAQ,UAAWA,EAAE;AACrB,gBAAO,WAAW,KAAM,IAAI,MAAO,YAAY,KAAM,IAAI;AAAA,QAC1D;AAEA,YAAK,cAAe;AACnB,gBAAM,UAAU,MAAM,QAAQ;AAAA,QAC/B;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,YAAa,OAAO,MAAM,WAAY;AAC9C,YAAI,OACH,cAAe,UAAU,SAAU,IAAK,KAAK,CAAC,GAAI,OAAQ,UAAU,SAAU,GAAI,CAAE,GACpF,QAAQ,GACR,SAAS,WAAW;AACrB,eAAQ,QAAQ,QAAQ,SAAU;AACjC,cAAO,QAAQ,WAAY,KAAM,EAAE,KAAM,WAAW,MAAM,KAAM,GAAM;AAGrE,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAEA,eAAS,iBAAkB,MAAM,OAAO0B,OAAO;AAC9C,YAAI,MAAM,OAAO,QAAQ,OAAO,SAAS,WAAW,gBAAgB,SACnE,QAAQ,WAAW,SAAS,YAAY,OACxC,OAAO,MACP,OAAO,CAAC,GACR,QAAQ,KAAK,OACb,SAAS,KAAK,YAAY,mBAAoB,IAAK,GACnD,WAAW,SAAS,IAAK,MAAM,QAAS;AAGzC,YAAK,CAACA,MAAK,OAAQ;AAClB,kBAAQzB,QAAO,YAAa,MAAM,IAAK;AACvC,cAAK,MAAM,YAAY,MAAO;AAC7B,kBAAM,WAAW;AACjB,sBAAU,MAAM,MAAM;AACtB,kBAAM,MAAM,OAAO,WAAW;AAC7B,kBAAK,CAAC,MAAM,UAAW;AACtB,wBAAQ;AAAA,cACT;AAAA,YACD;AAAA,UACD;AACA,gBAAM;AAEN,eAAK,OAAQ,WAAW;AAGvB,iBAAK,OAAQ,WAAW;AACvB,oBAAM;AACN,kBAAK,CAACA,QAAO,MAAO,MAAM,IAAK,EAAE,QAAS;AACzC,sBAAM,MAAM,KAAK;AAAA,cAClB;AAAA,YACD,CAAE;AAAA,UACH,CAAE;AAAA,QACH;AAGA,aAAM,QAAQ,OAAQ;AACrB,kBAAQ,MAAO,IAAK;AACpB,cAAK,SAAS,KAAM,KAAM,GAAI;AAC7B,mBAAO,MAAO,IAAK;AACnB,qBAAS,UAAU,UAAU;AAC7B,gBAAK,WAAY,SAAS,SAAS,SAAW;AAI7C,kBAAK,UAAU,UAAU,YAAY,SAAU,IAAK,MAAM,QAAY;AACrE,yBAAS;AAAA,cAGV,OAAO;AACN;AAAA,cACD;AAAA,YACD;AACA,iBAAM,IAAK,IAAI,YAAY,SAAU,IAAK,KAAKA,QAAO,MAAO,MAAM,IAAK;AAAA,UACzE;AAAA,QACD;AAGA,oBAAY,CAACA,QAAO,cAAe,KAAM;AACzC,YAAK,CAAC,aAAaA,QAAO,cAAe,IAAK,GAAI;AACjD;AAAA,QACD;AAGA,YAAK,SAAS,KAAK,aAAa,GAAI;AAKnC,UAAAyB,MAAK,WAAW,CAAE,MAAM,UAAU,MAAM,WAAW,MAAM,SAAU;AAGnE,2BAAiB,YAAY,SAAS;AACtC,cAAK,kBAAkB,MAAO;AAC7B,6BAAiB,SAAS,IAAK,MAAM,SAAU;AAAA,UAChD;AACA,oBAAUzB,QAAO,IAAK,MAAM,SAAU;AACtC,cAAK,YAAY,QAAS;AACzB,gBAAK,gBAAiB;AACrB,wBAAU;AAAA,YACX,OAAO;AAGN,uBAAU,CAAE,IAAK,GAAG,IAAK;AACzB,+BAAiB,KAAK,MAAM,WAAW;AACvC,wBAAUA,QAAO,IAAK,MAAM,SAAU;AACtC,uBAAU,CAAE,IAAK,CAAE;AAAA,YACpB;AAAA,UACD;AAGA,cAAK,YAAY,YAAY,YAAY,kBAAkB,kBAAkB,MAAO;AACnF,gBAAKA,QAAO,IAAK,MAAM,OAAQ,MAAM,QAAS;AAG7C,kBAAK,CAAC,WAAY;AACjB,qBAAK,KAAM,WAAW;AACrB,wBAAM,UAAU;AAAA,gBACjB,CAAE;AACF,oBAAK,kBAAkB,MAAO;AAC7B,4BAAU,MAAM;AAChB,mCAAiB,YAAY,SAAS,KAAK;AAAA,gBAC5C;AAAA,cACD;AACA,oBAAM,UAAU;AAAA,YACjB;AAAA,UACD;AAAA,QACD;AAEA,YAAKyB,MAAK,UAAW;AACpB,gBAAM,WAAW;AACjB,eAAK,OAAQ,WAAW;AACvB,kBAAM,WAAWA,MAAK,SAAU,CAAE;AAClC,kBAAM,YAAYA,MAAK,SAAU,CAAE;AACnC,kBAAM,YAAYA,MAAK,SAAU,CAAE;AAAA,UACpC,CAAE;AAAA,QACH;AAGA,oBAAY;AACZ,aAAM,QAAQ,MAAO;AAGpB,cAAK,CAAC,WAAY;AACjB,gBAAK,UAAW;AACf,kBAAK,YAAY,UAAW;AAC3B,yBAAS,SAAS;AAAA,cACnB;AAAA,YACD,OAAO;AACN,yBAAW,SAAS,IAAK,MAAM,UAAU,EAAE,SAAS,eAAe,CAAE;AAAA,YACtE;AAGA,gBAAK,QAAS;AACb,uBAAS,SAAS,CAAC;AAAA,YACpB;AAGA,gBAAK,QAAS;AACb,uBAAU,CAAE,IAAK,GAAG,IAAK;AAAA,YAC1B;AAGA,iBAAK,KAAM,WAAW;AAGrB,kBAAK,CAAC,QAAS;AACd,yBAAU,CAAE,IAAK,CAAE;AAAA,cACpB;AACA,uBAAS,OAAQ,MAAM,QAAS;AAChC,mBAAM,QAAQ,MAAO;AACpB,gBAAAzB,QAAO,MAAO,MAAM,MAAM,KAAM,IAAK,CAAE;AAAA,cACxC;AAAA,YACD,CAAE;AAAA,UACH;AAGA,sBAAY,YAAa,SAAS,SAAU,IAAK,IAAI,GAAG,MAAM,IAAK;AACnE,cAAK,EAAG,QAAQ,WAAa;AAC5B,qBAAU,IAAK,IAAI,UAAU;AAC7B,gBAAK,QAAS;AACb,wBAAU,MAAM,UAAU;AAC1B,wBAAU,QAAQ;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,eAAS,WAAY,OAAO,eAAgB;AAC3C,YAAI,OAAO,MAAM,QAAQ,OAAO;AAGhC,aAAM,SAAS,OAAQ;AACtB,iBAAO,aAAc,KAAM;AAC3B,mBAAS,cAAe,IAAK;AAC7B,kBAAQ,MAAO,KAAM;AACrB,cAAK,MAAM,QAAS,KAAM,GAAI;AAC7B,qBAAS,MAAO,CAAE;AAClB,oBAAQ,MAAO,KAAM,IAAI,MAAO,CAAE;AAAA,UACnC;AAEA,cAAK,UAAU,MAAO;AACrB,kBAAO,IAAK,IAAI;AAChB,mBAAO,MAAO,KAAM;AAAA,UACrB;AAEA,kBAAQA,QAAO,SAAU,IAAK;AAC9B,cAAK,SAAS,YAAY,OAAQ;AACjC,oBAAQ,MAAM,OAAQ,KAAM;AAC5B,mBAAO,MAAO,IAAK;AAInB,iBAAM,SAAS,OAAQ;AACtB,kBAAK,EAAG,SAAS,QAAU;AAC1B,sBAAO,KAAM,IAAI,MAAO,KAAM;AAC9B,8BAAe,KAAM,IAAI;AAAA,cAC1B;AAAA,YACD;AAAA,UACD,OAAO;AACN,0BAAe,IAAK,IAAI;AAAA,UACzB;AAAA,QACD;AAAA,MACD;AAEA,eAAS,UAAW,MAAM,YAAY,SAAU;AAC/C,YAAI,QACH,SACA,QAAQ,GACR,SAAS,UAAU,WAAW,QAC9B,WAAWA,QAAO,SAAS,EAAE,OAAQ,WAAW;AAG/C,iBAAO,KAAK;AAAA,QACb,CAAE,GACF,OAAO,WAAW;AACjB,cAAK,SAAU;AACd,mBAAO;AAAA,UACR;AACA,cAAI,cAAc,SAAS,YAAY,GACtC,YAAY,KAAK,IAAK,GAAG,UAAU,YAAY,UAAU,WAAW,WAAY,GAEhF,UAAU,KAAM,YAAY,UAAU,YAAY,IAClD0B,SAAQ,GACRC,UAAS,UAAU,OAAO;AAE3B,iBAAQD,SAAQC,SAAQD,UAAU;AACjC,sBAAU,OAAQA,MAAM,EAAE,IAAK,OAAQ;AAAA,UACxC;AAEA,mBAAS,WAAY,MAAM,CAAE,WAAW,SAAS,SAAU,CAAE;AAG7D,cAAK,UAAU,KAAKC,SAAS;AAC5B,mBAAO;AAAA,UACR;AAGA,cAAK,CAACA,SAAS;AACd,qBAAS,WAAY,MAAM,CAAE,WAAW,GAAG,CAAE,CAAE;AAAA,UAChD;AAGA,mBAAS,YAAa,MAAM,CAAE,SAAU,CAAE;AAC1C,iBAAO;AAAA,QACR,GACA,YAAY,SAAS,QAAS;AAAA,UAC7B;AAAA,UACA,OAAO3B,QAAO,OAAQ,CAAC,GAAG,UAAW;AAAA,UACrC,MAAMA,QAAO,OAAQ,MAAM;AAAA,YAC1B,eAAe,CAAC;AAAA,YAChB,QAAQA,QAAO,OAAO;AAAA,UACvB,GAAG,OAAQ;AAAA,UACX,oBAAoB;AAAA,UACpB,iBAAiB;AAAA,UACjB,WAAW,SAAS,YAAY;AAAA,UAChC,UAAU,QAAQ;AAAA,UAClB,QAAQ,CAAC;AAAA,UACT,aAAa,SAAU,MAAM,KAAM;AAClC,gBAAI,QAAQA,QAAO;AAAA,cAAO;AAAA,cAAM,UAAU;AAAA,cAAM;AAAA,cAAM;AAAA,cACrD,UAAU,KAAK,cAAe,IAAK,KAAK,UAAU,KAAK;AAAA,YAAO;AAC/D,sBAAU,OAAO,KAAM,KAAM;AAC7B,mBAAO;AAAA,UACR;AAAA,UACA,MAAM,SAAU,SAAU;AACzB,gBAAI0B,SAAQ,GAIXC,UAAS,UAAU,UAAU,OAAO,SAAS;AAC9C,gBAAK,SAAU;AACd,qBAAO;AAAA,YACR;AACA,sBAAU;AACV,mBAAQD,SAAQC,SAAQD,UAAU;AACjC,wBAAU,OAAQA,MAAM,EAAE,IAAK,CAAE;AAAA,YAClC;AAGA,gBAAK,SAAU;AACd,uBAAS,WAAY,MAAM,CAAE,WAAW,GAAG,CAAE,CAAE;AAC/C,uBAAS,YAAa,MAAM,CAAE,WAAW,OAAQ,CAAE;AAAA,YACpD,OAAO;AACN,uBAAS,WAAY,MAAM,CAAE,WAAW,OAAQ,CAAE;AAAA,YACnD;AACA,mBAAO;AAAA,UACR;AAAA,QACD,CAAE,GACF,QAAQ,UAAU;AAEnB,mBAAY,OAAO,UAAU,KAAK,aAAc;AAEhD,eAAQ,QAAQ,QAAQ,SAAU;AACjC,mBAAS,UAAU,WAAY,KAAM,EAAE,KAAM,WAAW,MAAM,OAAO,UAAU,IAAK;AACpF,cAAK,QAAS;AACb,gBAAK,OAAO,OAAO,SAAS,YAAa;AACxC,cAAA1B,QAAO,YAAa,UAAU,MAAM,UAAU,KAAK,KAAM,EAAE,OAC1D,OAAO,KAAK,KAAM,MAAO;AAAA,YAC3B;AACA,mBAAO;AAAA,UACR;AAAA,QACD;AAEA,QAAAA,QAAO,IAAK,OAAO,aAAa,SAAU;AAE1C,YAAK,OAAO,UAAU,KAAK,UAAU,YAAa;AACjD,oBAAU,KAAK,MAAM,KAAM,MAAM,SAAU;AAAA,QAC5C;AAGA,kBACE,SAAU,UAAU,KAAK,QAAS,EAClC,KAAM,UAAU,KAAK,MAAM,UAAU,KAAK,QAAS,EACnD,KAAM,UAAU,KAAK,IAAK,EAC1B,OAAQ,UAAU,KAAK,MAAO;AAEhC,QAAAA,QAAO,GAAG;AAAA,UACTA,QAAO,OAAQ,MAAM;AAAA,YACpB;AAAA,YACA,MAAM;AAAA,YACN,OAAO,UAAU,KAAK;AAAA,UACvB,CAAE;AAAA,QACH;AAEA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,YAAYA,QAAO,OAAQ,WAAW;AAAA,QAE5C,UAAU;AAAA,UACT,KAAK,CAAE,SAAU,MAAM,OAAQ;AAC9B,gBAAI,QAAQ,KAAK,YAAa,MAAM,KAAM;AAC1C,sBAAW,MAAM,MAAM,MAAM,QAAQ,KAAM,KAAM,GAAG,KAAM;AAC1D,mBAAO;AAAA,UACR,CAAE;AAAA,QACH;AAAA,QAEA,SAAS,SAAU,OAAO,UAAW;AACpC,cAAK,OAAO,UAAU,YAAa;AAClC,uBAAW;AACX,oBAAQ,CAAE,GAAI;AAAA,UACf,OAAO;AACN,oBAAQ,MAAM,MAAO,aAAc;AAAA,UACpC;AAEA,cAAI,MACH,QAAQ,GACR,SAAS,MAAM;AAEhB,iBAAQ,QAAQ,QAAQ,SAAU;AACjC,mBAAO,MAAO,KAAM;AACpB,sBAAU,SAAU,IAAK,IAAI,UAAU,SAAU,IAAK,KAAK,CAAC;AAC5D,sBAAU,SAAU,IAAK,EAAE,QAAS,QAAS;AAAA,UAC9C;AAAA,QACD;AAAA,QAEA,YAAY,CAAE,gBAAiB;AAAA,QAE/B,WAAW,SAAU,UAAU,SAAU;AACxC,cAAK,SAAU;AACd,sBAAU,WAAW,QAAS,QAAS;AAAA,UACxC,OAAO;AACN,sBAAU,WAAW,KAAM,QAAS;AAAA,UACrC;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,QAAQ,SAAU,OAAO,QAAQ,IAAK;AAC5C,YAAI,MAAM,SAAS,OAAO,UAAU,WAAWA,QAAO,OAAQ,CAAC,GAAG,KAAM,IAAI;AAAA,UAC3E,UAAU,MAAM,UACf,OAAO,UAAU,cAAc;AAAA,UAChC,UAAU;AAAA,UACV,QAAQ,MAAM,UAAU,UAAU,OAAO,WAAW,cAAc;AAAA,QACnE;AAGA,YAAKA,QAAO,GAAG,KAAM;AACpB,cAAI,WAAW;AAAA,QAEhB,OAAO;AACN,cAAK,OAAO,IAAI,aAAa,UAAW;AACvC,gBAAK,IAAI,YAAYA,QAAO,GAAG,QAAS;AACvC,kBAAI,WAAWA,QAAO,GAAG,OAAQ,IAAI,QAAS;AAAA,YAE/C,OAAO;AACN,kBAAI,WAAWA,QAAO,GAAG,OAAO;AAAA,YACjC;AAAA,UACD;AAAA,QACD;AAGA,YAAK,IAAI,SAAS,QAAQ,IAAI,UAAU,MAAO;AAC9C,cAAI,QAAQ;AAAA,QACb;AAGA,YAAI,MAAM,IAAI;AAEd,YAAI,WAAW,WAAW;AACzB,cAAK,OAAO,IAAI,QAAQ,YAAa;AACpC,gBAAI,IAAI,KAAM,IAAK;AAAA,UACpB;AAEA,cAAK,IAAI,OAAQ;AAChB,YAAAA,QAAO,QAAS,MAAM,IAAI,KAAM;AAAA,UACjC;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,QAAQ,SAAU,OAAO,IAAI,QAAQ,UAAW;AAG/C,iBAAO,KAAK,OAAQ,kBAAmB,EAAE,IAAK,WAAW,CAAE,EAAE,KAAK,EAGhE,IAAI,EAAE,QAAS,EAAE,SAAS,GAAG,GAAG,OAAO,QAAQ,QAAS;AAAA,QAC3D;AAAA,QACA,SAAS,SAAU,MAAM,OAAO,QAAQ,UAAW;AAClD,cAAI,QAAQA,QAAO,cAAe,IAAK,GACtC,SAASA,QAAO,MAAO,OAAO,QAAQ,QAAS,GAC/C,cAAc,WAAW;AAGxB,gBAAI,OAAO,UAAW,MAAMA,QAAO,OAAQ,CAAC,GAAG,IAAK,GAAG,MAAO;AAG9D,gBAAK,SAAS,SAAS,IAAK,MAAM,QAAS,GAAI;AAC9C,mBAAK,KAAM,IAAK;AAAA,YACjB;AAAA,UACD;AAED,sBAAY,SAAS;AAErB,iBAAO,SAAS,OAAO,UAAU,QAChC,KAAK,KAAM,WAAY,IACvB,KAAK,MAAO,OAAO,OAAO,WAAY;AAAA,QACxC;AAAA,QACA,MAAM,SAAU,MAAM,YAAY,SAAU;AAC3C,cAAI,YAAY,SAAU,OAAQ;AACjC,gBAAI,OAAO,MAAM;AACjB,mBAAO,MAAM;AACb,iBAAM,OAAQ;AAAA,UACf;AAEA,cAAK,OAAO,SAAS,UAAW;AAC/B,sBAAU;AACV,yBAAa;AACb,mBAAO;AAAA,UACR;AACA,cAAK,YAAa;AACjB,iBAAK,MAAO,QAAQ,MAAM,CAAC,CAAE;AAAA,UAC9B;AAEA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAI,UAAU,MACb,QAAQ,QAAQ,QAAQ,OAAO,cAC/B4B,UAAS5B,QAAO,QAChB,OAAO,SAAS,IAAK,IAAK;AAE3B,gBAAK,OAAQ;AACZ,kBAAK,KAAM,KAAM,KAAK,KAAM,KAAM,EAAE,MAAO;AAC1C,0BAAW,KAAM,KAAM,CAAE;AAAA,cAC1B;AAAA,YACD,OAAO;AACN,mBAAM,SAAS,MAAO;AACrB,oBAAK,KAAM,KAAM,KAAK,KAAM,KAAM,EAAE,QAAQ,KAAK,KAAM,KAAM,GAAI;AAChE,4BAAW,KAAM,KAAM,CAAE;AAAA,gBAC1B;AAAA,cACD;AAAA,YACD;AAEA,iBAAM,QAAQ4B,QAAO,QAAQ,WAAW;AACvC,kBAAKA,QAAQ,KAAM,EAAE,SAAS,SAC3B,QAAQ,QAAQA,QAAQ,KAAM,EAAE,UAAU,OAAS;AAErD,gBAAAA,QAAQ,KAAM,EAAE,KAAK,KAAM,OAAQ;AACnC,0BAAU;AACV,gBAAAA,QAAO,OAAQ,OAAO,CAAE;AAAA,cACzB;AAAA,YACD;AAKA,gBAAK,WAAW,CAAC,SAAU;AAC1B,cAAA5B,QAAO,QAAS,MAAM,IAAK;AAAA,YAC5B;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QACA,QAAQ,SAAU,MAAO;AACxB,cAAK,SAAS,OAAQ;AACrB,mBAAO,QAAQ;AAAA,UAChB;AACA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAI,OACH,OAAO,SAAS,IAAK,IAAK,GAC1B,QAAQ,KAAM,OAAO,OAAQ,GAC7B,QAAQ,KAAM,OAAO,YAAa,GAClC4B,UAAS5B,QAAO,QAChB,SAAS,QAAQ,MAAM,SAAS;AAGjC,iBAAK,SAAS;AAGd,YAAAA,QAAO,MAAO,MAAM,MAAM,CAAC,CAAE;AAE7B,gBAAK,SAAS,MAAM,MAAO;AAC1B,oBAAM,KAAK,KAAM,MAAM,IAAK;AAAA,YAC7B;AAGA,iBAAM,QAAQ4B,QAAO,QAAQ,WAAW;AACvC,kBAAKA,QAAQ,KAAM,EAAE,SAAS,QAAQA,QAAQ,KAAM,EAAE,UAAU,MAAO;AACtE,gBAAAA,QAAQ,KAAM,EAAE,KAAK,KAAM,IAAK;AAChC,gBAAAA,QAAO,OAAQ,OAAO,CAAE;AAAA,cACzB;AAAA,YACD;AAGA,iBAAM,QAAQ,GAAG,QAAQ,QAAQ,SAAU;AAC1C,kBAAK,MAAO,KAAM,KAAK,MAAO,KAAM,EAAE,QAAS;AAC9C,sBAAO,KAAM,EAAE,OAAO,KAAM,IAAK;AAAA,cAClC;AAAA,YACD;AAGA,mBAAO,KAAK;AAAA,UACb,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAA5B,QAAO,KAAM,CAAE,UAAU,QAAQ,MAAO,GAAG,SAAU,IAAI,MAAO;AAC/D,YAAI,QAAQA,QAAO,GAAI,IAAK;AAC5B,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,OAAO,QAAQ,UAAW;AACvD,iBAAO,SAAS,QAAQ,OAAO,UAAU,YACxC,MAAM,MAAO,MAAM,SAAU,IAC7B,KAAK,QAAS,MAAO,MAAM,IAAK,GAAG,OAAO,QAAQ,QAAS;AAAA,QAC7D;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,KAAM;AAAA,QACZ,WAAW,MAAO,MAAO;AAAA,QACzB,SAAS,MAAO,MAAO;AAAA,QACvB,aAAa,MAAO,QAAS;AAAA,QAC7B,QAAQ,EAAE,SAAS,OAAO;AAAA,QAC1B,SAAS,EAAE,SAAS,OAAO;AAAA,QAC3B,YAAY,EAAE,SAAS,SAAS;AAAA,MACjC,GAAG,SAAU,MAAM,OAAQ;AAC1B,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,OAAO,QAAQ,UAAW;AACvD,iBAAO,KAAK,QAAS,OAAO,OAAO,QAAQ,QAAS;AAAA,QACrD;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,SAAS,CAAC;AACjB,MAAAA,QAAO,GAAG,OAAO,WAAW;AAC3B,YAAI6B,QACH9B,KAAI,GACJ6B,UAAS5B,QAAO;AAEjB,gBAAQ,KAAK,IAAI;AAEjB,eAAQD,KAAI6B,QAAO,QAAQ7B,MAAM;AAChC,UAAA8B,SAAQD,QAAQ7B,EAAE;AAGlB,cAAK,CAAC8B,OAAM,KAAKD,QAAQ7B,EAAE,MAAM8B,QAAQ;AACxC,YAAAD,QAAO,OAAQ7B,MAAK,CAAE;AAAA,UACvB;AAAA,QACD;AAEA,YAAK,CAAC6B,QAAO,QAAS;AACrB,UAAA5B,QAAO,GAAG,KAAK;AAAA,QAChB;AACA,gBAAQ;AAAA,MACT;AAEA,MAAAA,QAAO,GAAG,QAAQ,SAAU6B,QAAQ;AACnC,QAAA7B,QAAO,OAAO,KAAM6B,MAAM;AAC1B,QAAA7B,QAAO,GAAG,MAAM;AAAA,MACjB;AAEA,MAAAA,QAAO,GAAG,QAAQ,WAAW;AAC5B,YAAK,YAAa;AACjB;AAAA,QACD;AAEA,qBAAa;AACb,QAAAwB,UAAS;AAAA,MACV;AAEA,MAAAxB,QAAO,GAAG,OAAO,WAAW;AAC3B,qBAAa;AAAA,MACd;AAEA,MAAAA,QAAO,GAAG,SAAS;AAAA,QAClB,MAAM;AAAA,QACN,MAAM;AAAA;AAAA,QAGN,UAAU;AAAA,MACX;AAGA,MAAAA,QAAO,GAAG,QAAQ,SAAU,MAAM,MAAO;AACxC,eAAOA,QAAO,KAAKA,QAAO,GAAG,OAAQ,IAAK,KAAK,OAAO;AACtD,eAAO,QAAQ;AAEf,eAAO,KAAK,MAAO,MAAM,SAAU,MAAM,OAAQ;AAChD,cAAI,UAAUF,QAAO,WAAY,MAAM,IAAK;AAC5C,gBAAM,OAAO,WAAW;AACvB,YAAAA,QAAO,aAAc,OAAQ;AAAA,UAC9B;AAAA,QACD,CAAE;AAAA,MACH;AAEA,UAAI,aAAa,uCAChB,aAAa;AAEd,MAAAE,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,MAAM,OAAQ;AAC7B,iBAAO,OAAQ,MAAMA,QAAO,MAAM,MAAM,OAAO,UAAU,SAAS,CAAE;AAAA,QACrE;AAAA,QAEA,YAAY,SAAU,MAAO;AAC5B,iBAAO,KAAK,KAAM,WAAW;AAC5B,mBAAO,KAAMA,QAAO,QAAS,IAAK,KAAK,IAAK;AAAA,UAC7C,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,OAAQ;AAAA,QACd,MAAM,SAAU,MAAM,MAAM,OAAQ;AACnC,cAAI,KAAK,OACR,QAAQ,KAAK;AAGd,cAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAI;AAChD;AAAA,UACD;AAEA,cAAK,UAAU,KAAK,CAACA,QAAO,SAAU,IAAK,GAAI;AAG9C,mBAAOA,QAAO,QAAS,IAAK,KAAK;AACjC,oBAAQA,QAAO,UAAW,IAAK;AAAA,UAChC;AAEA,cAAK,UAAU,QAAY;AAC1B,gBAAK,SAAS,SAAS,UACpB,MAAM,MAAM,IAAK,MAAM,OAAO,IAAK,OAAQ,QAAY;AACzD,qBAAO;AAAA,YACR;AAEA,mBAAS,KAAM,IAAK,IAAI;AAAA,UACzB;AAEA,cAAK,SAAS,SAAS,UAAW,MAAM,MAAM,IAAK,MAAM,IAAK,OAAQ,MAAO;AAC5E,mBAAO;AAAA,UACR;AAEA,iBAAO,KAAM,IAAK;AAAA,QACnB;AAAA,QAEA,WAAW;AAAA,UACV,UAAU;AAAA,YACT,KAAK,SAAU,MAAO;AAMrB,kBAAI,WAAW,KAAK,aAAc,UAAW;AAE7C,kBAAK,UAAW;AACf,uBAAO,SAAU,UAAU,EAAG;AAAA,cAC/B;AAEA,kBACC,WAAW,KAAM,KAAK,QAAS;AAAA;AAAA,cAI/B,WAAW,KAAM,KAAK,QAAS,KAAK,KAAK,MACxC;AACD,uBAAO;AAAA,cACR;AAEA,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD;AAAA,QAEA,SAAS;AAAA,UACR,OAAO;AAAA,UACP,SAAS;AAAA,QACV;AAAA,MACD,CAAE;AAOF,UAAK,MAAO;AACX,QAAAA,QAAO,UAAU,WAAW;AAAA,UAC3B,KAAK,SAAU,MAAO;AAErB,gBAAIO,UAAS,KAAK;AAClB,gBAAKA,WAAUA,QAAO,YAAa;AAElC,cAAAA,QAAO,WAAW;AAAA,YACnB;AACA,mBAAO;AAAA,UACR;AAAA,UACA,KAAK,SAAU,MAAO;AAGrB,gBAAIA,UAAS,KAAK;AAClB,gBAAKA,SAAS;AAEb,cAAAA,QAAO;AAEP,kBAAKA,QAAO,YAAa;AAExB,gBAAAA,QAAO,WAAW;AAAA,cACnB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,MAAAP,QAAO,KAAM;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,GAAG,WAAW;AACb,QAAAA,QAAO,QAAS,KAAK,YAAY,CAAE,IAAI;AAAA,MACxC,CAAE;AAIF,eAAS,iBAAkB,OAAQ;AAClC,YAAI,SAAS,MAAM,MAAO,aAAc,KAAK,CAAC;AAC9C,eAAO,OAAO,KAAM,GAAI;AAAA,MACzB;AAEA,eAAS,SAAU,MAAO;AACzB,eAAO,KAAK,gBAAgB,KAAK,aAAc,OAAQ,KAAK;AAAA,MAC7D;AAEA,eAAS,eAAgB,OAAQ;AAChC,YAAK,MAAM,QAAS,KAAM,GAAI;AAC7B,iBAAO;AAAA,QACR;AACA,YAAK,OAAO,UAAU,UAAW;AAChC,iBAAO,MAAM,MAAO,aAAc,KAAK,CAAC;AAAA,QACzC;AACA,eAAO,CAAC;AAAA,MACT;AAEA,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,UAAU,SAAU,OAAQ;AAC3B,cAAI,YAAY,KAAK,UAAU,WAAWD,IAAG;AAE7C,cAAK,OAAO,UAAU,YAAa;AAClC,mBAAO,KAAK,KAAM,SAAU,GAAI;AAC/B,cAAAC,QAAQ,IAAK,EAAE,SAAU,MAAM,KAAM,MAAM,GAAG,SAAU,IAAK,CAAE,CAAE;AAAA,YAClE,CAAE;AAAA,UACH;AAEA,uBAAa,eAAgB,KAAM;AAEnC,cAAK,WAAW,QAAS;AACxB,mBAAO,KAAK,KAAM,WAAW;AAC5B,yBAAW,SAAU,IAAK;AAC1B,oBAAM,KAAK,aAAa,KAAO,MAAM,iBAAkB,QAAS,IAAI;AAEpE,kBAAK,KAAM;AACV,qBAAMD,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAM;AACzC,8BAAY,WAAYA,EAAE;AAC1B,sBAAK,IAAI,QAAS,MAAM,YAAY,GAAI,IAAI,GAAI;AAC/C,2BAAO,YAAY;AAAA,kBACpB;AAAA,gBACD;AAGA,6BAAa,iBAAkB,GAAI;AACnC,oBAAK,aAAa,YAAa;AAC9B,uBAAK,aAAc,SAAS,UAAW;AAAA,gBACxC;AAAA,cACD;AAAA,YACD,CAAE;AAAA,UACH;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,aAAa,SAAU,OAAQ;AAC9B,cAAI,YAAY,KAAK,UAAU,WAAWA,IAAG;AAE7C,cAAK,OAAO,UAAU,YAAa;AAClC,mBAAO,KAAK,KAAM,SAAU,GAAI;AAC/B,cAAAC,QAAQ,IAAK,EAAE,YAAa,MAAM,KAAM,MAAM,GAAG,SAAU,IAAK,CAAE,CAAE;AAAA,YACrE,CAAE;AAAA,UACH;AAEA,cAAK,CAAC,UAAU,QAAS;AACxB,mBAAO,KAAK,KAAM,SAAS,EAAG;AAAA,UAC/B;AAEA,uBAAa,eAAgB,KAAM;AAEnC,cAAK,WAAW,QAAS;AACxB,mBAAO,KAAK,KAAM,WAAW;AAC5B,yBAAW,SAAU,IAAK;AAG1B,oBAAM,KAAK,aAAa,KAAO,MAAM,iBAAkB,QAAS,IAAI;AAEpE,kBAAK,KAAM;AACV,qBAAMD,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAM;AACzC,8BAAY,WAAYA,EAAE;AAG1B,yBAAQ,IAAI,QAAS,MAAM,YAAY,GAAI,IAAI,IAAK;AACnD,0BAAM,IAAI,QAAS,MAAM,YAAY,KAAK,GAAI;AAAA,kBAC/C;AAAA,gBACD;AAGA,6BAAa,iBAAkB,GAAI;AACnC,oBAAK,aAAa,YAAa;AAC9B,uBAAK,aAAc,SAAS,UAAW;AAAA,gBACxC;AAAA,cACD;AAAA,YACD,CAAE;AAAA,UACH;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,aAAa,SAAU,OAAO,UAAW;AACxC,cAAI,YAAY,WAAWA,IAAGc;AAE9B,cAAK,OAAO,UAAU,YAAa;AAClC,mBAAO,KAAK,KAAM,SAAUd,IAAI;AAC/B,cAAAC,QAAQ,IAAK,EAAE;AAAA,gBACd,MAAM,KAAM,MAAMD,IAAG,SAAU,IAAK,GAAG,QAAS;AAAA,gBAChD;AAAA,cACD;AAAA,YACD,CAAE;AAAA,UACH;AAEA,cAAK,OAAO,aAAa,WAAY;AACpC,mBAAO,WAAW,KAAK,SAAU,KAAM,IAAI,KAAK,YAAa,KAAM;AAAA,UACpE;AAEA,uBAAa,eAAgB,KAAM;AAEnC,cAAK,WAAW,QAAS;AACxB,mBAAO,KAAK,KAAM,WAAW;AAG5B,cAAAc,QAAOb,QAAQ,IAAK;AAEpB,mBAAMD,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAM;AACzC,4BAAY,WAAYA,EAAE;AAG1B,oBAAKc,MAAK,SAAU,SAAU,GAAI;AACjC,kBAAAA,MAAK,YAAa,SAAU;AAAA,gBAC7B,OAAO;AACN,kBAAAA,MAAK,SAAU,SAAU;AAAA,gBAC1B;AAAA,cACD;AAAA,YACD,CAAE;AAAA,UACH;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,UAAU,SAAU,UAAW;AAC9B,cAAI,WAAW,MACdd,KAAI;AAEL,sBAAY,MAAM,WAAW;AAC7B,iBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,gBAAK,KAAK,aAAa,MACpB,MAAM,iBAAkB,SAAU,IAAK,CAAE,IAAI,KAAM,QAAS,SAAU,IAAI,IAAK;AACjF,qBAAO;AAAA,YACR;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAEF,MAAAC,QAAO,GAAG,OAAQ;AAAA,QACjB,KAAK,SAAU,OAAQ;AACtB,cAAI,OAAO,KAAK,iBACf,OAAO,KAAM,CAAE;AAEhB,cAAK,CAAC,UAAU,QAAS;AACxB,gBAAK,MAAO;AACX,sBAAQA,QAAO,SAAU,KAAK,IAAK,KAClCA,QAAO,SAAU,KAAK,SAAS,YAAY,CAAE;AAE9C,kBAAK,SACJ,SAAS,UACP,MAAM,MAAM,IAAK,MAAM,OAAQ,OAAQ,QACxC;AACD,uBAAO;AAAA,cACR;AAEA,oBAAM,KAAK;AAGX,qBAAO,OAAO,OAAO,KAAK;AAAA,YAC3B;AAEA;AAAA,UACD;AAEA,4BAAkB,OAAO,UAAU;AAEnC,iBAAO,KAAK,KAAM,SAAUD,IAAI;AAC/B,gBAAI;AAEJ,gBAAK,KAAK,aAAa,GAAI;AAC1B;AAAA,YACD;AAEA,gBAAK,iBAAkB;AACtB,oBAAM,MAAM,KAAM,MAAMA,IAAGC,QAAQ,IAAK,EAAE,IAAI,CAAE;AAAA,YACjD,OAAO;AACN,oBAAM;AAAA,YACP;AAGA,gBAAK,OAAO,MAAO;AAClB,oBAAM;AAAA,YAEP,WAAY,OAAO,QAAQ,UAAW;AACrC,qBAAO;AAAA,YAER,WAAY,MAAM,QAAS,GAAI,GAAI;AAClC,oBAAMA,QAAO,IAAK,KAAK,SAAUI,QAAQ;AACxC,uBAAOA,UAAS,OAAO,KAAKA,SAAQ;AAAA,cACrC,CAAE;AAAA,YACH;AAEA,oBAAQJ,QAAO,SAAU,KAAK,IAAK,KAAKA,QAAO,SAAU,KAAK,SAAS,YAAY,CAAE;AAGrF,gBAAK,CAAC,SAAS,EAAG,SAAS,UAAW,MAAM,IAAK,MAAM,KAAK,OAAQ,MAAM,QAAY;AACrF,mBAAK,QAAQ;AAAA,YACd;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,OAAQ;AAAA,QACd,UAAU;AAAA,UACT,QAAQ;AAAA,YACP,KAAK,SAAU,MAAO;AACrB,kBAAI,OAAO,QAAQD,IAClB,UAAU,KAAK,SACf,QAAQ,KAAK,eACb,MAAM,KAAK,SAAS,cACpB,SAAS,MAAM,OAAO,CAAC,GACvB,MAAM,MAAM,QAAQ,IAAI,QAAQ;AAEjC,kBAAK,QAAQ,GAAI;AAChB,gBAAAA,KAAI;AAAA,cAEL,OAAO;AACN,gBAAAA,KAAI,MAAM,QAAQ;AAAA,cACnB;AAGA,qBAAQA,KAAI,KAAKA,MAAM;AACtB,yBAAS,QAASA,EAAE;AAEpB,oBAAK,OAAO;AAAA,gBAGV,CAAC,OAAO,aACN,CAAC,OAAO,WAAW,YACpB,CAAC,SAAU,OAAO,YAAY,UAAW,IAAM;AAGjD,0BAAQC,QAAQ,MAAO,EAAE,IAAI;AAG7B,sBAAK,KAAM;AACV,2BAAO;AAAA,kBACR;AAGA,yBAAO,KAAM,KAAM;AAAA,gBACpB;AAAA,cACD;AAEA,qBAAO;AAAA,YACR;AAAA,YAEA,KAAK,SAAU,MAAM,OAAQ;AAC5B,kBAAI,WAAW,QACd,UAAU,KAAK,SACf,SAASA,QAAO,UAAW,KAAM,GACjCD,KAAI,QAAQ;AAEb,qBAAQA,MAAM;AACb,yBAAS,QAASA,EAAE;AAEpB,oBAAO,OAAO,WACbC,QAAO,QAASA,QAAQ,MAAO,EAAE,IAAI,GAAG,MAAO,IAAI,IAChD;AACH,8BAAY;AAAA,gBACb;AAAA,cACD;AAGA,kBAAK,CAAC,WAAY;AACjB,qBAAK,gBAAgB;AAAA,cACtB;AACA,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,UAAK,MAAO;AACX,QAAAA,QAAO,SAAS,SAAS;AAAA,UACxB,KAAK,SAAU,MAAO;AAErB,gBAAI,MAAM,KAAK,aAAc,OAAQ;AACrC,mBAAO,OAAO,OACb;AAAA;AAAA;AAAA;AAAA;AAAA,cAMA,iBAAkBA,QAAO,KAAM,IAAK,CAAE;AAAA;AAAA,UACxC;AAAA,QACD;AAAA,MACD;AAGA,MAAAA,QAAO,KAAM,CAAE,SAAS,UAAW,GAAG,WAAW;AAChD,QAAAA,QAAO,SAAU,IAAK,IAAI;AAAA,UACzB,KAAK,SAAU,MAAM,OAAQ;AAC5B,gBAAK,MAAM,QAAS,KAAM,GAAI;AAC7B,qBAAS,KAAK,UAAUA,QAAO,QAASA,QAAQ,IAAK,EAAE,IAAI,GAAG,KAAM,IAAI;AAAA,YACzE;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,UAAI,cAAc,mCACjB,0BAA0B,SAAU,GAAI;AACvC,UAAE,gBAAgB;AAAA,MACnB;AAED,MAAAA,QAAO,OAAQA,QAAO,OAAO;AAAA,QAE5B,SAAS,SAAUsB,QAAO,MAAM,MAAM,cAAe;AAEpD,cAAIvB,IAAG,KAAK,KAAK,YAAY,QAAQ,QAAQ,SAAS,aACrD,YAAY,CAAE,QAAQ,UAAW,GACjC,OAAO,OAAO,KAAMuB,QAAO,MAAO,IAAIA,OAAM,OAAOA,QACnD,aAAa,OAAO,KAAMA,QAAO,WAAY,IAAIA,OAAM,UAAU,MAAO,GAAI,IAAI,CAAC;AAElF,gBAAM,cAAc,MAAM,OAAO,QAAQ;AAGzC,cAAK,KAAK,aAAa,KAAK,KAAK,aAAa,GAAI;AACjD;AAAA,UACD;AAGA,cAAK,YAAY,KAAM,OAAOtB,QAAO,MAAM,SAAU,GAAI;AACxD;AAAA,UACD;AAEA,cAAK,KAAK,QAAS,GAAI,IAAI,IAAK;AAG/B,yBAAa,KAAK,MAAO,GAAI;AAC7B,mBAAO,WAAW,MAAM;AACxB,uBAAW,KAAK;AAAA,UACjB;AACA,mBAAS,KAAK,QAAS,GAAI,IAAI,KAAK,OAAO;AAG3C,UAAAsB,SAAQA,OAAOtB,QAAO,OAAQ,IAC7BsB,SACA,IAAItB,QAAO,MAAO,MAAM,OAAOsB,WAAU,YAAYA,MAAM;AAG5D,UAAAA,OAAM,YAAY,eAAe,IAAI;AACrC,UAAAA,OAAM,YAAY,WAAW,KAAM,GAAI;AACvC,UAAAA,OAAM,aAAaA,OAAM,YACxB,IAAI,OAAQ,YAAY,WAAW,KAAM,eAAgB,IAAI,SAAU,IACvE;AAGD,UAAAA,OAAM,SAAS;AACf,cAAK,CAACA,OAAM,QAAS;AACpB,YAAAA,OAAM,SAAS;AAAA,UAChB;AAGA,iBAAO,QAAQ,OACd,CAAEA,MAAM,IACRtB,QAAO,UAAW,MAAM,CAAEsB,MAAM,CAAE;AAGnC,oBAAUtB,QAAO,MAAM,QAAS,IAAK,KAAK,CAAC;AAC3C,cAAK,CAAC,gBAAgB,QAAQ,WAAW,QAAQ,QAAQ,MAAO,MAAM,IAAK,MAAM,OAAQ;AACxF;AAAA,UACD;AAIA,cAAK,CAAC,gBAAgB,CAAC,QAAQ,YAAY,CAAC,SAAU,IAAK,GAAI;AAE9D,yBAAa,QAAQ,gBAAgB;AACrC,gBAAK,CAAC,YAAY,KAAM,aAAa,IAAK,GAAI;AAC7C,oBAAM,IAAI;AAAA,YACX;AACA,mBAAQ,KAAK,MAAM,IAAI,YAAa;AACnC,wBAAU,KAAM,GAAI;AACpB,oBAAM;AAAA,YACP;AAGA,gBAAK,SAAU,KAAK,iBAAiB,aAAe;AACnD,wBAAU,KAAM,IAAI,eAAe,IAAI,gBAAgBF,OAAO;AAAA,YAC/D;AAAA,UACD;AAGA,UAAAC,KAAI;AACJ,kBAAU,MAAM,UAAWA,IAAI,MAAO,CAACuB,OAAM,qBAAqB,GAAI;AACrE,0BAAc;AACd,YAAAA,OAAM,OAAOvB,KAAI,IAChB,aACA,QAAQ,YAAY;AAGrB,sBAAW,SAAS,IAAK,KAAK,QAAS,KAAK,uBAAO,OAAQ,IAAK,GAAKuB,OAAM,IAAK,KAC/E,SAAS,IAAK,KAAK,QAAS;AAC7B,gBAAK,QAAS;AACb,qBAAO,MAAO,KAAK,IAAK;AAAA,YACzB;AAGA,qBAAS,UAAU,IAAK,MAAO;AAC/B,gBAAK,UAAU,OAAO,SAAS,WAAY,GAAI,GAAI;AAClD,cAAAA,OAAM,SAAS,OAAO,MAAO,KAAK,IAAK;AACvC,kBAAKA,OAAM,WAAW,OAAQ;AAC7B,gBAAAA,OAAM,eAAe;AAAA,cACtB;AAAA,YACD;AAAA,UACD;AACA,UAAAA,OAAM,OAAO;AAGb,cAAK,CAAC,gBAAgB,CAACA,OAAM,mBAAmB,GAAI;AAEnD,iBAAO,CAAC,QAAQ,YACf,QAAQ,SAAS,MAAO,UAAU,IAAI,GAAG,IAAK,MAAM,UACpD,WAAY,IAAK,GAAI;AAIrB,kBAAK,UAAU,OAAO,KAAM,IAAK,MAAM,cAAc,CAAC,SAAU,IAAK,GAAI;AAGxE,sBAAM,KAAM,MAAO;AAEnB,oBAAK,KAAM;AACV,uBAAM,MAAO,IAAI;AAAA,gBAClB;AAGA,gBAAAtB,QAAO,MAAM,YAAY;AAEzB,oBAAKsB,OAAM,qBAAqB,GAAI;AACnC,8BAAY,iBAAkB,MAAM,uBAAwB;AAAA,gBAC7D;AAEA,qBAAM,IAAK,EAAE;AAEb,oBAAKA,OAAM,qBAAqB,GAAI;AACnC,8BAAY,oBAAqB,MAAM,uBAAwB;AAAA,gBAChE;AAEA,gBAAAtB,QAAO,MAAM,YAAY;AAEzB,oBAAK,KAAM;AACV,uBAAM,MAAO,IAAI;AAAA,gBAClB;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAOsB,OAAM;AAAA,QACd;AAAA;AAAA;AAAA,QAIA,UAAU,SAAU,MAAM,MAAMA,QAAQ;AACvC,cAAI,IAAItB,QAAO;AAAA,YACd,IAAIA,QAAO,MAAM;AAAA,YACjBsB;AAAA,YACA;AAAA,cACC;AAAA,cACA,aAAa;AAAA,YACd;AAAA,UACD;AAEA,UAAAtB,QAAO,MAAM,QAAS,GAAG,MAAM,IAAK;AAAA,QACrC;AAAA,MAED,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QAEjB,SAAS,SAAU,MAAM,MAAO;AAC/B,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAAA,QAAO,MAAM,QAAS,MAAM,MAAM,IAAK;AAAA,UACxC,CAAE;AAAA,QACH;AAAA,QACA,gBAAgB,SAAU,MAAM,MAAO;AACtC,cAAI,OAAO,KAAM,CAAE;AACnB,cAAK,MAAO;AACX,mBAAOA,QAAO,MAAM,QAAS,MAAM,MAAM,MAAM,IAAK;AAAA,UACrD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,UAAI8B,YAAWhC,QAAO;AAEtB,UAAI,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE;AAE/B,UAAI,SAAS;AAGb,MAAAE,QAAO,WAAW,SAAU,MAAO;AAClC,YAAI,KAAK;AACT,YAAK,CAAC,QAAQ,OAAO,SAAS,UAAW;AACxC,iBAAO;AAAA,QACR;AAIA,YAAI;AACH,gBAAQ,IAAIF,QAAO,UAAU,EAAI,gBAAiB,MAAM,UAAW;AAAA,QACpE,SAAU,GAAI;AAAA,QAAC;AAEf,0BAAkB,OAAO,IAAI,qBAAsB,aAAc,EAAG,CAAE;AACtE,YAAK,CAAC,OAAO,iBAAkB;AAC9B,UAAAE,QAAO,MAAO,mBACb,kBACCA,QAAO,IAAK,gBAAgB,YAAY,SAAUmB,KAAK;AACtD,mBAAOA,IAAG;AAAA,UACX,CAAE,EAAE,KAAM,IAAK,IACf,KACA;AAAA,QACH;AACA,eAAO;AAAA,MACR;AAEA,UACC,WAAW,SACX,QAAQ,UACR,kBAAkB,yCAClB,eAAe;AAEhB,eAAS,YAAa,QAAQ,KAAK,aAAaL,MAAM;AACrD,YAAI;AAEJ,YAAK,MAAM,QAAS,GAAI,GAAI;AAG3B,UAAAd,QAAO,KAAM,KAAK,SAAUD,IAAG,GAAI;AAClC,gBAAK,eAAe,SAAS,KAAM,MAAO,GAAI;AAG7C,cAAAe,KAAK,QAAQ,CAAE;AAAA,YAEhB,OAAO;AAGN;AAAA,gBACC,SAAS,OAAQ,OAAO,MAAM,YAAY,KAAK,OAAOf,KAAI,MAAO;AAAA,gBACjE;AAAA,gBACA;AAAA,gBACAe;AAAA,cACD;AAAA,YACD;AAAA,UACD,CAAE;AAAA,QAEH,WAAY,CAAC,eAAe,OAAQ,GAAI,MAAM,UAAW;AAGxD,eAAM,QAAQ,KAAM;AACnB,wBAAa,SAAS,MAAM,OAAO,KAAK,IAAK,IAAK,GAAG,aAAaA,IAAI;AAAA,UACvE;AAAA,QAED,OAAO;AAGN,UAAAA,KAAK,QAAQ,GAAI;AAAA,QAClB;AAAA,MACD;AAIA,MAAAd,QAAO,QAAQ,SAAU,GAAG,aAAc;AACzC,YAAI,QACH,IAAI,CAAC,GACLc,OAAM,SAAU,KAAK,iBAAkB;AAGtC,cAAI,QAAQ,OAAO,oBAAoB,aACtC,gBAAgB,IAChB;AAED,YAAG,EAAE,MAAO,IAAI,mBAAoB,GAAI,IAAI,MAC3C,mBAAoB,SAAS,OAAO,KAAK,KAAM;AAAA,QACjD;AAED,YAAK,KAAK,MAAO;AAChB,iBAAO;AAAA,QACR;AAGA,YAAK,MAAM,QAAS,CAAE,KAAO,EAAE,UAAU,CAACd,QAAO,cAAe,CAAE,GAAM;AAGvE,UAAAA,QAAO,KAAM,GAAG,WAAW;AAC1B,YAAAc,KAAK,KAAK,MAAM,KAAK,KAAM;AAAA,UAC5B,CAAE;AAAA,QAEH,OAAO;AAIN,eAAM,UAAU,GAAI;AACnB,wBAAa,QAAQ,EAAG,MAAO,GAAG,aAAaA,IAAI;AAAA,UACpD;AAAA,QACD;AAGA,eAAO,EAAE,KAAM,GAAI;AAAA,MACpB;AAEA,MAAAd,QAAO,GAAG,OAAQ;AAAA,QACjB,WAAW,WAAW;AACrB,iBAAOA,QAAO,MAAO,KAAK,eAAe,CAAE;AAAA,QAC5C;AAAA,QACA,gBAAgB,WAAW;AAC1B,iBAAO,KAAK,IAAK,WAAW;AAG3B,gBAAI,WAAWA,QAAO,KAAM,MAAM,UAAW;AAC7C,mBAAO,WAAWA,QAAO,UAAW,QAAS,IAAI;AAAA,UAClD,CAAE,EAAE,OAAQ,WAAW;AACtB,gBAAI,OAAO,KAAK;AAGhB,mBAAO,KAAK,QAAQ,CAACA,QAAQ,IAAK,EAAE,GAAI,WAAY,KACnD,aAAa,KAAM,KAAK,QAAS,KAAK,CAAC,gBAAgB,KAAM,IAAK,MAChE,KAAK,WAAW,CAAC,eAAe,KAAM,IAAK;AAAA,UAC/C,CAAE,EAAE,IAAK,SAAU,IAAI,MAAO;AAC7B,gBAAI,MAAMA,QAAQ,IAAK,EAAE,IAAI;AAE7B,gBAAK,OAAO,MAAO;AAClB,qBAAO;AAAA,YACR;AAEA,gBAAK,MAAM,QAAS,GAAI,GAAI;AAC3B,qBAAOA,QAAO,IAAK,KAAK,SAAU+B,MAAM;AACvC,uBAAO,EAAE,MAAM,KAAK,MAAM,OAAOA,KAAI,QAAS,OAAO,MAAO,EAAE;AAAA,cAC/D,CAAE;AAAA,YACH;AAEA,mBAAO,EAAE,MAAM,KAAK,MAAM,OAAO,IAAI,QAAS,OAAO,MAAO,EAAE;AAAA,UAC/D,CAAE,EAAE,IAAI;AAAA,QACT;AAAA,MACD,CAAE;AAEF,UACC,MAAM,QACN,QAAQ,QACR,aAAa,iBACb,WAAW,8BAGX,iBAAiB,6DACjB,aAAa,kBACb,YAAY,SAWZ,aAAa,CAAC,GAOd,aAAa,CAAC,GAGd,WAAW,KAAK,OAAQ,GAAI,GAG5B,eAAe,WAAW,cAAe,GAAI;AAE9C,mBAAa,OAAOD,UAAS;AAG7B,eAAS,4BAA6B,WAAY;AAGjD,eAAO,SAAU,oBAAoB,MAAO;AAE3C,cAAK,OAAO,uBAAuB,UAAW;AAC7C,mBAAO;AACP,iCAAqB;AAAA,UACtB;AAEA,cAAI,UACH/B,KAAI,GACJ,YAAY,mBAAmB,YAAY,EAAE,MAAO,aAAc,KAAK,CAAC;AAEzE,cAAK,OAAO,SAAS,YAAa;AAGjC,mBAAU,WAAW,UAAWA,IAAI,GAAM;AAGzC,kBAAK,SAAU,CAAE,MAAM,KAAM;AAC5B,2BAAW,SAAS,MAAO,CAAE,KAAK;AAClC,iBAAE,UAAW,QAAS,IAAI,UAAW,QAAS,KAAK,CAAC,GAAI,QAAS,IAAK;AAAA,cAGvE,OAAO;AACN,iBAAE,UAAW,QAAS,IAAI,UAAW,QAAS,KAAK,CAAC,GAAI,KAAM,IAAK;AAAA,cACpE;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAGA,eAAS,8BAA+B,WAAW,SAAS,iBAAiB,OAAQ;AAEpF,YAAI,YAAY,CAAC,GAChB,mBAAqB,cAAc;AAEpC,iBAAS,QAAS,UAAW;AAC5B,cAAI;AACJ,oBAAW,QAAS,IAAI;AACxB,UAAAC,QAAO,KAAM,UAAW,QAAS,KAAK,CAAC,GAAG,SAAU,GAAG,oBAAqB;AAC3E,gBAAI,sBAAsB,mBAAoB,SAAS,iBAAiB,KAAM;AAC9E,gBAAK,OAAO,wBAAwB,YACnC,CAAC,oBAAoB,CAAC,UAAW,mBAAoB,GAAI;AAEzD,sBAAQ,UAAU,QAAS,mBAAoB;AAC/C,sBAAS,mBAAoB;AAC7B,qBAAO;AAAA,YACR,WAAY,kBAAmB;AAC9B,qBAAO,EAAG,WAAW;AAAA,YACtB;AAAA,UACD,CAAE;AACF,iBAAO;AAAA,QACR;AAEA,eAAO,QAAS,QAAQ,UAAW,CAAE,CAAE,KAAK,CAAC,UAAW,GAAI,KAAK,QAAS,GAAI;AAAA,MAC/E;AAKA,eAAS,WAAY,QAAQ,KAAM;AAClC,YAAI,KAAK,MACR,cAAcA,QAAO,aAAa,eAAe,CAAC;AAEnD,aAAM,OAAO,KAAM;AAClB,cAAK,IAAK,GAAI,MAAM,QAAY;AAC/B,aAAE,YAAa,GAAI,IAAI,SAAW,SAAU,OAAO,CAAC,IAAS,GAAI,IAAI,IAAK,GAAI;AAAA,UAC/E;AAAA,QACD;AACA,YAAK,MAAO;AACX,UAAAA,QAAO,OAAQ,MAAM,QAAQ,IAAK;AAAA,QACnC;AAEA,eAAO;AAAA,MACR;AAMA,eAAS,oBAAqB,GAAG,OAAO,WAAY;AAEnD,YAAI,IAAI,MAAM,eAAe,eAC5B,WAAW,EAAE,UACb,YAAY,EAAE;AAGf,eAAQ,UAAW,CAAE,MAAM,KAAM;AAChC,oBAAU,MAAM;AAChB,cAAK,OAAO,QAAY;AACvB,iBAAK,EAAE,YAAY,MAAM,kBAAmB,cAAe;AAAA,UAC5D;AAAA,QACD;AAGA,YAAK,IAAK;AACT,eAAM,QAAQ,UAAW;AACxB,gBAAK,SAAU,IAAK,KAAK,SAAU,IAAK,EAAE,KAAM,EAAG,GAAI;AACtD,wBAAU,QAAS,IAAK;AACxB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAGA,YAAK,UAAW,CAAE,KAAK,WAAY;AAClC,0BAAgB,UAAW,CAAE;AAAA,QAC9B,OAAO;AAGN,eAAM,QAAQ,WAAY;AACzB,gBAAK,CAAC,UAAW,CAAE,KAAK,EAAE,WAAY,OAAO,MAAM,UAAW,CAAE,CAAE,GAAI;AACrE,8BAAgB;AAChB;AAAA,YACD;AACA,gBAAK,CAAC,eAAgB;AACrB,8BAAgB;AAAA,YACjB;AAAA,UACD;AAGA,0BAAgB,iBAAiB;AAAA,QAClC;AAKA,YAAK,eAAgB;AACpB,cAAK,kBAAkB,UAAW,CAAE,GAAI;AACvC,sBAAU,QAAS,aAAc;AAAA,UAClC;AACA,iBAAO,UAAW,aAAc;AAAA,QACjC;AAAA,MACD;AAKA,eAAS,YAAa,GAAG,UAAU,OAAO,WAAY;AACrD,YAAI,OAAO,SAAS,MAAM,KAAK,MAC9B,aAAa,CAAC,GAGd,YAAY,EAAE,UAAU,MAAM;AAG/B,YAAK,UAAW,CAAE,GAAI;AACrB,eAAM,QAAQ,EAAE,YAAa;AAC5B,uBAAY,KAAK,YAAY,CAAE,IAAI,EAAE,WAAY,IAAK;AAAA,UACvD;AAAA,QACD;AAEA,kBAAU,UAAU,MAAM;AAG1B,eAAQ,SAAU;AAEjB,cAAK,EAAE,eAAgB,OAAQ,GAAI;AAClC,kBAAO,EAAE,eAAgB,OAAQ,CAAE,IAAI;AAAA,UACxC;AAGA,cAAK,CAAC,QAAQ,aAAa,EAAE,YAAa;AACzC,uBAAW,EAAE,WAAY,UAAU,EAAE,QAAS;AAAA,UAC/C;AAEA,iBAAO;AACP,oBAAU,UAAU,MAAM;AAE1B,cAAK,SAAU;AAGd,gBAAK,YAAY,KAAM;AAEtB,wBAAU;AAAA,YAGX,WAAY,SAAS,OAAO,SAAS,SAAU;AAG9C,qBAAO,WAAY,OAAO,MAAM,OAAQ,KAAK,WAAY,OAAO,OAAQ;AAGxE,kBAAK,CAAC,MAAO;AACZ,qBAAM,SAAS,YAAa;AAG3B,wBAAM,MAAM,MAAO,GAAI;AACvB,sBAAK,IAAK,CAAE,MAAM,SAAU;AAG3B,2BAAO,WAAY,OAAO,MAAM,IAAK,CAAE,CAAE,KACxC,WAAY,OAAO,IAAK,CAAE,CAAE;AAC7B,wBAAK,MAAO;AAGX,0BAAK,SAAS,MAAO;AACpB,+BAAO,WAAY,KAAM;AAAA,sBAG1B,WAAY,WAAY,KAAM,MAAM,MAAO;AAC1C,kCAAU,IAAK,CAAE;AACjB,kCAAU,QAAS,IAAK,CAAE,CAAE;AAAA,sBAC7B;AACA;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAGA,kBAAK,SAAS,MAAO;AAGpB,oBAAK,QAAQ,EAAE,QAAS;AACvB,6BAAW,KAAM,QAAS;AAAA,gBAC3B,OAAO;AACN,sBAAI;AACH,+BAAW,KAAM,QAAS;AAAA,kBAC3B,SAAU,GAAI;AACb,2BAAO;AAAA,sBACN,OAAO;AAAA,sBACP,OAAO,OAAO,IAAI,wBAAwB,OAAO,SAAS;AAAA,oBAC3D;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO,EAAE,OAAO,WAAW,MAAM,SAAS;AAAA,MAC3C;AAEA,MAAAA,QAAO,OAAQ;AAAA;AAAA,QAGd,QAAQ;AAAA;AAAA,QAGR,cAAc,CAAC;AAAA,QACf,MAAM,CAAC;AAAA,QAEP,cAAc;AAAA,UACb,KAAK8B,UAAS;AAAA,UACd,MAAM;AAAA,UACN,SAAS,eAAe,KAAMA,UAAS,QAAS;AAAA,UAChD,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,OAAO;AAAA,UACP,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAcb,SAAS;AAAA,YACR,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAK;AAAA,YACL,MAAM;AAAA,UACP;AAAA,UAEA,UAAU;AAAA,YACT,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UACP;AAAA,UAEA,gBAAgB;AAAA,YACf,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UACP;AAAA;AAAA;AAAA,UAIA,YAAY;AAAA;AAAA,YAGX,UAAU;AAAA;AAAA,YAGV,aAAa;AAAA;AAAA,YAGb,aAAa,KAAK;AAAA;AAAA,YAGlB,YAAY9B,QAAO;AAAA,UACpB;AAAA;AAAA;AAAA;AAAA;AAAA,UAMA,aAAa;AAAA,YACZ,KAAK;AAAA,YACL,SAAS;AAAA,UACV;AAAA,QACD;AAAA;AAAA;AAAA;AAAA,QAKA,WAAW,SAAU,QAAQ,UAAW;AACvC,iBAAO;AAAA;AAAA,YAGN,WAAY,WAAY,QAAQA,QAAO,YAAa,GAAG,QAAS;AAAA;AAAA;AAAA,YAGhE,WAAYA,QAAO,cAAc,MAAO;AAAA;AAAA,QAC1C;AAAA,QAEA,eAAe,4BAA6B,UAAW;AAAA,QACvD,eAAe,4BAA6B,UAAW;AAAA;AAAA,QAGvD,MAAM,SAAUgC,MAAK,SAAU;AAG9B,cAAK,OAAOA,SAAQ,UAAW;AAC9B,sBAAUA;AACV,YAAAA,OAAM;AAAA,UACP;AAGA,oBAAU,WAAW,CAAC;AAEtB,cAAI,WAGH,UAGA,uBACA,iBAGA,cAGA,WAGAC,YAGA,aAGAlC,IAGA,UAGA,IAAIC,QAAO,UAAW,CAAC,GAAG,OAAQ,GAGlC,kBAAkB,EAAE,WAAW,GAG/B,qBAAqB,EAAE,YACpB,gBAAgB,YAAY,gBAAgB,UAC9CA,QAAQ,eAAgB,IACxBA,QAAO,OAGR,WAAWA,QAAO,SAAS,GAC3B,mBAAmBA,QAAO,UAAW,aAAc,GAGnD,aAAa,EAAE,cAAc,CAAC,GAG9B,iBAAiB,CAAC,GAClB,sBAAsB,CAAC,GAGvB,WAAW,YAGX,QAAQ;AAAA,YACP,YAAY;AAAA;AAAA,YAGZ,mBAAmB,SAAU,KAAM;AAClC,kBAAI;AACJ,kBAAKiC,YAAY;AAChB,oBAAK,CAAC,iBAAkB;AACvB,oCAAkB,CAAC;AACnB,yBAAU,QAAQ,SAAS,KAAM,qBAAsB,GAAM;AAO5D,oCAAiB,MAAO,CAAE,EAAE,YAAY,IAAI,GAAI,KAC7C,gBAAiB,MAAO,CAAE,EAAE,YAAY,IAAI,GAAI,KAAK,CAAC,GACtD,OAAQ,MAAO,CAAE,CAAE;AAAA,kBACvB;AAAA,gBACD;AACA,wBAAQ,gBAAiB,IAAI,YAAY,IAAI,GAAI;AAAA,cAClD;AACA,qBAAO,SAAS,OAAO,OAAO,MAAM,KAAM,IAAK;AAAA,YAChD;AAAA;AAAA,YAGA,uBAAuB,WAAW;AACjC,qBAAOA,aAAY,wBAAwB;AAAA,YAC5C;AAAA;AAAA,YAGA,kBAAkB,SAAU,MAAM,OAAQ;AACzC,kBAAKA,cAAa,MAAO;AACxB,uBAAO,oBAAqB,KAAK,YAAY,CAAE,IAC9C,oBAAqB,KAAK,YAAY,CAAE,KAAK;AAC9C,+BAAgB,IAAK,IAAI;AAAA,cAC1B;AACA,qBAAO;AAAA,YACR;AAAA;AAAA,YAGA,kBAAkB,SAAU,MAAO;AAClC,kBAAKA,cAAa,MAAO;AACxB,kBAAE,WAAW;AAAA,cACd;AACA,qBAAO;AAAA,YACR;AAAA;AAAA,YAGA,YAAY,SAAU,KAAM;AAC3B,kBAAI;AACJ,kBAAK,KAAM;AACV,oBAAKA,YAAY;AAGhB,wBAAM,OAAQ,IAAK,MAAM,MAAO,CAAE;AAAA,gBACnC,OAAO;AAGN,uBAAM,QAAQ,KAAM;AACnB,+BAAY,IAAK,IAAI,CAAE,WAAY,IAAK,GAAG,IAAK,IAAK,CAAE;AAAA,kBACxD;AAAA,gBACD;AAAA,cACD;AACA,qBAAO;AAAA,YACR;AAAA;AAAA,YAGA,OAAO,SAAU,YAAa;AAC7B,kBAAI,YAAY,cAAc;AAC9B,kBAAK,WAAY;AAChB,0BAAU,MAAO,SAAU;AAAA,cAC5B;AACA,cAAAC,MAAM,GAAG,SAAU;AACnB,qBAAO;AAAA,YACR;AAAA,UACD;AAGD,mBAAS,QAAS,KAAM;AAKxB,YAAE,QAAUF,QAAO,EAAE,OAAOF,UAAS,QAAS,IAC5C,QAAS,WAAWA,UAAS,WAAW,IAAK;AAG/C,YAAE,OAAO,QAAQ,UAAU,QAAQ,QAAQ,EAAE,UAAU,EAAE;AAGzD,YAAE,aAAc,EAAE,YAAY,KAAM,YAAY,EAAE,MAAO,aAAc,KAAK,CAAE,EAAG;AAGjF,cAAK,EAAE,eAAe,MAAO;AAC5B,wBAAY,WAAW,cAAe,GAAI;AAK1C,gBAAI;AACH,wBAAU,OAAO,EAAE;AAInB,wBAAU,OAAO,UAAU;AAC3B,gBAAE,cAAc,aAAa,WAAW,OAAO,aAAa,SAC3D,UAAU,WAAW,OAAO,UAAU;AAAA,YACxC,SAAU,GAAI;AAIb,gBAAE,cAAc;AAAA,YACjB;AAAA,UACD;AAGA,wCAA+B,YAAY,GAAG,SAAS,KAAM;AAG7D,cAAK,EAAE,QAAQ,EAAE,eAAe,OAAO,EAAE,SAAS,UAAW;AAC5D,cAAE,OAAO9B,QAAO,MAAO,EAAE,MAAM,EAAE,WAAY;AAAA,UAC9C;AAGA,cAAKiC,YAAY;AAChB,mBAAO;AAAA,UACR;AAIA,wBAAcjC,QAAO,SAAS,EAAE;AAGhC,cAAK,eAAeA,QAAO,aAAa,GAAI;AAC3C,YAAAA,QAAO,MAAM,QAAS,WAAY;AAAA,UACnC;AAGA,YAAE,OAAO,EAAE,KAAK,YAAY;AAG5B,YAAE,aAAa,CAAC,WAAW,KAAM,EAAE,IAAK;AAKxC,qBAAW,EAAE,IAAI,QAAS,OAAO,EAAG;AAGpC,cAAK,CAAC,EAAE,YAAa;AAGpB,uBAAW,EAAE,IAAI,MAAO,SAAS,MAAO;AAGxC,gBAAK,EAAE,SAAU,EAAE,eAAe,OAAO,EAAE,SAAS,WAAa;AAChE,2BAAc,OAAO,KAAM,QAAS,IAAI,MAAM,OAAQ,EAAE;AAGxD,qBAAO,EAAE;AAAA,YACV;AAGA,gBAAK,EAAE,UAAU,OAAQ;AACxB,yBAAW,SAAS,QAAS,YAAY,IAAK;AAC9C,0BAAa,OAAO,KAAM,QAAS,IAAI,MAAM,OAAQ,OAClD,MAAM,SAAW;AAAA,YACrB;AAGA,cAAE,MAAM,WAAW;AAAA,UAGpB,WAAY,EAAE,QAAQ,EAAE,gBACrB,EAAE,eAAe,IAAK,QAAS,mCAAoC,MAAM,GAAI;AAC/E,cAAE,OAAO,EAAE,KAAK,QAAS,KAAK,GAAI;AAAA,UACnC;AAGA,cAAK,EAAE,YAAa;AACnB,gBAAKA,QAAO,aAAc,QAAS,GAAI;AACtC,oBAAM,iBAAkB,qBAAqBA,QAAO,aAAc,QAAS,CAAE;AAAA,YAC9E;AACA,gBAAKA,QAAO,KAAM,QAAS,GAAI;AAC9B,oBAAM,iBAAkB,iBAAiBA,QAAO,KAAM,QAAS,CAAE;AAAA,YAClE;AAAA,UACD;AAGA,cAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,SAAS,QAAQ,aAAc;AAC/E,kBAAM,iBAAkB,gBAAgB,EAAE,WAAY;AAAA,UACvD;AAGA,gBAAM;AAAA,YACL;AAAA,YACA,EAAE,UAAW,CAAE,KAAK,EAAE,QAAS,EAAE,UAAW,CAAE,CAAE,IAC/C,EAAE,QAAS,EAAE,UAAW,CAAE,CAAE,KACzB,EAAE,UAAW,CAAE,MAAM,MAAM,OAAO,WAAW,aAAa,MAC7D,EAAE,QAAS,GAAI;AAAA,UACjB;AAGA,eAAMD,MAAK,EAAE,SAAU;AACtB,kBAAM,iBAAkBA,IAAG,EAAE,QAASA,EAAE,CAAE;AAAA,UAC3C;AAGA,cAAK,EAAE,eACJ,EAAE,WAAW,KAAM,iBAAiB,OAAO,CAAE,MAAM,SAASkC,aAAc;AAG5E,mBAAO,MAAM,MAAM;AAAA,UACpB;AAGA,qBAAW;AAGX,2BAAiB,IAAK,EAAE,QAAS;AACjC,gBAAM,KAAM,EAAE,OAAQ;AACtB,gBAAM,KAAM,EAAE,KAAM;AAGpB,sBAAY,8BAA+B,YAAY,GAAG,SAAS,KAAM;AAGzE,cAAK,CAAC,WAAY;AACjB,YAAAC,MAAM,IAAI,cAAe;AAAA,UAC1B,OAAO;AACN,kBAAM,aAAa;AAGnB,gBAAK,aAAc;AAClB,iCAAmB,QAAS,YAAY,CAAE,OAAO,CAAE,CAAE;AAAA,YACtD;AAGA,gBAAKD,YAAY;AAChB,qBAAO;AAAA,YACR;AAGA,gBAAK,EAAE,SAAS,EAAE,UAAU,GAAI;AAC/B,6BAAenC,QAAO,WAAY,WAAW;AAC5C,sBAAM,MAAO,SAAU;AAAA,cACxB,GAAG,EAAE,OAAQ;AAAA,YACd;AAEA,gBAAI;AACH,cAAAmC,aAAY;AACZ,wBAAU,KAAM,gBAAgBC,KAAK;AAAA,YACtC,SAAU,GAAI;AAGb,kBAAKD,YAAY;AAChB,sBAAM;AAAA,cACP;AAGA,cAAAC,MAAM,IAAI,CAAE;AAAA,YACb;AAAA,UACD;AAGA,mBAASA,MAAM,QAAQ,kBAAkB,WAAW,SAAU;AAC7D,gBAAI,WAAW,SAASjB,QAAO,UAAU,UACxC,aAAa;AAGd,gBAAKgB,YAAY;AAChB;AAAA,YACD;AAEA,YAAAA,aAAY;AAGZ,gBAAK,cAAe;AACnB,cAAAnC,QAAO,aAAc,YAAa;AAAA,YACnC;AAIA,wBAAY;AAGZ,oCAAwB,WAAW;AAGnC,kBAAM,aAAa,SAAS,IAAI,IAAI;AAGpC,wBAAY,UAAU,OAAO,SAAS,OAAO,WAAW;AAGxD,gBAAK,WAAY;AAChB,yBAAW,oBAAqB,GAAG,OAAO,SAAU;AAAA,YACrD;AAGA,gBAAK,CAAC,aACLE,QAAO,QAAS,UAAU,EAAE,SAAU,IAAI,MAC1CA,QAAO,QAAS,QAAQ,EAAE,SAAU,IAAI,GAAI;AAC5C,gBAAE,WAAY,aAAc,IAAI,WAAW;AAAA,cAAC;AAAA,YAC7C;AAGA,uBAAW,YAAa,GAAG,UAAU,OAAO,SAAU;AAGtD,gBAAK,WAAY;AAGhB,kBAAK,EAAE,YAAa;AACnB,2BAAW,MAAM,kBAAmB,eAAgB;AACpD,oBAAK,UAAW;AACf,kBAAAA,QAAO,aAAc,QAAS,IAAI;AAAA,gBACnC;AACA,2BAAW,MAAM,kBAAmB,MAAO;AAC3C,oBAAK,UAAW;AACf,kBAAAA,QAAO,KAAM,QAAS,IAAI;AAAA,gBAC3B;AAAA,cACD;AAGA,kBAAK,WAAW,OAAO,EAAE,SAAS,QAAS;AAC1C,6BAAa;AAAA,cAGd,WAAY,WAAW,KAAM;AAC5B,6BAAa;AAAA,cAGd,OAAO;AACN,6BAAa,SAAS;AACtB,0BAAU,SAAS;AACnB,gBAAAiB,SAAQ,SAAS;AACjB,4BAAY,CAACA;AAAA,cACd;AAAA,YACD,OAAO;AAGN,cAAAA,SAAQ;AACR,kBAAK,UAAU,CAAC,YAAa;AAC5B,6BAAa;AACb,oBAAK,SAAS,GAAI;AACjB,2BAAS;AAAA,gBACV;AAAA,cACD;AAAA,YACD;AAGA,kBAAM,SAAS;AACf,kBAAM,cAAe,oBAAoB,cAAe;AAGxD,gBAAK,WAAY;AAChB,uBAAS,YAAa,iBAAiB,CAAE,SAAS,YAAY,KAAM,CAAE;AAAA,YACvE,OAAO;AACN,uBAAS,WAAY,iBAAiB,CAAE,OAAO,YAAYA,MAAM,CAAE;AAAA,YACpE;AAGA,kBAAM,WAAY,UAAW;AAC7B,yBAAa;AAEb,gBAAK,aAAc;AAClB,iCAAmB;AAAA,gBAAS,YAAY,gBAAgB;AAAA,gBACvD,CAAE,OAAO,GAAG,YAAY,UAAUA,MAAM;AAAA,cAAE;AAAA,YAC5C;AAGA,6BAAiB,SAAU,iBAAiB,CAAE,OAAO,UAAW,CAAE;AAElE,gBAAK,aAAc;AAClB,iCAAmB,QAAS,gBAAgB,CAAE,OAAO,CAAE,CAAE;AAGzD,kBAAK,CAAG,EAAEjB,QAAO,QAAW;AAC3B,gBAAAA,QAAO,MAAM,QAAS,UAAW;AAAA,cAClC;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,SAAS,SAAUgC,MAAK,MAAM,UAAW;AACxC,iBAAOhC,QAAO,IAAKgC,MAAK,MAAM,UAAU,MAAO;AAAA,QAChD;AAAA,QAEA,WAAW,SAAUA,MAAK,UAAW;AACpC,iBAAOhC,QAAO,IAAKgC,MAAK,QAAW,UAAU,QAAS;AAAA,QACvD;AAAA,MACD,CAAE;AAEF,MAAAhC,QAAO,KAAM,CAAE,OAAO,MAAO,GAAG,SAAU,IAAI,QAAS;AACtD,QAAAA,QAAQ,MAAO,IAAI,SAAUgC,MAAK,MAAM,UAAU,MAAO;AAIxD,cAAK,OAAO,SAAS,cAAc,SAAS,MAAO;AAClD,mBAAO,QAAQ;AACf,uBAAW;AACX,mBAAO;AAAA,UACR;AAGA,iBAAOhC,QAAO,KAAMA,QAAO,OAAQ;AAAA,YAClC,KAAKgC;AAAA,YACL,MAAM;AAAA,YACN,UAAU;AAAA,YACV;AAAA,YACA,SAAS;AAAA,UACV,GAAGhC,QAAO,cAAegC,IAAI,KAAKA,IAAI,CAAE;AAAA,QACzC;AAAA,MACD,CAAE;AAEF,MAAAhC,QAAO,cAAe,SAAU,GAAI;AACnC,YAAID;AACJ,aAAMA,MAAK,EAAE,SAAU;AACtB,cAAKA,GAAE,YAAY,MAAM,gBAAiB;AACzC,cAAE,cAAc,EAAE,QAASA,EAAE,KAAK;AAAA,UACnC;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAAC,QAAO,WAAW,SAAUgC,MAAK,SAAS,KAAM;AAC/C,eAAOhC,QAAO,KAAM;AAAA,UACnB,KAAKgC;AAAA;AAAA,UAGL,MAAM;AAAA,UACN,UAAU;AAAA,UACV,OAAO;AAAA,UACP,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,aAAa,QAAQ,cAAc,EAAE,eAAe,QAAQ,YAAY,IAAI;AAAA;AAAA;AAAA;AAAA,UAK5E,YAAY;AAAA,YACX,eAAe,WAAW;AAAA,YAAC;AAAA,UAC5B;AAAA,UACA,YAAY,SAAU,UAAW;AAChC,YAAAhC,QAAO,WAAY,UAAU,SAAS,GAAI;AAAA,UAC3C;AAAA,QACD,CAAE;AAAA,MACH;AAEA,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,SAAS,SAAU,MAAO;AACzB,cAAI;AAEJ,cAAK,KAAM,CAAE,GAAI;AAChB,gBAAK,OAAO,SAAS,YAAa;AACjC,qBAAO,KAAK,KAAM,KAAM,CAAE,CAAE;AAAA,YAC7B;AAGA,mBAAOA,QAAQ,MAAM,KAAM,CAAE,EAAE,aAAc,EAAE,GAAI,CAAE,EAAE,MAAO,IAAK;AAEnE,gBAAK,KAAM,CAAE,EAAE,YAAa;AAC3B,mBAAK,aAAc,KAAM,CAAE,CAAE;AAAA,YAC9B;AAEA,iBAAK,IAAK,WAAW;AACpB,kBAAI,OAAO;AAEX,qBAAQ,KAAK,mBAAoB;AAChC,uBAAO,KAAK;AAAA,cACb;AAEA,qBAAO;AAAA,YACR,CAAE,EAAE,OAAQ,IAAK;AAAA,UAClB;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,WAAW,SAAU,MAAO;AAC3B,cAAK,OAAO,SAAS,YAAa;AACjC,mBAAO,KAAK,KAAM,SAAUD,IAAI;AAC/B,cAAAC,QAAQ,IAAK,EAAE,UAAW,KAAK,KAAM,MAAMD,EAAE,CAAE;AAAA,YAChD,CAAE;AAAA,UACH;AAEA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAIc,QAAOb,QAAQ,IAAK,GACvB,WAAWa,MAAK,SAAS;AAE1B,gBAAK,SAAS,QAAS;AACtB,uBAAS,QAAS,IAAK;AAAA,YAExB,OAAO;AACN,cAAAA,MAAK,OAAQ,IAAK;AAAA,YACnB;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,MAAM,SAAU,MAAO;AACtB,cAAI,iBAAiB,OAAO,SAAS;AAErC,iBAAO,KAAK,KAAM,SAAUd,IAAI;AAC/B,YAAAC,QAAQ,IAAK,EAAE,QAAS,iBAAiB,KAAK,KAAM,MAAMD,EAAE,IAAI,IAAK;AAAA,UACtE,CAAE;AAAA,QACH;AAAA,QAEA,QAAQ,SAAU,UAAW;AAC5B,eAAK,OAAQ,QAAS,EAAE,IAAK,MAAO,EAAE,KAAM,WAAW;AACtD,YAAAC,QAAQ,IAAK,EAAE,YAAa,KAAK,UAAW;AAAA,UAC7C,CAAE;AACF,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,KAAK,QAAQ,SAAS,SAAU,MAAO;AAC7C,eAAO,CAACA,QAAO,KAAK,QAAQ,QAAS,IAAK;AAAA,MAC3C;AACA,MAAAA,QAAO,KAAK,QAAQ,UAAU,SAAU,MAAO;AAC9C,eAAO,CAAC,EAAG,KAAK,eAAe,KAAK,gBAAgB,KAAK,eAAe,EAAE;AAAA,MAC3E;AAEA,MAAAA,QAAO,aAAa,MAAM,WAAW;AACpC,eAAO,IAAIF,QAAO,eAAe;AAAA,MAClC;AAEA,UAAI,mBAAmB;AAAA;AAAA,QAGtB,GAAG;AAAA,MACJ;AAEA,MAAAE,QAAO,cAAe,SAAU,SAAU;AACzC,YAAI;AAEJ,eAAO;AAAA,UACN,MAAM,SAAU,SAAS,UAAW;AACnC,gBAAID,IACH,MAAM,QAAQ,IAAI;AAEnB,gBAAI;AAAA,cACH,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,QAAQ;AAAA,YACT;AAGA,gBAAK,QAAQ,WAAY;AACxB,mBAAMA,MAAK,QAAQ,WAAY;AAC9B,oBAAKA,EAAE,IAAI,QAAQ,UAAWA,EAAE;AAAA,cACjC;AAAA,YACD;AAGA,gBAAK,QAAQ,YAAY,IAAI,kBAAmB;AAC/C,kBAAI,iBAAkB,QAAQ,QAAS;AAAA,YACxC;AAOA,gBAAK,CAAC,QAAQ,eAAe,CAAC,QAAS,kBAAmB,GAAI;AAC7D,sBAAS,kBAAmB,IAAI;AAAA,YACjC;AAGA,iBAAMA,MAAK,SAAU;AACpB,kBAAI,iBAAkBA,IAAG,QAASA,EAAE,CAAE;AAAA,YACvC;AAGA,uBAAW,SAAU,MAAO;AAC3B,qBAAO,WAAW;AACjB,oBAAK,UAAW;AACf,6BAAW,IAAI,SAAS,IAAI,UAAU,IAAI,UAAU,IAAI,YAAY;AAEpE,sBAAK,SAAS,SAAU;AACvB,wBAAI,MAAM;AAAA,kBACX,WAAY,SAAS,SAAU;AAC9B;AAAA;AAAA,sBAGC,IAAI;AAAA,sBACJ,IAAI;AAAA,oBACL;AAAA,kBACD,OAAO;AACN;AAAA,sBACC,iBAAkB,IAAI,MAAO,KAAK,IAAI;AAAA,sBACtC,IAAI;AAAA;AAAA,uBAGF,IAAI,gBAAgB,YAAa,SAClC,EAAE,MAAM,IAAI,aAAa,IACzB,EAAE,QAAQ,IAAI,SAAS;AAAA,sBACxB,IAAI,sBAAsB;AAAA,oBAC3B;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAGA,gBAAI,SAAS,SAAS;AACtB,gBAAI,UAAU,IAAI,UAAU,IAAI,YAAY,SAAU,OAAQ;AAG9D,uBAAW,SAAU,OAAQ;AAE7B,gBAAI;AAGH,kBAAI,KAAM,QAAQ,cAAc,QAAQ,QAAQ,IAAK;AAAA,YACtD,SAAU,GAAI;AAGb,kBAAK,UAAW;AACf,sBAAM;AAAA,cACP;AAAA,YACD;AAAA,UACD;AAAA,UAEA,OAAO,WAAW;AACjB,gBAAK,UAAW;AACf,uBAAS;AAAA,YACV;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,eAAS,gBAAiB,GAAI;AAO7B,eAAO,EAAE,eACR,CAAC,EAAE,YAEF,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASA,EAAE,SAASC,QAAO,QAAS,QAAQ,EAAE,SAAU,IAAI;AAAA,MAGxD;AAIA,MAAAA,QAAO,UAAW;AAAA,QACjB,SAAS;AAAA,UACR,QAAQ;AAAA,QAET;AAAA,QACA,YAAY;AAAA,UACX,eAAe,SAAU,MAAO;AAC/B,YAAAA,QAAO,WAAY,IAAK;AACxB,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,cAAe,UAAU,SAAU,GAAI;AAC7C,YAAK,EAAE,UAAU,QAAY;AAC5B,YAAE,QAAQ;AAAA,QACX;AAIA,YAAK,gBAAiB,CAAE,GAAI;AAC3B,YAAE,OAAO;AAAA,QACV;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,cAAe,UAAU,SAAU,GAAI;AAC7C,YAAK,gBAAiB,CAAE,GAAI;AAC3B,cAAI,QAAQ;AACZ,iBAAO;AAAA,YACN,MAAM,SAAU,GAAG,UAAW;AAC7B,uBAASA,QAAQ,UAAW,EAC1B,KAAM,EAAE,eAAe,CAAC,CAAE,EAC1B,KAAM,EAAE,SAAS,EAAE,eAAe,KAAK,EAAE,IAAI,CAAE,EAC/C,GAAI,cAAc,WAAW,SAAU,KAAM;AAC7C,uBAAO,OAAO;AACd,2BAAW;AACX,oBAAK,KAAM;AACV,2BAAU,IAAI,SAAS,UAAU,MAAM,KAAK,IAAI,IAAK;AAAA,gBACtD;AAAA,cACD,CAAE;AAGH,yBAAW,KAAK,YAAa,OAAQ,CAAE,CAAE;AAAA,YAC1C;AAAA,YACA,OAAO,WAAW;AACjB,kBAAK,UAAW;AACf,yBAAS;AAAA,cACV;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,UAAI,eAAe,CAAC,GACnB,SAAS;AAGV,MAAAA,QAAO,UAAW;AAAA,QACjB,OAAO;AAAA,QACP,eAAe,WAAW;AACzB,cAAI,WAAW,aAAa,IAAI,KAAOA,QAAO,UAAU,MAAQ,MAAM;AACtE,eAAM,QAAS,IAAI;AACnB,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,cAAe,SAAS,SAAU,GAAG,kBAAkB,OAAQ;AAErE,YAAI,cAAc,aAAa,mBAC9B,WAAW,EAAE,UAAU,UAAW,OAAO,KAAM,EAAE,GAAI,IACpD,QACA,OAAO,EAAE,SAAS,aACf,EAAE,eAAe,IACjB,QAAS,mCAAoC,MAAM,KACrD,OAAO,KAAM,EAAE,IAAK,KAAK;AAI5B,uBAAe,EAAE,gBAAgB,OAAO,EAAE,kBAAkB,aAC3D,EAAE,cAAc,IAChB,EAAE;AAGH,YAAK,UAAW;AACf,YAAG,QAAS,IAAI,EAAG,QAAS,EAAE,QAAS,QAAQ,OAAO,YAAa;AAAA,QACpE,WAAY,EAAE,UAAU,OAAQ;AAC/B,YAAE,QAAS,OAAO,KAAM,EAAE,GAAI,IAAI,MAAM,OAAQ,EAAE,QAAQ,MAAM;AAAA,QACjE;AAGA,UAAE,WAAY,aAAc,IAAI,WAAW;AAC1C,cAAK,CAAC,mBAAoB;AACzB,YAAAA,QAAO,MAAO,eAAe,iBAAkB;AAAA,UAChD;AACA,iBAAO,kBAAmB,CAAE;AAAA,QAC7B;AAGA,UAAE,UAAW,CAAE,IAAI;AAGnB,sBAAcF,QAAQ,YAAa;AACnC,QAAAA,QAAQ,YAAa,IAAI,WAAW;AACnC,8BAAoB;AAAA,QACrB;AAGA,cAAM,OAAQ,WAAW;AAGxB,cAAK,gBAAgB,QAAY;AAChC,YAAAE,QAAQF,OAAO,EAAE,WAAY,YAAa;AAAA,UAG3C,OAAO;AACN,YAAAA,QAAQ,YAAa,IAAI;AAAA,UAC1B;AAGA,cAAK,EAAG,YAAa,GAAI;AAGxB,cAAE,gBAAgB,iBAAiB;AAGnC,yBAAa,KAAM,YAAa;AAAA,UACjC;AAGA,cAAK,qBAAqB,OAAO,gBAAgB,YAAa;AAC7D,wBAAa,kBAAmB,CAAE,CAAE;AAAA,UACrC;AAEA,8BAAoB,cAAc;AAAA,QACnC,CAAE;AAGF,eAAO;AAAA,MACR,CAAE;AAEF,MAAAE,QAAO,cAAe,SAAU,GAAG,aAAc;AAGhD,YAAK,OAAO,EAAE,SAAS,YAAY,CAACA,QAAO,cAAe,EAAE,IAAK,KAC/D,CAAC,MAAM,QAAS,EAAE,IAAK;AAAA,QAGvB,EAAG,iBAAiB,cAAgB;AACrC,YAAE,cAAc;AAAA,QACjB;AAIA,YAAK,EAAE,gBAAgBF,QAAO,UAAW;AACxC,YAAE,cAAc;AAAA,QACjB;AAAA,MACD,CAAE;AAMF,MAAAE,QAAO,YAAY,SAAU,MAAM,SAAS,aAAc;AACzD,YAAK,OAAO,SAAS,YAAY,CAAC,cAAe,OAAO,EAAG,GAAI;AAC9D,iBAAO,CAAC;AAAA,QACT;AACA,YAAK,OAAO,YAAY,WAAY;AACnC,wBAAc;AACd,oBAAU;AAAA,QACX;AAEA,YAAI,QAAQ;AAEZ,YAAK,CAAC,SAAU;AAIf,oBAAY,IAAIF,QAAO,UAAU,EAC/B,gBAAiB,IAAI,WAAY;AAAA,QACpC;AAEA,iBAAS,WAAW,KAAM,IAAK;AAC/B,kBAAU,CAAC,eAAe,CAAC;AAG3B,YAAK,QAAS;AACb,iBAAO,CAAE,QAAQ,cAAe,OAAQ,CAAE,CAAE,CAAE;AAAA,QAC/C;AAEA,iBAAS,cAAe,CAAE,IAAK,GAAG,SAAS,OAAQ;AAEnD,YAAK,WAAW,QAAQ,QAAS;AAChC,UAAAE,QAAQ,OAAQ,EAAE,OAAO;AAAA,QAC1B;AAEA,eAAOA,QAAO,MAAO,CAAC,GAAG,OAAO,UAAW;AAAA,MAC5C;AAKA,MAAAA,QAAO,GAAG,OAAO,SAAUgC,MAAK,QAAQ,UAAW;AAClD,YAAI,UAAU,MAAM,UACnBnB,QAAO,MACP,MAAMmB,KAAI,QAAS,GAAI;AAExB,YAAK,MAAM,IAAK;AACf,qBAAW,iBAAkBA,KAAI,MAAO,GAAI,CAAE;AAC9C,UAAAA,OAAMA,KAAI,MAAO,GAAG,GAAI;AAAA,QACzB;AAGA,YAAK,OAAO,WAAW,YAAa;AAGnC,qBAAW;AACX,mBAAS;AAAA,QAGV,WAAY,UAAU,OAAO,WAAW,UAAW;AAClD,iBAAO;AAAA,QACR;AAGA,YAAKnB,MAAK,SAAS,GAAI;AACtB,UAAAb,QAAO,KAAM;AAAA,YACZ,KAAKgC;AAAA;AAAA;AAAA;AAAA,YAKL,MAAM,QAAQ;AAAA,YACd,UAAU;AAAA,YACV,MAAM;AAAA,UACP,CAAE,EAAE,KAAM,SAAU,cAAe;AAGlC,uBAAW;AAEX,YAAAnB,MAAK,KAAM;AAAA;AAAA;AAAA,cAIVb,QAAQ,OAAQ,EAAE,OAAQA,QAAO,UAAW,YAAa,CAAE,EAAE,KAAM,QAAS;AAAA;AAAA;AAAA,cAG5E;AAAA,aAAa;AAAA,UAKf,CAAE,EAAE,OAAQ,YAAY,SAAU,OAAO,QAAS;AACjD,YAAAa,MAAK,KAAM,WAAW;AACrB,uBAAS,MAAO,MAAM,YAAY,CAAE,MAAM,cAAc,QAAQ,KAAM,CAAE;AAAA,YACzE,CAAE;AAAA,UACH,CAAE;AAAA,QACH;AAEA,eAAO;AAAA,MACR;AAEA,MAAAb,QAAO,KAAK,QAAQ,WAAW,SAAU,MAAO;AAC/C,eAAOA,QAAO,KAAMA,QAAO,QAAQ,SAAU,IAAK;AACjD,iBAAO,SAAS,GAAG;AAAA,QACpB,CAAE,EAAE;AAAA,MACL;AAEA,MAAAA,QAAO,SAAS;AAAA,QACf,WAAW,SAAU,MAAM,SAASD,IAAI;AACvC,cAAI,aAAa,SAAS,WAAW,QAAQ,WAAW,YAAY,mBACnE,WAAWC,QAAO,IAAK,MAAM,UAAW,GACxC,UAAUA,QAAQ,IAAK,GACvB,QAAQ,CAAC;AAGV,cAAK,aAAa,UAAW;AAC5B,iBAAK,MAAM,WAAW;AAAA,UACvB;AAEA,sBAAY,QAAQ,OAAO;AAC3B,sBAAYA,QAAO,IAAK,MAAM,KAAM;AACpC,uBAAaA,QAAO,IAAK,MAAM,MAAO;AACtC,+BAAsB,aAAa,cAAc,aAAa,aAC3D,YAAY,YAAa,QAAS,MAAO,IAAI;AAIhD,cAAK,mBAAoB;AACxB,0BAAc,QAAQ,SAAS;AAC/B,qBAAS,YAAY;AACrB,sBAAU,YAAY;AAAA,UAEvB,OAAO;AACN,qBAAS,WAAY,SAAU,KAAK;AACpC,sBAAU,WAAY,UAAW,KAAK;AAAA,UACvC;AAEA,cAAK,OAAO,YAAY,YAAa;AAGpC,sBAAU,QAAQ,KAAM,MAAMD,IAAGC,QAAO,OAAQ,CAAC,GAAG,SAAU,CAAE;AAAA,UACjE;AAEA,cAAK,QAAQ,OAAO,MAAO;AAC1B,kBAAM,MAAQ,QAAQ,MAAM,UAAU,MAAQ;AAAA,UAC/C;AACA,cAAK,QAAQ,QAAQ,MAAO;AAC3B,kBAAM,OAAS,QAAQ,OAAO,UAAU,OAAS;AAAA,UAClD;AAEA,cAAK,WAAW,SAAU;AACzB,oBAAQ,MAAM,KAAM,MAAM,KAAM;AAAA,UAEjC,OAAO;AACN,oBAAQ,IAAK,KAAM;AAAA,UACpB;AAAA,QACD;AAAA,MACD;AAEA,MAAAA,QAAO,GAAG,OAAQ;AAAA;AAAA,QAGjB,QAAQ,SAAU,SAAU;AAG3B,cAAK,UAAU,QAAS;AACvB,mBAAO,YAAY,SAClB,OACA,KAAK,KAAM,SAAUD,IAAI;AACxB,cAAAC,QAAO,OAAO,UAAW,MAAM,SAASD,EAAE;AAAA,YAC3C,CAAE;AAAA,UACJ;AAEA,cAAI,MAAM,KACT,OAAO,KAAM,CAAE;AAEhB,cAAK,CAAC,MAAO;AACZ;AAAA,UACD;AAMA,cAAK,CAAC,KAAK,eAAe,EAAE,QAAS;AACpC,mBAAO,EAAE,KAAK,GAAG,MAAM,EAAE;AAAA,UAC1B;AAGA,iBAAO,KAAK,sBAAsB;AAClC,gBAAM,KAAK,cAAc;AACzB,iBAAO;AAAA,YACN,KAAK,KAAK,MAAM,IAAI;AAAA,YACpB,MAAM,KAAK,OAAO,IAAI;AAAA,UACvB;AAAA,QACD;AAAA;AAAA;AAAA,QAIA,UAAU,WAAW;AACpB,cAAK,CAAC,KAAM,CAAE,GAAI;AACjB;AAAA,UACD;AAEA,cAAI,cAAc,QAAQ,KACzB,OAAO,KAAM,CAAE,GACf,eAAe,EAAE,KAAK,GAAG,MAAM,EAAE;AAGlC,cAAKC,QAAO,IAAK,MAAM,UAAW,MAAM,SAAU;AAGjD,qBAAS,KAAK,sBAAsB;AAAA,UAErC,OAAO;AACN,qBAAS,KAAK,OAAO;AAIrB,kBAAM,KAAK;AACX,2BAAe,KAAK,gBAAgB,IAAI;AACxC,mBAAQ,gBACP,iBAAiB,IAAI,mBACrBA,QAAO,IAAK,cAAc,UAAW,MAAM,UAAW;AAEtD,6BAAe,aAAa,gBAAgB,IAAI;AAAA,YACjD;AACA,gBAAK,gBAAgB,iBAAiB,QAAQ,aAAa,aAAa,KACvEA,QAAO,IAAK,cAAc,UAAW,MAAM,UAAW;AAGtD,6BAAeA,QAAQ,YAAa,EAAE,OAAO;AAC7C,2BAAa,OAAOA,QAAO,IAAK,cAAc,kBAAkB,IAAK;AACrE,2BAAa,QAAQA,QAAO,IAAK,cAAc,mBAAmB,IAAK;AAAA,YACxE;AAAA,UACD;AAGA,iBAAO;AAAA,YACN,KAAK,OAAO,MAAM,aAAa,MAAMA,QAAO,IAAK,MAAM,aAAa,IAAK;AAAA,YACzE,MAAM,OAAO,OAAO,aAAa,OAAOA,QAAO,IAAK,MAAM,cAAc,IAAK;AAAA,UAC9E;AAAA,QACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYA,cAAc,WAAW;AACxB,iBAAO,KAAK,IAAK,WAAW;AAC3B,gBAAI,eAAe,KAAK;AAExB,mBAAQ,gBAAgBA,QAAO,IAAK,cAAc,UAAW,MAAM,UAAW;AAC7E,6BAAe,aAAa;AAAA,YAC7B;AAEA,mBAAO,gBAAgB;AAAA,UACxB,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,KAAM,EAAE,YAAY,eAAe,WAAW,cAAc,GAAG,SAAU,QAAQ,MAAO;AAC9F,YAAI,MAAM,kBAAkB;AAE5B,QAAAA,QAAO,GAAI,MAAO,IAAI,SAAU,KAAM;AACrC,iBAAO,OAAQ,MAAM,SAAU,MAAMmC,SAAQJ,MAAM;AAGlD,gBAAI;AACJ,gBAAK,SAAU,IAAK,GAAI;AACvB,oBAAM;AAAA,YACP,WAAY,KAAK,aAAa,GAAI;AACjC,oBAAM,KAAK;AAAA,YACZ;AAEA,gBAAKA,SAAQ,QAAY;AACxB,qBAAO,MAAM,IAAK,IAAK,IAAI,KAAMI,OAAO;AAAA,YACzC;AAEA,gBAAK,KAAM;AACV,kBAAI;AAAA,gBACH,CAAC,MAAMJ,OAAM,IAAI;AAAA,gBACjB,MAAMA,OAAM,IAAI;AAAA,cACjB;AAAA,YAED,OAAO;AACN,mBAAMI,OAAO,IAAIJ;AAAA,YAClB;AAAA,UACD,GAAG,QAAQ,KAAK,UAAU,MAAO;AAAA,QAClC;AAAA,MACD,CAAE;AAGF,MAAA/B,QAAO,KAAM,EAAE,QAAQ,UAAU,OAAO,QAAQ,GAAG,SAAU,MAAM,MAAO;AACzE,QAAAA,QAAO,KAAM;AAAA,UACZ,SAAS,UAAU;AAAA,UACnB,SAAS;AAAA,UACT,IAAI,UAAU;AAAA,QACf,GAAG,SAAU,cAAc,UAAW;AAGrC,UAAAA,QAAO,GAAI,QAAS,IAAI,SAAU,QAAQ,OAAQ;AACjD,gBAAI,YAAY,UAAU,WAAY,gBAAgB,OAAO,WAAW,YACvE,QAAQ,iBAAkB,WAAW,QAAQ,UAAU,OAAO,WAAW;AAE1E,mBAAO,OAAQ,MAAM,SAAU,MAAMoC,OAAMhC,QAAQ;AAClD,kBAAI;AAEJ,kBAAK,SAAU,IAAK,GAAI;AAGvB,uBAAO,SAAS,QAAS,OAAQ,MAAM,IACtC,KAAM,UAAU,IAAK,IACrB,KAAK,SAAS,gBAAiB,WAAW,IAAK;AAAA,cACjD;AAGA,kBAAK,KAAK,aAAa,GAAI;AAC1B,sBAAM,KAAK;AAIX,uBAAO,KAAK;AAAA,kBACX,KAAK,KAAM,WAAW,IAAK;AAAA,kBAAG,IAAK,WAAW,IAAK;AAAA,kBACnD,KAAK,KAAM,WAAW,IAAK;AAAA,kBAAG,IAAK,WAAW,IAAK;AAAA,kBACnD,IAAK,WAAW,IAAK;AAAA,gBACtB;AAAA,cACD;AAEA,qBAAOA,WAAU;AAAA;AAAA,gBAGhBJ,QAAO,IAAK,MAAMoC,OAAM,KAAM;AAAA;AAAA;AAAA,gBAG9BpC,QAAO,MAAO,MAAMoC,OAAMhC,QAAO,KAAM;AAAA;AAAA,YACzC,GAAG,MAAM,YAAY,SAAS,QAAW,SAAU;AAAA,UACpD;AAAA,QACD,CAAE;AAAA,MACH,CAAE;AAEF,MAAAJ,QAAO,KAAM;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,GAAG,SAAU,IAAI,MAAO;AACvB,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,IAAK;AAClC,iBAAO,KAAK,GAAI,MAAM,EAAG;AAAA,QAC1B;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QAEjB,MAAM,SAAUqB,QAAO,MAAM,IAAK;AACjC,iBAAO,KAAK,GAAIA,QAAO,MAAM,MAAM,EAAG;AAAA,QACvC;AAAA,QACA,QAAQ,SAAUA,QAAO,IAAK;AAC7B,iBAAO,KAAK,IAAKA,QAAO,MAAM,EAAG;AAAA,QAClC;AAAA,QAEA,UAAU,SAAU,UAAUA,QAAO,MAAM,IAAK;AAC/C,iBAAO,KAAK,GAAIA,QAAO,UAAU,MAAM,EAAG;AAAA,QAC3C;AAAA,QACA,YAAY,SAAU,UAAUA,QAAO,IAAK;AAG3C,iBAAO,UAAU,WAAW,IAC3B,KAAK,IAAK,UAAU,IAAK,IACzB,KAAK,IAAKA,QAAO,YAAY,MAAM,EAAG;AAAA,QACxC;AAAA,QAEA,OAAO,SAAU,QAAQ,OAAQ;AAChC,iBAAO,KACL,GAAI,cAAc,MAAO,EACzB,GAAI,cAAc,SAAS,MAAO;AAAA,QACrC;AAAA,MACD,CAAE;AAEF,MAAArB,QAAO;AAAA,QACJ,wLAE0D,MAAO,GAAI;AAAA,QACvE,SAAU,IAAI,MAAO;AAGpB,UAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,MAAM,IAAK;AACxC,mBAAO,UAAU,SAAS,IACzB,KAAK,GAAI,MAAM,MAAM,MAAM,EAAG,IAC9B,KAAK,QAAS,IAAK;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AAMA,MAAAA,QAAO,QAAQ,SAAU,IAAI,SAAU;AACtC,YAAI,KAAK,MAAM;AAEf,YAAK,OAAO,YAAY,UAAW;AAClC,gBAAM,GAAI,OAAQ;AAClB,oBAAU;AACV,eAAK;AAAA,QACN;AAIA,YAAK,OAAO,OAAO,YAAa;AAC/B,iBAAO;AAAA,QACR;AAGA,eAAO,MAAM,KAAM,WAAW,CAAE;AAChC,gBAAQ,WAAW;AAClB,iBAAO,GAAG,MAAO,WAAW,MAAM,KAAK,OAAQ,MAAM,KAAM,SAAU,CAAE,CAAE;AAAA,QAC1E;AAGA,cAAM,OAAO,GAAG,OAAO,GAAG,QAAQA,QAAO;AAEzC,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,YAAY,SAAU,MAAO;AACnC,YAAK,MAAO;AACX,UAAAA,QAAO;AAAA,QACR,OAAO;AACN,UAAAA,QAAO,MAAO,IAAK;AAAA,QACpB;AAAA,MACD;AAEA,MAAAA,QAAO,KAAM,GAAI,IAAIA,QAAO,KAAK,UAAUA,QAAO,KAAK;AAevD,UAAK,OAAO,WAAW,cAAc,OAAO,KAAM;AACjD,eAAQ,UAAU,CAAC,GAAG,WAAW;AAChC,iBAAOA;AAAA,QACR,CAAE;AAAA,MACH;AAEA,UAGC,UAAUF,QAAO,QAGjB,KAAKA,QAAO;AAEb,MAAAE,QAAO,aAAa,SAAU,MAAO;AACpC,YAAKF,QAAO,MAAME,SAAS;AAC1B,UAAAF,QAAO,IAAI;AAAA,QACZ;AAEA,YAAK,QAAQA,QAAO,WAAWE,SAAS;AACvC,UAAAF,QAAO,SAAS;AAAA,QACjB;AAEA,eAAOE;AAAA,MACR;AAKA,UAAK,OAAO,aAAa,aAAc;AACtC,QAAAF,QAAO,SAASA,QAAO,IAAIE;AAAA,MAC5B;AAEA,aAAOA;AAAA,IAEP,CAAE;AAAA;AAAA;;;AC/8SF;AAAA;AAAA;AAWC,KAAC,SAAUqC,YAAW;AACrB,UAAI,OAAO,WAAW,YAAa;AAEnC,UAAI,QAAQ,GACV,aAAa,OACb,qBAAqB,OACrB,YAAY,WACZ,eAAe,UAAU,QACzB,QAAQ,iBACR,WAAW,MAAM,QACjB,eAAe,MACfC,yBAAwB,OAAO,uBAC/B,uBAAuB,OAAO,OAAO;AAAA,QACnC,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,uBAAuB;AAAA,MACzB,CAAC,GACD,WAAW,CAAC,GACZC,SAAQ,MACR,WAAW,OAAO,OAAO;AAAA,QACvB,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,aAAa;AAAA,QACb,aAAa;AAAA,QACb,aAAa;AAAA,QACb,qBAAqB;AAAA,QACrB,yBAAyB;AAAA,QACzB,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,KAAK;AAAA,QACL,WAAW;AAAA,QACX,UAAU;AAAA,QACV,WAAW;AAAA,QACX,UAAU;AAAA,QACV,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,SAAS,WAAY;AACnB,iBAAO;AAAA,QACT;AAAA,QACA,UAAU,WAAY;AAAA,QAAC;AAAA,QACvB,QAAQ,WAAY;AAAA,QAAC;AAAA,QACrB,WAAW,WAAY;AACrB,eAAK,gCAAgC;AAAA,QACvC;AAAA,QACA,cAAc,WAAY;AAAA,QAAC;AAAA,QAC3B,cAAc,WAAY;AAAA,QAAC;AAAA,QAC3B,WAAW,WAAY;AAAA,QAAC;AAAA,QACxB,UAAU,WAAY;AACpB,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAEH,eAAS,sBAAsB;AAC7B,eACE,OAAO,oBACP,OAAO,0BACP,OAAO;AAAA,MAEX;AAEA,eAASC,kBAAiBC,KAAI,KAAK,MAAM;AACvC,QAAAA,IAAG,iBAAiB,KAAK,MAAM,KAAK;AAAA,MACtC;AAEA,eAAS,oBAAoBA,KAAI,KAAK,MAAM;AAC1C,QAAAA,IAAG,oBAAoB,KAAK,MAAM,KAAK;AAAA,MACzC;AAEA,eAAS,6BAA6B;AACpC,YAAI,UAAU,CAAC,OAAO,UAAU,KAAK,IAAI;AACzC,YAAI;AAGJ,aAAK,IAAI,GAAG,IAAI,QAAQ,UAAU,CAACH,wBAAuB,KAAK,GAAG;AAChE,UAAAA,yBAAwB,OAAO,QAAQ,CAAC,IAAI,uBAAuB;AAAA,QACrE;AAEA,YAAIA,wBAAuB;AAIzB,UAAAA,yBAAwBA,uBAAsB,KAAK,MAAM;AAAA,QAC3D,OAAO;AACL,UAAAI,KAAI,SAAS,qCAAqC;AAAA,QACpD;AAAA,MACF;AAEA,eAAS,QAAQ,UAAU;AACzB,YAAI,SAAS,gBAAgB;AAE7B,YAAI,OAAO,QAAQ,OAAO,MAAM;AAC9B,mBACE,OAAO,gBAAgB,OAAO,aAAa,QACvC,OAAO,aAAa,MAAM,IAAI,OAAO,WACrC,uBAAuB;AAAA,QAC/B;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,gBAAgB,UAAU;AACjC,eAAO,QAAQ,MAAM,QAAQ,QAAQ,IAAI;AAAA,MAC3C;AAEA,eAAS,aAAa,UAAU;AAC9B,eAAO,SAAS,QAAQ,IAAI,SAAS,QAAQ,EAAE,MAAM;AAAA,MACvD;AAEA,eAASA,KAAI,UAAU,KAAK;AAC1B,eAAO,OAAO,UAAU,KAAK,aAAa,QAAQ,CAAC;AAAA,MACrD;AAEA,eAAS,KAAK,UAAU,KAAK;AAC3B,eAAO,QAAQ,UAAU,KAAK,aAAa,QAAQ,CAAC;AAAA,MACtD;AAEA,eAAS,KAAK,UAAU,KAAK;AAC3B,eAAO,QAAQ,UAAU,KAAK,IAAI;AAAA,MACpC;AAEA,eAAS,OAAO,MAAM,UAAU,KAAK,SAAS;AAC5C,YAAI,SAAS,WAAW,aAAa,OAAO,OAAO,SAAS;AAE1D,kBAAQ,IAAI,EAAE,gBAAgB,QAAQ,GAAG,GAAG;AAAA,QAC9C;AAAA,MACF;AAEA,eAAS,eAAeC,QAAO;AAC7B,iBAAS,eAAe;AACtB,mBAAS,SAAS;AAChB,oBAAQ,WAAW;AACnB,4BAAgB,QAAQ;AACxB,eAAG,aAAa,WAAW;AAAA,UAC7B;AAEA,wBAAc,QAAQ;AACtB,wBAAc,OAAO;AAErB,qBAAW,QAAQ,aAAa,MAAM;AAAA,QACxC;AAEA,iBAAS,aAAa;AACpB,cAAI,OAAO,IAAI,MAAM,QAAQ,EAAE,MAAM,GAAG;AACxC,cAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,GAAG,EAAE,IAAI;AAC/C,cAAI,SAAS,SAAS,KAAK,CAAC,CAAC,KAAK,SAAS,KAAK,CAAC,CAAC,EAAE;AACpD,cAAI,YAAY,iBAAiB,MAAM;AAEvC,iBAAO;AAAA,YACL;AAAA,YACA,IAAI,KAAK,CAAC;AAAA,YACV,QAAQ,SAAS,eAAe,SAAS,IAAI,cAAc,SAAS;AAAA,YACpE,OAAO,KAAK,CAAC;AAAA,YACb,MAAM,KAAK,CAAC;AAAA,UACd;AAAA,QACF;AAEA,iBAAS,eAAe,WAAW;AACjC,cAAI,UAAU,cAAc,cAAc;AACxC,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,UAAU,aAAa,SAAS,UAAU,YAAY,EAAE,IAAI;AACtE,cAAI,MAAM,UAAU,gBAChB,SAAS,UAAU,eAAe,EAAE,IACpC;AACJ,iBAAO,MAAM;AAAA,QACf;AAEA,iBAAS,cAAc,WAAW;AAChC,cAAI,UAAU,cAAc,cAAc;AACxC,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,UAAU,iBAChB,SAAS,UAAU,gBAAgB,EAAE,IACrC;AACJ,cAAI,MAAM,UAAU,oBAChB,SAAS,UAAU,mBAAmB,EAAE,IACxC;AACJ,iBAAO,MAAM;AAAA,QACf;AAEA,iBAAS,cAAc,WAAW;AAChC,cAAI,MAAM,OAAO,SAAS,QAAQ,EAAE,QAAQ,SAAS,CAAC,GACpD,MAAM,OAAO,SAAS,QAAQ,EAAE,QAAQ,SAAS,CAAC,GAClD,YAAY,UAAU,YAAY,GAClC,OAAO,OAAO,YAAY,SAAS,CAAC;AAEtC,UAAAD,KAAI,UAAU,cAAc,YAAY,kBAAkB,MAAM,MAAM,GAAG;AAEzE,cAAI,OAAO,KAAK;AACd,mBAAO;AACP,YAAAA,KAAI,UAAU,SAAS,YAAY,eAAe;AAAA,UACpD;AAEA,cAAI,OAAO,KAAK;AACd,mBAAO;AACP,YAAAA,KAAI,UAAU,SAAS,YAAY,eAAe;AAAA,UACpD;AAEA,sBAAY,SAAS,IAAI,KAAK;AAAA,QAChC;AAEA,iBAAS,sBAAsB;AAC7B,mBAAS,qBAAqB;AAC5B,qBAAS,YAAY;AACnB,kBAAI,IAAI,GACN,UAAU;AAEZ,cAAAA;AAAA,gBACE;AAAA,gBACA,0DACE;AAAA,cACJ;AAEA,qBAAO,IAAI,YAAY,QAAQ,KAAK;AAClC,oBAAI,YAAY,CAAC,MAAM,QAAQ;AAC7B,4BAAU;AACV;AAAA,gBACF;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AAEA,qBAAS,cAAc;AACrB,kBAAI,aAAa,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE;AAC1D,cAAAA,KAAI,UAAU,kCAAkC,UAAU;AAC1D,qBAAO,WAAW;AAAA,YACpB;AAEA,mBAAO,YAAY,gBAAgB,QAAQ,UAAU,IAAI,YAAY;AAAA,UACvE;AAEA,cAAI,SAASC,OAAM,QACjB,cAAc,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE;AAEzD,cAAI,eAAe,KAAK,WAAW,UAAU,CAAC,mBAAmB,GAAG;AAClE,kBAAM,IAAI;AAAA,cACR,uCACE,SACA,UACA,YAAY,OAAO,KACnB,oBACAA,OAAM,OACN;AAAA,YACJ;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAEA,iBAAS,iBAAiB;AACxB,iBACE,WAAW,KAAK,KAAK,MAAM,GAAG,QAAQ,KACtC,IAAI,MAAM,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,QAEzC;AAEA,iBAAS,0BAA0B;AAGjC,cAAI,UAAU,YAAY,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,EAAE;AAEpE,cAAI,SAAS;AACX,YAAAD,KAAI,UAAU,6CAA6C;AAAA,UAC7D;AAEA,iBAAO;AAAA,QACT;AAEA,iBAAS,WAAW,QAAQ;AAC1B,iBAAO,IAAI,MAAM,IAAI,QAAQ,GAAG,IAAI,eAAe,MAAM;AAAA,QAC3D;AAEA,iBAAS,qBAAqB,SAAS;AACrC,UAAAA;AAAA,YACE;AAAA,YACA,gCACE,YAAY,OAAO,KACnB,gBACA,UACA;AAAA,UACJ;AAEA,aAAG,aAAa;AAAA,YACd,QAAQ,YAAY;AAAA,YACpB,SAAS,KAAK,MAAM,OAAO;AAAA,UAC7B,CAAC;AAED,UAAAA,KAAI,UAAU,IAAI;AAAA,QACpB;AAEA,iBAAS,cAAc;AACrB,cAAI,eAAe,SAAS,KAAK,sBAAsB,GACrD,iBAAiB,YAAY,OAAO,sBAAsB;AAE5D,iBAAO,KAAK,UAAU;AAAA,YACpB,cAAc,eAAe;AAAA,YAC7B,aAAa,eAAe;AAAA,YAC5B,cAAc,KAAK;AAAA,cACjB,SAAS,gBAAgB;AAAA,cACzB,OAAO,eAAe;AAAA,YACxB;AAAA,YACA,aAAa,KAAK;AAAA,cAChB,SAAS,gBAAgB;AAAA,cACzB,OAAO,cAAc;AAAA,YACvB;AAAA,YACA,WAAW,SAAS,eAAe,MAAM,aAAa,KAAK,EAAE;AAAA,YAC7D,YAAY,SAAS,eAAe,OAAO,aAAa,MAAM,EAAE;AAAA,YAChE,WAAW,OAAO;AAAA,YAClB,YAAY,OAAO;AAAA,YACnB,gBAAgB,SAAS,gBAAgB;AAAA,YACzC,eAAe,SAAS,gBAAgB;AAAA,YACxC,cAAc,OAAO;AAAA,YACrB,aAAa,OAAO;AAAA,UACtB,CAAC;AAAA,QACH;AAEA,iBAAS,qBAAqB,QAAQE,WAAU;AAC9C,mBAAS,mBAAmB;AAC1B,oBAAQ,kBAAkB,cAAc,YAAY,GAAG,QAAQA,SAAQ;AAAA,UACzE;AACA,8BAAoB,kBAAkB,IAAIA,SAAQ;AAAA,QACpD;AAEA,iBAAS,uBAAuB;AAC9B,mBAAS,YAAY,MAAM,MAAM;AAC/B,qBAAS,eAAe;AACtB,kBAAI,SAAS,EAAE,GAAG;AAChB,qCAAqB,SAAS,EAAE,EAAE,QAAQ,EAAE;AAAA,cAC9C,OAAO;AACL,qBAAK;AAAA,cACP;AAAA,YACF;AAEA;AAAC,aAAC,UAAU,QAAQ,EAAE,QAAQ,SAAU,KAAK;AAC3C,cAAAF,KAAI,IAAI,OAAO,MAAM,4BAA4B;AACjD,mBAAK,QAAQ,KAAK,YAAY;AAAA,YAChC,CAAC;AAAA,UACH;AAEA,mBAAS,OAAO;AACd,wBAAY,WAAW,mBAAmB;AAAA,UAC5C;AAEA,mBAAS,QAAQ;AACf,wBAAY,QAAQF,iBAAgB;AAAA,UACtC;AAEA,cAAI,KAAK;AAET,gBAAM;AAEN,cAAI,SAAS,EAAE,GAAG;AAChB,qBAAS,EAAE,EAAE,eAAe;AAAA,UAC9B;AAAA,QACF;AAEA,iBAAS,sBAAsB;AAC7B,cAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,cAAc;AACzD,qBAAS,QAAQ,EAAE,aAAa;AAChC,mBAAO,SAAS,QAAQ,EAAE;AAAA,UAC5B;AAAA,QACF;AAEA,iBAAS,oBAAoB;AAC3B,cAAI,UAAU;AAEd,cAAI,SAAS,YAAY,QAAQ;AAC/B,iBAAK,UAAU,aAAa,YAAY,KAAK,aAAa;AAC1D,sBAAU;AAAA,UACZ;AACA,iBAAO;AAAA,QACT;AAEA,iBAAS,mBAAmB,QAAQ;AAClC,cAAI,iBAAiB,OAAO,sBAAsB;AAElD,0BAAgB,QAAQ;AAExB,iBAAO;AAAA,YACL,GAAG,KAAK,MAAM,OAAO,eAAe,IAAI,IAAI,OAAO,aAAa,CAAC,CAAC;AAAA,YAClE,GAAG,KAAK,MAAM,OAAO,eAAe,GAAG,IAAI,OAAO,aAAa,CAAC,CAAC;AAAA,UACnE;AAAA,QACF;AAEA,iBAAS,uBAAuB,WAAW;AAEzC,mBAAS,aAAa;AACpB,2BAAe;AACf,qBAAS;AACT,YAAAE,KAAI,UAAU,IAAI;AAAA,UACpB;AAEA,mBAAS,aAAa;AACpB,mBAAO;AAAA,cACL,GAAG,OAAO,YAAY,KAAK,IAAI,OAAO;AAAA,cACtC,GAAG,OAAO,YAAY,MAAM,IAAI,OAAO;AAAA,YACzC;AAAA,UACF;AAEA,mBAAS,eAAe;AACtB,gBAAI,OAAO,cAAc;AACvB,qBAAO,aAAa,cAAc,YAAY,WAAW,GAAG;AAAA,gBAC1D,YAAY;AAAA,gBACZ,YAAY;AAAA,cACd;AAAA,YACF,OAAO;AACL;AAAA,gBACE;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,cAAI,SAAS,YACP,mBAAmB,YAAY,MAAM,IACrC,EAAE,GAAG,GAAG,GAAG,EAAE,GACjB,cAAc,WAAW;AAE3B,UAAAA;AAAA,YACE;AAAA,YACA,gDACE,OAAO,IACP,QACA,OAAO,IACP;AAAA,UACJ;AAEA,cAAI,OAAO,QAAQ,OAAO,MAAM;AAC9B,uBAAW;AAAA,UACb,OAAO;AACL,yBAAa;AAAA,UACf;AAAA,QACF;AAEA,iBAAS,WAAW;AAClB,cAAI,UAAU,GAAG,YAAY,YAAY,GAAG;AAC1C,8BAAkB;AAAA,UACpB,OAAO;AACL,4BAAgB,QAAQ;AAAA,UAC1B;AAAA,QACF;AAEA,iBAAS,WAAWG,WAAU;AAC5B,mBAAS,eAAe;AACtB,gBAAI,eAAe,mBAAmB,MAAM;AAE5C,YAAAH;AAAA,cACE;AAAA,cACA,8BACEI,QACA,aACA,aAAa,IACb,SACA,aAAa;AAAA,YACjB;AACA,2BAAe;AAAA,cACb,GAAG,aAAa;AAAA,cAChB,GAAG,aAAa;AAAA,YAClB;AAEA,qBAAS;AACT,YAAAJ,KAAI,UAAU,IAAI;AAAA,UACpB;AAEA,mBAAS,eAAe;AACtB,gBAAI,OAAO,cAAc;AACvB,qBAAO,aAAa,aAAaI,KAAI;AAAA,YACvC,OAAO;AACL,cAAAJ;AAAA,gBACE;AAAA,gBACA,mBACEI,QACA;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AAEA,cAAIA,QAAOD,UAAS,MAAM,GAAG,EAAE,CAAC,KAAK,IACnC,WAAW,mBAAmBC,KAAI,GAClC,SACE,SAAS,eAAe,QAAQ,KAChC,SAAS,kBAAkB,QAAQ,EAAE,CAAC;AAE1C,cAAI,QAAQ;AACV,yBAAa;AAAA,UACf,WAAW,OAAO,QAAQ,OAAO,MAAM;AACrC,YAAAJ,KAAI,UAAU,mBAAmBI,QAAO,YAAY;AAAA,UACtD,OAAO;AACL,yBAAa;AAAA,UACf;AAAA,QACF;AAEA,iBAAS,QAAQH,QAAO;AACtB,cAAI,WAAW,CAAC;AAEhB,cAAI,OAAO,YAAY,KAAK,MAAM,KAAK,OAAO,YAAY,MAAM,MAAM,GAAG;AACvE,gBAAI,OAAO,WAAW,CAAC,EAAE,MAAM,GAAG;AAClC,uBAAW;AAAA,cACT,GAAG,KAAK,CAAC;AAAA,cACT,GAAG,KAAK,CAAC;AAAA,YACX;AAAA,UACF,OAAO;AACL,uBAAW;AAAA,cACT,GAAG,YAAY;AAAA,cACf,GAAG,YAAY;AAAA,YACjB;AAAA,UACF;AAEA,aAAGA,QAAO;AAAA,YACR,QAAQ,YAAY;AAAA,YACpB,SAAS,OAAO,SAAS,CAAC;AAAA,YAC1B,SAAS,OAAO,SAAS,CAAC;AAAA,YAC1B,MAAM,YAAY;AAAA,UACpB,CAAC;AAAA,QACH;AAEA,iBAAS,GAAG,UAAU,KAAK;AACzB,iBAAO,SAAS,UAAU,UAAU,GAAG;AAAA,QACzC;AAEA,iBAAS,YAAY;AACnB,cAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,SAAU,UAAS;AAEhE,kBAAQ,YAAY,MAAM;AAAA,YACxB,KAAK,SAAS;AACZ,0BAAY,YAAY,MAAM;AAC9B;AAAA,YACF;AAAA,YAEA,KAAK,WAAW;AACd,mCAAqB,WAAW,CAAC,CAAC;AAClC;AAAA,YACF;AAAA,YAEA,KAAK,cAAc;AACjB,sBAAQ,cAAc;AACtB;AAAA,YACF;AAAA,YAEA,KAAK,cAAc;AACjB,sBAAQ,cAAc;AACtB;AAAA,YACF;AAAA,YAEA,KAAK,cAAc;AACjB,uBAAS,QAAQ,EAAE,aAAa,KAAK,MAAM,WAAW,CAAC,CAAC;AACxD;AAAA,YACF;AAAA,YAEA,KAAK,YAAY;AACf,qCAAuB,KAAK;AAC5B;AAAA,YACF;AAAA,YAEA,KAAK,kBAAkB;AACrB,qCAAuB,IAAI;AAC3B;AAAA,YACF;AAAA,YAEA,KAAK,YAAY;AACf;AAAA,gBACE,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE;AAAA,gBACzC;AAAA,cACF;AACA,mCAAqB;AACrB;AAAA,YACF;AAAA,YAEA,KAAK,gBAAgB;AACnB,kCAAoB;AACpB;AAAA,YACF;AAAA,YAEA,KAAK,cAAc;AACjB,yBAAW,WAAW,CAAC,CAAC;AACxB;AAAA,YACF;AAAA,YAEA,KAAK,SAAS;AACZ,0BAAY,WAAW;AACvB;AAAA,YACF;AAAA,YAEA,KAAK,QAAQ;AACX,2BAAa;AACb,iBAAG,UAAU,YAAY,MAAM;AAC/B;AAAA,YACF;AAAA,YAEA,SAAS;AACP,kBACE,OAAO,YAAY,KAAK,MAAM,KAC9B,OAAO,YAAY,MAAM,MAAM,GAC/B;AACA;AAAA,kBACE,mCACE,YAAY,OACZ;AAAA,gBAEJ;AAAA,cACF,OAAO;AACL,6BAAa;AAAA,cACf;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,YAAYC,WAAU;AAC7B,cAAI,UAAU;AAEd,cAAI,CAAC,SAASA,SAAQ,GAAG;AACvB,sBAAU;AACV;AAAA,cACE,YAAY,OACV,sBACAA,YACA,oBACA;AAAA,YACJ;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAEA,iBAAS,yBAAyB;AAEhC,mBAASA,aAAY,UAAU;AAC7B;AAAA,cACE;AAAA,cACA,kBAAkBA,SAAQ;AAAA,cAC1B,SAASA,SAAQ,EAAE;AAAA,cACnBA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,WAAW;AAClB,cAAI,SAAS,QAAQ,GAAG;AACtB,qBAAS,QAAQ,EAAE,WAAW;AAAA,UAChC;AAAA,QACF;AAEA,YAAI,MAAMD,OAAM,MACd,cAAc,CAAC,GACf,WAAW;AAEb,YAAI,gCAAgC,KAAK;AACvC,iCAAuB;AAAA,QACzB,WAAW,eAAe,GAAG;AAC3B,wBAAc,WAAW;AACzB,qBAAW,YAAY;AACvB,cAAI,SAAS,QAAQ,GAAG;AACtB,qBAAS,QAAQ,EAAE,SAAS;AAAA,UAC9B;AAEA,cAAI,CAAC,wBAAwB,KAAK,YAAY,QAAQ,GAAG;AACvD,YAAAD,KAAI,UAAU,eAAe,GAAG;AAEhC,gBAAI,kBAAkB,KAAK,oBAAoB,GAAG;AAChD,wBAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF,OAAO;AACL,eAAK,UAAU,cAAc,GAAG;AAAA,QAClC;AAAA,MACF;AAEA,eAAS,SAAS,UAAU,UAAU,KAAK;AACzC,YAAI,OAAO,MACT,SAAS;AAEX,YAAI,SAAS,QAAQ,GAAG;AACtB,iBAAO,SAAS,QAAQ,EAAE,QAAQ;AAElC,cAAI,eAAe,OAAO,MAAM;AAC9B,qBAAS,KAAK,GAAG;AAAA,UACnB,OAAO;AACL,kBAAM,IAAI;AAAA,cACR,WAAW,gBAAgB,WAAW;AAAA,YACxC;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,sBAAsB,QAAQ;AACrC,YAAI,WAAW,OAAO;AACtB,eAAO,SAAS,QAAQ;AAAA,MAC1B;AAEA,eAAS,YAAY,QAAQ;AAC3B,YAAI,WAAW,OAAO;AACtB,YAAI,SAAS,UAAU,WAAW,QAAQ,MAAM,OAAO;AACrD,UAAAA,KAAI,UAAU,yCAAyC;AACvD;AAAA,QACF;AACA,QAAAA,KAAI,UAAU,sBAAsB,QAAQ;AAE5C,YAAI;AAEF,cAAI,OAAO,YAAY;AACrB,mBAAO,WAAW,YAAY,MAAM;AAAA,UACtC;AAAA,QACF,SAASK,QAAO;AACd,eAAKA,MAAK;AAAA,QACZ;AAEA,iBAAS,UAAU,YAAY,QAAQ;AACvC,QAAAL,KAAI,UAAU,IAAI;AAClB,8BAAsB,MAAM;AAAA,MAC9B;AAEA,eAAS,gBAAgB,UAAU;AACjC,YAAI,SAAS,cAAc;AACzB,yBAAe;AAAA,YACb,GACE,OAAO,gBAAgBL,aACnB,SAAS,gBAAgB,aACzB,OAAO;AAAA,YACb,GACE,OAAO,gBAAgBA,aACnB,SAAS,gBAAgB,YACzB,OAAO;AAAA,UACf;AACA,UAAAK;AAAA,YACE;AAAA,YACA,wBAAwB,aAAa,IAAI,MAAM,aAAa;AAAA,UAC9D;AAAA,QACF;AAAA,MACF;AAEA,eAAS,gBAAgB,UAAU;AACjC,YAAI,SAAS,cAAc;AACzB,iBAAO,SAAS,aAAa,GAAG,aAAa,CAAC;AAC9C,UAAAA;AAAA,YACE;AAAA,YACA,wBAAwB,aAAa,IAAI,MAAM,aAAa;AAAA,UAC9D;AACA,4BAAkB;AAAA,QACpB;AAAA,MACF;AAEA,eAAS,oBAAoB;AAC3B,uBAAe;AAAA,MACjB;AAEA,eAAS,YAAY,aAAa;AAChC,iBAAS,QAAQ;AACf,kBAAQ,WAAW;AACnB,kBAAQ,SAAS,SAAS,YAAY,QAAQ,YAAY,EAAE;AAAA,QAC9D;AAEA,QAAAA;AAAA,UACE,YAAY;AAAA,UACZ,8BACG,WAAW,YAAY,OAAO,cAAc;AAAA,QACjD;AACA,wBAAgB,YAAY,EAAE;AAC9B,mBAAW,OAAO,aAAa,OAAO;AAAA,MACxC;AAEA,eAAS,QAAQ,aAAa;AAC5B,iBAAS,aAAa,WAAW;AAC/B,cAAI,CAAC,YAAY,IAAI;AACnB,YAAAA,KAAI,aAAa,wBAAwB;AACzC;AAAA,UACF;AACA,sBAAY,OAAO,MAAM,SAAS,IAAI,YAAY,SAAS,IAAI;AAC/D,UAAAA;AAAA,YACE,YAAY;AAAA,YACZ,aACE,WACA,OACA,YACA,aACA,YAAY,SAAS,IACrB;AAAA,UACJ;AAAA,QACF;AAEA,iBAAS,QAAQ,WAAW;AAM1B,cAAI,CAAC,sBAAsB,QAAQ,YAAY,SAAS,GAAG;AACzD,iCAAqB;AACrB,YAAAA,KAAI,UAAU,sDAAsD;AACpE,6BAAiB;AAAA,UACnB;AAAA,QACF;AAEA,iBAAS,iBAAiB,WAAW;AACnC,uBAAa,SAAS;AACtB,kBAAQ,SAAS;AAAA,QACnB;AAEA,YAAI,WAAW,YAAY,OAAO;AAElC,YAAI,SAAS,QAAQ,GAAG;AACtB,cAAI,SAAS,QAAQ,EAAE,YAAY;AACjC,6BAAiB,QAAQ;AAAA,UAC3B;AACA,cAAI,SAAS,QAAQ,EAAE,WAAW;AAChC,6BAAiB,OAAO;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAEA,eAAS,WAAW,MAAM,aAAa,WAAW;AAEhD,YACE,cAAc,YAAY,QAC1BJ;AAAA,QAEA,CAAC,OAAO,SACR;AACA,UAAAI,KAAI,YAAY,IAAI,4BAA4B;AAChD,UAAAJ,uBAAsB,IAAI;AAAA,QAC5B,OAAO;AACL,eAAK;AAAA,QACP;AAAA,MACF;AAEA,eAAS,QAAQ,WAAW,KAAK,QAAQ,IAAI,mBAAmB;AAC9D,iBAAS,sBAAsB;AAC7B,cAAI,SAAS,SAAS,EAAE,KAAK,SAAS,EAAE,EAAE;AAC1C,UAAAI;AAAA,YACE;AAAA,YACA,MACE,YACA,6BACA,KACA,QACA,MACA,qBACA;AAAA,UACJ;AACA,iBAAO,cAAc,YAAY,QAAQ,KAAK,MAAM;AAAA,QACtD;AAEA,iBAAS,iBAAiB;AACxB,eAAK,IAAI,MAAM,YAAY,cAAc,KAAK,aAAa;AAAA,QAC7D;AAEA,iBAAS,aAAa;AACpB,cACE,UACA,mBAAmB,UACnB,SAAS,OAAO,eAChB;AAEA,gCAAoB;AAAA,UACtB,OAAO;AACL,2BAAe;AAAA,UACjB;AAAA,QACF;AAEA,iBAAS,mBAAmB;AAC1B,mBAAS,UAAU;AACjB,gBAAI,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,YAAY;AACvD,2BAAa;AACb;AAAA,gBACE;AAAA,gBACA,qCACE,SAAS,EAAE,EAAE,iBAAiB,MAC9B;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AAEA,cACE,CAAC,CAAC,qBACF,SAAS,EAAE,KACX,CAAC,CAAC,SAAS,EAAE,EAAE,gBACf;AACA,qBAAS,EAAE,EAAE,aAAa;AAAA,cACxB;AAAA,cACA,SAAS,EAAE,EAAE;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAEA,YAAI,aAAa;AAEjB,aAAK,MAAM,OAAO;AAElB,YAAI,SAAS,EAAE,GAAG;AAChB,qBAAW;AACX,2BAAiB;AAAA,QACnB;AAAA,MACF;AAEA,eAAS,kBAAkB,UAAU;AACnC,eACE,WACA,MACA,SAAS,QAAQ,EAAE,eACnB,MACA,SAAS,QAAQ,EAAE,YACnB,MACA,SAAS,QAAQ,EAAE,MACnB,MACA,SAAS,QAAQ,EAAE,WACnB,MACA,SAAS,QAAQ,EAAE,sBACnB,MACA,SAAS,QAAQ,EAAE,aACnB,MACA,SAAS,QAAQ,EAAE,aACnB,MACA,SAAS,QAAQ,EAAE,0BACnB,MACA,SAAS,QAAQ,EAAE,iBACnB,MACA,SAAS,QAAQ,EAAE,cACnB,MACA,SAAS,QAAQ,EAAE,YACnB,MACA,SAAS,QAAQ,EAAE,cACnB,MACA,SAAS,QAAQ,EAAE,aACnB,MACA,SAAS,QAAQ,EAAE,yBACnB,MACA,SAAS,QAAQ,EAAE;AAAA,MAEvB;AAEA,eAAS,SAAS,OAAO;AACvB,eAAO,OAAO,UAAU;AAAA,MAC1B;AAEA,eAAS,YAAY,QAAQ,SAAS;AACpC,iBAAS,YAAY;AACnB,mBAAS,SAAS,OAAO;AACvB,gBAAI,aAAa,SAAS,QAAQ,EAAE,KAAK;AACzC,gBAAI,aAAa,cAAc,MAAM,YAAY;AAC/C,qBAAO,MAAM,KAAK,IAAI,SAAS,UAAU,IACrC,aAAa,OACb;AACJ,cAAAA,KAAI,UAAU,SAAS,QAAQ,QAAQ,OAAO,MAAM,KAAK,CAAC;AAAA,YAC5D;AAAA,UACF;AAEA,mBAAS,UAAU,WAAW;AAC5B,gBACE,SAAS,QAAQ,EAAE,QAAQ,SAAS,IACpC,SAAS,QAAQ,EAAE,QAAQ,SAAS,GACpC;AACA,oBAAM,IAAI;AAAA,gBACR,kBACE,YACA,iCACA;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AAEA,oBAAU,QAAQ;AAClB,oBAAU,OAAO;AAEjB,mBAAS,WAAW;AACpB,mBAAS,WAAW;AACpB,mBAAS,UAAU;AACnB,mBAAS,UAAU;AAAA,QACrB;AAEA,iBAAS,QAAQ;AACf,cAAI,KAAM,WAAW,QAAQ,MAAO,SAAS,KAAK;AAClD,cAAI,SAAS,SAAS,eAAe,EAAE,GAAG;AACxC,kBAAM;AAAA,UACR;AACA,iBAAO;AAAA,QACT;AAEA,iBAAS,YAAYE,WAAU;AAC7B,cAAI,OAAOA,cAAa,UAAU;AAChC,kBAAM,IAAI,UAAU,wCAAwC;AAAA,UAC9D;AAEA,cAAI,OAAOA,WAAU;AAEnB,mBAAO,KAAKA,YAAW,MAAM;AAC7B,0BAAc,WAAW,CAAC,GAAG;AAC7B,YAAAF;AAAA,cACEE;AAAA,cACA,8BAA8BA,YAAW,OAAO,OAAO,MAAM;AAAA,YAC/D;AAAA,UACF;AAEA,iBAAOA;AAAA,QACT;AAEA,iBAAS,eAAe;AACtB,UAAAF;AAAA,YACE;AAAA,YACA,uBACG,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,YACtC,YACA,cACJ,UACA;AAAA,UACJ;AACA,iBAAO,MAAM,WACX,WAAW,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,aAChD,WACA;AACN,kBAAQ,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,WAAW;AAAA,YAC1D,KAAK,QAAQ;AACX;AAAA,YACF;AAAA,YAEA,KAAK,MAAM;AACT,qBAAO,YAAY;AACnB;AAAA,YACF;AAAA,YAEA,KAAK,OAAO;AACV,qBAAO,YAAY;AACnB;AAAA,YACF;AAAA,YAEA,SAAS;AACP,qBAAO,YAAY,SAAS,QAAQ,IAChC,SAAS,QAAQ,EAAE,YACnB;AAAA,YACN;AAAA,UACF;AAAA,QACF;AAKA,iBAAS,wBAAwB;AAC/B,cACE,aACE,QAAQ,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,eACnD,SAAS,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,aAClD;AACA,qBAAS,QAAQ,EAAE,eAAe,SAAS,QAAQ,EAAE;AACrD,qBAAS,QAAQ,EAAE,aACjB,KAAK,SAAS,QAAQ,EAAE,aAAa;AAAA,UACzC;AAAA,QACF;AAEA,iBAAS,aAAa;AAIpB,cAAI,WAAW,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAE,UACtD,qBACE,SAAS,QAAQ,KACjB,SAAS,QAAQ,EAAE,2BAA2B;AAElD,cAAI,CAAC,YAAY,oBAAoB;AACnC,wBAAY,EAAE,QAAgB,QAAQ,GAAG,OAAO,GAAG,MAAM,OAAO,CAAC;AAAA,UACnE;AAAA,QACF;AAEA,iBAAS,oBAAoB;AAC3B,cAAI,SAAS,QAAQ,GAAG;AACtB,qBAAS,QAAQ,EAAE,OAAO,gBAAgB;AAAA,cACxC,OAAO,YAAY,KAAK,MAAM,SAAS,QAAQ,EAAE,MAAM;AAAA,cAEvD,iBAAiB,sBAAsB;AAAA,gBACrC;AAAA,gBACA,SAAS,QAAQ,EAAE;AAAA,cACrB;AAAA,cAEA,QAAQ,QAAQ;AAAA,gBACd;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,SAAS,QAAQ,EAAE;AAAA,cACrB;AAAA,cAEA,cAAc,SAAU,QAAQ;AAC9B;AAAA,kBACE;AAAA,kBACA,kBAAkB;AAAA,kBAClB,SAAS,QAAQ,EAAE;AAAA,kBACnB;AAAA,gBACF;AAAA,cACF;AAAA,cAEA,aAAa,SAAU,SAAS;AAC9B,0BAAU,KAAK,UAAU,OAAO;AAChC;AAAA,kBACE;AAAA,kBACA,aAAa;AAAA,kBACb,SAAS,QAAQ,EAAE;AAAA,kBACnB;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAKA,iBAAS,KAAK,KAAK;AACjB,mBAAS,eAAe;AACtB,oBAAQ,iBAAiB,KAAK,QAAQL,YAAW,IAAI;AACrD,uBAAW;AAAA,UACb;AAEA,mBAAS,sBAAsBW,mBAAkB;AAC/C,gBAAI,CAAC,OAAO,YAAY;AACtB;AAAA,YACF;AAEA,gBAAI,kBAAkB,IAAIA,kBAAiB,SAAU,WAAW;AAC9D,wBAAU,QAAQ,SAAU,UAAU;AACpC,oBAAI,eAAe,MAAM,UAAU,MAAM,KAAK,SAAS,YAAY;AACnE,6BAAa,QAAQ,SAAU,aAAa;AAC1C,sBAAI,gBAAgB,QAAQ;AAC1B,gCAAY,MAAM;AAAA,kBACpB;AAAA,gBACF,CAAC;AAAA,cACH,CAAC;AAAA,YACH,CAAC;AACD,4BAAgB,QAAQ,OAAO,YAAY;AAAA,cACzC,WAAW;AAAA,YACb,CAAC;AAAA,UACH;AAEA,cAAIA,oBAAmB,oBAAoB;AAC3C,cAAIA,mBAAkB;AACpB,kCAAsBA,iBAAgB;AAAA,UACxC;AAEA,UAAAR,kBAAiB,QAAQ,QAAQ,YAAY;AAC7C,kBAAQ,QAAQ,KAAK,QAAQH,YAAW,IAAI;AAAA,QAC9C;AAEA,iBAAS,aAAaY,UAAS;AAC7B,cAAI,aAAa,OAAOA,UAAS;AAC/B,kBAAM,IAAI,UAAU,0BAA0B;AAAA,UAChD;AAAA,QACF;AAEA,iBAAS,YAAYA,UAAS;AAE5B,mBAAS,UAAU,UAAU;AAC3B,gBAAI,OAAO,UAAU,eAAe,KAAK,UAAU,MAAM,GAAG;AAC1D,uBAAS,QAAQ,EAAE,MAAM,IAAI,OAAO,UAAU,eAAe;AAAA,gBAC3DA;AAAA,gBACA;AAAA,cACF,IACIA,SAAQ,MAAM,IACd,SAAS,MAAM;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,gBAAgB,YAAY;AACnC,iBAAO,OAAO,cACZ,SAAS,WAAW,MAAM,sCAAsC,IAC9D,MACA;AAAA,QACN;AAEA,iBAAS,UAAU,KAAK;AACtB,cAAI,YAAY,IAAI,MAAM,UAAU;AAEpC,cAAI,UAAU,WAAW,GAAG;AAC1B,gBAAI,OACF,OAAO,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,UAAU,CAAC,EAAE,MAAM,CAAC;AACpE,iBAAK,IAAI,IAAI,KAAK,GAAG;AACrB,mBAAO,KAAK,GAAG;AACf;AAAA,cACE;AAAA,cACA,kBACE,MACA,yBACA,OACA;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,eAAeA,UAAS;AAC/B,UAAAA,WAAUA,YAAW,CAAC;AAEtB,mBAAS,QAAQ,IAAI,uBAAO,OAAO,IAAI;AACvC,mBAAS,QAAQ,EAAE,SAAS;AAC5B,mBAAS,QAAQ,EAAE,WAAW;AAC9B,mBAAS,QAAQ,EAAE,aACjB,OAAO,OAAO,OAAO,IAAI,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAE1D,uBAAaA,QAAO;AACpB,iBAAO,KAAKA,QAAO,EAAE,QAAQ,WAAWA,QAAO;AAC/C,sBAAYA,QAAO;AAEnB,cAAI,SAAS,QAAQ,GAAG;AACtB,qBAAS,QAAQ,EAAE,eACjB,SAAS,SAAS,QAAQ,EAAE,cACxB,gBAAgB,SAAS,QAAQ,EAAE,UAAU,IAC7C;AAAA,UACR;AAAA,QACF;AAEA,iBAAS,WAAW;AAClB,iBAAO,YAAY,YAAY,mBAAmB;AAAA,QACpD;AAEA,YAAI,WAAW,YAAY,OAAO,EAAE;AAEpC,YAAI,SAAS,GAAG;AACd,eAAK,UAAU,gCAAgC;AAAA,QACjD,OAAO;AACL,yBAAe,OAAO;AACtB,uBAAa;AACb,oBAAU;AACV,gCAAsB;AACtB,eAAK,kBAAkB,QAAQ,CAAC;AAChC,4BAAkB;AAAA,QACpB;AAAA,MACF;AAEA,eAAS,SAAS,IAAI,MAAM;AAC1B,YAAI,SAASV,QAAO;AAClB,UAAAA,SAAQ,WAAW,WAAY;AAC7B,YAAAA,SAAQ;AACR,eAAG;AAAA,UACL,GAAG,IAAI;AAAA,QACT;AAAA,MACF;AAEA,UAAI,aAAa,CAAC;AAClB,eAAS,oBAAoB,IAAI,MAAM,SAAS;AAC9C,YAAI,CAAC,WAAW,OAAO,GAAG;AACxB,qBAAW,OAAO,IAAI,WAAW,WAAY;AAC3C,uBAAW,OAAO,IAAI;AACtB,eAAG;AAAA,UACL,GAAG,IAAI;AAAA,QACT;AAAA,MACF;AAKA,eAAS,mBAAmB;AAC1B,iBAAS,eAAe;AACtB,mBAAS,YAAY,WAAW;AAC9B,qBAAS,aAAa,WAAW;AAC/B,qBACE,WACC,SAAS,SAAS,KAAK,SAAS,SAAS,EAAE,OAAO,MAAM,SAAS;AAAA,YAEtE;AAEA,qBAASW,WAAUT,KAAI;AACrB,qBAAO,SAASA,IAAG;AAAA,YACrB;AAEA,gBACE,SAAS,SAAS,KAClBS,WAAU,SAAS,SAAS,EAAE,MAAM,MACnC,aAAa,QAAQ,KAAK,aAAa,OAAO,IAC/C;AACA;AAAA,gBACE;AAAA,gBACA;AAAA,gBACA,SAAS,SAAS,EAAE;AAAA,gBACpB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,KAAK,QAAQ,EAAE,QAAQ,SAAU,KAAK;AAC3C,wBAAY,GAAG;AAAA,UACjB,CAAC;AAAA,QACH;AAEA,iBAAS,iBAAiB,WAAW;AACnC,UAAAR;AAAA,YACE;AAAA,YACA,wBAAwB,UAAU,CAAC,EAAE,SAAS,MAAM,UAAU,CAAC,EAAE;AAAA,UACnE;AACA,mBAAS,cAAc,EAAE;AAAA,QAC3B;AAEA,iBAAS,yBAAyB;AAChC,cAAI,SAAS,SAAS,cAAc,MAAM,GACxC,SAAS;AAAA,YACP,YAAY;AAAA,YACZ,mBAAmB;AAAA,YACnB,eAAe;AAAA,YACf,uBAAuB;AAAA,YACvB,WAAW;AAAA,YACX,SAAS;AAAA,UACX,GACA,WAAW,IAAIM,kBAAiB,gBAAgB;AAElD,mBAAS,QAAQ,QAAQ,MAAM;AAAA,QACjC;AAEA,YAAIA,oBAAmB,oBAAoB;AAC3C,YAAIA,mBAAkB;AACpB,iCAAuB;AAAA,QACzB;AAAA,MACF;AAEA,eAAS,cAAcL,QAAO;AAC5B,iBAAS,SAAS;AAChB,yBAAe,YAAYA,QAAO,QAAQ;AAAA,QAC5C;AAEA,QAAAD,KAAI,UAAU,oBAAoBC,MAAK;AACvC,iBAAS,QAAQ,EAAE;AAAA,MACrB;AAIA,eAAS,aAAa;AACpB,iBAAS,SAAS;AAChB,yBAAe,eAAe,QAAQ;AAAA,QACxC;AAEA,YAAI,aAAa,SAAS,iBAAiB;AACzC,UAAAD,KAAI,YAAY,kCAAkC;AAClD,mBAAS,QAAQ,EAAE;AAAA,QACrB;AAAA,MACF;AAEA,eAAS,eAAe,WAAWC,QAAO;AACxC,iBAAS,sBAAsB,UAAU;AACvC,iBACE,SAAS,QAAQ,KACjB,aAAa,SAAS,QAAQ,EAAE,cAChC,SAAS,QAAQ,EAAE,cACnB,CAAC,SAAS,QAAQ,EAAE;AAAA,QAExB;AAEA,eAAO,KAAK,QAAQ,EAAE,QAAQ,SAAU,UAAU;AAChD,cAAI,sBAAsB,QAAQ,GAAG;AACnC,oBAAQ,WAAWA,QAAO,SAAS,QAAQ,EAAE,QAAQ,QAAQ;AAAA,UAC/D;AAAA,QACF,CAAC;AAAA,MACH;AAEA,eAAS,sBAAsB;AAC7B,QAAAH,kBAAiB,QAAQ,WAAW,cAAc;AAElD,QAAAA,kBAAiB,QAAQ,UAAU,WAAY;AAC7C,wBAAc,QAAQ;AAAA,QACxB,CAAC;AAED,QAAAA,kBAAiB,UAAU,oBAAoB,UAAU;AAEzD,QAAAA,kBAAiB,UAAU,4BAA4B,UAAU;AAAA,MACnE;AAEA,eAAS,UAAU;AACjB,iBAAS,KAAK,SAAS,SAAS;AAC9B,mBAAS,UAAU;AACjB,gBAAI,CAAC,QAAQ,SAAS;AACpB,oBAAM,IAAI,UAAU,mCAAmC;AAAA,YACzD,WAAW,aAAa,QAAQ,QAAQ,YAAY,GAAG;AACrD,oBAAM,IAAI;AAAA,gBACR,mCAAmC,QAAQ,UAAU;AAAA,cACvD;AAAA,YACF;AAAA,UACF;AAEA,cAAI,SAAS;AACX,oBAAQ;AACR,wBAAY,SAAS,OAAO;AAC5B,oBAAQ,KAAK,OAAO;AAAA,UACtB;AAAA,QACF;AAEA,iBAAS,sBAAsB,SAAS;AACtC,cAAI,WAAW,QAAQ,qBAAqB;AAC1C;AAAA,cACE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI;AAEJ,mCAA2B;AAC3B,4BAAoB;AAEpB,eAAO,SAAS,cAAc,SAAS,QAAQ;AAC7C,oBAAU,CAAC;AAEX,gCAAsB,OAAO;AAE7B,kBAAQ,OAAO,QAAQ;AAAA,YACrB,KAAK;AAAA,YACL,KAAK,UAAU;AACb,oBAAM,UAAU,QAAQ;AAAA,gBACtB,SAAS,iBAAiB,UAAU,QAAQ;AAAA,gBAC5C,KAAK,KAAKH,YAAW,OAAO;AAAA,cAC9B;AACA;AAAA,YACF;AAAA,YAEA,KAAK,UAAU;AACb,mBAAK,SAAS,MAAM;AACpB;AAAA,YACF;AAAA,YAEA,SAAS;AACP,oBAAM,IAAI,UAAU,2BAA2B,OAAO,SAAS,GAAG;AAAA,YACpE;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,eAAS,yBAAyBc,IAAG;AACnC,YAAI,CAACA,GAAE,IAAI;AACT,eAAK,IAAI,mDAAmD;AAAA,QAC9D,WAAW,CAACA,GAAE,GAAG,cAAc;AAC7B,UAAAA,GAAE,GAAG,eAAe,SAAS,eAAe,SAAS;AACnD,qBAAS,KAAK,OAAO,SAAS;AAC5B,0BAAY,SAAS,OAAO;AAAA,YAC9B;AAEA,mBAAO,KAAK,OAAO,QAAQ,EAAE,KAAK,IAAI,EAAE,IAAI;AAAA,UAC9C;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAAO,WAAWd,YAAW;AAC/B,iCAAyB,OAAO,MAAM;AAAA,MACxC;AAEA,UAAI,OAAO,WAAW,cAAc,OAAO,KAAK;AAC9C,eAAO,CAAC,GAAG,OAAO;AAAA,MACpB,WAAW,OAAO,WAAW,YAAY,OAAO,OAAO,YAAY,UAAU;AAE3E,eAAO,UAAU,QAAQ;AAAA,MAC3B;AACA,aAAO,eAAe,OAAO,gBAAgB,QAAQ;AAAA,IACvD,GAAG;AAAA;AAAA;;;ACz7CH;AAAA;AAAA,MAAC,SAAS,GAAE,GAAE;AAAC,kBAAU,OAAO,WAAS,eAAa,OAAO,SAAO,EAAE,OAAO,IAAE,cAAY,OAAO,UAAQ,OAAO,MAAI,OAAO,SAAQ,CAAC,SAAS,GAAE,CAAC,IAAE,GAAG,IAAE,eAAa,OAAO,aAAW,aAAW,KAAG,MAAM,QAAM,CAAC,CAAC;AAAA,IAAC,GAAE,UAAM,SAAS,GAAE;AAAC;AAAa,UAAI,IAAE,eAAa,OAAO,OAAK,OAAK;AAAO,YAAM,IAAE,eAAa,OAAO,WAAU,IAAE,KAAG,eAAa,OAAO,kBAAiB,IAAE,EAAE,eAAa,OAAO,UAAQ,eAAa,OAAO,WAAS,CAAC,QAAQ,YAAU,CAAC,QAAQ,SAAS,OAAM,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,CAAC,CAAC,GAAE,IAAE,CAAAe,OAAGA;AAAE,eAAS,EAAEA,IAAEC,KAAE,GAAE;AAAC,YAAG,EAAE,KAAG;AAAC,iBAAM,cAAY,OAAO,YAAQ,QAAQ,QAAQA,GAAE,UAAQD,EAAC,CAAC,CAAC,IAAE;AAAA;AAAA,YAAiCA;AAAA,YAAG,KAAKC,EAAC;AAAA,QAAC,SAAOA,IAAE;AAAC,kBAAQ,KAAK,iBAAiBD,EAAC,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,IAAE,EAAE;AAAM,YAAM,IAAE,CAAAA,OAAG,IAAEA;AAAE,UAAG,CAAC,EAAE,OAAM;AAAC,cAAMA,KAAE,EAAE,SAAQ,CAAAA,OAAGA,GAAE,GAAEC,KAAE,EAAE,UAAS,CAAAD,OAAGA,GAAE,GAAEE,KAAE,CAACC,IAAE,EAAC,SAAQC,GAAC,IAAE,CAAC,MAAI,IAAI,SAAS,OAAMC,IAAEC,OAAI;AAAC,cAAG,EAAC,MAAKC,IAAE,UAASC,IAAE,UAASC,IAAE,UAASC,IAAE,QAAOC,GAAC,IAAE,IAAI,IAAIR,EAAC;AAAE,gBAAMS,KAAE,EAAC,QAAO,OAAM,UAASJ,IAAE,MAAK,UAAUC,EAAC,IAAEE,IAAE,SAAQP,GAAC;AAAE,iBAAKG,OAAIK,GAAE,OAAK,OAAOL,EAAC;AAAG,gBAAMM,MAAG,aAAWH,KAAE,MAAMT,KAAE,MAAMD,IAAG,QAAQY,KAAG,CAAAZ,OAAG;AAAC,gBAAG,QAAMA,GAAE,cAAY,QAAMA,GAAE,YAAW;AAAC,kBAAIC,KAAE,IAAI,IAAID,GAAE,QAAQ,UAASG,EAAC,EAAE,SAAS;AAAE,qBAAOD,GAAED,IAAE,EAAC,SAAQG,GAAC,CAAC,EAAE,KAAKC,EAAC,EAAE,MAAMC,EAAC;AAAA,YAAC;AAAC,YAAAD,GAAE,EAAC,QAAOL,GAAE,YAAW,aAAY,MAAI,IAAI,SAAS,CAAAC,OAAG;AAAC,kBAAIC,KAAE,CAAC;AAAE,cAAAF,GAAE,GAAG,SAAQ,CAAAA,OAAGE,GAAE,KAAKF,EAAC,EAAE,GAAEA,GAAE,GAAG,QAAO,MAAIC,GAAE,OAAO,OAAOC,EAAC,CAAC,EAAE;AAAA,YAAC,EAAE,EAAC,CAAC;AAAA,UAAC,EAAE;AAAE,UAAAW,GAAE,GAAG,SAAQP,EAAC,GAAEO,GAAE,IAAI;AAAA,QAAC,EAAE;AAAE,UAAEX,EAAC;AAAA,MAAC;AAAC,eAAS,EAAEF,IAAEC,IAAEC,IAAE;AAAC,eAAOD,MAAKD,KAAE,OAAO,eAAeA,IAAEC,IAAE,EAAC,OAAMC,IAAE,YAAW,MAAG,cAAa,MAAG,UAAS,KAAE,CAAC,IAAEF,GAAEC,EAAC,IAAEC,IAAEF;AAAA,MAAC;AAAC,YAAM,IAAE,CAAAA,OAAG,EAAEA,EAAC,IAAE,SAAOA,IAAE,IAAE,CAAAA,OAAG,WAASA;AAAE,eAAS,EAAEA,IAAE;AAAC,eAAO,WAASA,OAAIA,cAAa,MAAI,MAAIA,GAAE,OAAK,MAAI,OAAO,OAAOA,EAAC,EAAE,OAAO,CAAC,EAAE;AAAA,MAAO;AAAC,eAAS,EAAEA,IAAE;AAAC,YAAIC,KAAE,IAAI,MAAMD,EAAC;AAAE,cAAM,OAAOC,GAAE,OAAMA;AAAA,MAAC;AAAC,eAAS,EAAED,IAAE;AAAC,eAAM,QAAMA,MAAE,SAASA,IAAE;AAAC,iBAAKA,GAAE,SAAS,IAAI,IAAG,CAAAA,KAAEA,GAAE,MAAM,GAAE,EAAE;AAAE,iBAAOA;AAAA,QAAC,GAAEA,EAAC,EAAE,KAAK,KAAG,SAAOA;AAAA,MAAC;AAAC,eAAS,EAAEA,IAAE;AAAC,YAAIC,MAAE,SAASD,IAAE;AAAC,cAAIC,KAAE;AAAE,iBAAOD,GAAE,KAAK,YAAUC,MAAG,OAAMD,GAAE,KAAK,YAAUC,MAAG,OAAMD,GAAE,cAAYC,MAAG,OAAMD,GAAE,gBAAcC,MAAG,OAAMD,GAAE,IAAI,YAAUC,MAAG,MAAKD,GAAE,QAAQ,YAAUC,MAAG,MAAKD,GAAE,KAAK,YAAUC,MAAG,OAAMA,KAAE;AAAA,QAAI,GAAED,EAAC;AAAE,eAAOA,GAAE,KAAK,YAAUC,MAAG,KAAID,GAAE,IAAI,YAAUC,MAAG,MAAKD,GAAE,KAAK,YAAUC,MAAG,OAAMD,GAAE,IAAI,YAAUC,MAAG,MAAKA;AAAA,MAAC;AAAC,YAAM,IAAE,CAAAD,OAAG,OAAO,aAAa,MAAM,MAAKA,EAAC,GAAE,IAAE,eAAa,OAAO,cAAY,IAAI,YAAY,OAAO,IAAE;AAAO,eAAS,EAAEA,IAAE;AAAC,eAAO,IAAE,EAAE,OAAOA,EAAC,IAAE,IAAE,OAAO,KAAKA,EAAC,EAAE,SAAS,MAAM,IAAE,mBAAmB,OAAO,EAAEA,EAAC,CAAC,CAAC;AAAA,MAAC;AAAA,MAAC,MAAM,EAAC;AAAA,QAAC,OAAO,KAAKA,IAAEC,IAAE;AAAC,iBAAOD,cAAa,QAAMA,GAAE,OAAKC,KAAED,KAAE,IAAI,EAAEA,IAAE,QAAO,QAAOC,EAAC;AAAA,QAAC;AAAA,QAAC,YAAYD,IAAEC,KAAE,GAAEC,IAAEC,IAAE;AAAC,cAAG,aAAW,OAAOA,OAAI,KAAK,KAAGA,KAAG,MAAM,QAAQH,EAAC,MAAIA,KAAE,IAAI,WAAWA,EAAC,IAAG,MAAIA,GAAE,MAAK,aAAW,GAAE,KAAK,aAAW;AAAA,mBAAUA,cAAa,aAAY;AAAC,uBAASE,OAAIA,KAAEF,GAAE,aAAWC;AAAG,gBAAIE,KAAE,IAAI,SAASH,IAAEC,IAAEC,EAAC;AAAE,iBAAK,cAAcC,EAAC;AAAA,UAAC,WAASH,cAAa,cAAYA,cAAa,YAAUA,cAAa,GAAE;AAAC,uBAASE,OAAIA,KAAEF,GAAE,aAAWC,MAAIA,MAAGD,GAAE,cAAYE,KAAEF,GAAE,aAAWA,GAAE,cAAY,EAAE,0DAA0D;AAAE,gBAAIG,KAAE,IAAI,SAASH,GAAE,QAAOC,IAAEC,EAAC;AAAE,iBAAK,cAAcC,EAAC;AAAA,UAAC,WAAS,YAAU,OAAOH,IAAE;AAAC,gBAAIC,KAAE,IAAI,SAAS,IAAI,YAAYD,EAAC,CAAC;AAAE,iBAAK,cAAcC,EAAC;AAAA,UAAC,MAAM,GAAE,4CAA0CD,EAAC;AAAA,QAAC;AAAA,QAAC,iBAAiBA,IAAE;AAAC,eAAK,cAAc,IAAI,SAASA,EAAC,CAAC;AAAA,QAAC;AAAA,QAAC,YAAYA,IAAE;AAAC,eAAK,cAAc,IAAI,SAASA,GAAE,QAAOA,GAAE,YAAWA,GAAE,UAAU,CAAC;AAAA,QAAC;AAAA,QAAC,cAAcA,IAAE;AAAC,eAAK,WAASA,IAAE,KAAK,SAAOA,GAAE,QAAO,KAAK,aAAWA,GAAE,YAAW,KAAK,aAAWA,GAAE;AAAA,QAAU;AAAA,QAAC,aAAaA,IAAE;AAAC,iBAAO,KAAK,aAAWA;AAAA,QAAC;AAAA,QAAC,IAAIA,IAAEC,IAAEC,KAAE,GAAE;AAAC,iBAAOF,cAAa,YAAUA,cAAa,IAAEA,KAAE,IAAI,WAAWA,GAAE,QAAOA,GAAE,YAAWA,GAAE,UAAU,IAAEA,cAAa,gBAAcA,KAAE,IAAI,WAAWA,EAAC,IAAGA,cAAa,cAAY,EAAE,0CAA0C,GAAE,KAAK,QAAQ,EAAE,IAAIA,IAAEC,EAAC,GAAE,IAAIC,GAAE,MAAKD,IAAED,GAAE,UAAU;AAAA,QAAC;AAAA,QAAC,SAASA,IAAEC,IAAE;AAAC,iBAAOA,KAAEA,MAAG,KAAK,aAAaD,EAAC,GAAE,IAAI,EAAE,MAAKA,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAS;AAAC,iBAAO,IAAI,WAAW,KAAK,QAAO,KAAK,YAAW,KAAK,UAAU;AAAA,QAAC;AAAA,QAAC,cAAcD,IAAEC,IAAE;AAAC,iBAAO,IAAI,WAAW,KAAK,QAAO,KAAK,aAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAUD,KAAE,GAAEC,KAAE,KAAK,YAAW;AAAC,iBAAO,EAAE,KAAK,cAAcD,IAAEC,EAAC,CAAC;AAAA,QAAC;AAAA,QAAC,gBAAgBD,KAAE,GAAEC,KAAE,KAAK,YAAW;AAAC,cAAIC,KAAE,KAAK,cAAcF,IAAEC,EAAC;AAAE,iBAAO,EAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,iBAAiBF,KAAE,GAAEC,KAAE,KAAK,YAAW;AAAC,gBAAMC,KAAE,CAAC;AAAE,mBAAQC,KAAE,GAAEA,KAAEF,MAAGD,KAAEG,KAAE,KAAK,YAAWA,MAAG,EAAE,CAAAD,GAAE,KAAK,KAAK,UAAUF,KAAEG,EAAC,CAAC;AAAE,iBAAO,EAAED,EAAC;AAAA,QAAC;AAAA,QAAC,QAAQF,IAAE;AAAC,iBAAO,KAAK,SAAS,QAAQA,EAAC;AAAA,QAAC;AAAA,QAAC,SAASA,IAAE;AAAC,iBAAO,KAAK,SAAS,SAASA,EAAC;AAAA,QAAC;AAAA,QAAC,SAASA,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,SAASD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,SAASD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,SAASD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAUD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,UAAUD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAUD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,UAAUD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,WAAWD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,WAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,WAAWD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,WAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,SAASD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,WAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAUD,IAAEC,KAAE,KAAK,IAAG;AAAC,iBAAO,KAAK,SAAS,WAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,aAAaD,IAAEC,IAAEC,IAAE;AAAC,kBAAOD,IAAE;AAAA,YAAC,KAAK;AAAE,qBAAO,KAAK,SAASD,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAO,KAAK,UAAUF,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAO,KAAK,UAAUF,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAO,KAAK,aAAW,KAAK,UAAUF,IAAEE,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,QAAQF,IAAEC,IAAEC,IAAE;AAAC,kBAAOD,IAAE;AAAA,YAAC,KAAK;AAAE,qBAAO,KAAK,SAASD,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAO,KAAK,UAAUF,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAO,KAAK,UAAUF,IAAEE,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAO,KAAK,aAAW,KAAK,UAAUF,IAAEE,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,SAASF,IAAE;AAAC,iBAAO,KAAK,SAAS,SAASA,IAAE,KAAK,YAAY,IAAI;AAAA,QAAC;AAAA,QAAC,cAAa;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,EAAEA,IAAEC,IAAE;AAAC,UAAE,GAAGD,EAAC,KAAKC,EAAC,kDAAkD;AAAA,MAAC;AAAA,MAAC,MAAM,UAAU,IAAG;AAAA,QAAC,YAAYD,IAAE;AAAC,gBAAM,GAAE,KAAK,OAAKA;AAAA,QAAC;AAAA,QAAC,IAAIA,IAAEC,IAAE;AAAC,iBAAO,KAAK,IAAID,EAAC,KAAG,EAAE,KAAK,MAAKA,EAAC,GAAEC,OAAID,MAAKC,OAAG,SAASD,IAAEC,IAAE;AAAC,cAAE,WAAWD,EAAC,KAAKC,EAAC,IAAI;AAAA,UAAC,GAAE,KAAK,MAAKD,EAAC,GAAEC,GAAED,EAAC,EAAE,WAAS,EAAE,KAAK,MAAKA,EAAC,IAAG,MAAM,IAAIA,EAAC;AAAA,QAAC;AAAA,QAAC,UAAS;AAAC,iBAAO,MAAM,KAAK,KAAK,KAAK,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,IAAE,IAAI,EAAE,aAAa,GAAE,IAAE,IAAI,EAAE,gBAAgB,GAAE,IAAE,IAAI,EAAE,aAAa;AAAE,YAAM,IAAE;AAAyB,eAAS,EAAEA,IAAEC,IAAE;AAAC,eAAM,YAAU,OAAOD,KAAE,EAAEA,IAAEC,EAAC,IAAE,KAAG,CAAC,KAAGD,cAAa,mBAAiB,EAAEA,GAAE,KAAIC,EAAC,IAAED,cAAa,cAAYA,cAAa,eAAaA,cAAa,WAAS,IAAI,EAAEA,EAAC,IAAE,KAAGA,cAAa,OAAK,EAAEA,IAAEC,IAAE,QAAO,CAAC,IAAE,KAAK,EAAE,CAAC;AAAA,MAAC;AAAC,eAAS,EAAED,IAAEC,IAAE;AAAC,gBAAOE,KAAEH,IAAG,WAAW,OAAO,KAAGG,GAAE,SAAO,MAAI,EAAEH,IAAEC,IAAE,QAAQ,IAAE,KAAGD,GAAE,SAAS,KAAK,IAAE,EAAEA,IAAEC,IAAE,OAAM,CAAC,IAAE,IAAE,EAAED,IAAEC,IAAE,IAAI,IAAE,IAAE,EAAED,IAAEC,IAAE,OAAM,CAAC,IAAE,KAAK,EAAE,CAAC;AAAE,YAAIE;AAAA,MAAC;AAAC,qBAAe,EAAEH,IAAEC,IAAEC,IAAEC,IAAE;AAAC,eAAO,EAAE,IAAID,EAAC,IAAE,EAAEF,IAAEC,IAAEC,EAAC,IAAEC,MAAE,eAAeH,IAAEC,IAAE;AAAC,cAAIC,KAAE,MAAMD,GAAED,EAAC;AAAE,iBAAO,IAAI,EAAEE,EAAC;AAAA,QAAC,GAAEF,IAAEG,EAAC,IAAE,KAAK,EAAE,UAAUD,EAAC,gBAAgB;AAAA,MAAC;AAAC,qBAAe,EAAEF,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAE,KAAI,EAAE,IAAID,EAAC,GAAGF,IAAEC,EAAC;AAAE,eAAO,MAAME,GAAE,KAAK,GAAEA;AAAA,MAAC;AAAC,YAAM,IAAE,CAAAH,OAAG,EAAEA,EAAC,EAAE,MAAM,CAAAA,OAAGA,GAAE,YAAY,EAAE,GAAE,IAAE,CAAAA,OAAG,IAAI,SAAS,CAACC,IAAEC,OAAI;AAAC,YAAIC,KAAE,IAAI;AAAW,QAAAA,GAAE,YAAU,MAAIF,GAAEE,GAAE,UAAQ,IAAI,aAAW,GAAEA,GAAE,UAAQD,IAAEC,GAAE,kBAAkBH,EAAC;AAAA,MAAC,EAAE;AAAA,MAAE,MAAM,UAAU,IAAG;AAAA,QAAC,IAAI,UAAS;AAAC,iBAAO,KAAK,YAAU,KAAK,UAAQ,MAAM,KAAK,KAAK,KAAK,CAAC,IAAG,KAAK;AAAA,QAAO;AAAA,QAAC,IAAI,YAAW;AAAC,iBAAO,KAAK,cAAY,KAAK,YAAU,MAAM,KAAK,KAAK,OAAO,CAAC,IAAG,KAAK;AAAA,QAAS;AAAA,MAAC;AAAC,eAAS,EAAEA,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAE,IAAI;AAAE,iBAAO,CAACH,IAAEC,EAAC,KAAIC,GAAE,CAAAC,GAAE,IAAIH,IAAEC,EAAC;AAAE,YAAG,MAAM,QAAQA,EAAC,EAAE,UAAQC,MAAKD,GAAE,CAAAD,GAAE,IAAIE,IAAEC,EAAC;AAAA,YAAO,CAAAH,GAAE,IAAIC,IAAEE,EAAC;AAAE,eAAOA;AAAA,MAAC;AAAC,eAAS,EAAEH,IAAEC,IAAEC,IAAE;AAAC,YAAIC,IAAEC,KAAEJ,GAAE,IAAIC,EAAC;AAAE,aAAIE,MAAKD,GAAE,CAAAE,GAAE,IAAID,GAAE,CAAC,GAAEA,GAAE,CAAC,CAAC;AAAA,MAAC;AAAC,YAAM,IAAE,oBAAI,OAAI,IAAE,oBAAI,OAAI,IAAE,oBAAI,OAAI,IAAE,OAAM,IAAE,OAAM,IAAE,KAAI,IAAE,OAAMW,KAAE,OAAM,IAAE,OAAM,IAAE,OAAM,IAAE,OAAMC,KAAE,CAAC,WAAU,kBAAiB,sBAAqB,yBAAwB,aAAY,YAAY,GAAE,IAAE,CAAC,QAAO,OAAM,OAAM,QAAO,MAAM,GAAE,IAAE,CAAC,QAAO,GAAG,CAAC,GAAE,IAAE,CAAC,QAAO,QAAO,QAAO,OAAM,SAAS,GAAE,IAAE,CAAC,GAAG,GAAE,GAAG,CAAC,GAAE,KAAG,CAAC,aAAY,aAAa,GAAE,KAAG,CAAC,iBAAgB,mBAAkB,gBAAe,cAAc,GAAE,KAAG,CAAC,GAAG,IAAG,YAAW,eAAc,cAAc;AAAA,MAAE,MAAM,GAAE;AAAA,QAAC,IAAI,YAAW;AAAC,iBAAO,KAAK,iBAAe,KAAK,mBAAiB,KAAK;AAAA,QAAY;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,QAAC,IAAI,SAAQ;AAAC,iBAAO,KAAK,WAAS,KAAK,KAAK,OAAK;AAAA,QAAC;AAAA,QAAC,YAAYf,IAAEC,IAAEC,IAAEC,IAAE;AAAC,cAAG,MAAM,GAAE,EAAE,MAAK,WAAU,KAAE,GAAE,EAAE,MAAK,QAAO,oBAAI,KAAG,GAAE,EAAE,MAAK,QAAO,oBAAI,KAAG,GAAE,EAAE,MAAK,QAAO,oBAAI,KAAG,GAAE,EAAE,MAAK,iBAAgB,KAAE,GAAE,EAAE,MAAK,mBAAkB,KAAE,GAAE,EAAE,MAAK,gBAAe,KAAE,GAAE,KAAK,MAAIH,IAAE,KAAK,UAAQC,IAAE,KAAK,QAAM,KAAK,SAAQ,KAAK,kBAAkBE,EAAC,GAAE,KAAK,gBAAc,EAAE,SAASH,EAAC,GAAE,KAAK,kBAAgB,KAAK,OAAK,EAAE,IAAIA,EAAC,IAAG,WAASE,GAAE,KAAG,MAAM,QAAQA,EAAC,EAAE,MAAK,QAAM,KAAK,UAAQ,MAAG,KAAK,iBAAeA,GAAE,SAAO,KAAG,KAAK,gBAAgBA,IAAE,KAAK,IAAI;AAAA,mBAAU,YAAU,OAAOA,IAAE;AAAC,gBAAG,KAAK,UAAQ,MAAG,KAAK,QAAM,UAAKA,GAAE,OAAM,KAAK,eAAc;AAAC,kBAAG,EAAC,MAAKF,IAAE,MAAKC,GAAC,IAAEC;AAAE,cAAAF,MAAGA,GAAE,SAAO,KAAG,KAAK,gBAAgBA,IAAE,KAAK,IAAI,GAAEC,MAAGA,GAAE,SAAO,KAAG,KAAK,gBAAgBA,IAAE,KAAK,IAAI;AAAA,YAAC;AAAC,iBAAK,kBAAkBC,EAAC;AAAA,UAAC,MAAK,UAAKA,MAAG,UAAKA,KAAE,KAAK,QAAM,KAAK,UAAQA,KAAE,EAAE,6BAA6BA,EAAC,EAAE;AAAA,QAAC;AAAA,QAAC,kBAAkBF,IAAE;AAAC,cAAIC,IAAEC;AAAE,eAAID,MAAK,GAAG,CAAAC,KAAEF,GAAEC,EAAC,GAAE,WAASC,OAAI,KAAKD,EAAC,IAAEC;AAAA,QAAE;AAAA,QAAC,gBAAgBF,IAAEC,IAAE;AAAC,cAAG,KAAK,MAAK;AAAC,gBAAIC,IAAEC,IAAE,EAAC,SAAQC,IAAE,WAAUC,GAAC,IAAE,KAAK;AAAK,iBAAIH,MAAKF,GAAE,aAAU,OAAOE,MAAGC,KAAEE,GAAE,QAAQH,EAAC,GAAE,OAAKC,OAAIA,KAAEC,GAAE,QAAQ,OAAOF,EAAC,CAAC,IAAG,OAAKC,MAAGF,GAAE,IAAI,OAAOG,GAAED,EAAC,CAAC,CAAC,KAAGF,GAAE,IAAIC,EAAC;AAAA,UAAC,MAAM,UAAQA,MAAKF,GAAE,CAAAC,GAAE,IAAIC,EAAC;AAAA,QAAC;AAAA,QAAC,kBAAiB;AAAC,WAAC,KAAK,WAAS,KAAK,KAAK,OAAK,KAAG,KAAK,UAAQ,MAAG,GAAG,KAAK,MAAK,KAAK,IAAI,KAAG,KAAK,WAAS,KAAK,KAAK,OAAK,KAAG,GAAG,KAAK,MAAK,KAAK,IAAI;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,KAAG,EAAC,MAAK,OAAG,MAAK,MAAG,KAAI,OAAG,KAAI,OAAG,MAAK,OAAG,MAAK,MAAG,MAAK,OAAG,MAAK,MAAG,KAAI,MAAG,SAAQ,OAAG,MAAK,QAAO,WAAU,OAAG,aAAY,OAAG,cAAa,OAAG,MAAK,CAAC,GAAE,MAAK,CAAC,GAAE,eAAc,MAAG,iBAAgB,MAAG,cAAa,MAAG,UAAS,MAAG,aAAY,MAAG,cAAa,MAAG,SAAQ,MAAG,gBAAe,QAAO,oBAAmB,KAAI,uBAAsB,OAAM,WAAU,OAAM,YAAW,EAAC,GAAE,KAAG,oBAAI;AAAA,MAAI,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUF,IAAE;AAAC,cAAIC,KAAE,GAAG,IAAID,EAAC;AAAE,iBAAO,WAASC,OAAIA,KAAE,IAAI,KAAKD,EAAC,GAAE,GAAG,IAAIA,IAAEC,EAAC,IAAGA;AAAA,QAAC;AAAA,QAAC,YAAYD,IAAE;AAAC,gBAAM,GAAE,SAAKA,KAAE,KAAK,cAAc,IAAE,WAASA,KAAE,KAAK,mBAAmB,IAAE,MAAM,QAAQA,EAAC,IAAE,KAAK,eAAeA,EAAC,IAAE,YAAU,OAAOA,KAAE,KAAK,gBAAgBA,EAAC,IAAE,EAAE,4BAA4BA,EAAC,EAAE,GAAE,WAAS,KAAK,mBAAiB,KAAK,iBAAe,IAAE,KAAK,wBAAsB,KAAK,qBAAoB,KAAK,gBAAc,KAAK,KAAK,UAAQ,QAAI,KAAK,wBAAwB,GAAE,KAAK,2BAA2B,GAAE,KAAK,mBAAmB;AAAA,QAAC;AAAA,QAAC,qBAAoB;AAAC,cAAIA;AAAE,eAAIA,MAAKe,GAAE,MAAKf,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,EAAE,MAAKA,EAAC,IAAE,IAAI,GAAGA,IAAE,GAAGA,EAAC,GAAE,QAAO,IAAI;AAAA,QAAC;AAAA,QAAC,gBAAe;AAAC,cAAIA;AAAE,eAAIA,MAAKe,GAAE,MAAKf,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE;AAAG,eAAIA,MAAK,EAAE,MAAKA,EAAC,IAAE,IAAI,GAAGA,IAAE,MAAG,QAAO,IAAI;AAAA,QAAC;AAAA,QAAC,eAAeA,IAAE;AAAC,cAAIC;AAAE,eAAIA,MAAKc,GAAE,MAAKd,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGA,EAAC;AAAE,eAAIA,MAAK,EAAE,MAAKA,EAAC,IAAE,IAAI,GAAGA,IAAE,OAAG,QAAO,IAAI;AAAE,eAAK,mBAAmBD,IAAE,QAAO,CAAC;AAAA,QAAC;AAAA,QAAC,gBAAgBA,IAAE;AAAC,cAAIC;AAAE,eAAIA,OAAK,EAAE,OAAK,EAAE,QAAM,EAAE,OAAM,EAAE,OAAK,EAAE,QAAM,EAAE,WAAU,OAAO,OAAO,MAAKD,EAAC,GAAEe,IAAG,MAAKd,EAAC,IAAE,GAAGD,GAAEC,EAAC,GAAE,GAAGA,EAAC,CAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGD,GAAEC,EAAC,GAAE,GAAGA,EAAC,CAAC;AAAE,eAAIA,MAAK,GAAG,MAAKA,EAAC,IAAE,GAAGD,GAAEC,EAAC,GAAE,GAAGA,EAAC,CAAC;AAAE,eAAIA,MAAK,EAAE,MAAKA,EAAC,IAAE,IAAI,GAAGA,IAAE,GAAGA,EAAC,GAAED,GAAEC,EAAC,GAAE,IAAI;AAAE,eAAIA,MAAK,EAAE,MAAKA,EAAC,IAAE,IAAI,GAAGA,IAAE,GAAGA,EAAC,GAAED,GAAEC,EAAC,GAAE,KAAK,IAAI;AAAE,eAAK,mBAAmBD,GAAE,MAAKA,GAAE,MAAK,GAAE,CAAC,GAAE,SAAKA,GAAE,OAAK,KAAK,oBAAoB,GAAE,IAAE,IAAE,UAAKA,GAAE,OAAK,KAAK,yBAAyB,GAAEA,EAAC,IAAE,MAAM,QAAQA,GAAE,IAAI,IAAE,KAAK,mBAAmBA,GAAE,MAAK,QAAO,CAAC,IAAE,YAAU,OAAOA,GAAE,QAAM,KAAK,mBAAmBA,GAAE,KAAK,MAAKA,GAAE,KAAK,MAAK,CAAC;AAAA,QAAC;AAAA,QAAC,oBAAoBA,IAAEC,IAAE;AAAC,mBAAQC,MAAKF,GAAE,MAAKE,EAAC,EAAE,UAAQD;AAAA,QAAC;AAAA,QAAC,yBAAyBD,IAAEC,IAAE;AAAC,mBAAQC,MAAKF,IAAE;AAAC,gBAAIA,KAAEC,GAAEC,EAAC;AAAE,iBAAKA,EAAC,EAAE,UAAQ,UAAKF,MAAG,WAASA;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,mBAAmBA,IAAEC,IAAEC,IAAEC,KAAED,IAAE;AAAC,cAAGF,MAAGA,GAAE,QAAO;AAAC,qBAAQA,MAAKG,GAAE,MAAKH,EAAC,EAAE,UAAQ;AAAG,gBAAIC,KAAE,GAAGD,IAAEE,EAAC;AAAE,qBAAO,CAACF,IAAEE,EAAC,KAAID,GAAE,IAAG,KAAKD,EAAC,EAAE,MAAKE,EAAC,GAAE,KAAKF,EAAC,EAAE,UAAQ;AAAA,UAAE,WAASC,MAAGA,GAAE,QAAO;AAAC,gBAAID,KAAE,GAAGC,IAAEC,EAAC;AAAE,qBAAO,CAACD,IAAEC,EAAC,KAAIF,GAAE,IAAG,KAAKC,EAAC,EAAE,MAAKC,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,0BAAyB;AAAC,cAAG,EAAC,MAAKF,IAAE,MAAKC,IAAE,KAAIC,IAAE,MAAKC,IAAE,KAAIC,GAAC,IAAE;AAAK,eAAK,YAAUH,GAAE,KAAK,IAAI,CAAC,IAAEA,GAAE,KAAK,IAAI,CAAC,GAAE,KAAK,cAAYA,GAAE,KAAK,IAAI,CAAC,IAAEA,GAAE,KAAK,IAAI,CAAC,GAAEC,GAAE,WAASF,GAAE,KAAK,IAAI,CAAC,GAAEG,GAAE,WAASH,GAAE,KAAK,IAAI,CAAC,GAAEI,GAAE,WAASJ,GAAE,KAAK,IAAIc,EAAC;AAAA,QAAC;AAAA,QAAC,6BAA4B;AAAC,cAAG,EAAC,MAAKd,IAAE,MAAKC,IAAE,KAAIC,IAAE,SAAQC,GAAC,IAAE;AAAK,UAAAA,GAAE,WAASF,GAAE,KAAK,IAAI,CAAC,GAAED,GAAE,KAAK,IAAI,CAAC,IAAGC,GAAE,UAAQD,GAAE,KAAK,IAAI,CAAC,GAAEE,GAAE,UAAQF,GAAE,KAAK,IAAI,CAAC,GAAE,KAAK,KAAK,UAAQ,EAAE,MAAM,CAAAA,OAAG,SAAK,KAAKA,EAAC,EAAE,QAAQ,KAAG,KAAK,aAAW,KAAK;AAAY,mBAAQA,MAAK,EAAE,MAAKA,EAAC,EAAE,gBAAgB;AAAA,QAAC;AAAA,QAAC,IAAI,WAAU;AAAC,iBAAM,CAAC,EAAE,KAAK,CAAAA,OAAG,KAAKA,EAAC,EAAE,QAAQ,EAAE,MAAM,CAAAA,OAAG,SAAKA,GAAE,KAAG,KAAK,KAAK;AAAA,QAAO;AAAA,QAAC,qBAAoB;AAAC,mBAAQA,MAAK,EAAE,MAAKA,EAAC,EAAE,WAAS,CAAC,EAAE,IAAIA,EAAC,KAAG,EAAE,kBAAiBA,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAGA,IAAEC,IAAE;AAAC,YAAIC,IAAEC,IAAEC,IAAEC,IAAEC,KAAE,CAAC;AAAE,aAAIF,MAAKH,IAAE;AAAC,eAAII,OAAKH,KAAE,EAAE,IAAIE,EAAC,GAAED,KAAE,CAAC,GAAED,IAAG,EAACF,GAAE,SAASK,GAAE,CAAC,CAAC,KAAGL,GAAE,SAASK,GAAE,CAAC,CAAC,MAAIF,GAAE,KAAKE,GAAE,CAAC,CAAC;AAAE,UAAAF,GAAE,UAAQG,GAAE,KAAK,CAACF,IAAED,EAAC,CAAC;AAAA,QAAC;AAAC,eAAOG;AAAA,MAAC;AAAC,eAAS,GAAGN,IAAEC,IAAE;AAAC,eAAO,WAASD,KAAEA,KAAE,WAASC,KAAEA,KAAE;AAAA,MAAM;AAAC,eAAS,GAAGD,IAAEC,IAAE;AAAC,iBAAQC,MAAKD,GAAE,CAAAD,GAAE,IAAIE,EAAC;AAAA,MAAC;AAAC,QAAE,IAAG,WAAU,EAAE;AAAA,MAAE,MAAM,GAAE;AAAA,QAAC,YAAYF,IAAE;AAAC,YAAE,MAAK,WAAU,CAAC,CAAC,GAAE,EAAE,MAAK,UAAS,CAAC,CAAC,GAAE,EAAE,MAAK,UAAS,CAAC,CAAC,GAAE,EAAE,MAAK,iBAAgB,CAAAA,OAAG,KAAK,OAAO,KAAKA,EAAC,EAAE,GAAE,KAAK,UAAQ,GAAG,UAAUA,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,KAAKA,IAAE;AAAC,eAAK,OAAK,MAAM,EAAEA,IAAE,KAAK,OAAO;AAAA,QAAC;AAAA,QAAC,QAAO;AAAC,cAAG,KAAK,WAAW;AAAO,cAAG,EAAC,MAAKA,GAAC,IAAE,MAAKC,KAAED,GAAE,UAAU,CAAC;AAAE,mBAAO,CAACE,IAAEC,EAAC,KAAI,EAAE,KAAGA,GAAE,UAAUH,IAAEC,EAAC,EAAE,QAAO,KAAK,aAAW,IAAIE,GAAE,KAAK,SAAQ,KAAK,MAAK,KAAK,OAAO,GAAEH,GAAEE,EAAC,IAAE;AAAG,eAAK,KAAK,SAAO,KAAK,KAAK,MAAM,GAAE,EAAE,qBAAqB;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,cAAG,EAAC,QAAOF,IAAE,QAAOC,GAAC,IAAE;AAAK,iBAAO,KAAK,MAAM,GAAE,KAAK,QAAQ,gBAAc,MAAM,KAAK,eAAe,EAAE,MAAM,KAAK,YAAY,GAAEA,GAAE,KAAK,GAAG,KAAK,WAAW,MAAM,KAAG,MAAM,KAAK,eAAe,GAAE,KAAK,KAAK,SAAO,KAAK,KAAK,MAAM,GAAE,KAAK,QAAQ,gBAAcA,GAAE,SAAO,MAAID,GAAE,SAAOC,KAAG,EAAED,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,iBAAgB;AAAC,cAAG,EAAC,QAAOA,GAAC,IAAE;AAAK,gBAAM,KAAK,WAAW,MAAM;AAAE,cAAIC,KAAE,OAAO,OAAO,KAAK,OAAO,EAAE,KAAK,OAAMA,OAAG;AAAC,gBAAIC,KAAE,MAAMD,GAAE,MAAM;AAAE,YAAAA,GAAE,eAAeD,IAAEE,EAAC;AAAA,UAAC,EAAE;AAAE,eAAK,QAAQ,iBAAeD,KAAEA,GAAE,KAAK,CAAAD,OAAGA,GAAE,MAAM,KAAK,YAAY,EAAE,IAAG,MAAM,QAAQ,IAAIC,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,mBAAkB;AAAC,eAAK,MAAM;AAAE,cAAG,EAAC,SAAQD,IAAE,MAAKC,GAAC,IAAE,MAAKC,KAAE,EAAE,IAAI,QAAOF,EAAC;AAAE,cAAIG;AAAE,cAAGF,GAAE,OAAKE,KAAE,EAAC,OAAM,GAAE,MAAK,OAAM,IAAEF,GAAE,SAAOE,KAAE,MAAM,KAAK,WAAW,iBAAiB,MAAM,IAAG,WAASA,GAAE;AAAO,cAAIC,KAAE,MAAM,KAAK,WAAW,mBAAmBD,EAAC,GAAEE,KAAE,KAAK,QAAQ,OAAK,IAAIH,GAAEE,IAAEJ,IAAEC,EAAC,GAAEK,KAAE,MAAMD,GAAE,iBAAiB;AAAE,iBAAOJ,GAAE,SAAOA,GAAE,MAAM,GAAEK;AAAA,QAAC;AAAA,MAAC;AAAC,qBAAe,GAAGN,IAAEC,IAAE;AAAC,YAAIC,KAAE,IAAI,GAAGD,EAAC;AAAE,eAAO,MAAMC,GAAE,KAAKF,EAAC,GAAEE,GAAE,MAAM;AAAA,MAAC;AAAC,UAAI,KAAG,OAAO,OAAO,EAAC,WAAU,MAAK,OAAM,IAAG,OAAM,IAAG,aAAY,GAAE,gBAAe,GAAE,aAAY,GAAE,SAAQ,GAAE,WAAU,GAAE,aAAY,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,uBAAsB,GAAE,uBAAsB,GAAE,cAAaa,IAAE,eAAc,GAAE,UAAS,GAAE,YAAW,GAAE,mBAAkB,GAAE,kBAAiB,IAAG,cAAa,IAAG,eAAc,IAAG,SAAQ,GAAE,CAAC;AAAA,MAAE,MAAM,GAAE;AAAA,QAAC,YAAYf,IAAEC,IAAEC,IAAE;AAAC,YAAE,MAAK,UAAS,CAAC,CAAC,GAAE,EAAE,MAAK,uBAAsB,OAAMF,OAAG;AAAC,gBAAIC,KAAED,GAAE,OAAME,KAAEF,GAAE,QAAM;AAAM,gBAAG,KAAK,KAAK,QAAQ,KAAG,KAAK,KAAK,UAAUC,IAAEC,EAAC,EAAE,CAAAF,GAAE,QAAM,KAAK,KAAK,SAASC,IAAEC,EAAC;AAAA,gBAAO,KAAG;AAAC,cAAAF,GAAE,QAAM,MAAM,KAAK,KAAK,UAAUC,IAAEC,EAAC;AAAA,YAAC,SAAOD,IAAE;AAAC,gBAAE,0BAA0B,KAAK,UAAUD,EAAC,CAAC,KAAKC,GAAE,OAAO,EAAE;AAAA,YAAC;AAAA,gBAAM,MAAK,KAAK,aAAWA,KAAEC,KAAEF,GAAE,QAAM,KAAK,KAAK,SAASC,IAAEC,EAAC,IAAE,WAASF,GAAE,OAAKA,GAAE,QAAM,KAAK,KAAK,SAASC,EAAC,IAAE,EAAE,0BAAwB,KAAK,UAAUD,EAAC,CAAC;AAAE,mBAAOA,GAAE;AAAA,UAAK,EAAE,GAAE,KAAK,iBAAe,KAAK,cAAcA,EAAC,GAAE,KAAK,UAAQA,IAAE,KAAK,OAAKC,IAAE,KAAK,UAAQC;AAAA,QAAC;AAAA,QAAC,cAAcF,IAAEC,IAAE;AAAC,eAAK,QAAQD,EAAC,EAAE,WAAS,KAAK,aAAaA,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,aAAaD,IAAEC,IAAE;AAAC,cAAIC,KAAE,KAAI,EAAE,IAAIF,EAAC,GAAGC,IAAE,KAAK,SAAQ,KAAK,IAAI;AAAE,iBAAO,KAAK,QAAQD,EAAC,IAAEE;AAAA,QAAC;AAAA,QAAC,cAAcF,IAAE;AAAC,mBAAQC,MAAKD,IAAE;AAAC,gBAAG,EAAC,MAAKA,IAAE,OAAME,GAAC,IAAED,IAAEE,KAAE,KAAK,QAAQH,EAAC;AAAE,gBAAGG,MAAGA,GAAE,SAAQ;AAAC,kBAAIF,KAAE,KAAK,QAAQD,EAAC;AAAE,cAAAC,MAAGA,GAAE,UAAQA,MAAG,KAAK,aAAaD,IAAEE,EAAC;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,MAAM,aAAaF,IAAE;AAAC,cAAIC,KAAED,GAAE,IAAI,KAAK,kBAAkB;AAAE,gBAAM,QAAQ,IAAIC,EAAC;AAAA,QAAC;AAAA,MAAC;AAAA,MAAC,MAAM,GAAE;AAAA,QAAC,OAAO,aAAaD,IAAEC,IAAE;AAAC,cAAIC,KAAEF,GAAE,UAAUC,KAAE,CAAC,IAAE,GAAEE,KAAE,cAAY,OAAO,KAAK,eAAa,KAAK,aAAaH,IAAEC,IAAEC,EAAC,IAAE,KAAK,cAAaE,KAAEH,KAAEE,IAAEE,KAAEH,KAAEC;AAAE,iBAAM,EAAC,QAAOF,IAAE,QAAOC,IAAE,cAAaC,IAAE,OAAMC,IAAE,MAAKC,IAAE,KAAID,KAAEC,GAAC;AAAA,QAAC;AAAA,QAAC,OAAO,MAAML,IAAEC,KAAE,CAAC,GAAE;AAAC,iBAAO,IAAI,KAAKD,IAAE,IAAI,GAAG,EAAC,CAAC,KAAK,IAAI,GAAEC,GAAC,CAAC,GAAED,EAAC,EAAE,MAAM;AAAA,QAAC;AAAA,QAAC,eAAeA,IAAE;AAAC,iBAAOA,cAAa,IAAEA,KAAE,IAAI,EAAEA,EAAC;AAAA,QAAC;AAAA,QAAC,YAAYA,IAAEC,KAAE,CAAC,GAAEC,IAAE;AAAC,YAAE,MAAK,UAAS,CAAC,CAAC,GAAE,EAAE,MAAK,OAAM,oBAAI,KAAG,GAAE,EAAE,MAAK,gBAAe,CAAAF,OAAG;AAAC,gBAAG,CAAC,KAAK,QAAQ,aAAa,OAAMA;AAAE,iBAAK,OAAO,KAAKA,GAAE,OAAO;AAAA,UAAC,EAAE,GAAE,KAAK,QAAM,KAAK,eAAeA,EAAC,GAAE,KAAK,OAAKE,IAAE,KAAK,OAAK,KAAK,YAAY,MAAK,KAAK,gBAAc,KAAK,UAAQD,IAAE,KAAK,eAAaA,GAAE,KAAK,IAAI,GAAE,KAAK,eAAa,KAAK,gBAAc,KAAK,aAAa;AAAA,QAAS;AAAA,QAAC,YAAW;AAAC,eAAK,iBAAe,KAAK,aAAW,KAAK,eAAe,KAAK,KAAI,KAAK,IAAI;AAAA,QAAE;AAAA,QAAC,IAAI,SAAQ;AAAC,iBAAO,KAAK,aAAW,KAAK,aAAW,KAAK,MAAI,OAAO,YAAY,KAAK,GAAG,IAAE;AAAA,QAAM;AAAA,QAAC,eAAeD,IAAEC,IAAE;AAAC,cAAIC,KAAE,EAAE,IAAID,EAAC,GAAEE,KAAE,EAAE,IAAIF,EAAC,GAAEG,KAAE,EAAE,IAAIH,EAAC,GAAEI,KAAE,KAAK,QAAQJ,EAAC,GAAEK,KAAED,GAAE,gBAAc,CAAC,CAACH,IAAEK,KAAEF,GAAE,mBAAiB,CAAC,CAACF,IAAEK,KAAEH,GAAE,iBAAe,CAAC,CAACD,IAAEK,KAAE,CAAC;AAAE,mBAAO,CAACR,IAAEI,EAAC,KAAIL,GAAE,CAAAM,MAAGJ,GAAE,IAAID,EAAC,IAAEI,KAAEH,GAAE,IAAID,EAAC,EAAEI,EAAC,IAAEE,MAAGJ,GAAE,IAAIF,EAAC,MAAII,KAAE,KAAK,eAAeA,IAAEF,GAAE,IAAIF,EAAC,CAAC,IAAGO,MAAGJ,GAAE,IAAIH,EAAC,MAAIA,KAAEG,GAAE,IAAIH,EAAC,KAAGA,KAAGQ,GAAER,EAAC,IAAEI;AAAE,iBAAOI;AAAA,QAAC;AAAA,QAAC,eAAeT,IAAEC,IAAE;AAAC,iBAAOA,GAAED,EAAC,KAAGC,GAAE,WAASD;AAAA,QAAC;AAAA,QAAC,eAAeA,IAAEC,IAAE;AAAC,eAAK,qBAAqBD,IAAE,KAAK,YAAY,MAAKC,EAAC;AAAA,QAAC;AAAA,QAAC,qBAAqBD,IAAEC,IAAEC,IAAE;AAAC,cAAG,KAAK,cAAc,YAAY,QAAO,OAAO,OAAOF,IAAEE,EAAC;AAAE,UAAAF,GAAEC,EAAC,IAAE,OAAO,OAAOD,GAAEC,EAAC,GAAEC,EAAC,IAAEF,GAAEC,EAAC,IAAEC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,gBAAe,CAAC,GAAE,EAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAG,gBAAe,KAAE,GAAE,EAAE,IAAG,cAAa,MAAI,MAAG;AAAE,eAAS,GAAGF,IAAE;AAAC,eAAO,QAAMA,MAAG,QAAMA,MAAG,QAAMA,MAAG,QAAMA,MAAG,QAAMA,MAAG,QAAMA,MAAG,QAAMA;AAAA,MAAC;AAAC,eAAS,GAAGA,IAAE;AAAC,eAAOA,MAAG,OAAKA,MAAG;AAAA,MAAG;AAAC,eAAS,GAAGA,IAAEC,IAAEC,IAAE;AAAC,iBAAO,CAACC,IAAEC,EAAC,KAAI,EAAE,KAAGA,GAAE,UAAUJ,IAAEC,IAAEC,EAAC,EAAE,QAAOC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,QAAC,eAAeH,IAAE;AAAC,gBAAM,GAAGA,EAAC,GAAE,EAAE,MAAK,eAAc,CAAC,CAAC,GAAE,EAAE,MAAK,gBAAe,CAAC,CAAC,GAAE,EAAE,MAAK,mBAAkB,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,OAAO,UAAUA,IAAEC,IAAE;AAAC,iBAAO,UAAQA;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,gBAAM,KAAK,gBAAgB,GAAE,MAAM,KAAK,aAAa,KAAK,WAAW,GAAE,KAAK,mBAAmB,GAAE,KAAK,cAAc,KAAK,qBAAmB,KAAK,WAAW;AAAA,QAAC;AAAA,QAAC,uBAAuBD,IAAE;AAAC,mBAAKA,MAAG,KAAK,UAAQ,MAAG,KAAK,SAAO,IAAI,IAAI,EAAE,QAAQ,CAAC,MAAIA,KAAE,WAASA,KAAE,EAAE,QAAQ,EAAE,QAAQ,CAAAA,OAAG,KAAK,QAAQA,EAAC,EAAE,QAAQ,IAAEA,GAAE,QAAQ,CAAAA,OAAG,KAAK,QAAQA,EAAC,EAAE,WAAS,EAAE,IAAIA,EAAC,EAAE,GAAE,KAAK,UAAQ,OAAG,KAAK,YAAU,IAAI,IAAIA,EAAC,GAAE,KAAK,SAAO,IAAI,IAAIA,EAAC,IAAG,KAAK,yBAAuB;AAAA,QAAE;AAAA,QAAC,MAAM,gBAAgBA,KAAE,GAAEC,IAAE;AAAC,eAAK,uBAAuBA,EAAC;AAAE,cAAG,EAAC,MAAKC,IAAE,SAAQC,IAAE,QAAOC,IAAE,WAAUC,GAAC,IAAE;AAAK,cAAG,CAACF,MAAG,KAAK,KAAK,YAAUA,KAAE,MAAM,KAAKC,EAAC,EAAE,MAAM,CAAAJ,OAAG;AAAC,gBAAIC,KAAE,EAAE,IAAID,EAAC,GAAEE,KAAE,KAAK,QAAQF,EAAC;AAAE,mBAAOC,GAAE,gBAAcC,GAAE;AAAA,UAAY,EAAE,GAAEC,MAAG,MAAM,KAAK,KAAK,UAAU,IAAGH,KAAE,KAAK,uBAAuBA,IAAEE,GAAE,UAAU,GAAE,CAAC,KAAK,QAAQ,YAAUA,GAAE,SAAQ;AAAC,gBAAID,KAAE;AAAG,mBAAKI,GAAE,OAAK,KAAG,CAACJ,OAAIC,GAAE,oBAAkB,KAAK,2BAAyB;AAAC,kBAAG,EAAC,iBAAgBC,GAAC,IAAED,IAAEE,KAAE,KAAK,YAAY,MAAM,CAAAJ,OAAG,CAAC,KAAK,KAAK,UAAUA,GAAE,UAAQA,GAAE,OAAMA,GAAE,UAAQA,GAAE,IAAI,EAAE;AAAE,kBAAGC,KAAED,KAAEG,MAAG,CAACC,KAAE,CAAC,MAAMF,GAAE,cAAcF,EAAC,IAAE,CAAC,MAAME,GAAE,cAAcC,EAAC,GAAE,YAAUH,KAAE,KAAK,uBAAuBA,IAAEE,GAAE,UAAU,GAAG;AAAA,YAAM;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,uBAAuBF,IAAEC,IAAE;AAAC,UAAAA,MAAG;AAAE,cAAIC,IAAEC,IAAEC,IAAEC,IAAEC,IAAEC,IAAE,EAAC,MAAKC,IAAE,SAAQC,IAAE,QAAOC,IAAE,WAAUC,IAAE,SAAQC,GAAC,IAAE;AAAK,iBAAKZ,KAAEC,IAAED,KAAI,KAAG,QAAMQ,GAAE,SAASR,EAAC;AAAE,gBAAGE,KAAEM,GAAE,SAASR,KAAE,CAAC,GAAE,GAAGE,EAAC,GAAE;AAAC,kBAAGC,KAAEK,GAAE,UAAUR,KAAE,CAAC,GAAEI,KAAE,GAAGI,IAAER,IAAEG,EAAC,GAAEC,MAAGM,GAAE,IAAIN,EAAC,MAAIC,KAAE,EAAE,IAAID,EAAC,GAAEE,KAAED,GAAE,aAAaG,IAAER,EAAC,GAAEO,KAAEK,GAAER,EAAC,GAAEE,GAAE,OAAKF,IAAE,KAAK,YAAY,KAAKE,EAAC,GAAE,CAACG,OAAIJ,GAAE,gBAAcE,GAAE,gBAAc,KAAK,yBAAuBD,GAAE,cAAYA,GAAE,YAAW,KAAK,0BAAwBK,GAAE,OAAOP,EAAC,KAAGO,GAAE,OAAOP,EAAC,GAAE,MAAIO,GAAE,OAAO;AAAM,cAAAC,GAAE,0BAAwBN,KAAE,GAAG,aAAaE,IAAER,EAAC,GAAEM,GAAE,SAAOJ,IAAE,KAAK,gBAAgB,KAAKI,EAAC,IAAGN,MAAGG,KAAE;AAAA,YAAC,WAAS,GAAGD,EAAC,GAAE;AAAC,kBAAGC,KAAEK,GAAE,UAAUR,KAAE,CAAC,GAAE,QAAME,MAAG,UAAKU,GAAE,aAAa;AAAO,cAAAA,GAAE,sBAAoB,KAAK,aAAa,KAAK,EAAC,QAAOZ,IAAE,QAAOG,IAAE,QAAOD,GAAC,CAAC,GAAEF,MAAGG,KAAE;AAAA,YAAC;AAAA;AAAC,iBAAOH;AAAA,QAAC;AAAA,QAAC,qBAAoB;AAAC,cAAG,CAAC,KAAK,YAAY,MAAM,CAAAA,OAAGA,GAAE,aAAa,EAAE;AAAO,cAAIA,MAAE,SAASA,IAAEC,IAAE;AAAC,gBAAIC,IAAEC,IAAEC,IAAEC,KAAE,oBAAI;AAAI,qBAAQC,KAAE,GAAEA,KAAEN,GAAE,QAAOM,KAAI,CAAAJ,KAAEF,GAAEM,EAAC,GAAEH,KAAED,GAAED,EAAC,GAAEI,GAAE,IAAIF,EAAC,IAAEC,KAAEC,GAAE,IAAIF,EAAC,IAAEE,GAAE,IAAIF,IAAEC,KAAE,CAAC,CAAC,GAAEA,GAAE,KAAKF,EAAC;AAAE,mBAAO,MAAM,KAAKG,EAAC;AAAA,UAAC,GAAE,KAAK,aAAY,MAAM;AAAE,eAAK,oBAAkBL,GAAE,KAAK,CAAC,CAACA,IAAEC,EAAC,MAAI;AAAC,gBAAIC,KAAE,EAAE,IAAIF,IAAE,KAAK,OAAO;AAAE,gBAAGE,GAAE,qBAAoB;AAAC,qBAAM,EAAC,MAAKF,IAAE,OAAME,GAAE,oBAAoBD,EAAC,EAAC;AAAA,YAAC;AAAC,mBAAOA,GAAE,CAAC;AAAA,UAAC,EAAE;AAAA,QAAC;AAAA,QAAC,WAAWD,IAAE;AAAC,iBAAO,KAAK,YAAY,MAAM,CAAAC,OAAGA,GAAE,SAAOD,GAAE;AAAA,QAAC;AAAA,QAAC,MAAM,iBAAiBA,IAAE;AAAC,cAAIC,KAAE,KAAK,WAAWD,EAAC;AAAE,iBAAO,WAASC,OAAI,MAAM,KAAK,gBAAgB,GAAE,CAACD,EAAC,CAAC,GAAEC,KAAE,KAAK,WAAWD,EAAC,IAAGC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAI,QAAO,EAAE;AAAE,YAAM,KAAG,CAAC,QAAO,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,cAAa;AAAC,cAAID,KAAE,KAAK,MAAM,UAAU;AAAE,oBAAQA,KAAE,KAAK,KAAG,OAAG,UAAQA,OAAI,KAAK,KAAG,QAAI,KAAK,MAAM,KAAG,KAAK,IAAG,KAAK,eAAa;AAAA,QAAE;AAAA,QAAC,UAAUA,IAAEC,IAAEC,KAAE,oBAAI,OAAI;AAAC,cAAG,EAAC,MAAKC,IAAE,MAAKC,GAAC,IAAE,KAAK,QAAQH,EAAC;AAAE,UAAAE,KAAE,IAAI,IAAIA,EAAC;AAAE,cAAIE,KAAEF,GAAE,OAAK,GAAEG,KAAE,MAAIF,GAAE,MAAKG,KAAE,KAAK,MAAM,UAAUP,EAAC;AAAE,UAAAA,MAAG;AAAE,mBAAQQ,KAAE,GAAEA,KAAED,IAAEC,MAAI;AAAC,gBAAID,KAAE,KAAK,MAAM,UAAUP,EAAC;AAAE,gBAAGK,IAAE;AAAC,kBAAGF,GAAE,IAAII,EAAC,MAAIL,GAAE,IAAIK,IAAE,KAAK,SAASP,IAAEO,IAAEN,EAAC,CAAC,GAAEE,GAAE,OAAOI,EAAC,GAAE,MAAIJ,GAAE,MAAM;AAAA,YAAK,MAAK,EAACG,MAAGF,GAAE,IAAIG,EAAC,KAAGL,GAAE,IAAIK,IAAE,KAAK,SAASP,IAAEO,IAAEN,EAAC,CAAC;AAAE,YAAAD,MAAG;AAAA,UAAE;AAAC,iBAAOE;AAAA,QAAC;AAAA,QAAC,SAASF,IAAEC,IAAEC,IAAE;AAAC,cAAG,EAAC,OAAMC,GAAC,IAAE,MAAKC,KAAED,GAAE,UAAUH,KAAE,CAAC,GAAEK,KAAEF,GAAE,UAAUH,KAAE,CAAC,GAAEM,KAAE,GAAGF,EAAC;AAAE,cAAGE,KAAED,MAAG,IAAEL,MAAG,IAAEA,KAAEG,GAAE,UAAUH,KAAE,CAAC,IAAGI,KAAE,KAAGA,KAAE,OAAK,EAAE,mCAAmCF,GAAE,YAAY,CAAC,UAAUD,GAAE,SAAS,EAAE,CAAC,WAAWG,EAAC,YAAYJ,EAAC,EAAE,GAAEA,KAAEG,GAAE,cAAY,EAAE,qCAAqCD,GAAE,YAAY,CAAC,UAAUD,GAAE,SAAS,EAAE,CAAC,WAAWG,EAAC,YAAYJ,EAAC,6BAA6BG,GAAE,UAAU,EAAE,GAAE,MAAIC,GAAE,QAAOD,GAAE,cAAcH,IAAEK,EAAC;AAAE,cAAG,MAAID,GAAE,QAAO,EAAED,GAAE,UAAUH,IAAEK,EAAC,CAAC;AAAE,cAAG,MAAID,GAAE,QAAOD,GAAE,cAAcH,IAAEK,EAAC;AAAE,cAAG,MAAIA,GAAE,QAAO,KAAK,cAAcD,IAAEJ,EAAC;AAAE;AAAC,gBAAIC,KAAE,MAAI,SAASD,IAAE;AAAC,sBAAOA,IAAE;AAAA,gBAAC,KAAK;AAAE,yBAAO;AAAA,gBAAW,KAAK;AAAE,yBAAO;AAAA,gBAAY,KAAK;AAAE,yBAAO;AAAA,gBAAY,KAAK;AAAE,yBAAO;AAAA,gBAAM,KAAK;AAAE,yBAAO;AAAA,gBAAU,KAAK;AAAE,yBAAO;AAAA,gBAAW,KAAK;AAAE,yBAAO;AAAA,gBAAW,KAAK;AAAG,yBAAO;AAAA,gBAAM,KAAK;AAAG,yBAAO;AAAA,gBAAa,KAAK;AAAG,yBAAO;AAAA,gBAAa;AAAQ,yBAAO;AAAA,cAAK;AAAA,YAAC,GAAEI,EAAC,GAAGC,EAAC,GAAEH,KAAEI;AAAE,qBAAQH,KAAE,GAAEA,KAAEE,IAAEF,KAAI,CAAAF,GAAEE,EAAC,IAAE,KAAK,cAAcC,IAAEJ,EAAC,GAAEA,MAAGE;AAAE,mBAAOD;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,cAAcD,IAAEC,IAAE;AAAC,cAAG,EAAC,OAAMC,GAAC,IAAE;AAAK,kBAAOF,IAAE;AAAA,YAAC,KAAK;AAAE,qBAAOE,GAAE,SAASD,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,UAAUD,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,UAAUD,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,UAAUD,EAAC,IAAEC,GAAE,UAAUD,KAAE,CAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,QAAQD,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,SAASD,EAAC;AAAA,YAAE,KAAK;AAAE,qBAAOC,GAAE,SAASD,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAOC,GAAE,SAASD,EAAC,IAAEC,GAAE,SAASD,KAAE,CAAC;AAAA,YAAE,KAAK;AAAG,qBAAOC,GAAE,SAASD,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAOC,GAAE,UAAUD,EAAC;AAAA,YAAE,KAAK;AAAG,qBAAOC,GAAE,UAAUD,EAAC;AAAA,YAAE;AAAQ,gBAAE,qBAAqBD,EAAC,EAAE;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUA,IAAEC,IAAE;AAAC,iBAAO,QAAMD,GAAE,SAASC,KAAE,CAAC,KAAG,eAAaD,GAAE,UAAUC,KAAE,CAAC,KAAG,MAAID,GAAE,UAAUC,KAAE,CAAC;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,eAAK,YAAY;AAAE,cAAG,EAAC,SAAQD,GAAC,IAAE;AAAK,iBAAOA,GAAE,KAAK,WAAS,MAAM,KAAK,eAAe,GAAEA,GAAE,KAAK,WAAS,MAAM,KAAK,UAAU,gBAAgB,GAAEA,GAAE,IAAI,WAAS,MAAM,KAAK,UAAU,eAAe,GAAEA,GAAE,QAAQ,WAAS,MAAM,KAAK,UAAU,mBAAmB,GAAEA,GAAE,KAAK,WAAS,MAAM,KAAK,UAAU,qBAAqB,GAAE,KAAK,aAAa;AAAA,QAAC;AAAA,QAAC,UAAUA,IAAE;AAAC,cAAIC,KAAE,KAAKD,EAAC,EAAE;AAAE,iBAAO,WAASC,GAAE,UAAQA,KAAEA,GAAE,MAAM,KAAK,WAAW,IAAGA;AAAA,QAAC;AAAA,QAAC,iBAAgB;AAAC,qBAAS,KAAK,eAAa,KAAK,aAAW,KAAK,MAAM,UAAU,CAAC;AAAA,QAAE;AAAA,QAAC,iBAAgB;AAAC,cAAG,WAAS,KAAK,YAAW;AAAC,iBAAK,eAAe;AAAE,gBAAID,KAAE,KAAK,MAAM,UAAU,KAAK,UAAU,GAAEC,KAAE,KAAK,aAAW,IAAE,KAAGD;AAAE,iBAAK,aAAW,KAAK,MAAM,UAAUC,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,WAAWD,IAAEC,IAAE;AAAC,cAAIC,KAAE,oBAAI;AAAI,iBAAO,KAAKD,EAAC,IAAEC,IAAE,KAAK,UAAUF,IAAEC,IAAEC,EAAC,GAAEA;AAAA,QAAC;AAAA,QAAC,MAAM,iBAAgB;AAAC,cAAG,KAAK,KAAK;AAAO,cAAG,EAAC,MAAKF,GAAC,IAAE;AAAK,eAAK,eAAe,GAAE,KAAK,aAAW,KAAG,EAAE,qBAAqB,GAAE,CAACA,GAAE,WAAS,KAAK,aAAWA,GAAE,cAAY,EAAE;AAAA,mBAA4D,KAAK,UAAU,sBAAsBA,GAAE,UAAU,EAAE,GAAEA,GAAE,QAAM,MAAMA,GAAE,YAAY,KAAK,YAAW,EAAE,KAAK,OAAO,CAAC;AAAE,cAAIC,KAAE,KAAK,WAAW,KAAK,YAAW,MAAM;AAAE,iBAAO,MAAIA,GAAE,QAAM,KAAK,aAAWA,GAAE,IAAI,CAAC,GAAE,KAAK,gBAAcA,GAAE,IAAI,CAAC,GAAE,KAAK,YAAUA,GAAE,IAAI,CAAC,GAAE,KAAK,MAAIA,GAAE,IAAI,CAAC,GAAE,KAAK,OAAKA,GAAE,IAAI,CAAC,GAAE,KAAK,MAAIA,GAAE,IAAIa,EAAC,GAAE,KAAK,QAAQ,aAAWb,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAOa,EAAC,IAAGb,MAAG;AAAA,QAAM;AAAA,QAAC,MAAM,iBAAgB;AAAC,cAAG,KAAK,KAAK;AAAO,cAAG,KAAK,QAAM,MAAM,KAAK,eAAe,GAAE,WAAS,KAAK,WAAW;AAAO,eAAK,KAAK,QAAM,MAAM,KAAK,KAAK,YAAY,KAAK,YAAW,EAAE,KAAK,OAAO,CAAC;AAAE,cAAID,KAAE,KAAK,WAAW,KAAK,YAAW,MAAM;AAAE,iBAAO,KAAK,kBAAgB,KAAK,gBAAcA,GAAE,IAAI,CAAC,IAAG,KAAK,YAAUA,GAAE,IAAI,CAAC,GAAE,KAAK,cAAYA,GAAE,IAAI,CAAC,GAAE,KAAK,QAAQ,aAAWA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,GAAEA,GAAE,OAAO,CAAC,IAAG,KAAK,OAAOA,IAAE,KAAK,GAAE,KAAK,OAAOA,IAAE,KAAK,GAAEA;AAAA,QAAC;AAAA,QAAC,OAAOA,IAAEC,IAAE;AAAC,cAAIC,KAAEF,GAAE,IAAIC,EAAC;AAAE,UAAAC,MAAG,MAAIA,GAAE,UAAQF,GAAE,IAAIC,IAAEC,GAAE,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,MAAM,gBAAe;AAAC,cAAG,KAAK,IAAI;AAAO,cAAG,KAAK,QAAM,MAAM,KAAK,eAAe,GAAE,WAAS,KAAK,UAAU;AAAO,cAAIF,KAAE,KAAK,WAAW,KAAK,WAAU,KAAK;AAAE,iBAAOA,MAAGA,GAAE,IAAI,CAAC,KAAGA,GAAE,IAAI,CAAC,MAAIA,GAAE,IAAI,YAAW,GAAG,GAAGA,GAAE,IAAI,CAAC,GAAEA,GAAE,IAAI,CAAC,CAAC,CAAC,GAAEA,GAAE,IAAI,aAAY,GAAG,GAAGA,GAAE,IAAI,CAAC,GAAEA,GAAE,IAAI,CAAC,CAAC,CAAC,IAAGA;AAAA,QAAC;AAAA,QAAC,MAAM,oBAAmB;AAAC,cAAG,CAAC,KAAK,YAAU,KAAK,QAAM,MAAM,KAAK,eAAe,GAAE,WAAS,KAAK,iBAAe,KAAK,QAAM,MAAM,KAAK,eAAe,GAAE,WAAS,KAAK,eAAe,QAAO,KAAK,WAAW,KAAK,eAAc,SAAS;AAAA,QAAC;AAAA,QAAC,MAAM,oBAAoBA,KAAE,OAAG;AAAC,cAAG,CAAC,KAAK,QAAM,CAAC,KAAK,eAAa,CAAC,KAAK,QAAQ,eAAaA,IAAG,QAAO,KAAK,eAAe,GAAE,KAAK,aAAW,MAAI,KAAK,WAAW,KAAK,YAAW,MAAM,GAAE,KAAK,aAAW,OAAI,KAAK;AAAA,QAAI;AAAA,QAAC,MAAM,mBAAkB;AAAC,cAAG,KAAK,gBAAc,KAAK,YAAY,GAAE,KAAK,cAAY,MAAM,KAAK,oBAAoB,IAAE,GAAE,WAAS,KAAK,KAAK;AAAO,cAAIA,KAAE,KAAK,KAAK,IAAI,GAAG,GAAEC,KAAE,KAAK,KAAK,IAAI,GAAG;AAAE,iBAAO,KAAK,MAAM,cAAcD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,IAAI,QAAO;AAAC,iBAAO,KAAK;AAAA,QAAI;AAAA,QAAC,IAAI,YAAW;AAAC,iBAAO,KAAK;AAAA,QAAI;AAAA,QAAC,eAAc;AAAC,cAAID,IAAEC,IAAEC,IAAEC,KAAE,CAAC;AAAE,eAAIF,MAAK,EAAE,KAAGD,KAAE,KAAKC,EAAC,GAAE,CAAC,EAAED,EAAC,EAAE,KAAGE,KAAE,KAAK,eAAa,KAAK,eAAeF,IAAEC,EAAC,IAAE,OAAO,YAAYD,EAAC,GAAE,KAAK,QAAQ,aAAY;AAAC,gBAAG,WAASC,GAAE;AAAS,mBAAO,OAAOE,IAAED,EAAC;AAAA,UAAC,MAAM,CAAAC,GAAEF,EAAC,IAAEC;AAAE,iBAAO,KAAK,cAAYC,GAAE,YAAU,KAAK,YAAW,KAAK,gBAAcA,GAAE,cAAY,KAAK,cAAaA;AAAA,QAAC;AAAA,QAAC,eAAeH,IAAEC,IAAE;AAAC,cAAG,KAAK,cAAc,YAAY,QAAO,OAAOD,IAAEC,EAAC;AAAA,cAAO,UAAO,CAACC,IAAEC,EAAC,KAAI,OAAO,QAAQF,EAAC,EAAE,MAAK,qBAAqBD,IAAEE,IAAEC,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAGH,IAAEC,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAEJ,KAAEC,KAAE,KAAGC,KAAE;AAAK,eAAM,QAAMC,MAAG,QAAMA,OAAIC,MAAG,KAAIA;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAG,gBAAe,EAAE,GAAE,EAAE,IAAI,QAAO,EAAE;AAAE,UAAI,KAAG,OAAO,OAAO,EAAC,WAAU,MAAK,SAAQ,IAAG,OAAM,IAAG,aAAY,GAAE,gBAAe,GAAE,aAAY,GAAE,SAAQ,GAAE,WAAU,GAAE,aAAY,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,uBAAsB,GAAE,uBAAsB,GAAE,cAAaW,IAAE,eAAc,GAAE,UAAS,GAAE,YAAW,GAAE,mBAAkB,GAAE,kBAAiB,IAAG,cAAa,IAAG,eAAc,IAAG,SAAQ,IAAG,OAAM,GAAE,CAAC;AAAE,YAAM,KAAG,EAAC,MAAK,OAAG,MAAK,OAAG,MAAK,OAAG,KAAI,OAAG,SAAQ,OAAG,UAAS,OAAG,cAAa,MAAG,eAAc,OAAG,iBAAgB,OAAG,aAAY,MAAE,GAAE,KAAG,OAAO,OAAO,CAAC,GAAE,IAAG,EAAC,gBAAe,KAAI,KAAI,CAAC,GAAE,GAAE,GAAE,CAAC,EAAC,CAAC;AAAE,qBAAe,GAAGf,IAAE;AAAC,YAAIC,KAAE,IAAI,GAAG,EAAE;AAAE,cAAMA,GAAE,KAAKD,EAAC;AAAE,YAAIE,KAAE,MAAMD,GAAE,MAAM;AAAE,YAAGC,MAAGA,GAAE,KAAI;AAAC,cAAG,EAAC,UAASF,IAAE,WAAUC,GAAC,IAAEC,GAAE;AAAI,iBAAM,EAAC,UAASF,IAAE,WAAUC,GAAC;AAAA,QAAC;AAAA,MAAC;AAAC,YAAM,KAAG,OAAO,OAAO,CAAC,GAAE,IAAG,EAAC,MAAK,OAAG,MAAK,MAAG,aAAY,MAAE,CAAC;AAAE,qBAAe,GAAGD,IAAE;AAAC,YAAIC,KAAE,IAAI,GAAG,EAAE;AAAE,cAAMA,GAAE,KAAKD,EAAC;AAAE,YAAIE,KAAE,MAAMD,GAAE,iBAAiB;AAAE,eAAOC,MAAG,IAAE,EAAE,KAAKA,EAAC,IAAEA;AAAA,MAAC;AAAC,qBAAe,GAAGF,IAAE;AAAC,YAAIC,KAAE,MAAM,KAAK,UAAUD,EAAC;AAAE,YAAG,WAASC,IAAE;AAAC,cAAID,KAAE,IAAI,KAAK,CAACC,EAAC,CAAC;AAAE,iBAAO,IAAI,gBAAgBD,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,YAAM,KAAG,OAAO,OAAO,CAAC,GAAE,IAAG,EAAC,gBAAe,KAAI,MAAK,CAAC,GAAG,EAAC,CAAC;AAAE,qBAAe,GAAGA,IAAE;AAAC,YAAIC,KAAE,IAAI,GAAG,EAAE;AAAE,cAAMA,GAAE,KAAKD,EAAC;AAAE,YAAIE,KAAE,MAAMD,GAAE,MAAM;AAAE,YAAGC,MAAGA,GAAE,KAAK,QAAOA,GAAE,KAAK,GAAG;AAAA,MAAC;AAAC,YAAM,KAAG,OAAO,OAAO,EAAC,GAAE,EAAC,kBAAiB,OAAG,QAAO,GAAE,QAAO,GAAE,KAAI,GAAE,KAAI,EAAC,GAAE,GAAE,EAAC,kBAAiB,OAAG,QAAO,IAAG,QAAO,GAAE,KAAI,GAAE,KAAI,EAAC,GAAE,GAAE,EAAC,kBAAiB,OAAG,QAAO,GAAE,QAAO,GAAE,KAAI,KAAI,KAAI,MAAI,KAAK,KAAG,IAAG,GAAE,GAAE,EAAC,kBAAiB,OAAG,QAAO,IAAG,QAAO,GAAE,KAAI,KAAI,KAAI,MAAI,KAAK,KAAG,IAAG,GAAE,GAAE,EAAC,kBAAiB,MAAG,QAAO,GAAE,QAAO,IAAG,KAAI,IAAG,KAAI,KAAG,KAAK,KAAG,IAAG,GAAE,GAAE,EAAC,kBAAiB,MAAG,QAAO,GAAE,QAAO,GAAE,KAAI,IAAG,KAAI,KAAG,KAAK,KAAG,IAAG,GAAE,GAAE,EAAC,kBAAiB,MAAG,QAAO,GAAE,QAAO,IAAG,KAAI,KAAI,KAAI,MAAI,KAAK,KAAG,IAAG,GAAE,GAAE,EAAC,kBAAiB,MAAG,QAAO,GAAE,QAAO,GAAE,KAAI,KAAI,KAAI,MAAI,KAAK,KAAG,IAAG,EAAC,CAAC;AAAE,UAAG,EAAE,eAAa,MAAG,EAAE,YAAU,MAAG,YAAU,OAAO,WAAU;AAAC,YAAID,KAAE,UAAU;AAAU,YAAGA,GAAE,SAAS,MAAM,KAAGA,GAAE,SAAS,QAAQ,GAAE;AAAC,cAAIC,KAAED,GAAE,MAAM,gBAAgB;AAAE,cAAGC,IAAE;AAAC,gBAAG,CAAC,EAACD,IAAEE,EAAC,IAAED,IAAEE,KAAE,OAAOH,EAAC,IAAE,MAAG,OAAOE,EAAC;AAAE,cAAE,eAAaC,KAAE,MAAK,EAAE,YAAU;AAAA,UAAE;AAAA,QAAC,WAASH,GAAE,SAAS,SAAS,GAAE;AAAC,cAAG,CAAC,EAACC,EAAC,IAAED,GAAE,MAAM,kBAAkB;AAAE,YAAE,eAAa,EAAE,YAAU,OAAOC,EAAC,IAAE;AAAA,QAAE;AAAC,YAAGD,GAAE,SAAS,SAAS,GAAE;AAAC,cAAG,CAAC,EAACC,EAAC,IAAED,GAAE,MAAM,eAAe;AAAE,YAAE,eAAa,EAAE,YAAU,OAAOC,EAAC,IAAE;AAAA,QAAE,WAASD,GAAE,SAAS,UAAU,GAAE;AAAC,cAAG,CAAC,EAACC,EAAC,IAAED,GAAE,MAAM,gBAAgB;AAAE,YAAE,eAAa,EAAE,YAAU,OAAOC,EAAC,IAAE;AAAA,QAAE;AAAA,MAAC;AAAC,qBAAe,GAAGD,IAAE;AAAC,YAAIC,KAAE,MAAM,GAAGD,EAAC;AAAE,eAAO,OAAO,OAAO,EAAC,QAAO,EAAE,cAAa,KAAI,EAAE,UAAS,GAAE,GAAGC,EAAC,CAAC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,EAAC;AAAA,QAAC,eAAeF,IAAE;AAAC,gBAAM,GAAGA,EAAC,GAAE,EAAE,MAAK,UAAS,IAAI,IAAE,GAAE,MAAI,KAAK,cAAY,KAAK,OAAO,IAAI,GAAE,KAAK,UAAU;AAAA,QAAC;AAAA,QAAC,WAAWA,IAAEC,IAAEC,IAAE;AAAC,cAAG,MAAIF,MAAG,MAAI,KAAK,cAAYE,IAAE;AAAC,gBAAIF,KAAE,IAAI,SAASE,GAAE,UAAQA,IAAEA,GAAE,YAAWA,GAAE,UAAU;AAAE,iBAAK,cAAcF,EAAC;AAAA,UAAC,OAAK;AAAC,gBAAIE,KAAEF,KAAEC;AAAE,gBAAGC,KAAE,KAAK,YAAW;AAAC,kBAAG,EAAC,UAASF,GAAC,IAAE,KAAK,QAAQE,EAAC;AAAE,mBAAK,cAAcF,EAAC;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,QAAQA,IAAE;AAAC,cAAIC;AAAE,UAAAA,KAAE,IAAE,EAAE,YAAYD,EAAC,IAAE,IAAI,WAAWA,EAAC;AAAE,cAAIE,KAAE,IAAI,SAASD,GAAE,QAAOA,GAAE,YAAWA,GAAE,UAAU;AAAE,iBAAOA,GAAE,IAAI,IAAI,WAAW,KAAK,QAAO,KAAK,YAAW,KAAK,UAAU,GAAE,CAAC,GAAE,EAAC,UAASA,IAAE,UAASC,GAAC;AAAA,QAAC;AAAA,QAAC,SAASF,IAAEC,IAAEC,KAAE,OAAG;AAAC,iBAAOD,KAAEA,MAAG,KAAK,aAAaD,EAAC,GAAEE,MAAG,KAAK,WAAWF,IAAEC,EAAC,GAAE,KAAK,OAAO,IAAID,IAAEC,EAAC,GAAE,MAAM,SAASD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,IAAID,IAAEC,IAAEC,KAAE,OAAG;AAAC,UAAAA,MAAG,KAAK,WAAWD,IAAED,GAAE,YAAWA,EAAC;AAAE,cAAIG,KAAE,MAAM,IAAIH,IAAEC,EAAC;AAAE,iBAAO,KAAK,OAAO,IAAIA,IAAEE,GAAE,UAAU,GAAEA;AAAA,QAAC;AAAA,QAAC,MAAM,YAAYH,IAAEC,IAAE;AAAC,eAAK,YAAU,KAAK,OAAO,UAAUD,IAAEC,EAAC,KAAG,MAAM,KAAK,UAAUD,IAAEC,EAAC;AAAA,QAAE;AAAA,QAAC,UAAUD,IAAEC,IAAE;AAAC,iBAAO,KAAK,OAAO,UAAUD,IAAEC,EAAC;AAAA,QAAC;AAAA,MAAC;AAAA,MAAC,MAAM,GAAE;AAAA,QAAC,cAAa;AAAC,YAAE,MAAK,QAAO,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,IAAI,SAAQ;AAAC,iBAAO,KAAK,KAAK;AAAA,QAAM;AAAA,QAAC,IAAID,IAAEC,IAAEC,KAAE,GAAE;AAAC,cAAIC,KAAEH,KAAEC,IAAEG,KAAE,KAAK,KAAK,QAAQ,CAAAH,OAAG,GAAGD,IAAEC,GAAE,QAAOE,EAAC,KAAG,GAAGH,IAAEC,GAAE,KAAIE,EAAC,EAAE;AAAE,cAAGC,GAAE,SAAO,GAAE;AAAC,YAAAJ,KAAE,KAAK,IAAIA,IAAE,GAAGI,GAAE,KAAK,CAAAJ,OAAGA,GAAE,OAAO,CAAC,GAAEG,KAAE,KAAK,IAAIA,IAAE,GAAGC,GAAE,KAAK,CAAAJ,OAAGA,GAAE,IAAI,CAAC,GAAEC,KAAEE,KAAEH;AAAE,gBAAIE,KAAEE,GAAE,MAAM;AAAE,YAAAF,GAAE,SAAOF,IAAEE,GAAE,SAAOD,IAAEC,GAAE,MAAIC,IAAE,KAAK,OAAK,KAAK,KAAK,QAAQ,CAAAH,OAAG,CAACI,GAAE,SAASJ,EAAC,EAAE;AAAA,UAAC,MAAM,MAAK,KAAK,KAAK,EAAC,QAAOA,IAAE,QAAOC,IAAE,KAAIE,GAAC,CAAC;AAAA,QAAC;AAAA,QAAC,UAAUH,IAAEC,IAAE;AAAC,cAAIC,KAAEF,KAAEC;AAAE,iBAAO,KAAK,KAAK,MAAM,CAAAA,OAAGA,GAAE,UAAQD,MAAGE,MAAGD,GAAE,IAAI;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAGD,IAAEC,IAAEC,IAAE;AAAC,eAAOF,MAAGC,MAAGA,MAAGC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,QAAC,YAAYF,IAAEC,IAAE;AAAC,gBAAM,CAAC,GAAE,EAAE,MAAK,cAAa,CAAC,GAAE,KAAK,QAAMD,IAAE,KAAK,UAAQC;AAAA,QAAC;AAAA,QAAC,MAAM,YAAW;AAAC,eAAK,UAAQ,OAAG,MAAM,KAAK,UAAU,KAAK,eAAe;AAAA,QAAC;AAAA,QAAC,MAAM,cAAa;AAAC,eAAK,UAAQ,MAAG,MAAM,KAAK,UAAU,GAAE,KAAK,QAAQ,cAAc;AAAA,QAAC;AAAA,QAAC,MAAM,cAAcD,KAAE,KAAK,iBAAgB;AAAC,cAAG,KAAK,UAAU,QAAO,KAAK,cAAa;AAAG,cAAIC,KAAE,KAAK,QAAQ,WAAUC,KAAE,MAAM,KAAK,UAAUF,IAAEC,EAAC;AAAE,iBAAM,CAAC,CAACC,MAAGA,GAAE,eAAaD;AAAA,QAAC;AAAA,QAAC,MAAM,UAAUD,IAAEC,IAAE;AAAC,cAAG,KAAK,cAAa,OAAKA,KAAE,KAAK,gBAAgBD,IAAEC,EAAC,GAAG,QAAO,KAAK,WAAWD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,gBAAgBD,IAAEC,IAAE;AAAC,iBAAO,WAAS,KAAK,QAAMD,KAAEC,KAAE,KAAK,OAAK,KAAK,IAAI,GAAE,KAAK,OAAKD,EAAC,IAAEC;AAAA,QAAC;AAAA,QAAC,IAAI,kBAAiB;AAAC,cAAG,MAAI,KAAK,OAAO,KAAK,OAAO,QAAO,KAAK,OAAO,KAAK,CAAC,EAAE;AAAA,QAAM;AAAA,QAAC,IAAI,mBAAkB;AAAC,iBAAO,KAAK,aAAW,KAAK,QAAQ;AAAA,QAAU;AAAA,QAAC,IAAI,YAAW;AAAC,iBAAO,WAAS,KAAK,QAAM,KAAK,oBAAkB,KAAK;AAAA,QAAI;AAAA,QAAC,OAAM;AAAC,iBAAO,KAAK,QAAQ,UAAQ,KAAK,YAAY,IAAE,KAAK,UAAU;AAAA,QAAC;AAAA,QAAC,QAAO;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAI,QAAO,cAAc,GAAE;AAAA,QAAC,MAAM,YAAW;AAAC,eAAK,UAAQ;AAAG,cAAID,KAAE,MAAM,EAAE,KAAK,KAAK;AAAE,eAAK,iBAAiBA,EAAC;AAAA,QAAC;AAAA,QAAC,cAAa;AAAC,iBAAO,KAAK,UAAQ,MAAG,KAAK,OAAK,KAAK,MAAM,MAAK,MAAM,YAAY;AAAA,QAAC;AAAA,QAAC,MAAM,WAAWA,IAAEC,IAAE;AAAC,cAAIC,KAAED,KAAED,KAAEC,KAAE,QAAOE,KAAE,KAAK,MAAM,MAAMH,IAAEE,EAAC,GAAEE,KAAE,MAAM,EAAED,EAAC;AAAE,iBAAO,KAAK,IAAIC,IAAEJ,IAAE,IAAE;AAAA,QAAC;AAAA,MAAC,CAAC;AAAE,UAAI,KAAG,OAAO,OAAO,EAAC,WAAU,MAAK,SAAQ,IAAG,OAAM,IAAG,aAAY,GAAE,gBAAe,GAAE,aAAY,GAAE,SAAQ,GAAE,WAAU,GAAE,aAAY,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,uBAAsB,GAAE,uBAAsB,GAAE,cAAae,IAAE,eAAc,GAAE,UAAS,GAAE,YAAW,GAAE,mBAAkB,GAAE,kBAAiB,IAAG,cAAa,IAAG,eAAc,IAAG,SAAQ,IAAG,OAAM,IAAG,gBAAe,IAAG,KAAI,IAAG,sBAAqB,IAAG,WAAU,IAAG,cAAa,IAAG,wBAAuB,IAAG,aAAY,IAAG,WAAU,IAAG,IAAI,eAAc;AAAC,eAAO,EAAE;AAAA,MAAY,GAAE,IAAI,YAAW;AAAC,eAAO,EAAE;AAAA,MAAS,GAAE,UAAS,GAAE,CAAC;AAAE,QAAE,IAAI,OAAM,cAAc,GAAE;AAAA,QAAC,MAAM,YAAW;AAAC,eAAK,UAAQ;AAAG,cAAIf,KAAE,MAAM,EAAE,KAAK,KAAK;AAAE,UAAAA,cAAa,cAAY,KAAK,iBAAiBA,EAAC,IAAEA,cAAa,cAAY,KAAK,YAAYA,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,WAAWA,IAAEC,IAAE;AAAC,cAAIC,KAAED,KAAED,KAAEC,KAAE,IAAE,QAAOE,KAAE,KAAK,QAAQ,eAAa,CAAC;AAAE,WAACH,MAAGE,QAAKC,GAAE,QAAM,SAAS,CAACH,IAAEE,EAAC,EAAE,KAAK,GAAG,CAAC;AAAI,cAAIE,KAAE,MAAM,EAAE,KAAK,OAAM,EAAC,SAAQD,GAAC,CAAC,GAAEE,KAAE,MAAMD,GAAE,YAAY,GAAEE,KAAED,GAAE;AAAW,cAAG,QAAMD,GAAE,OAAO,QAAOE,OAAIL,OAAI,KAAK,OAAKD,KAAEM,KAAG,KAAK,IAAID,IAAEL,IAAE,IAAE;AAAA,QAAC;AAAA,MAAC,CAAC;AAAE,QAAE,UAAU,YAAU,SAASA,IAAE;AAAC,YAAIC,KAAE,KAAK,UAAUD,EAAC,GAAEE,KAAE,KAAK,UAAUF,KAAE,CAAC;AAAE,eAAOC,KAAE,UAAQA,MAAG,KAAGC,KAAE,WAAS,OAAO,KAAG,QAAQ,KAAK,yEAAyE,GAAE,EAAED,EAAC,KAAG,EAAE,EAAE,IAAE,EAAEC,EAAC,KAAG,KAAK,EAAE,8DAA8D;AAAA,MAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,WAAWF,KAAE,GAAE;AAAC,cAAIC,KAAE,CAAC;AAAE,iBAAKD,KAAE,KAAK,KAAK,aAAW,KAAG;AAAC,gBAAIE,KAAE,KAAK,aAAaF,EAAC;AAAE,gBAAGC,GAAE,KAAKC,EAAC,GAAE,MAAIA,GAAE,OAAO;AAAM,YAAAF,MAAGE,GAAE;AAAA,UAAM;AAAC,iBAAOD;AAAA,QAAC;AAAA,QAAC,cAAcD,IAAE;AAAC,UAAAA,GAAE,QAAM,KAAK,WAAWA,GAAE,KAAK;AAAA,QAAC;AAAA,QAAC,QAAQA,IAAEC,IAAE;AAAC,iBAAO,WAASD,GAAE,SAAO,KAAK,cAAcA,EAAC,GAAEA,GAAE,MAAM,MAAM,CAAAA,OAAGA,GAAE,SAAOC,GAAE;AAAA,QAAC;AAAA,QAAC,aAAaD,IAAE;AAAC,cAAIC,KAAE,KAAK,KAAK,UAAUD,EAAC,GAAEE,KAAE,KAAK,KAAK,UAAUF,KAAE,GAAE,CAAC,GAAEG,KAAEH,KAAE;AAAE,iBAAO,MAAIC,OAAIA,KAAE,KAAK,KAAK,UAAUD,KAAE,CAAC,GAAEG,MAAG,IAAG,EAAC,QAAOH,IAAE,QAAOC,IAAE,MAAKC,IAAE,OAAMC,GAAC;AAAA,QAAC;AAAA,QAAC,iBAAiBH,IAAE;AAAC,cAAG,WAASA,GAAE,QAAQ;AAAO,cAAIC,KAAE,KAAK,KAAK,UAAUD,GAAE,KAAK;AAAE,UAAAA,GAAE,UAAQC,MAAG,IAAGD,GAAE,SAAO;AAAA,QAAC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUA,IAAEC,IAAE;AAAC,cAAG,MAAIA,GAAE,QAAM;AAAG,cAAIC,KAAEF,GAAE,UAAU,CAAC;AAAE,cAAGE,KAAE,GAAG,QAAM;AAAG,cAAIC,KAAE,IAAGC,KAAE,CAAC;AAAE,iBAAKD,KAAED,KAAG,CAAAE,GAAE,KAAKJ,GAAE,UAAUG,IAAE,CAAC,CAAC,GAAEA,MAAG;AAAE,iBAAOC,GAAE,SAAS,KAAK,IAAI;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,cAAIJ,KAAE,KAAK,KAAK,UAAU,CAAC,GAAEC,KAAE,KAAK,aAAaD,EAAC;AAAE,iBAAK,WAASC,GAAE,OAAM,CAAAD,MAAGC,GAAE,QAAO,MAAM,KAAK,KAAK,YAAYD,IAAE,EAAE,GAAEC,KAAE,KAAK,aAAaD,EAAC;AAAE,gBAAM,KAAK,KAAK,YAAYC,GAAE,QAAOA,GAAE,MAAM,GAAE,KAAK,iBAAiBA,EAAC,GAAE,KAAK,cAAcA,EAAC,GAAE,KAAK,QAAQ,IAAI,WAAS,MAAM,KAAK,QAAQA,EAAC,GAAE,KAAK,QAAQ,KAAK,WAAS,MAAM,KAAK,SAASA,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,gBAAgBD,IAAEC,IAAEC,IAAE;AAAC,gBAAM,KAAK,KAAK,YAAYD,IAAEC,EAAC;AAAE,cAAIC,KAAE,KAAK,KAAK,SAASF,IAAEC,EAAC;AAAE,eAAK,aAAaF,IAAEG,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,QAAQH,IAAE;AAAC,cAAIC,KAAE,KAAK,QAAQD,IAAE,MAAM;AAAE,cAAG,WAASC,GAAE;AAAO,cAAIC,KAAE,KAAK,QAAQD,IAAE,MAAM;AAAE,cAAG,WAASC,GAAE;AAAO,cAAIC,KAAE,KAAK,QAAQD,IAAE,MAAM;AAAE,qBAASC,MAAG,MAAM,KAAK,gBAAgB,OAAMA,GAAE,SAAO,IAAGA,GAAE,MAAM;AAAA,QAAC;AAAA,QAAC,MAAM,SAASH,IAAE;AAAC,cAAIC,KAAE,KAAK,QAAQD,IAAE,MAAM;AAAE,cAAG,WAASC,GAAE;AAAO,cAAIC,KAAE,KAAK,QAAQF,IAAE,MAAM;AAAE,cAAG,WAASE,GAAE;AAAO,cAAIC,KAAE,KAAK,oBAAoBF,EAAC,GAAEG,KAAE,KAAK,iBAAiBF,IAAEC,EAAC;AAAE,cAAG,WAASC,GAAE;AAAO,cAAG,CAACC,IAAEC,EAAC,IAAEF;AAAE,gBAAM,KAAK,KAAK,YAAYC,IAAEC,EAAC;AAAE,cAAIC,KAAE,IAAE,KAAK,KAAK,UAAUF,EAAC;AAAE,UAAAA,MAAGE,IAAED,MAAGC,IAAE,MAAM,KAAK,gBAAgB,QAAOF,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,oBAAoBN,IAAE;AAAC,eAAK,iBAAiBA,EAAC;AAAE,cAAIC,IAAEC,IAAEC,IAAEC,IAAEC,KAAEL,GAAE,OAAMM,KAAE,KAAK,KAAK,UAAUD,EAAC;AAAE,eAAIA,MAAG,GAAEC,QAAK;AAAC,gBAAGL,KAAE,KAAK,aAAaI,EAAC,GAAE,KAAK,iBAAiBJ,EAAC,GAAEC,KAAED,GAAE,OAAMA,GAAE,WAAS,MAAIE,KAAE,MAAIF,GAAE,UAAQ,IAAE,GAAEG,KAAE,KAAK,KAAK,UAAUF,KAAEC,KAAE,GAAE,CAAC,GAAE,WAASC,IAAG,QAAO,KAAK,KAAK,aAAaF,IAAEC,EAAC;AAAE,YAAAE,MAAGJ,GAAE;AAAA,UAAM;AAAA,QAAC;AAAA,QAAC,SAASD,IAAE;AAAC,cAAIC,KAAE,KAAK,KAAK,SAASD,EAAC;AAAE,iBAAM,CAACC,MAAG,GAAE,KAAGA,EAAC;AAAA,QAAC;AAAA,QAAC,iBAAiBD,IAAEC,IAAE;AAAC,eAAK,iBAAiBD,EAAC;AAAE,cAAIE,KAAEF,GAAE,OAAM,CAACG,IAAEC,EAAC,IAAE,KAAK,SAASF,IAAG,GAAE,CAACG,IAAEC,EAAC,IAAE,KAAK,SAASJ,IAAG,GAAEK,KAAE,MAAIP,GAAE,UAAQ,IAAE,GAAEQ,KAAE,MAAIR,GAAE,WAAS,MAAIA,GAAE,UAAQ,IAAE,GAAES,KAAEH,KAAEH,KAAEC,IAAEM,KAAE,MAAIV,GAAE,UAAQ,IAAE,GAAEW,KAAE,KAAK,KAAK,aAAaT,IAAEQ,EAAC;AAAE,eAAIR,MAAGQ,IAAEC,QAAK;AAAC,gBAAIX,KAAE,KAAK,KAAK,aAAaE,IAAEK,EAAC;AAAE,YAAAL,MAAGK,KAAEC,KAAE,IAAEH;AAAE,gBAAIK,KAAE,KAAK,KAAK,UAAUR,EAAC;AAAE,gBAAGA,MAAG,GAAEF,OAAIC,GAAE,QAAOS,KAAE,KAAG,QAAQ,KAAK,gJAAgJ,GAAE,CAAC,KAAK,KAAK,aAAaR,KAAEI,IAAEH,EAAC,GAAE,KAAK,KAAK,aAAaD,KAAEI,KAAEH,IAAEC,EAAC,CAAC;AAAE,YAAAF,MAAGQ,KAAED;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,MAAC,MAAM,WAAW,GAAE;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAI,QAAO,EAAE,GAAE,EAAE,IAAI,QAAO,EAAE,GAAE,EAAE,GAAE,CAAC,QAAO,MAAM,GAAE,CAAC,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,2BAA2B,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,MAAM,GAAE,CAAC,KAAI,OAAO,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,qBAAqB,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,uBAAuB,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,qBAAqB,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,MAAM,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,KAAK,GAAE,CAAC,OAAM,QAAQ,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,WAAW,CAAC,CAAC,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,KAAK,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,2BAA2B,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,6BAA6B,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,MAAK,WAAW,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,MAAM,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,YAAY,CAAC,CAAC,GAAE,EAAE,GAAE,OAAM,CAAC,CAAC,GAAE,cAAc,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,iBAAiB,GAAE,CAAC,GAAE,cAAc,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,cAAc,GAAE,CAAC,GAAE,eAAe,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,QAAQ,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,kBAAkB,GAAE,CAAC,IAAG,mBAAmB,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,cAAc,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,sBAAsB,CAAC,CAAC,GAAE,EAAE,GAAE,CAAC,QAAO,MAAM,GAAE,CAAC,CAAC,KAAI,EAAC,GAAE,uBAAsB,GAAE,qBAAoB,GAAE,cAAa,GAAE,mBAAkB,GAAE,uCAAsC,GAAE,gBAAe,GAAE,sCAAqC,GAAE,gBAAe,CAAC,GAAE,CAAC,KAAI,EAAC,GAAE,QAAO,GAAE,UAAS,GAAE,KAAI,CAAC,CAAC,CAAC;AAAE,UAAI,KAAG,EAAE,GAAE,QAAO,CAAC,CAAC,OAAM,EAAC,GAAE,eAAc,GAAE,UAAS,GAAE,kBAAiB,GAAE,qBAAoB,GAAE,oBAAmB,GAAE,oBAAmB,GAAE,kBAAiB,GAAE,iBAAgB,GAAE,iBAAgB,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,KAAI,GAAE,KAAI,GAAE,MAAK,GAAE,MAAK,GAAE,KAAI,GAAE,KAAI,GAAE,IAAG,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,WAAU,GAAE,WAAU,GAAE,yBAAwB,GAAE,QAAO,GAAE,aAAY,GAAE,WAAU,GAAE,WAAU,KAAI,QAAO,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,WAAU,GAAE,YAAW,GAAE,eAAc,GAAE,iCAAgC,GAAE,SAAQ,GAAE,gBAAe,IAAG,kBAAiB,IAAG,SAAQ,IAAG,yCAAwC,IAAG,0CAAyC,IAAG,2CAA0C,IAAG,uCAAsC,IAAG,oBAAmB,IAAG,oBAAmB,IAAG,oBAAmB,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,IAAG,uBAAsB,KAAI,QAAO,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,sBAAqB,GAAE,eAAc,GAAE,oCAAmC,GAAE,gCAA+B,GAAE,sCAAqC,IAAG,iEAAgE,IAAG,6DAA4D,IAAG,6CAA4C,IAAG,iCAAgC,IAAG,0BAAyB,IAAG,qDAAoD,IAAG,iDAAgD,IAAG,qBAAoB,IAAG,uCAAsC,IAAG,kEAAiE,IAAG,8DAA6D,IAAG,8DAA6D,IAAG,yFAAwF,IAAG,qFAAoF,IAAG,kDAAiD,IAAG,6EAA4E,IAAG,wEAAuE,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,eAAc,GAAE,8BAA6B,GAAE,8BAA6B,GAAE,gCAA+B,GAAE,gCAA+B,GAAE,oBAAmB,GAAE,iCAAgC,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,gBAAe,GAAE,4BAA2B,GAAE,iBAAgB,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,wBAAuB,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,UAAS,GAAE,UAAS,GAAE,2BAA0B,GAAE,wBAAuB,GAAE,sBAAqB,GAAE,YAAW,GAAE,gBAAe,GAAE,WAAU,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,QAAO,GAAE,UAAS,GAAE,eAAc,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,QAAO,GAAE,SAAQ,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,YAAW,GAAE,aAAY,GAAE,YAAW,GAAE,SAAQ,GAAE,QAAO,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,QAAO,GAAE,eAAc,GAAE,gBAAe,GAAE,iBAAgB,GAAE,iBAAgB,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,WAAU,GAAE,SAAQ,GAAE,SAAQ,GAAE,UAAS,CAAC,GAAE,CAAC,OAAM,EAAC,GAAE,WAAU,GAAE,yBAAwB,GAAE,2BAA0B,GAAE,0CAAyC,CAAC,CAAC,CAAC;AAAE,YAAM,KAAG,EAAC,GAAE,mCAAkC,GAAE,QAAO,GAAE,aAAY;AAAE,SAAG,IAAI,OAAM,EAAE,GAAE,GAAG,IAAI,OAAM,EAAE;AAAE,YAAM,KAAG,EAAC,GAAE,UAAS,GAAE,OAAM,GAAE,OAAM;AAAE,eAAS,GAAGT,IAAE;AAAC,eAAM,YAAU,OAAOA,MAAG,WAASA,GAAE,SAAOA,GAAE,CAAC,IAAEA;AAAA,MAAC;AAAC,eAAS,GAAGA,IAAE;AAAC,YAAIC,KAAE,MAAM,KAAKD,EAAC,EAAE,MAAM,CAAC;AAAE,eAAOC,GAAE,CAAC,IAAE,OAAKA,KAAEA,GAAE,KAAK,CAAAD,OAAG,OAAO,aAAaA,EAAC,EAAE,IAAG,QAAMC,GAAE,CAAC,KAAG,MAAIA,GAAE,CAAC,KAAGA,GAAE,IAAI,GAAEA,GAAE,KAAK,GAAG;AAAA,MAAC;AAAC,eAAS,GAAGD,IAAE;AAAC,YAAG,YAAU,OAAOA,IAAE;AAAC,cAAG,CAACC,IAAEC,IAAEC,IAAEC,IAAEC,IAAEC,EAAC,IAAEN,GAAE,KAAK,EAAE,MAAM,QAAQ,EAAE,IAAI,MAAM,GAAEO,KAAE,IAAI,KAAKN,IAAEC,KAAE,GAAEC,EAAC;AAAE,iBAAO,OAAO,MAAMC,EAAC,KAAG,OAAO,MAAMC,EAAC,KAAG,OAAO,MAAMC,EAAC,MAAIC,GAAE,SAASH,EAAC,GAAEG,GAAE,WAAWF,EAAC,GAAEE,GAAE,WAAWD,EAAC,IAAG,OAAO,MAAM,CAACC,EAAC,IAAEP,KAAEO;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAGP,IAAE;AAAC,YAAG,YAAU,OAAOA,GAAE,QAAOA;AAAE,YAAIC,KAAE,CAAC;AAAE,YAAG,MAAID,GAAE,CAAC,KAAG,MAAIA,GAAEA,GAAE,SAAO,CAAC,EAAE,UAAQE,KAAE,GAAEA,KAAEF,GAAE,QAAOE,MAAG,EAAE,CAAAD,GAAE,KAAK,GAAGD,GAAEE,KAAE,CAAC,GAAEF,GAAEE,EAAC,CAAC,CAAC;AAAA,YAAO,UAAQA,KAAE,GAAEA,KAAEF,GAAE,QAAOE,MAAG,EAAE,CAAAD,GAAE,KAAK,GAAGD,GAAEE,EAAC,GAAEF,GAAEE,KAAE,CAAC,CAAC,CAAC;AAAE,eAAO,EAAE,OAAO,cAAc,GAAGD,EAAC,CAAC;AAAA,MAAC;AAAC,eAAS,GAAGD,IAAEC,IAAE;AAAC,eAAOD,MAAG,IAAEC;AAAA,MAAC;AAAC,SAAG,IAAI,OAAM,EAAE,GAAE,GAAG,IAAI,OAAM,EAAE,GAAE,GAAG,IAAI,OAAM,EAAE,GAAE,EAAE,GAAE,CAAC,QAAO,MAAM,GAAE,CAAC,CAAC,OAAM,SAASD,IAAE;AAAC,eAAM,YAAU,OAAOA,KAAE,EAAEA,EAAC,IAAEA;AAAA,MAAC,CAAC,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,CAAC,CAAC,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,GAAE,CAAC,OAAM,EAAE,CAAC,CAAC,GAAE,EAAE,GAAE,OAAM,CAAC,CAAC,GAAE,CAAAA,OAAG,MAAM,KAAKA,EAAC,EAAE,KAAK,GAAG,CAAC,GAAE,CAAC,GAAE,CAAAA,OAAG,MAAM,KAAKA,EAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAAE,YAAM,KAAG,wBAAuB,KAAG;AAAA,MAAqC,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUA,IAAEC,IAAE;AAAC,iBAAO,QAAMD,GAAE,SAASC,KAAE,CAAC,KAAG,eAAaD,GAAE,UAAUC,KAAE,CAAC,KAAGD,GAAE,UAAUC,KAAE,GAAE,GAAG,MAAM,MAAI;AAAA,QAAE;AAAA,QAAC,OAAO,aAAaD,IAAEC,IAAE;AAAC,iBAAOD,GAAE,UAAUC,KAAE,GAAE,GAAG,MAAM,MAAI,KAAG,KAAG,IAAE,+BAA+B,SAAO;AAAA,QAAC;AAAA,QAAC,OAAO,aAAaD,IAAEC,IAAE;AAAC,cAAIC,KAAE,MAAM,aAAaF,IAAEC,EAAC;AAAE,iBAAOC,GAAE,eAAaA,GAAE,WAAS,OAAKA,GAAE,cAAaA,GAAE,gBAAcA,GAAE,aAAWF,GAAE,SAASC,KAAE,EAAE,GAAEC,GAAE,cAAYF,GAAE,SAASC,KAAE,EAAE,GAAE,MAAID,GAAE,SAASC,KAAE,EAAE,KAAGC,GAAE,kBAAgBA,GAAE,aAAW,IAAE,GAAEA,GAAE,cAAY,KAAIA;AAAA,QAAC;AAAA,QAAC,OAAO,oBAAoBF,IAAE;AAAC,iBAAOA,GAAE,KAAK,CAAAA,OAAGA,GAAE,MAAM,UAAU,EAAE,EAAE,KAAK,EAAE;AAAA,QAAC;AAAA,QAAC,eAAeA,IAAE;AAAC,iBAAM,YAAU,OAAOA,KAAEA,KAAE,EAAE,KAAKA,EAAC,EAAE,UAAU;AAAA,QAAC;AAAA,QAAC,MAAMA,KAAE,KAAK,OAAM;AAAC,cAAG,CAAC,KAAK,aAAa,MAAM,QAAOA;AAAE,UAAAA,MAAE,SAASA,IAAE;AAAC,gBAAIC,KAAE,CAAC,GAAEC,KAAE,CAAC;AAAE,qBAAQF,MAAK,GAAG,CAAAC,GAAED,EAAC,IAAE,CAAC,GAAEE,GAAEF,EAAC,IAAE;AAAE,mBAAOA,GAAE,QAAQ,KAAI,CAACA,IAAEG,IAAEC,OAAI;AAAC,kBAAG,QAAMD,IAAE;AAAC,oBAAIA,KAAE,EAAED,GAAEE,EAAC;AAAE,uBAAOH,GAAEG,EAAC,EAAE,KAAKD,EAAC,GAAE,GAAGH,EAAC,IAAIG,EAAC;AAAA,cAAE;AAAC,qBAAM,GAAGH,EAAC,IAAIC,GAAEG,EAAC,EAAE,IAAI,CAAC;AAAA,YAAE,EAAE;AAAA,UAAC,GAAEJ,EAAC;AAAE,cAAIC,KAAE,GAAG,QAAQD,IAAE,OAAM,aAAa;AAAE,gBAAIC,GAAE,UAAQA,GAAE,KAAK,IAAI,GAAG,OAAM,eAAc,QAAOD,EAAC,CAAC;AAAE,cAAIE,IAAEC,KAAE,CAAC;AAAE,mBAAQH,MAAKC,GAAE,UAAQA,MAAKD,GAAE,WAAW,CAAAE,KAAE,GAAGD,GAAE,IAAGE,EAAC,GAAE,GAAGF,IAAEC,EAAC;AAAE,kBAAO,SAASF,IAAE;AAAC,gBAAIC;AAAE,qBAAQC,MAAKF,GAAE,CAAAC,KAAED,GAAEE,EAAC,IAAE,EAAEF,GAAEE,EAAC,CAAC,GAAE,WAASD,MAAG,OAAOD,GAAEE,EAAC;AAAE,mBAAO,EAAEF,EAAC;AAAA,UAAC,GAAEG,EAAC;AAAA,QAAC;AAAA,QAAC,eAAeH,IAAEC,IAAE;AAAC,cAAG,KAAK,aAAa,MAAM,UAAO,CAACC,IAAEC,EAAC,KAAI,OAAO,QAAQF,EAAC,EAAE,SAAOC,IAAE;AAAA,YAAC,KAAI;AAAO,mBAAK,qBAAqBF,IAAE,QAAOG,EAAC;AAAE;AAAA,YAAM,KAAI;AAAO,mBAAK,qBAAqBH,IAAE,QAAOG,EAAC;AAAE;AAAA,YAAM,KAAI;AAAQ;AAAA,YAAM;AAAQ,mBAAK,qBAAqBH,IAAEE,IAAEC,EAAC;AAAA,UAAC;AAAA,cAAM,CAAAH,GAAE,MAAIC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,KAAK,GAAE,EAAE,IAAG,gBAAe,IAAE,GAAE,EAAE,IAAI,OAAM,EAAE;AAAA,MAAE,MAAM,GAAE;AAAA,QAAC,OAAO,QAAQD,IAAE;AAAC,iBAAO,GAAGA,IAAE,qDAAqD,EAAE,IAAI,GAAG,WAAW;AAAA,QAAC;AAAA,QAAC,OAAO,YAAYA,IAAE;AAAC,cAAIC,KAAED,GAAE,CAAC,GAAEE,KAAEF,GAAE,CAAC,GAAEG,KAAEH,GAAE,CAAC,EAAE,MAAM,GAAE,EAAE;AAAE,iBAAOG,KAAE,GAAGA,EAAC,GAAE,IAAI,GAAGF,IAAEC,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,YAAYH,IAAEC,IAAEC,IAAE;AAAC,eAAK,KAAGF,IAAE,KAAK,OAAKC,IAAE,KAAK,QAAMC;AAAA,QAAC;AAAA,QAAC,YAAW;AAAC,iBAAO,KAAK;AAAA,QAAK;AAAA,MAAC;AAAC,YAAM,KAAG;AAAA,MAAa,MAAM,GAAE;AAAA,QAAC,OAAO,QAAQF,IAAEC,IAAEC,IAAE;AAAC,cAAG,WAASD,MAAG,WAASC,IAAE;AAAC,YAAAD,KAAEA,MAAG,IAAGC,KAAEA,MAAG;AAAG,gBAAIC,KAAE,IAAI,OAAO,KAAKF,EAAC,MAAMC,EAAC,2FAA0F,IAAI;AAAA,UAAC,MAAM,CAAAC,KAAE;AAAqG,iBAAO,GAAGH,IAAEG,EAAC,EAAE,IAAI,GAAG,WAAW;AAAA,QAAC;AAAA,QAAC,OAAO,YAAYH,IAAE;AAAC,cAAIC,KAAED,GAAE,CAAC,GAAEE,KAAEF,GAAE,CAAC,GAAEG,KAAEH,GAAE,CAAC,GAAEI,KAAEJ,GAAE,CAAC;AAAE,iBAAO,IAAI,GAAGC,IAAEC,IAAEC,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,YAAYJ,IAAEC,IAAEC,IAAEC,IAAE;AAAC,eAAK,KAAGH,IAAE,KAAK,OAAKC,IAAE,KAAK,aAAWC,IAAE,KAAK,WAASC,IAAE,KAAK,QAAM,GAAG,QAAQD,EAAC,GAAE,KAAK,WAAS,GAAG,QAAQC,EAAC,GAAE,KAAK,QAAM,MAAI,KAAK,SAAS,SAAO,GAAGA,EAAC,IAAE,QAAO,KAAK,aAAW,CAAC,GAAG,KAAK,OAAM,GAAG,KAAK,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAI,cAAa;AAAC,iBAAO,WAAS,KAAK,SAAO,MAAI,KAAK,MAAM,UAAQ,MAAI,KAAK,SAAS;AAAA,QAAM;AAAA,QAAC,IAAI,kBAAiB;AAAC,iBAAO,MAAI,KAAK,SAAS,UAAQ,KAAK,SAAS,CAAC,EAAE;AAAA,QAAM;AAAA,QAAC,IAAI,SAAQ;AAAC,cAAG,EAAC,IAAGH,IAAE,MAAKC,GAAC,IAAE;AAAK,iBAAM,UAAQD,OAAI,UAAQC,MAAG,UAAQA,MAAG,UAAQA;AAAA,QAAE;AAAA,QAAC,IAAI,aAAY;AAAC,iBAAM,UAAQ,KAAK,MAAI,SAAO,KAAK;AAAA,QAAI;AAAA,QAAC,YAAW;AAAC,cAAG,MAAI,KAAK,WAAW,UAAQ,WAAS,KAAK,MAAM;AAAO,cAAG,KAAK,YAAY,QAAO,KAAK;AAAM,cAAG,KAAK,gBAAgB,QAAO,KAAK,SAAS,CAAC,EAAE,UAAU;AAAE,cAAG,KAAK,OAAO,QAAO,GAAG,KAAK,SAAS,IAAI,EAAE,CAAC;AAAE,cAAG,KAAK,cAAY,MAAI,KAAK,SAAS,UAAQ,MAAI,KAAK,MAAM,OAAO,QAAO,KAAK,SAAS,CAAC,EAAE,UAAU;AAAE,cAAID,KAAE,CAAC;AAAE,mBAAQC,MAAK,KAAK,WAAW,IAAGA,IAAED,EAAC;AAAE,iBAAO,WAAS,KAAK,UAAQA,GAAE,QAAM,KAAK,QAAO,EAAEA,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAGA,IAAEC,IAAE;AAAC,YAAIC,KAAEF,GAAE,UAAU;AAAE,mBAASE,OAAID,GAAED,GAAE,IAAI,IAAEE;AAAA,MAAE;AAAC,UAAI,KAAG,CAAAF,OAAGA,GAAE,UAAU,GAAE,KAAG,CAAAA,OAAG,MAAIA,GAAE,SAAOA,GAAE,CAAC,IAAEA,IAAE,KAAG,CAACA,IAAEC,OAAIA,GAAED,EAAC,IAAEC,GAAED,EAAC,IAAEC,GAAED,EAAC,IAAE,CAAC;AAAE,eAAS,GAAGA,IAAEC,IAAE;AAAC,YAAIC,IAAEC,KAAE,CAAC;AAAE,YAAG,CAACH,GAAE,QAAOG;AAAE,eAAK,UAAQD,KAAED,GAAE,KAAKD,EAAC,KAAI,CAAAG,GAAE,KAAKD,EAAC;AAAE,eAAOC;AAAA,MAAC;AAAC,eAAS,GAAGH,IAAE;AAAC,aAAG,SAASA,IAAE;AAAC,iBAAO,QAAMA,MAAG,WAASA,MAAG,gBAAcA,MAAG,OAAKA,MAAG,OAAKA,GAAE,KAAK;AAAA,QAAC,GAAEA,EAAC,EAAE;AAAO,YAAIC,KAAE,OAAOD,EAAC;AAAE,YAAG,CAAC,OAAO,MAAMC,EAAC,EAAE,QAAOA;AAAE,YAAIC,KAAEF,GAAE,YAAY;AAAE,eAAM,WAASE,MAAG,YAAUA,MAAGF,GAAE,KAAK;AAAA,MAAC;AAAC,YAAM,KAAG,CAAC,UAAS,WAAU,WAAU,WAAU,iBAAiB,GAAE,KAAG,IAAI,OAAO,WAAW,GAAG,KAAK,GAAG,CAAC,KAAI,GAAG;AAAE,UAAI,KAAG,OAAO,OAAO,EAAC,WAAU,MAAK,SAAQ,IAAG,OAAM,IAAG,aAAY,GAAE,gBAAe,GAAE,aAAY,GAAE,SAAQ,GAAE,WAAU,GAAE,aAAY,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,uBAAsB,GAAE,uBAAsB,GAAE,cAAae,IAAE,eAAc,GAAE,UAAS,GAAE,YAAW,GAAE,mBAAkB,GAAE,kBAAiB,IAAG,cAAa,IAAG,eAAc,IAAG,SAAQ,IAAG,OAAM,IAAG,gBAAe,IAAG,KAAI,IAAG,sBAAqB,IAAG,WAAU,IAAG,cAAa,IAAG,wBAAuB,IAAG,aAAY,IAAG,WAAU,IAAG,IAAI,eAAc;AAAC,eAAO,EAAE;AAAA,MAAY,GAAE,IAAI,YAAW;AAAC,eAAO,EAAE;AAAA,MAAS,GAAE,UAAS,GAAE,CAAC;AAAE,YAAM,KAAG,CAAC,OAAM,OAAM,QAAO,MAAM,GAAE,KAAG,MAAI;AAAA,MAAC;AAAE,qBAAe,GAAGf,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAED,GAAEF,EAAC;AAAE,eAAOG,GAAE,UAAQ,MAAGA,GAAE,QAAM,MAAG,EAAE,IAAIH,EAAC,EAAE,MAAMC,IAAEE,EAAC;AAAA,MAAC;AAAC,UAAI,KAAG,EAAE,OAAM,CAAAH,OAAGA,GAAE,SAAS;AAAE,QAAE,IAAI,MAAK,cAAc,GAAE;AAAA,QAAC,MAAM,YAAW;AAAC,eAAK,UAAQ,OAAG,KAAK,KAAG,MAAM;AAAG,cAAIA,KAAE,MAAM,KAAK,GAAG,SAAS,KAAK,KAAK;AAAE,eAAK,YAAYA,EAAC;AAAA,QAAC;AAAA,QAAC,MAAM,cAAa;AAAC,eAAK,UAAQ,MAAG,KAAK,KAAG,MAAM,IAAG,MAAM,KAAK,KAAK,GAAE,MAAM,KAAK,UAAU,GAAE,KAAK,QAAQ,cAAc;AAAA,QAAC;AAAA,QAAC,MAAM,OAAM;AAAC,qBAAS,KAAK,OAAK,KAAK,KAAG,MAAM,KAAK,GAAG,KAAK,KAAK,OAAM,GAAG,GAAE,KAAK,QAAM,MAAM,KAAK,GAAG,KAAK,KAAK,KAAK,GAAG;AAAA,QAAK;AAAA,QAAC,MAAM,WAAWA,IAAEC,IAAE;AAAC,qBAAS,KAAK,MAAI,MAAM,KAAK,KAAK,GAAED,KAAEC,KAAE,KAAK,SAAOA,KAAE,KAAK,OAAKD;AAAG,cAAIE,KAAE,KAAK,SAASF,IAAEC,IAAE,IAAE;AAAE,iBAAO,MAAM,KAAK,GAAG,KAAKC,GAAE,UAAS,GAAED,IAAED,EAAC,GAAEE;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,cAAG,KAAK,IAAG;AAAC,gBAAIF,KAAE,KAAK;AAAG,iBAAK,KAAG,QAAO,MAAMA,GAAE,MAAM;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAE,QAAE,IAAI,UAAS,cAAc,GAAE;AAAA,QAAC,eAAeA,IAAE;AAAC,gBAAM,GAAGA,EAAC,GAAE,KAAK,QAAM,KAAK,MAAM,QAAQ,4BAA2B,EAAE,GAAE,KAAK,OAAK,KAAK,MAAM,SAAO,IAAE,GAAE,KAAK,MAAM,SAAS,IAAI,IAAE,KAAK,QAAM,IAAE,KAAK,MAAM,SAAS,GAAG,MAAI,KAAK,QAAM;AAAA,QAAE;AAAA,QAAC,MAAM,WAAWA,IAAEC,IAAE;AAAC,cAAIC,IAAEC,IAAEC,KAAE,KAAK;AAAM,qBAASJ,MAAGA,KAAE,GAAEE,KAAE,GAAEC,KAAE,MAAID,KAAE,IAAE,KAAK,MAAMF,KAAE,CAAC,GAAEG,KAAEH,KAAEE,KAAE,IAAE,IAAG,WAASD,OAAIA,KAAE,KAAK;AAAM,cAAIK,KAAEN,KAAEC,IAAEO,KAAEN,KAAE,IAAE,KAAK,KAAKI,KAAE,CAAC;AAAE,UAAAF,KAAEA,GAAE,MAAMF,IAAEM,EAAC;AAAE,cAAIC,KAAE,KAAK,IAAIR,IAAE,KAAK,OAAKD,EAAC;AAAE,cAAG,GAAE;AAAC,gBAAIC,KAAE,EAAE,KAAKG,IAAE,QAAQ,EAAE,MAAMD,IAAEA,KAAEM,EAAC;AAAE,mBAAO,KAAK,IAAIR,IAAED,IAAE,IAAE;AAAA,UAAC;AAAC;AAAC,gBAAIC,KAAE,KAAK,SAASD,IAAES,IAAE,IAAE,GAAEP,KAAE,KAAKE,EAAC,GAAEC,KAAEJ,GAAE,QAAQ;AAAE,qBAAQD,KAAE,GAAEA,KAAES,IAAET,KAAI,CAAAK,GAAEL,EAAC,IAAEE,GAAE,WAAWC,KAAEH,EAAC;AAAE,mBAAOC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUD,IAAEC,IAAE;AAAC,iBAAO,UAAQA,MAAG,UAAQA;AAAA,QAAC;AAAA,QAAC,cAAcD,IAAE;AAAC,cAAG,EAAC,MAAKC,IAAE,KAAIC,IAAE,MAAKC,IAAE,KAAIC,GAAC,IAAEJ;AAAE,UAAAE,GAAE,WAASD,GAAE,KAAK,IAAI,CAAC,GAAEE,GAAE,WAASF,GAAE,KAAK,IAAI,CAAC,GAAEG,GAAE,WAASH,GAAE,KAAK,IAAIa,EAAC,GAAEb,GAAE,gBAAgB;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,cAAG,EAAC,MAAKD,IAAE,KAAIC,IAAE,MAAKC,IAAE,KAAIC,GAAC,IAAE,KAAK;AAAQ,cAAGH,GAAE,WAASC,GAAE,WAASC,GAAE,WAASC,GAAE,SAAQ;AAAC,gBAAIH,KAAE,KAAK,IAAI,EAAE,KAAK,OAAO,GAAE,KAAK,QAAQ,SAAS;AAAE,kBAAM,KAAK,KAAK,YAAY,GAAEA,EAAC,GAAE,KAAK,aAAa,QAAO,KAAK,IAAI,GAAE,KAAK,QAAQ,KAAK,YAAY,GAAE,MAAM,KAAK,QAAQ,KAAK,eAAe,GAAE,KAAK,uBAAuB,KAAK,GAAE,KAAK,uBAAuB,MAAM,GAAE,KAAK,uBAAuB,KAAK;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,uBAAuBA,IAAE;AAAC,cAAG,KAAK,QAAQ,KAAKA,EAAC,GAAE;AAAC,gBAAIC,KAAE,KAAK,QAAQ,KAAKD,EAAC;AAAE,iBAAK,cAAcA,IAAEC,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAI,QAAO,EAAE;AAAE,UAAI,KAAG,EAAE,MAAM;AAAE,YAAM,KAAG,qBAAoB,KAAG,QAAO,KAAG,QAAO,KAAG,QAAO,KAAG,QAAO,KAAG,CAAC,IAAG,IAAG,IAAG,IAAG,MAAM;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,eAAeD,IAAE;AAAC,gBAAM,GAAGA,EAAC,GAAE,EAAE,MAAK,eAAc,CAAAA,OAAG,KAAK,OAAO,KAAKA,EAAC,EAAE,GAAE,EAAE,MAAK,cAAa,CAAC,CAAC,GAAE,EAAE,MAAK,iBAAgB,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,OAAO,UAAUA,IAAEC,IAAE;AAAC,iBAAO,UAAQA,MAAG,eAAaD,GAAE,UAAU,CAAC,KAAG,cAAYA,GAAE,UAAU,CAAC;AAAA,QAAC;AAAA,QAAC,MAAM,QAAO;AAAC,cAAG,EAAC,MAAKA,GAAC,IAAE;AAAK,gBAAM,KAAK,qBAAqB,iBAAc,QAAOA,GAAE,UAAU,GAAE,MAAM,KAAK,aAAa,KAAK,UAAU,GAAE,KAAK,SAAS,GAAE,KAAK,gBAAgB,GAAE,MAAM,KAAK,SAAS,EAAE,MAAM,KAAK,UAAU,GAAE,MAAM,KAAK,QAAQ,EAAE,MAAM,KAAK,UAAU,GAAE,MAAM,KAAK,QAAQ,EAAE,MAAM,KAAK,UAAU;AAAA,QAAC;AAAA,QAAC,MAAM,qBAAqBA,IAAEC,IAAE;AAAC,cAAG,EAAC,MAAKC,GAAC,IAAE;AAAK,iBAAKF,KAAEC,MAAG;AAAC,gBAAIA,KAAEC,GAAE,UAAUF,EAAC,GAAEG,KAAED,GAAE,UAAUF,KAAE,CAAC,GAAEI,KAAEF,GAAE,UAAUF,KAAE,GAAE,CAAC,EAAE,YAAY,GAAEK,KAAEJ,KAAE,IAAE,IAAE,GAAEK,KAAE,EAAC,MAAKF,IAAE,QAAOJ,IAAE,QAAOK,IAAE,OAAML,KAAE,IAAE,GAAE,MAAKC,IAAE,QAAOE,GAAC;AAAE,eAAG,SAASC,EAAC,IAAE,KAAK,WAAW,KAAKE,EAAC,IAAE,KAAK,cAAc,KAAKA,EAAC,GAAEN,MAAGK;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,kBAAiB;AAAC,cAAIL,KAAE,KAAK,WAAW,QAAQ,CAAAA,OAAGA,GAAE,SAAO,GAAG;AAAE,mBAAQC,MAAKD,IAAE;AAAC,gBAAG,CAACA,IAAEE,EAAC,IAAE,KAAK,KAAK,UAAUD,GAAE,OAAMA,GAAE,IAAI,EAAE,MAAM,IAAI;AAAE,iBAAK,mBAAmBD,IAAEE,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,mBAAmBF,IAAEC,IAAE;AAAC,cAAIC,KAAE,KAAK,QAAQ;AAAK,UAAAA,MAAGA,GAAE,IAAI,IAAIF,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,WAAU;AAAC,cAAID,KAAE,KAAK,WAAW,MAAM,CAAAA,OAAGA,GAAE,SAAO,GAAG;AAAE,UAAAA,MAAG,UAAK,KAAK,QAAQ,KAAK,WAAS,KAAK,aAAa,IAAGA,GAAE,KAAK;AAAA,QAAC;AAAA,QAAC,MAAM,WAAU;AAAC,cAAIA,KAAE,KAAK,WAAW,MAAM,CAAAA,OAAG,WAASA,GAAE,KAAK;AAAE,UAAAA,MAAG,KAAK,cAAc,QAAOA,GAAE,KAAK;AAAA,QAAC;AAAA,QAAC,MAAM,UAAS;AAAC,cAAIA,KAAE,KAAK,WAAW,QAAQ,CAAAA,OAAGA,GAAE,SAAO,GAAG;AAAE,mBAAQC,MAAKD,IAAE;AAAC,YAAAC,GAAE,MAAM,UAAU,GAAE,GAAG,MAAM,MAAI,MAAI,KAAK,cAAc,OAAMA,GAAE,KAAK;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,MAAM,UAAS;AAAC,cAAID,KAAE,KAAK,WAAW,MAAM,CAAAA,OAAGA,GAAE,SAAO,GAAG;AAAE,cAAG,CAACA,GAAE;AAAO,cAAG,EAAC,OAAMC,GAAC,IAAED,IAAEE,KAAED,GAAE,cAAc,GAAE,EAAE,GAAEE,KAAE;AAAE,iBAAKA,KAAE,MAAI,MAAID,GAAEC,EAAC,IAAG,CAAAA;AAAI,cAAIE,KAAEF,KAAE,GAAEG,KAAEL,GAAE,UAAU,GAAEE,EAAC;AAAE,cAAG,KAAK,mBAAmB,eAAcG,EAAC,GAAE,GAAE;AAAC,gBAAIN,KAAE,MAAM,IAAGE,KAAED,GAAE,cAAcI,EAAC;AAAE,YAAAH,KAAEF,GAAE,YAAYE,EAAC,GAAE,KAAK,cAAc,OAAMA,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,KAAK,GAAE,EAAE,IAAI,OAAM,EAAE,GAAE,EAAE,GAAE,WAAU,CAAC,CAAC,GAAE,cAAc,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,MAAK,wBAAwB,GAAE,CAAC,MAAK,mBAAmB,GAAE,CAAC,MAAK,oBAAoB,CAAC,CAAC,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,IAAG,oBAAoB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,OAAM,QAAQ,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,2BAA2B,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,kBAAkB,CAAC,CAAC;AAAE,UAAI,KAAG,CAAC,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,wBAAwB,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,qBAAqB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,YAAY,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,qBAAqB,GAAE,CAAC,KAAI,wBAAwB,GAAE,CAAC,KAAI,qBAAqB,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,oBAAoB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,+BAA+B,GAAE,CAAC,OAAM,+BAA+B,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,QAAQ,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,QAAQ,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,MAAM,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,yBAAyB,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,UAAU,GAAE,CAAC,OAAM,SAAS,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,wBAAwB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,gBAAgB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,0BAA0B,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,eAAe,GAAE,CAAC,OAAM,WAAW,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,mBAAmB,GAAE,CAAC,OAAM,sBAAsB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,oBAAoB,GAAE,CAAC,OAAM,YAAY,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,uBAAuB,GAAE,CAAC,OAAM,kBAAkB,GAAE,CAAC,OAAM,qBAAqB,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,aAAa,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,iBAAiB,GAAE,CAAC,OAAM,cAAc,GAAE,CAAC,OAAM,QAAQ,CAAC;AAAE,QAAE,GAAE,QAAO,EAAE,GAAE,EAAE,GAAE,QAAO,EAAE,GAAE,EAAE,GAAE,OAAM,CAAC,CAAC,IAAG,EAAC,GAAE,kBAAiB,GAAE,aAAY,CAAC,GAAE,CAAC,IAAG,EAAC,GAAE,cAAa,GAAE,SAAQ,GAAE,iBAAgB,CAAC,CAAC,CAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUF,IAAEC,IAAE;AAAC,iBAAO,QAAMD,GAAE,SAASC,KAAE,CAAC,KAAG,eAAaD,GAAE,UAAUC,KAAE,CAAC,KAAG,MAAID,GAAE,SAASC,KAAE,CAAC;AAAA,QAAC;AAAA,QAAC,QAAO;AAAC,iBAAO,KAAK,UAAU,GAAE,KAAK,UAAU,GAAE,KAAK;AAAA,QAAM;AAAA,QAAC,YAAW;AAAC,eAAK,MAAI,oBAAI,IAAI,CAAC,CAAC,GAAE,KAAK,MAAM,UAAU,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,SAAS,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,UAAU,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,UAAU,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,SAAS,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAG,gBAAe,CAAC,GAAE,EAAE,IAAI,QAAO,EAAE,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,GAAE,iBAAiB,CAAC,CAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,QAAO;AAAC,iBAAO,KAAK,UAAU,GAAE,KAAK,UAAU,GAAE,KAAK;AAAA,QAAM;AAAA,QAAC,YAAW;AAAC,eAAK,MAAI,IAAI,IAAI,CAAC,CAAC,GAAE,KAAK,MAAM,UAAU,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,UAAU,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,SAAS,CAAC,CAAC,GAAE,CAAC,GAAE,KAAK,MAAM,SAAS,CAAC,CAAC,GAAE,CAAC,IAAG,KAAK,MAAM,SAAS,EAAE,CAAC,GAAE,CAAC,IAAG,KAAK,MAAM,SAAS,EAAE,CAAC,GAAE,CAAC,IAAG,KAAK,MAAM,SAAS,EAAE,CAAC,GAAE,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAI,QAAO,EAAE,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,QAAQ,GAAE,CAAC,IAAG,WAAW,CAAC,CAAC,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,GAAE,EAAC,GAAE,aAAY,GAAE,OAAM,GAAE,WAAU,GAAE,wBAAuB,GAAE,kBAAiB,SAAQ,UAAS,CAAC,GAAE,CAAC,IAAG,EAAC,GAAE,mBAAkB,SAAQ,UAAS,CAAC,GAAE,CAAC,IAAG,EAAC,GAAE,YAAW,SAAQ,UAAS,CAAC,GAAE,CAAC,IAAG,EAAC,GAAE,iBAAgB,GAAE,mBAAkB,SAAQ,UAAS,CAAC,CAAC,CAAC;AAAE,YAAM,KAAG;AAAA,MAAW,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUD,IAAEC,IAAE;AAAC,iBAAO,QAAMD,GAAE,SAASC,KAAE,CAAC,KAAG,eAAaD,GAAE,UAAUC,KAAE,CAAC;AAAA,QAAC;AAAA,QAAC,OAAO,aAAaD,IAAEC,IAAE;AAAC,cAAIC,KAAE,MAAM,aAAaF,IAAEC,EAAC;AAAE,iBAAOC,GAAE,cAAYF,GAAE,SAASC,KAAE,EAAE,GAAEC,GAAE,aAAWF,GAAE,SAASC,KAAE,EAAE,GAAEC,GAAE,eAAaA,GAAE,aAAW,GAAEA;AAAA,QAAC;AAAA,QAAC,OAAO,oBAAoBF,IAAE;AAAC,kBAAO,SAASA,IAAE;AAAC,gBAAIC,MAAE,SAASD,IAAE;AAAC,kBAAIC,KAAED,GAAE,CAAC,EAAE,aAAYE,KAAE;AAAE,uBAAQD,MAAKD,GAAE,CAAAE,MAAGD,GAAE;AAAO,kBAAIE,KAAE,IAAIF,GAAEC,EAAC,GAAEE,KAAE;AAAE,uBAAQH,MAAKD,GAAE,CAAAG,GAAE,IAAIF,IAAEG,EAAC,GAAEA,MAAGH,GAAE;AAAO,qBAAOE;AAAA,YAAC,GAAEH,GAAE,KAAK,CAAAA,OAAGA,GAAE,MAAM,QAAQ,EAAE,CAAC;AAAE,mBAAO,IAAI,EAAEC,EAAC;AAAA,UAAC,GAAED,EAAC;AAAA,QAAC;AAAA,QAAC,QAAO;AAAC,iBAAO,KAAK,MAAI,oBAAI,OAAI,KAAK,YAAY,GAAE,KAAK,UAAU,GAAE,KAAK,UAAU,GAAE,KAAK;AAAA,QAAM;AAAA,QAAC,cAAa;AAAC,cAAG,EAAC,KAAIA,GAAC,IAAE;AAAK,eAAK,MAAM,aAAW,MAAI,EAAE,yBAAyB;AAAE,mBAAO,CAACC,IAAEC,EAAC,KAAI,OAAO,QAAQ,EAAE,GAAE;AAAC,YAAAD,KAAE,SAASA,IAAE,EAAE;AAAE,gBAAIE,KAAED,GAAE,KAAK,OAAMD,EAAC;AAAE,YAAAE,OAAI,MAAIH,GAAE,IAAIC,IAAEE,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,YAAW;AAAC,cAAIH,IAAEC,IAAEC,IAAEC,IAAEC,IAAE,EAAC,KAAIC,GAAC,IAAE,MAAKC,KAAE,KAAK,MAAM,UAAU,GAAG,GAAEC,KAAE,KAAIC,KAAE,KAAK,MAAM;AAAW,iBAAKF,QAAK;AAAC,gBAAGN,KAAE,KAAK,MAAM,UAAUO,IAAE,CAAC,GAAEN,KAAE,KAAK,MAAM,UAAUM,KAAE,CAAC,GAAEL,KAAE,KAAK,MAAM,UAAUK,KAAE,CAAC,GAAEJ,KAAE,KAAK,MAAM,UAAUF,IAAE,CAAC,GAAEA,KAAEC,KAAEM,GAAE,QAAO,KAAK,QAAQ,KAAK,oGAAoG;AAAE,YAAAJ,KAAE,KAAK,SAASD,IAAEF,IAAEC,EAAC,GAAE,WAASE,MAAGA,OAAI,MAAIC,GAAE,IAAIL,IAAEI,EAAC,GAAEG,MAAG;AAAA,UAAE;AAAA,QAAC;AAAA,QAAC,SAASP,IAAEC,IAAEC,IAAE;AAAC,kBAAOF,IAAE;AAAA,YAAC,KAAI;AAAO,qBAAO,KAAK,UAAUC,EAAC;AAAA,YAAE,KAAI;AAAO,qBAAO,KAAK,UAAUA,EAAC;AAAA,YAAE,KAAI;AAAO,qBAAO,KAAK,UAAUA,IAAEC,EAAC;AAAA,YAAE,KAAI;AAAO,qBAAO,KAAK,SAASD,EAAC;AAAA,UAAC;AAAC,cAAG,EAAEA,KAAEC,KAAE,KAAK,MAAM,YAAY,QAAO,KAAK,MAAM,cAAcD,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,UAAUF,IAAE;AAAC,cAAIC,KAAE,KAAK,MAAM,UAAUD,KAAE,CAAC,IAAE;AAAE,iBAAO,EAAE,KAAK,MAAM,UAAUA,KAAE,IAAGC,EAAC,CAAC;AAAA,QAAC;AAAA,QAAC,UAAUD,IAAEC,IAAE;AAAC,iBAAO,EAAE,KAAK,MAAM,UAAUD,KAAE,GAAEC,KAAE,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,SAASD,IAAE;AAAC,iBAAO,EAAE,KAAK,MAAM,UAAUA,KAAE,GAAE,CAAC,CAAC;AAAA,QAAC;AAAA,QAAC,UAAUA,IAAE;AAAC,cAAG,EAAC,OAAMC,GAAC,IAAE,MAAKC,KAAED,GAAE,UAAUD,KAAE,CAAC,GAAEG,KAAEF,GAAE,UAAUD,KAAE,EAAE,GAAEI,KAAEJ,KAAE,IAAGK,KAAE,CAAC;AAAE,mBAAQC,KAAE,GAAEA,KAAEJ,IAAEI,MAAI;AAAC,gBAAIJ,KAAED,GAAE,UAAUG,KAAE,GAAE,CAAC,GAAEE,KAAEL,GAAE,UAAUG,KAAE,GAAE,CAAC,GAAEG,KAAEN,GAAE,UAAUG,KAAE,CAAC,GAAEI,KAAEP,GAAE,UAAUG,KAAE,CAAC,IAAEJ,IAAES,KAAE,EAAER,GAAE,iBAAiBO,IAAED,EAAC,CAAC;AAAE,YAAAF,GAAE,KAAK,EAAC,MAAKH,IAAE,SAAQI,IAAE,MAAKG,GAAC,CAAC,GAAEL,MAAGD;AAAA,UAAC;AAAC,iBAAO,MAAID,KAAEG,GAAE,CAAC,EAAE,OAAKA;AAAA,QAAC;AAAA,QAAC,eAAeL,IAAEC,IAAE;AAAC,iBAAM,YAAU,OAAOD,KAAEC,GAAED,EAAC,KAAGC,GAAED,GAAE,YAAY,CAAC,KAAGA,KAAEC,GAAED,EAAC,KAAGA;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,KAAK,GAAE,EAAE,IAAG,gBAAe,IAAE,GAAE,EAAE,IAAG,gBAAe,EAAE;AAAE,YAAM,KAAG,EAAC,GAAE,IAAG,GAAE,SAASA,IAAEC,IAAE;AAAC,eAAM,CAACD,GAAE,SAASC,EAAC,GAAED,GAAE,SAASC,KAAE,CAAC,KAAG,GAAED,GAAE,SAASC,KAAE,CAAC,IAAE,EAAE,EAAE,KAAK,CAAAD,OAAGA,GAAE,SAAS,EAAE,EAAE,EAAE,KAAK,GAAG;AAAA,MAAC,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,SAASA,IAAEC,IAAE;AAAC,cAAMC,KAAEF,GAAE,UAAUC,EAAC,GAAEE,KAAEH,GAAE,UAAUC,KAAE,CAAC,IAAE,GAAEG,KAAEJ,GAAE,UAAUC,KAAE,CAAC,GAAEI,KAAEL,GAAE,UAAUC,KAAE,CAAC,GAAEK,KAAEN,GAAE,UAAUC,KAAE,CAAC,GAAEM,KAAEP,GAAE,UAAUC,KAAE,EAAE;AAAE,eAAO,IAAI,KAAK,KAAK,IAAIC,IAAEC,IAAEC,IAAEC,IAAEC,IAAEC,EAAC,CAAC;AAAA,MAAC,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,CAACP,IAAEC,OAAID,GAAE,UAAUC,EAAC,GAAE,IAAG,GAAE;AAAE,eAAS,GAAGD,IAAEC,IAAE;AAAC,eAAO,EAAED,GAAE,UAAUC,IAAE,CAAC,CAAC;AAAA,MAAC;AAAC,QAAE,IAAI,OAAM,EAAE,GAAE,EAAE,GAAE,OAAM,CAAC,CAAC,GAAE,gBAAgB,GAAE,CAAC,GAAE,gBAAgB,GAAE,CAAC,IAAG,cAAc,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,wBAAwB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,sBAAsB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,kBAAkB,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,2BAA2B,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,WAAW,GAAE,CAAC,UAAS,eAAe,GAAE,CAAC,QAAO,aAAa,GAAE,CAAC,QAAO,SAAS,GAAE,CAAC,QAAO,kBAAkB,GAAE,CAAC,OAAM,OAAO,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,qBAAqB,GAAE,CAAC,QAAO,qBAAqB,GAAE,CAAC,QAAO,cAAc,GAAE,CAAC,QAAO,8BAA8B,GAAE,CAAC,QAAO,kBAAkB,GAAE,CAAC,QAAO,eAAe,GAAE,CAAC,QAAO,eAAe,GAAE,CAAC,QAAO,kBAAkB,GAAE,CAAC,QAAO,SAAS,GAAE,CAAC,QAAO,oBAAoB,GAAE,CAAC,QAAO,gBAAgB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,eAAe,GAAE,CAAC,QAAO,sBAAsB,GAAE,CAAC,QAAO,gCAAgC,GAAE,CAAC,QAAO,UAAU,GAAE,CAAC,QAAO,mBAAmB,GAAE,CAAC,QAAO,OAAO,GAAE,CAAC,QAAO,SAAS,GAAE,CAAC,QAAO,WAAW,GAAE,CAAC,QAAO,aAAa,GAAE,CAAC,QAAO,UAAU,GAAE,CAAC,QAAO,cAAc,GAAE,CAAC,QAAO,aAAa,GAAE,CAAC,QAAO,YAAY,GAAE,CAAC,QAAO,mBAAmB,GAAE,CAAC,QAAO,UAAU,GAAE,CAAC,QAAO,UAAU,GAAE,CAAC,QAAO,UAAU,GAAE,CAAC,QAAO,oBAAoB,GAAE,CAAC,QAAO,gBAAgB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,qBAAqB,GAAE,CAAC,QAAO,2BAA2B,GAAE,CAAC,QAAO,cAAc,GAAE,CAAC,QAAO,QAAQ,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,gBAAgB,GAAE,CAAC,QAAO,mCAAmC,GAAE,CAAC,QAAO,gCAAgC,GAAE,CAAC,QAAO,gCAAgC,GAAE,CAAC,QAAO,kCAAkC,GAAE,CAAC,QAAO,0BAA0B,GAAE,CAAC,QAAO,2BAA2B,GAAE,CAAC,QAAO,eAAe,GAAE,CAAC,QAAO,WAAW,GAAE,CAAC,QAAO,YAAY,GAAE,CAAC,QAAO,YAAY,GAAE,CAAC,QAAO,gBAAgB,GAAE,CAAC,QAAO,mBAAmB,GAAE,CAAC,QAAO,iBAAiB,GAAE,CAAC,QAAO,iBAAiB,CAAC,CAAC;AAAE,YAAM,KAAG,EAAC,QAAO,gBAAe,MAAK,yBAAwB,MAAK,QAAO,MAAK,0BAAyB,MAAK,gBAAe,MAAK,oBAAmB,MAAK,SAAQ,KAAI,eAAc,MAAK,iBAAgB,MAAK,iBAAgB,MAAK,iBAAgB,MAAK,yBAAwB,MAAK,wBAAuB,KAAI,qBAAoB,MAAK,SAAQ,MAAK,kBAAiB,KAAI,OAAM,QAAO,QAAO,MAAK,uBAAsB,MAAK,YAAW,MAAK,cAAa,MAAK,WAAU,MAAK,QAAO,KAAI,wBAAuB,QAAO,UAAS,MAAK,SAAQ,MAAK,SAAQ,MAAK,iBAAgB,MAAK,SAAQ,MAAK,eAAc,KAAI,cAAa,MAAK,cAAa,KAAI,6CAA4C,KAAI,sBAAqB,MAAK,gCAA+B,MAAK,WAAU,MAAK,WAAU,MAAK,YAAW,MAAK,YAAW,MAAK,WAAU,MAAK,+BAA8B,MAAK,UAAS,MAAK,2BAA0B,MAAK,2BAA0B,MAAK,wBAAuB,KAAI,UAAS,MAAK,YAAW,KAAI,eAAc,KAAI,qBAAoB,MAAK,eAAc,KAAI,wBAAuB,MAAK,qBAAoB,MAAK,gBAAe,KAAI,mBAAkB,MAAK,0DAAyD,MAAK,iBAAgB,KAAI,+BAA8B,MAAK,WAAU,MAAK,WAAU,QAAO,yBAAwB,MAAK,gBAAe,IAAG,oBAAmB,MAAK,UAAS,MAAK,UAAS,MAAK,SAAQ,MAAK,iBAAgB,MAAK,yDAAwD,MAAK,kBAAiB,MAAK,aAAY,MAAK,QAAO,MAAK,uBAAsB,IAAG,mBAAkB,MAAK,+BAA8B,MAAK,kBAAiB,MAAK,QAAO,MAAK,wBAAuB,IAAG,WAAU,KAAI,uBAAsB,MAAK,WAAU,IAAG,cAAa,KAAI,oBAAmB,MAAK,4BAA2B,KAAI,iBAAgB,KAAI,OAAM,MAAK,uBAAsB,MAAK,UAAS,MAAK,cAAa,MAAK,iBAAgB,KAAI,uBAAsB,MAAK,QAAO,KAAI,OAAM,KAAI,+BAA8B,MAAK,UAAS,MAAK,mBAAkB,IAAG,mBAAkB,KAAI,WAAU,MAAK,gBAAe,KAAI,OAAM,MAAK,UAAS,KAAI,mBAAkB,MAAK,wBAAuB,MAAK,uBAAsB,MAAK,iBAAgB,KAAI,gBAAe,MAAK,SAAQ,MAAK,cAAa,MAAK,qBAAoB,MAAK,mCAAkC,KAAI,+BAA8B,MAAK,UAAS,KAAI,4BAA2B,MAAK,cAAa,KAAI,OAAM,MAAK,mBAAkB,MAAK,UAAS,MAAK,yBAAwB,MAAK,UAAS,MAAK,oCAAmC,MAAK,uBAAsB,KAAI,4BAA2B,MAAK,UAAS,KAAI,2BAA0B,KAAI,iBAAgB,MAAK,kBAAiB,MAAK,UAAS,MAAK,SAAQ,MAAK,WAAU,MAAK,UAAS,MAAK,SAAQ,MAAK,gBAAe,MAAK,eAAc,MAAK,sBAAqB,MAAK,yBAAwB,MAAK,iBAAgB,MAAK,cAAa,MAAK,WAAU,MAAK,QAAO,MAAK,cAAa,MAAK,mBAAkB,MAAK,kBAAiB,MAAK,cAAa,MAAK,qBAAoB,MAAK,YAAW,MAAK,cAAa,MAAK,WAAU,MAAK,kCAAiC,MAAK,WAAU,MAAK,WAAU,MAAK,YAAW,MAAK,cAAa,MAAK,kBAAiB,MAAK,oBAAmB,MAAK,kBAAiB,MAAK,aAAY,MAAK,oBAAmB,MAAK,uBAAsB,MAAK,SAAQ,KAAI,OAAM,MAAK,sBAAqB,MAAK,yBAAwB,MAAK,SAAQ,MAAK,QAAO,KAAI,oBAAmB,MAAK,YAAW,KAAI,OAAM,MAAK,WAAU,MAAK,WAAU,MAAK,YAAW,MAAK,WAAU,MAAK,iBAAgB,MAAK,aAAY,MAAK,gBAAe,MAAK,kCAAiC,MAAK,WAAU,KAAI,gBAAe,KAAI,OAAM,MAAK,gCAA+B,MAAK,QAAO,MAAK,iBAAgB,MAAK,gCAA+B,MAAK,6BAA4B,MAAK,6BAA4B,MAAK,aAAY,KAAI,OAAM,MAAK,aAAY,MAAK,aAAY,MAAK,QAAO,MAAK,UAAS,MAAK,8BAA6B,KAAI,aAAY,MAAK,eAAc,MAAK,WAAU,MAAK,4BAA2B,MAAK,SAAQ,MAAK,iBAAgB,MAAK,SAAQ,KAAI,0BAAyB,KAAI,iCAAgC,MAAK,SAAQ,MAAK,WAAU,MAAK,yBAAwB,MAAK,UAAS,MAAK,oBAAmB,KAAI,UAAS,KAAI,WAAU,MAAK,qBAAoB,MAAK,YAAW,MAAK,eAAc,MAAK,sBAAqB,MAAK,kCAAiC,MAAK,QAAO,MAAK,cAAa,MAAK,QAAO,KAAI,oBAAmB,MAAK,UAAS,KAAI,UAAS,MAAK,QAAO,MAAK,oBAAmB,MAAK,SAAQ,MAAK,UAAS,MAAK,iBAAgB,KAAI,sBAAqB,MAAK,4BAA2B,MAAK,SAAQ,MAAK,aAAY,IAAG,qBAAoB,MAAK,aAAY,MAAK,WAAU,MAAK,WAAU,MAAK,mBAAkB,MAAK,WAAU,MAAK,WAAU,KAAI,yBAAwB,KAAI,4BAA2B,IAAG,aAAY,MAAK,iBAAgB,MAAK,UAAS,MAAK,qBAAoB,MAAK,aAAY,MAAK,aAAY,MAAK,wBAAuB,MAAK,6BAA4B,MAAK,QAAO,MAAK,kBAAiB,MAAK,cAAa,MAAK,mBAAkB,MAAK,SAAQ,MAAK,UAAS,MAAK,SAAQ,MAAK,sBAAqB,MAAK,kBAAiB,MAAK,cAAa,MAAK,cAAa,MAAK,8BAA6B,MAAK,uBAAsB,IAAG,oBAAmB,MAAK,UAAS,MAAK,+BAA8B,MAAK,YAAW,MAAK,UAAS,MAAK,UAAS,MAAK,cAAa,MAAK,cAAa,MAAK,QAAO,MAAK,gBAAe,MAAK,aAAY,MAAK,cAAa,MAAK,UAAS,MAAK,oBAAmB,KAAI,UAAS,MAAK,gBAAe,MAAK,YAAW,GAAE,KAAG,EAAC,MAAK,WAAU,MAAK,WAAU,MAAK,WAAU,MAAK,eAAc,MAAK,YAAW,MAAK,kCAAiC,MAAK,eAAc,MAAK,8BAA6B,KAAI,mCAAkC,MAAK,yBAAwB,MAAK,kCAAiC,MAAK,6CAA4C;AAAE,QAAE,GAAE,OAAM,CAAC,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,OAAO,OAAO,CAAC,GAAE,IAAG,EAAE,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAC,GAAE,cAAa,GAAE,yBAAwB,GAAE,cAAa,GAAE,wBAAuB,CAAC,GAAE,CAAC,QAAO,EAAC,KAAI,yBAAwB,KAAI,4BAA2B,MAAK,YAAW,KAAI,0BAAyB,MAAK,kBAAiB,MAAK,4BAA2B,MAAK,iCAAgC,MAAK,2BAA0B,MAAK,+BAA8B,MAAK,yBAAwB,MAAK,eAAc,MAAK,eAAc,MAAK,gBAAe,MAAK,WAAU,MAAK,mBAAkB,MAAK,sBAAqB,MAAK,gCAA+B,MAAK,+BAA8B,MAAK,sBAAqB,MAAK,yBAAwB,MAAK,8BAA6B,MAAK,sBAAqB,MAAK,cAAa,MAAK,uBAAsB,MAAK,gBAAe,MAAK,gBAAe,CAAC,CAAC,CAAC;AAAA,MAAE,MAAM,WAAW,GAAE;AAAA,QAAC,OAAO,UAAUD,IAAEC,IAAEC,IAAE;AAAC,iBAAO,QAAMF,GAAE,SAASC,KAAE,CAAC,KAAG,gBAAcD,GAAE,UAAUC,KAAE,GAAE,CAAC,KAAG,WAAS,KAAK,iBAAiBD,IAAEC,IAAEC,EAAC;AAAA,QAAC;AAAA,QAAC,OAAO,aAAaF,IAAEC,IAAEC,IAAE;AAAC,cAAIC,IAAEC,KAAE,KAAK,iBAAiBJ,IAAEC,IAAEC,EAAC;AAAE,cAAG,WAASE,GAAE,QAAOD,KAAEH,GAAE,SAASC,KAAEG,KAAE,CAAC,GAAED,KAAE,KAAG,MAAIA,MAAG,IAAG,MAAIA,OAAIA,KAAE,IAAGC,KAAE,IAAED;AAAA,QAAC;AAAA,QAAC,OAAO,iBAAiBH,IAAEC,IAAEC,IAAE;AAAC,mBAAQC,KAAE,GAAEA,KAAED,IAAEC,KAAI,KAAG,KAAK,kBAAkBH,IAAEC,KAAEE,EAAC,EAAE,QAAOA;AAAA,QAAC;AAAA,QAAC,OAAO,kBAAkBH,IAAEC,IAAE;AAAC,iBAAO,OAAKD,GAAE,SAASC,EAAC,KAAG,cAAYD,GAAE,UAAUC,EAAC,KAAG,SAAOD,GAAE,UAAUC,KAAE,CAAC;AAAA,QAAC;AAAA,QAAC,QAAO;AAAC,cAAG,EAAC,KAAID,GAAC,IAAE,MAAKC,KAAE,KAAK,MAAM,aAAW,GAAEC,KAAE;AAAG,mBAAQC,KAAE,GAAEA,KAAEF,IAAEE,KAAI,KAAG,OAAK,KAAK,MAAM,SAASA,EAAC,KAAG,MAAI,KAAK,MAAM,SAASA,KAAE,CAAC,GAAE;AAAC,YAAAD,KAAE;AAAG,gBAAID,KAAE,KAAK,MAAM,UAAUE,KAAE,CAAC,GAAEC,KAAE,KAAK,MAAM,SAASD,KAAE,CAAC,GAAEE,KAAE,KAAK,MAAM,gBAAgBF,KAAE,GAAEF,EAAC;AAAE,YAAAD,GAAE,IAAII,IAAE,KAAK,eAAeJ,GAAE,IAAII,EAAC,GAAEC,EAAC,CAAC,GAAEF,MAAG,IAAEF;AAAA,UAAC,WAASC,GAAE;AAAM,iBAAO,KAAK,UAAU,GAAE,KAAK;AAAA,QAAM;AAAA,QAAC,eAAeF,IAAEC,IAAE;AAAC,iBAAO,WAASD,KAAEA,cAAa,SAAOA,GAAE,KAAKC,EAAC,GAAED,MAAG,CAACA,IAAEC,EAAC,IAAEA;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAG,QAAO,MAAM,GAAE,EAAE,IAAG,mBAAkB,KAAE,GAAE,EAAE,IAAG,gBAAe,KAAE,GAAE,EAAE,IAAI,QAAO,EAAE,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,GAAE,0BAA0B,GAAE,CAAC,GAAE,qBAAqB,GAAE,CAAC,GAAE,0BAA0B,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,iBAAiB,GAAE,CAAC,IAAG,SAAS,GAAE,CAAC,IAAG,kBAAkB,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,wBAAwB,GAAE,CAAC,IAAG,mBAAmB,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,eAAe,GAAE,CAAC,IAAG,kBAAkB,GAAE,CAAC,IAAG,eAAe,GAAE,CAAC,IAAG,iBAAiB,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,qBAAqB,GAAE,CAAC,IAAG,oBAAoB,GAAE,CAAC,IAAG,gBAAgB,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,QAAQ,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,MAAM,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,IAAG,OAAO,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,KAAI,+BAA+B,GAAE,CAAC,KAAI,UAAU,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,KAAI,cAAc,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,oBAAoB,GAAE,CAAC,KAAI,WAAW,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,yBAAyB,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,aAAa,GAAE,CAAC,KAAI,OAAO,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,kBAAkB,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,KAAI,yBAAyB,GAAE,CAAC,KAAI,0BAA0B,GAAE,CAAC,KAAI,mBAAmB,GAAE,CAAC,KAAI,OAAO,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,eAAe,GAAE,CAAC,KAAI,iBAAiB,GAAE,CAAC,KAAI,gBAAgB,GAAE,CAAC,KAAI,aAAa,CAAC,CAAC,GAAE,EAAE,GAAE,QAAO,CAAC,CAAC,IAAG,EAAC,GAAE,gBAAe,GAAE,mBAAkB,GAAE,KAAI,GAAE,KAAI,GAAE,KAAI,GAAE,sBAAqB,GAAE,KAAI,GAAE,KAAI,GAAE,oBAAmB,GAAE,4BAA2B,CAAC,GAAE,CAAC,IAAG,EAAC,GAAE,WAAU,GAAE,4BAA2B,GAAE,UAAS,CAAC,GAAE,CAAC,KAAI,EAAC,GAAE,aAAY,GAAE,YAAW,GAAE,SAAQ,CAAC,CAAC,CAAC,GAAE,EAAE,QAAM,IAAG,EAAE,UAAQ,IAAG,EAAE,gBAAc,IAAG,EAAE,eAAac,IAAE,EAAE,mBAAiB,GAAE,EAAE,UAAQ,IAAG,EAAE,mBAAiB,GAAE,EAAE,wBAAsB,GAAE,EAAE,cAAY,GAAE,EAAE,cAAY,GAAE,EAAE,MAAI,IAAG,EAAE,iBAAe,IAAG,EAAE,eAAa,IAAG,EAAE,cAAY,IAAG,EAAE,yBAAuB,IAAG,EAAE,gBAAc,GAAE,EAAE,QAAM,IAAG,EAAE,wBAAsB,GAAE,EAAE,WAAS,IAAG,EAAE,YAAU,IAAG,EAAE,iBAAe,GAAE,EAAE,WAAS,GAAE,EAAE,oBAAkB,GAAE,EAAE,UAAQ,eAAef,IAAEC,IAAEC,IAAE;AAAC,YAAIC,KAAE,IAAI,GAAGF,EAAC;AAAE,QAAAE,GAAE,UAAQ,OAAG,WAASD,MAAG,YAAU,OAAOF,OAAIE,MAAE,SAASF,IAAE;AAAC,cAAIC,KAAED,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,IAAI;AAAE,cAAG,0BAASA,IAAE;AAAC,mBAAM,WAASA,MAAG,WAASA,MAAG,UAAQA;AAAA,UAAC,GAAEC,EAAC,EAAE,QAAM;AAAO,cAAG,GAAG,SAASA,EAAC,EAAE,QAAOA;AAAA,QAAC,GAAED,EAAC;AAAG,YAAII,KAAE,MAAM,EAAEJ,IAAEG,EAAC;AAAE,YAAGD,IAAE;AAAC,cAAG,GAAG,SAASA,EAAC,EAAE,QAAO,GAAGA,IAAEE,IAAED,EAAC;AAAE,YAAE,sBAAsB;AAAA,QAAC,OAAK;AAAC,eAAG,SAASH,IAAE;AAAC,gBAAIC,KAAED,GAAE,UAAU,GAAE,EAAE,EAAE,KAAK;AAAE,mBAAOC,GAAE,SAAS,WAAW,KAAGA,GAAE,SAAS,KAAK;AAAA,UAAC,GAAEG,EAAC,EAAE,QAAO,GAAG,OAAMA,IAAED,EAAC;AAAE,mBAAO,CAACH,EAAC,KAAI,GAAE;AAAC,gBAAG,CAAC,GAAG,SAASA,EAAC,EAAE;AAAS,gBAAIC,KAAE,MAAM,GAAGD,IAAEI,IAAED,EAAC,EAAE,MAAM,EAAE;AAAE,gBAAGF,GAAE,QAAOA;AAAA,UAAC;AAAC,YAAE,qBAAqB;AAAA,QAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,GAAE,EAAE,cAAY,GAAE,EAAE,YAAU,GAAE,EAAE,YAAU,IAAG,EAAE,uBAAqB,IAAG,EAAE,eAAa,IAAG,EAAE,aAAW,GAAE,EAAE,mBAAiB,IAAG,OAAO,eAAe,GAAE,cAAa,EAAC,OAAM,KAAE,CAAC;AAAA,IAAC,EAAE;AAAA;AAAA;;;ACApk0E;AAAA;AAaA,WAAO,UAAU;AAGjB,WAAO,QAAQ,mBAAmB;AAClC,WAAO,QAAQ,sBAAsB;AAGrC,aAAS,iBAAiB,SAAS,UAAU,YAAY;AACvD,cAAQ,iBAAiB,SAAS,UAAU,UAAU;AAAA,IACxD;AAEA,aAAS,oBAAqB,SAAS,UAAU,YAAa;AAC5D,cAAQ,oBAAoB,SAAS,UAAU,UAAU;AAAA,IAC3D;AAAA;AAAA;;;AC1BA;AAAA;AAOA,QAAI,oBAAoB;AACxB,QAAI,mBAAmB;AACvB,QAAI,wBAAwB;AAC5B,QAAI,6BAA6B;AAEjC,QAAI,mBAAmB;AACvB,QAAI,kBAAkB,KAAO,mBAAmB;AAEhD,QAAI,wBAAwB,OAAO,iBAAiB;AAEpD,aAAS,EAAG,KAAK,KAAK;AAAE,aAAO,IAAM,IAAM,MAAM,IAAM;AAAA,IAAK;AAC5D,aAAS,EAAG,KAAK,KAAK;AAAE,aAAO,IAAM,MAAM,IAAM;AAAA,IAAK;AACtD,aAAS,EAAG,KAAU;AAAE,aAAO,IAAM;AAAA,IAAK;AAG1C,aAAS,WAAY,IAAI,KAAK,KAAK;AAAE,eAAS,EAAE,KAAK,GAAG,IAAI,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,EAAE,GAAG,KAAK;AAAA,IAAI;AAGnG,aAAS,SAAU,IAAI,KAAK,KAAK;AAAE,aAAO,IAAM,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,IAAM,EAAE,KAAK,GAAG,IAAI,KAAK,EAAE,GAAG;AAAA,IAAG;AAEzG,aAAS,gBAAiB,IAAI,IAAI,IAAI,KAAK,KAAK;AAC9C,UAAI,UAAU,UAAU,IAAI;AAC5B,SAAG;AACD,mBAAW,MAAM,KAAK,MAAM;AAC5B,mBAAW,WAAW,UAAU,KAAK,GAAG,IAAI;AAC5C,YAAI,WAAW,GAAK;AAClB,eAAK;AAAA,QACP,OAAO;AACL,eAAK;AAAA,QACP;AAAA,MACF,SAAS,KAAK,IAAI,QAAQ,IAAI,yBAAyB,EAAE,IAAI;AAC7D,aAAO;AAAA,IACT;AAEA,aAAS,qBAAsB,IAAI,SAAS,KAAK,KAAK;AACrD,eAAS,IAAI,GAAG,IAAI,mBAAmB,EAAE,GAAG;AAC1C,YAAI,eAAe,SAAS,SAAS,KAAK,GAAG;AAC7C,YAAI,iBAAiB,GAAK;AACxB,iBAAO;AAAA,QACT;AACA,YAAI,WAAW,WAAW,SAAS,KAAK,GAAG,IAAI;AAC/C,mBAAW,WAAW;AAAA,MACxB;AACA,aAAO;AAAA,IACR;AAEA,aAAS,aAAc,GAAG;AACxB,aAAO;AAAA,IACT;AAEA,WAAO,UAAU,SAAS,OAAQ,KAAK,KAAK,KAAK,KAAK;AACpD,UAAI,EAAE,KAAK,OAAO,OAAO,KAAK,KAAK,OAAO,OAAO,IAAI;AACnD,cAAM,IAAI,MAAM,yCAAyC;AAAA,MAC3D;AAEA,UAAI,QAAQ,OAAO,QAAQ,KAAK;AAC9B,eAAO;AAAA,MACT;AAGA,UAAI,eAAe,wBAAwB,IAAI,aAAa,gBAAgB,IAAI,IAAI,MAAM,gBAAgB;AAC1G,eAAS,IAAI,GAAG,IAAI,kBAAkB,EAAE,GAAG;AACzC,qBAAa,CAAC,IAAI,WAAW,IAAI,iBAAiB,KAAK,GAAG;AAAA,MAC5D;AAEA,eAAS,SAAU,IAAI;AACrB,YAAI,gBAAgB;AACpB,YAAI,gBAAgB;AACpB,YAAI,aAAa,mBAAmB;AAEpC,eAAO,kBAAkB,cAAc,aAAa,aAAa,KAAK,IAAI,EAAE,eAAe;AACzF,2BAAiB;AAAA,QACnB;AACA,UAAE;AAGF,YAAI,QAAQ,KAAK,aAAa,aAAa,MAAM,aAAa,gBAAgB,CAAC,IAAI,aAAa,aAAa;AAC7G,YAAI,YAAY,gBAAgB,OAAO;AAEvC,YAAI,eAAe,SAAS,WAAW,KAAK,GAAG;AAC/C,YAAI,gBAAgB,kBAAkB;AACpC,iBAAO,qBAAqB,IAAI,WAAW,KAAK,GAAG;AAAA,QACrD,WAAW,iBAAiB,GAAK;AAC/B,iBAAO;AAAA,QACT,OAAO;AACL,iBAAO,gBAAgB,IAAI,eAAe,gBAAgB,iBAAiB,KAAK,GAAG;AAAA,QACrF;AAAA,MACF;AAEA,aAAO,SAAS,aAAc,GAAG;AAE/B,YAAI,MAAM,GAAG;AACX,iBAAO;AAAA,QACT;AACA,YAAI,MAAM,GAAG;AACX,iBAAO;AAAA,QACT;AACA,eAAO,WAAW,SAAS,CAAC,GAAG,KAAK,GAAG;AAAA,MACzC;AAAA,IACF;AAAA;AAAA;;;AC1GA;AAAA;AAAA,QAAI,eAAe;AAGnB,QAAI,aAAa;AAAA,MACf,MAAO,aAAa,MAAM,KAAK,MAAM,CAAC;AAAA,MACtC,QAAQ,aAAa,MAAM,GAAG,GAAG,CAAC;AAAA,MAClC,SAAS,aAAa,GAAG,GAAG,MAAM,CAAC;AAAA,MACnC,WAAW,aAAa,MAAM,GAAG,MAAM,CAAC;AAAA,MACxC,QAAQ,aAAa,GAAG,GAAG,GAAG,CAAC;AAAA,IACjC;AAGA,WAAO,UAAU;AACjB,WAAO,QAAQ,mBAAmB;AAClC,WAAO,QAAQ,kBAAkB,iBAAiB;AAGlD,aAAS,QAAQ,QAAQ,QAAQ,SAAS;AACxC,UAAI,QAAQ,uBAAO,OAAO,IAAI;AAC9B,UAAI,OAAO,uBAAO,OAAO,IAAI;AAC7B,gBAAU,WAAW,CAAC;AAEtB,UAAI,SAAU,OAAO,QAAQ,WAAW,aAAc,QAAQ,SAAS,WAAW,QAAQ,MAAM;AAGhG,UAAI,CAAC,QAAQ;AACX,YAAI,QAAQ,QAAQ;AAClB,kBAAQ,KAAK,wCAAwC,QAAQ,MAAM;AAAA,QACrE;AACA,iBAAS,WAAW;AAAA,MACtB;AAEA,UAAI,OAAO,OAAO,QAAQ,SAAS,aAAa,QAAQ,OAAO;AAC/D,UAAI,OAAO,OAAO,QAAQ,SAAS,aAAa,QAAQ,OAAO;AAE/D,UAAI,YAAY,aAAa,QAAQ,SAAS;AAE9C,UAAI,OAAO,OAAO,KAAK,MAAM;AAC7B,WAAK,QAAQ,SAAS,KAAK;AACzB,cAAM,GAAG,IAAI,OAAO,GAAG;AACvB,aAAK,GAAG,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG;AAAA,MACtC,CAAC;AAED,UAAI,eAAe,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW;AAC7E,UAAI,mBAAmB,KAAK,IAAI,GAAG,eAAe,IAAI;AACtD,UAAI;AACJ,UAAI,QAAQ;AAEZ,4BAAsB,UAAU,KAAK,IAAI;AAEzC,aAAO;AAAA,QACL;AAAA,MACF;AAEA,eAAS,SAAS;AAChB,kBAAU,OAAO,mBAAmB;AACpC,8BAAsB;AAAA,MACxB;AAEA,eAAS,OAAO;AACd,YAAI,IAAI,OAAO,QAAM,gBAAgB;AACrC,iBAAS;AACT,kBAAU,CAAC;AACX,YAAI,SAAS,kBAAkB;AAC7B,gCAAsB,UAAU,KAAK,IAAI;AACzC,eAAK,MAAM;AAAA,QACb,OAAO;AACL,gCAAsB;AACtB,qBAAW,WAAW;AAAE,iBAAK,MAAM;AAAA,UAAE,GAAG,CAAC;AAAA,QAC3C;AAAA,MACF;AAEA,eAAS,UAAU,GAAG;AACpB,aAAK,QAAQ,SAAS,KAAK;AACzB,iBAAO,GAAG,IAAI,KAAK,GAAG,IAAI,IAAI,MAAM,GAAG;AAAA,QACzC,CAAC;AAAA,MACH;AAAA,IACF;AAEA,aAAS,OAAO;AAAA,IAAE;AAElB,aAAS,aAAa,WAAW;AAC/B,UAAI,CAAC,WAAW;AACd,YAAI,SAAS,OAAO,WAAW,eAAe,OAAO;AACrD,eAAO,SAAS,aAAa,IAAI,iBAAiB;AAAA,MACpD;AACA,UAAI,OAAO,UAAU,SAAS,WAAY,OAAM,IAAI,MAAM,iDAAiD;AAC3G,UAAI,OAAO,UAAU,WAAW,WAAY,OAAM,IAAI,MAAM,uDAAuD;AAEnH,aAAO;AAAA,IACT;AAEA,aAAS,eAAe;AACtB,aAAO;AAAA,QACL,MAAM,OAAO,sBAAsB,KAAK,MAAM;AAAA,QAC9C,QAAQ,OAAO,qBAAqB,KAAK,MAAM;AAAA,MACjD;AAAA,IACF;AAEA,aAAS,mBAAmB;AAC1B,aAAO;AAAA,QACL,MAAM,SAAS,IAAI;AACjB,iBAAO,WAAW,IAAI,MAAK,EAAE;AAAA,QAC/B;AAAA,QACA,QAAQ,SAAU,IAAI;AACpB,iBAAO,aAAa,EAAE;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAEA,aAAS,mBAAmB;AAC1B,UAAI,cAAc,oBAAI,IAAI;AAC1B,UAAI,aAAa,oBAAI,IAAI;AACzB,UAAI,aAAa;AAEjB,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACF;AAEA,eAAS,WAAW;AAClB,oBAAY,MAAM;AAClB,mBAAW,MAAM;AACjB,6BAAqB,UAAU;AAC/B,qBAAa;AAAA,MACf;AAEA,eAAS,KAAK,UAAU;AACtB,mBAAW,IAAI,QAAQ;AACvB,wBAAgB;AAAA,MAClB;AAEA,eAAS,kBAAkB;AACzB,YAAI,CAAC,WAAY,cAAa,sBAAsB,WAAW;AAAA,MACjE;AAEA,eAAS,cAAc;AACrB,qBAAa;AAEb,YAAI,IAAI;AACR,qBAAa;AACb,sBAAc;AAEd,oBAAY,QAAQ,SAAS,UAAU;AACrC,mBAAS;AAAA,QACX,CAAC;AACD,oBAAY,MAAM;AAAA,MACpB;AAEA,eAAS,OAAO,UAAU;AACxB,mBAAW,OAAO,QAAQ;AAAA,MAC5B;AAAA,IACF;AAAA;AAAA;;;;;;ACzJe,aAASe,EAASC,GAAS;AACxCC,QAAgBD,CAAO;AAEvB,YAAME,IAAgBC,EAAoBH,CAAO;AACjD,aAAAA,EAAQ,KAAKE,EAAc,IAC3BF,EAAQ,MAAME,EAAc,KAC5BF,EAAQ,OAAOE,EAAc,MACtBF;IACT;AAEA,aAASG,EAAoBH,GAAS;AAMpC,UAAII,IAAmB,uBAAO,OAAO,IAAI;AAEzC,aAAO,EACL,IAAI,SAAUC,GAAWC,GAAUC,GAAK;AACtC,YAAI,OAAOD,KAAa,WACtB,OAAM,IAAI,MAAM,uCAAuC;AAEzD,YAAIE,IAAWJ,EAAiBC,CAAS;AACzC,eAAKG,MACHA,IAAWJ,EAAiBC,CAAS,IAAI,CAAA,IAE3CG,EAAS,KAAK,EAAE,UAAUF,GAAU,KAAKC,EAAAA,CAAK,GAEvCP;MACT,GAEA,KAAK,SAAUK,GAAWC,GAAU;AAElC,YADyB,OAAOD,IAAc,IAG5C,QAAAD,IAAmB,uBAAO,OAAO,IAAI,GAC9BJ;AAGT,YAAII,EAAiBC,CAAS,EAE5B,KADoC,OAAOC,KAAa,WAEtD,QAAOF,EAAiBC,CAAS;aAC5B;AACL,gBAAMI,IAAYL,EAAiBC,CAAS;AAC5C,mBAAS,IAAI,GAAG,IAAII,EAAU,QAAQ,EAAE,EAClCA,GAAU,CAAC,EAAE,aAAaH,KAC5BG,EAAU,OAAO,GAAG,CAAC;QAG3B;AAGF,eAAOT;MACT,GAEA,MAAM,SAAUK,GAAW;AACzB,cAAMI,IAAYL,EAAiBC,CAAS;AAC5C,YAAI,CAACI,EACH,QAAOT;AAGT,YAAIU;AACA,kBAAU,SAAS,MAErBA,IAAgB,MAAM,UAAU,MAAM,KAAK,WAAW,CAAC;AAEzD,iBAASC,IAAI,GAAGA,IAAIF,EAAU,QAAQ,EAAEE,GAAG;AACzC,gBAAMC,IAAeH,EAAUE,CAAC;AAChCC,YAAa,SAAS,MAAMA,EAAa,KAAKF,CAAa;QAC7D;AAEA,eAAOV;MACT,EACJ;IACA;AAEA,aAASC,EAAgBD,GAAS;AAChC,UAAI,CAACA,EACH,OAAM,IAAI,MAAM,oDAAoD;AAEtE,YAAMa,IAAgB,CAAC,MAAM,QAAQ,KAAK;AAC1C,eAASF,IAAI,GAAGA,IAAIE,EAAc,QAAQ,EAAEF,EAC1C,KAAIX,EAAQ,eAAea,EAAcF,CAAC,CAAC,EACzC,OAAM,IAAI,MAAM,kEAAkEE,EAAcF,CAAC,IAAI,GAAG;IAG9G;AAAA,WAAA,UAAA;;;;;ACxFA;AAAA;AAGA,WAAO,UAAU;AAEjB,aAAS,QAAQ,UAAU,QAAQ,UAAU;AAC3C,UAAI,OAAO,aAAa,UAAU;AAEhC,mBAAW,CAAC;AAAA,MACd;AAEA,UAAI,cAAc,OAAO,SAAS,gBAAgB,WAAW,SAAS,cAAc;AACpF,UAAI,YAAY,OAAO,SAAS,cAAc,WAAW,SAAS,YAAY;AAC9E,UAAIG,wBAAuB,OAAO,SAAS,yBAAyB,aAAa,SAAS,uBAAuB,wBAAwB;AACzI,UAAIC,yBAAwB,OAAO,SAAS,0BAA0B,aAAa,SAAS,wBAAwB,yBAAyB;AAE7I,UAAI;AACJ,UAAI;AACJ,UAAI,eAAe;AAEnB,UAAI;AACJ,UAAI,IAAI,SAAS;AACjB,UAAI,IAAI,SAAS;AAEjB,UAAI;AAEJ,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAEA,eAAS,UAAU;AACjB,QAAAD,sBAAqB,MAAM;AAC3B,QAAAA,sBAAqB,GAAG;AAAA,MAC1B;AAEA,eAAS,QAAQ;AACf,oBAAY,SAAS;AAErB,aAAK,KAAK,KAAK,KAAK;AACpB,oBAAY,oBAAI,KAAK;AAErB,QAAAA,sBAAqB,MAAM;AAC3B,QAAAA,sBAAqB,GAAG;AAKxB,iBAASC,uBAAsB,KAAK;AAAA,MACtC;AAEA,eAAS,QAAQ;AACf,YAAI,MAAM,KAAK,IAAI;AACnB,YAAI,UAAU,MAAM;AACpB,oBAAY;AAEZ,YAAI,eAAe,SAAS;AAE5B,YAAI,KAAK,aAAa,IAAI,UAAU;AACpC,YAAI,KAAK,aAAa,IAAI,UAAU;AAEpC,oBAAY;AAEZ,YAAI,KAAK,OAAQ,IAAI;AAGrB,aAAK,MAAM,KAAK,KAAK,MAAM;AAC3B,aAAK,MAAM,KAAK,KAAK,MAAM;AAE3B,iBAASA,uBAAsB,KAAK;AAAA,MACtC;AAEA,eAAS,OAAO;AACd,QAAAD,sBAAqB,MAAM;AAC3B,QAAAA,sBAAqB,GAAG;AAExB,YAAI,eAAe,SAAS;AAE5B,kBAAU,aAAa;AACvB,kBAAU,aAAa;AACvB,oBAAY,KAAK,IAAI;AAErB,YAAI,KAAK,CAAC,eAAe,KAAK,aAAa;AACzC,eAAK,YAAY;AACjB,qBAAW;AAAA,QACb;AAEA,YAAI,KAAK,CAAC,eAAe,KAAK,aAAa;AACzC,eAAK,YAAY;AACjB,qBAAW;AAAA,QACb;AAEA,cAAMC,uBAAsB,UAAU;AAAA,MACxC;AAEA,eAAS,aAAa;AACpB,YAAI,UAAU,KAAK,IAAI,IAAI;AAE3B,YAAI,SAAS;AACb,YAAI,KAAK;AACT,YAAI,KAAK;AAET,YAAI,IAAI;AACN,eAAK,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,YAAY;AAE3C,cAAI,KAAK,OAAO,KAAK,KAAM,UAAS;AAAA,cAC/B,MAAK,KAAK;AAAA,QACjB;AAEA,YAAI,IAAI;AACN,eAAK,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,YAAY;AAE3C,cAAI,KAAK,OAAO,KAAK,KAAM,UAAS;AAAA,cAC/B,MAAK,KAAK;AAAA,QACjB;AAEA,YAAI,QAAQ;AACV,iBAAO,UAAU,IAAI,UAAU,EAAE;AACjC,gBAAMA,uBAAsB,UAAU;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,aAAS,0BAA0B;AACjC,UAAI,OAAO,yBAAyB,WAAY,QAAO;AACvD,aAAO;AAAA,IACT;AAEA,aAAS,2BAA2B;AAClC,UAAI,OAAO,0BAA0B,WAAY,QAAO;AAExD,aAAO,SAAU,SAAS;AACxB,eAAO,WAAW,SAAS,EAAE;AAAA,MAC/B;AAAA,IACF;AAAA;AAAA;;;ACvIA;AAAA;AAGA,WAAO,UAAU;AAEjB,aAAS,6BAA6B,SAAS;AAC7C,UAAI,SAAS;AACX,eAAO;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MACF;AAEA,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI,cAAc;AAElB,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAEA,eAAS,QAAQ,WAAW;AAC1B,sBAAc;AACd,0BAAkB,OAAO,SAAS;AAClC,wBAAgB,OAAO,SAAS;AAEhC,eAAO,SAAS,gBAAgB;AAEhC,qBAAa;AACb,mBAAW,cAAc;AAAA,MAC3B;AAEA,eAAS,UAAU;AACjB,YAAI,CAAC,YAAa;AAElB,sBAAc;AACd,eAAO,SAAS,gBAAgB;AAChC,YAAI,WAAY,YAAW,cAAc;AAAA,MAC3C;AAAA,IACF;AAEA,aAAS,SAAS,GAAG;AACnB,QAAE,gBAAgB;AAClB,aAAO;AAAA,IACT;AAEA,aAAS,OAAO;AAAA,IAAC;AAAA;AAAA;;;AChDjB;AAAA;AAAA,WAAO,UAAU;AAEjB,aAAS,YAAY;AACnB,WAAK,IAAI;AACT,WAAK,IAAI;AACT,WAAK,QAAQ;AAAA,IACf;AAAA;AAAA;;;ACNA;AAAA;AAAA,WAAO,UAAU;AACjB,WAAO,QAAQ,YAAY;AAE3B,aAAS,kBAAkB,YAAY,SAAS;AAC9C,UAAI,CAAC,aAAa,UAAU,GAAG;AAC7B,cAAM,IAAI,MAAM,iDAAiD;AAAA,MACnE;AAEA,UAAI,QAAQ,WAAW;AACvB,UAAI,CAAC,OAAO;AACV,cAAM,IAAI;AAAA,UACR;AAAA,QAEuE;AAAA,MAC3E;AAEA,UAAI,CAAC,QAAQ,4BAA4B;AACvC,cAAM,aAAa,YAAY,CAAC;AAAA,MAClC;AAEA,UAAI,MAAM;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAEP,eAAS,WAAW;AAClB,eAAO;AAAA,MACT;AAEA,eAAS,UAAU;AACjB,YAAI,cAAe,WAAW,QAAQ;AACtC,eAAO;AAAA,UACL,MAAM,YAAY;AAAA,UAClB,KAAK,YAAY;AAAA,UACjB,OAAO,YAAY;AAAA,UACnB,QAAQ,YAAY;AAAA,QACtB;AAAA,MACF;AAEA,eAAS,eAAe;AACtB,YAAI,MAAM,MAAM,OAAO;AACvB,YAAI,CAAC,KAAK;AAGR,iBAAO,MAAM,aAAa;AAAA,QAC5B;AACA,eAAO;AAAA,MACT;AAEA,eAAS,cAAc,WAAW;AAChC,YAAI,YAAY,WAAW,OAAO;AAGlC,YAAI,cAAc,MAAM;AACtB,sBAAY,SAAS,gBAAgB,8BAA8B,KAAK,EAAE,gBAAgB;AAAA,QAC5F;AAEA,kBAAU,IAAI,UAAU;AACxB,kBAAU,IAAI,UAAU;AACxB,kBAAU,QAAQ,UAAU;AAC5B,cAAM,kBAAkB,MAAM,SAAS;AAAA,MACzC;AAEA,eAAS,eAAe,WAAW;AACjC,mBAAW,aAAa,aAAa,YACnC,UAAU,QAAQ,UAClB,UAAU,QAAQ,MAClB,UAAU,IAAI,MAAM,UAAU,IAAI,GAAG;AAAA,MACzC;AAAA,IACF;AAEA,aAAS,aAAa,SAAS;AAC7B,aAAO,WAAW,QAAQ,mBAAmB,QAAQ;AAAA,IACvD;AAAA;AAAA;;;AC9EA;AAAA;AAAA,WAAO,UAAU;AAEjB,WAAO,QAAQ,YAAY;AAE3B,aAAS,kBAAkB,YAAY,SAAS;AAC9C,UAAI,eAAe,aAAa,UAAU;AAC1C,UAAI,CAAC,cAAc;AACjB,cAAM,IAAI,MAAM,6DAA6D;AAAA,MAC/E;AAEA,UAAI,QAAQ,WAAW;AACvB,iBAAW,YAAY;AAEvB,UAAI,CAAC,QAAQ,4BAA4B;AACvC,cAAM,aAAa,YAAY,CAAC;AAAA,MAClC;AAEA,UAAI,MAAM;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAEP,eAAS,WAAW;AAClB,eAAO;AAAA,MACT;AAEA,eAAS,UAAU;AAEjB,eAAQ;AAAA,UACN,MAAM;AAAA,UACN,KAAK;AAAA,UACL,OAAO,WAAW;AAAA,UAClB,QAAQ,WAAW;AAAA,QACrB;AAAA,MACF;AAEA,eAAS,eAAe,WAAW;AAEjC,mBAAW,MAAM,kBAAkB;AACnC,mBAAW,MAAM,YAAY,YAC3B,UAAU,QAAQ,aAClB,UAAU,QAAQ,OAClB,UAAU,IAAI,OAAO,UAAU,IAAI;AAAA,MACvC;AAAA,IACF;AAEA,aAAS,aAAa,SAAS;AAC7B,aAAO,WAAW,QAAQ,iBAAiB,QAAQ;AAAA,IACrD;AAAA;AAAA;;;ACnDA;AAAA;AAAA;AAIA,QAAI,QAAQ;AACZ,QAAI,UAAU;AACd,QAAI,WAAW;AACf,QAAI,UAAU;AACd,QAAI,iCAAiC;AACrC,QAAI,8BAA8B,+BAA+B;AACjE,QAAI,8BAA8B,+BAA+B,IAAI;AACrE,QAAI,YAAY;AAChB,QAAI,oBAAoB;AACxB,QAAI,oBAAoB;AAExB,QAAI,mBAAmB;AACvB,QAAI,4BAA4B;AAChC,QAAI,qBAAqB;AACzB,QAAI,qBAAqB;AAEzB,WAAO,UAAU;AAQjB,aAAS,cAAc,YAAY,SAAS;AAC1C,gBAAU,WAAW,CAAC;AAEtB,UAAI,gBAAgB,QAAQ;AAE5B,UAAI,CAAC,eAAe;AAClB,YAAI,kBAAkB,UAAU,UAAU,GAAG;AAC3C,0BAAgB,kBAAkB,YAAY,OAAO;AAAA,QACvD,WAAW,kBAAkB,UAAU,UAAU,GAAG;AAClD,0BAAgB,kBAAkB,YAAY,OAAO;AAAA,QACvD;AAAA,MACF;AAEA,UAAI,CAAC,eAAe;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,UAAI,QAAQ,cAAc,SAAS;AAGnC,UAAI,kBAAkB,EAAE,GAAG,GAAG,GAAG,EAAE;AAEnC,UAAI,UAAU;AACd,UAAI,YAAY,IAAI,UAAU;AAE9B,UAAI,cAAc,eAAe;AAC/B,sBAAc,cAAc,SAAS;AAAA,MACvC;AAEA,UAAI,YAAY,OAAO,QAAQ,cAAc,aAAa,QAAQ,YAAY;AAE9E,UAAI,aAAa,OAAO,QAAQ,eAAe,WAAW,QAAQ,aAAa;AAC/E,UAAI,SAAS,QAAQ;AACrB,UAAI,UAAU,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU,OAAO;AAC7E,UAAI,UAAU,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU;AAEtE,UAAI,gBAAgB,OAAO,QAAQ,kBAAkB,WAAW,QAAQ,gBAAgB;AACxF,UAAI,uBAAuB,OAAO,QAAQ,yBAAyB,WAAW,QAAQ,uBAAuB;AAC7G,UAAI,cAAc,QAAQ,eAAe;AACzC,UAAI,kBAAkB,QAAQ,mBAAmB;AACjD,UAAI,QAAQ,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY;AACxE,UAAI,kBAAkB,qBAAqB,QAAQ,eAAe;AAClE,UAAI,gBAAgB,QAAQ,sBAAsB,8BAA8B;AAEhF,qBAAe,MAAM;AAErB,UAAI,QAAQ,YAAY;AACtB,mBAAW;AAAA,MACb;AAEA,UAAI;AACJ,UAAI,mBAAmB;AACvB,UAAI,qBAAqB;AACzB,UAAI,2BAA2B;AAC/B,UAAI,uBAAuB;AAC3B,UAAI,oBAAoB,oBAAI,KAAK;AACjC,UAAI;AACJ,UAAI,kBAAkB;AAGtB,UAAI,gBAAgB;AAGpB,UAAI;AACJ,UAAI;AAIJ,UAAI;AACJ,UAAI;AAEJ,UAAI;AAEJ,UAAI;AACJ,UAAI,kBAAkB,WAAW,CAAC,QAAQ,cAAc;AAEtD,uBAAe,YAAY;AAAA,MAC7B,OAAO;AAGL,uBAAe,QAAQ,UAAU,QAAQ,QAAQ,YAAY;AAAA,MAC/D;AAEA,UAAI;AACJ,UAAI;AAEJ,UAAI;AACJ,UAAI,SAAS;AAEb,sBAAgB;AAEhB,UAAI,MAAM;AAAA,QACR;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QAEA,cAAc;AAAA,QAEd;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,MACF;AAEA,eAAS,GAAG;AAEZ,UAAI,WAAW,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW,UAAU;AACnF,UAAI,WAAW,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW,UAAU;AACnF,UAAI,cAAc,OAAO,QAAQ,gBAAgB,WAAW,QAAQ,cAAc,UAAU;AAE5F,UAAG,YAAY,UAAU,KAAK,YAAY,UAAU,KAAK,eAAe,UAAU,OAAM;AACtF,gBAAQ,UAAU,UAAU,WAAW;AAAA,MACzC;AAEA,aAAO;AAEP,eAAS,QAAQ;AACf,sBAAc;AACd,iBAAS;AAAA,MACX;AAEA,eAAS,SAAS;AAChB,YAAI,QAAQ;AACV,0BAAgB;AAChB,mBAAS;AAAA,QACX;AAAA,MACF;AAEA,eAAS,WAAW;AAClB,eAAO;AAAA,MACT;AAEA,eAAS,cAAc,MAAM;AAE3B,YAAI,aAAa,MAAM,sBAAsB;AAC7C,YAAI,OAAO,kBAAkB,WAAW,OAAO,WAAW,MAAM;AAEhE,YAAI,YAAY,KAAK,QAAQ,KAAK;AAClC,YAAI,aAAa,KAAK,SAAS,KAAK;AACpC,YAAI,CAAC,OAAO,SAAS,SAAS,KAAK,CAAC,OAAO,SAAS,UAAU,GAAG;AAC/D,gBAAM,IAAI,MAAM,mBAAmB;AAAA,QACrC;AAEA,YAAI,KAAK,KAAK,IAAI;AAClB,YAAI,KAAK,KAAK,IAAI;AAClB,YAAI,QAAQ,KAAK,IAAI,IAAI,EAAE;AAC3B,kBAAU,IAAI,EAAE,KAAK,OAAO,YAAY,KAAK,QAAQ,KAAK,IAAI;AAC9D,kBAAU,IAAI,EAAE,KAAK,MAAM,aAAa,KAAK,QAAQ,KAAK,IAAI;AAC9D,kBAAU,QAAQ;AAAA,MACpB;AAEA,eAAS,kBAAkB,GAAG,GAAG;AAC/B,YAAI,cAAc,cAAc;AAC9B,cAAI,YAAY,cAAc,aAAa;AAC3C,cAAI,eAAe,UAAU;AAC7B,cAAI,eAAe,UAAU;AAC7B,cAAI,gBAAgB,UAAU;AAC9B,cAAI,gBAAgB,UAAU;AAC9B,0BAAgB,IAAI,IAAI,eAAe;AACvC,0BAAgB,IAAI,IAAI,eAAe;AAAA,QACzC,OAAO;AACL,0BAAgB,IAAI;AACpB,0BAAgB,IAAI;AAAA,QACtB;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,aAAa;AACpB,YAAI;AACJ,YAAI;AACJ,YAAI,OAAO;AACX,YAAI,MAAM;AACV,YAAI,mBAAmB,eAAe;AACtC,YAAI,kBAAkB;AAEpB,iBAAO,iBAAiB;AACxB,gBAAM,iBAAiB;AACvB,cAAI,iBAAiB,QAAQ,iBAAiB;AAC9C,cAAI,iBAAiB,SAAS,iBAAiB;AAAA,QACjD,OAAO;AAEL,cAAI,YAAY,MAAM,sBAAsB;AAC5C,cAAI,UAAU;AACd,cAAI,UAAU;AAAA,QAChB;AACA,YAAI,OAAO,cAAc,QAAQ;AACjC,YAAI,KAAK,UAAU,KAAK,KAAK,WAAW,GAAG;AAGzC;AAAA,QACF;AACA,YAAI,KAAK,IAAI,KAAK;AAClB,YAAI,KAAK,IAAI,KAAK;AAClB,YAAI,QAAQ,KAAK,IAAI,IAAI,EAAE;AAC3B,kBAAU,IAAI,EAAE,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,IAAI,IAAI;AAC9D,kBAAU,IAAI,EAAE,KAAK,MAAM,KAAK,SAAS,KAAK,QAAQ,IAAI,IAAI;AAC9D,kBAAU,QAAQ;AAAA,MACpB;AAEA,eAAS,oBAAoB;AAE3B,eAAO;AAAA,MACT;AAEA,eAAS,aAAa;AACpB,eAAO;AAAA,MACT;AAEA,eAAS,WAAW,YAAY;AAC9B,kBAAU;AAAA,MACZ;AAEA,eAAS,aAAa;AACpB,eAAO;AAAA,MACT;AAEA,eAAS,WAAW,YAAY;AAC9B,kBAAU;AAAA,MACZ;AAEA,eAAS,qBAAqB;AAC5B,eAAO;AAAA,MACT;AAEA,eAAS,mBAAmB,oBAAoB;AAC9C,0BAAkB,qBAAqB,kBAAkB;AAAA,MAC3D;AAEA,eAAS,eAAe;AACtB,eAAO;AAAA,MACT;AAEA,eAAS,aAAa,UAAU;AAC9B,YAAI,CAAC,OAAO,SAAS,QAAQ,GAAG;AAC9B,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,gBAAQ;AAAA,MACV;AAEA,eAAS,WAAW;AAClB,eAAO;AAAA,UACL,GAAG,UAAU;AAAA,UACb,GAAG,UAAU;AAAA,QACf;AAAA,MACF;AAEA,eAAS,OAAO,GAAG,GAAG;AACpB,kBAAU,IAAI;AACd,kBAAU,IAAI;AAEd,kCAA0B;AAE1B,qBAAa,KAAK;AAClB,kBAAU;AAAA,MACZ;AAEA,eAAS,OAAO,IAAI,IAAI;AACtB,eAAO,UAAU,IAAI,IAAI,UAAU,IAAI,EAAE;AAAA,MAC3C;AAEA,eAAS,4BAA4B;AACnC,YAAI,cAAc,eAAe;AACjC,YAAI,CAAC,YAAa;AAElB,YAAI,WAAW;AACf,YAAI,aAAa,cAAc;AAE/B,YAAI,OAAO,YAAY,OAAO,WAAW;AACzC,YAAI,OAAO,GAAG;AACZ,oBAAU,KAAK;AACf,qBAAW;AAAA,QACb;AAEA,eAAO,YAAY,QAAQ,WAAW;AACtC,YAAI,OAAO,GAAG;AACZ,oBAAU,KAAK;AACf,qBAAW;AAAA,QACb;AAGA,eAAO,YAAY,MAAM,WAAW;AACpC,YAAI,OAAO,GAAG;AAKZ,oBAAU,KAAK;AACf,qBAAW;AAAA,QACb;AAEA,eAAO,YAAY,SAAS,WAAW;AACvC,YAAI,OAAO,GAAG;AACZ,oBAAU,KAAK;AACf,qBAAW;AAAA,QACb;AACA,eAAO;AAAA,MACT;AAKA,eAAS,iBAAiB;AACxB,YAAI,CAAC,OAAQ;AAEb,YAAI,OAAO,WAAW,WAAW;AAE/B,cAAI,YAAY,MAAM,sBAAsB;AAC5C,cAAI,aAAa,UAAU;AAC3B,cAAI,cAAc,UAAU;AAE5B,iBAAO;AAAA,YACL,MAAM,aAAa;AAAA,YACnB,KAAK,cAAc;AAAA,YACnB,OAAO,cAAc,IAAI;AAAA,YACzB,QAAQ,eAAe,IAAI;AAAA,UAC7B;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,gBAAgB;AACvB,YAAI,OAAO,cAAc,QAAQ;AACjC,YAAI,UAAU,OAAO,KAAK,MAAM,KAAK,GAAG;AAExC,eAAO;AAAA,UACL,MAAM,QAAQ;AAAA,UACd,KAAK,QAAQ;AAAA,UACb,OAAO,KAAK,QAAQ,UAAU,QAAQ,QAAQ;AAAA,UAC9C,QAAQ,KAAK,SAAS,UAAU,QAAQ,QAAQ;AAAA,QAClD;AAAA,MACF;AAEA,eAAS,OAAO,GAAG,GAAG;AACpB,eAAO;AAAA,UACL,GAAG,IAAI,UAAU,QAAQ,UAAU;AAAA,UACnC,GAAG,IAAI,UAAU,QAAQ,UAAU;AAAA,QACrC;AAAA,MACF;AAEA,eAAS,YAAY;AACnB,kBAAU;AACV,yBAAiB,OAAO,sBAAsB,KAAK;AAAA,MACrD;AAEA,eAAS,YAAY,SAAS,SAAS,OAAO;AAC5C,YAAIC,OAAM,OAAO,KAAKA,OAAM,OAAO,KAAKA,OAAM,KAAK,GAAG;AACpD,gBAAM,IAAI,MAAM,6BAA6B;AAAA,QAC/C;AAEA,YAAI,WAAW,UAAU,QAAQ;AAEjC,YAAI,WAAW,SAAS;AACtB,cAAI,UAAU,UAAU,QAAS;AAEjC,kBAAQ,UAAU,UAAU;AAAA,QAC9B;AACA,YAAI,WAAW,SAAS;AACtB,cAAI,UAAU,UAAU,QAAS;AAEjC,kBAAQ,UAAU,UAAU;AAAA,QAC9B;AAEA,YAAI,OAAO,kBAAkB,SAAS,OAAO;AAE7C,kBAAU,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,UAAU;AACnD,kBAAU,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,UAAU;AAGnD,YAAI,UAAU,kBAAkB,KAAK,YAAY,GAAG;AAClD,oBAAU,SAAS;AACnB,oCAA0B;AAAA,QAC5B,OAAO;AACL,cAAI,oBAAoB,0BAA0B;AAClD,cAAI,CAAC,kBAAmB,WAAU,SAAS;AAAA,QAC7C;AAEA,qBAAa,MAAM;AAEnB,kBAAU;AAAA,MACZ;AAEA,eAAS,QAAQ,SAAS,SAAS,WAAW;AAC5C,YAAI,QAAQ,YAAY,UAAU;AAClC,oBAAY,SAAS,SAAS,KAAK;AAAA,MACrC;AAEA,eAAS,SAAS,IAAI;AACpB,YAAIC,UAAS,GAAG;AAChB,YAAI,CAACA;AACH,gBAAM,IAAI,MAAM,+CAA+C;AAGjE,YAAI,aAAa,GAAG,sBAAsB;AAC1C,YAAI,KAAK,WAAW,OAAO,WAAW,QAAQ;AAC9C,YAAI,KAAK,WAAW,MAAM,WAAW,SAAS;AAE9C,YAAI,YAAYA,QAAO,sBAAsB;AAC7C,YAAI,KAAK,UAAU,QAAQ,IAAI;AAC/B,YAAI,KAAK,UAAU,SAAS,IAAI;AAEhC,uBAAe,IAAI,IAAI,IAAI;AAAA,MAC7B;AAEA,eAAS,aAAa,GAAG,GAAE;AACzB,uBAAe,IAAI,UAAU,GAAG,IAAI,UAAU,GAAG,IAAI;AAAA,MACvD;AAEA,eAAS,eAAe,IAAI,IAAI,QAAQ;AACtC,YAAI,CAAC,QAAQ;AACX,iBAAO,OAAO,IAAI,EAAE;AAAA,QACtB;AAEA,YAAI,gBAAiB,iBAAgB,OAAO;AAE5C,YAAI,OAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AACxB,YAAI,KAAK,EAAE,GAAG,IAAI,GAAG,GAAG;AACxB,YAAI,QAAQ;AACZ,YAAI,QAAQ;AAEZ,0BAAkB,QAAQ,MAAM,IAAI;AAAA,UAClC,MAAM,SAAU,GAAG;AACjB,mBAAO,EAAE,IAAI,OAAO,EAAE,IAAI,KAAK;AAE/B,oBAAQ,EAAE;AACV,oBAAQ,EAAE;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAEA,eAAS,OAAO,GAAG,GAAG;AACpB,4BAAoB;AACpB,eAAO,GAAG,CAAC;AAAA,MACb;AAEA,eAAS,UAAU;AACjB,sBAAc;AAAA,MAChB;AAEA,eAAS,kBAAkB;AACzB,cAAM,iBAAiB,aAAa,aAAa,EAAE,SAAS,MAAM,CAAC;AACnE,cAAM,iBAAiB,YAAY,eAAe,EAAE,SAAS,MAAM,CAAC;AACpE,cAAM,iBAAiB,cAAc,SAAS,EAAE,SAAS,MAAM,CAAC;AAChE,cAAM,iBAAiB,WAAWC,YAAW,EAAE,SAAS,MAAM,CAAC;AAI/D,cAAM,iBAAiB,OAAO,cAAc,EAAE,SAAS,MAAM,CAAC;AAE9D,kBAAU;AAAA,MACZ;AAEA,eAAS,gBAAgB;AACvB,cAAM,oBAAoB,OAAO,YAAY;AAC7C,cAAM,oBAAoB,aAAa,WAAW;AAClD,cAAM,oBAAoB,WAAWA,UAAS;AAC9C,cAAM,oBAAoB,YAAY,aAAa;AACnD,cAAM,oBAAoB,cAAc,OAAO;AAE/C,YAAI,gBAAgB;AAClB,iBAAO,qBAAqB,cAAc;AAC1C,2BAAiB;AAAA,QACnB;AAEA,qBAAa,OAAO;AAEpB,6BAAqB;AACrB,uBAAe;AACf,sBAAc,QAAQ;AAEtB,sBAAc;AAAA,MAChB;AAEA,eAAS,QAAQ;AACf,YAAI,QAAS,gBAAe;AAAA,MAC9B;AAEA,eAAS,iBAAiB;AACxB,kBAAU;AAGV,sBAAc,eAAe,SAAS;AAEtC,qBAAa,WAAW;AACxB,yBAAiB;AAAA,MACnB;AAEA,eAASA,WAAU,GAAG;AACpB,YAAI,IAAI,GACN,IAAI,GACJ,IAAI;AACN,YAAI,EAAE,YAAY,IAAI;AACpB,cAAI;AAAA,QACN,WAAW,EAAE,YAAY,IAAI;AAC3B,cAAI;AAAA,QACN,WAAW,EAAE,YAAY,IAAI;AAC3B,cAAI;AAAA,QACN,WAAW,EAAE,YAAY,IAAI;AAC3B,cAAI;AAAA,QACN,WAAW,EAAE,YAAY,OAAO,EAAE,YAAY,KAAK;AAEjD,cAAI;AAAA,QACN,WAAW,EAAE,YAAY,OAAO,EAAE,YAAY,KAAK;AAEjD,cAAI;AAAA,QACN;AAEA,YAAI,UAAU,GAAG,GAAG,GAAG,CAAC,GAAG;AAEzB;AAAA,QACF;AAEA,YAAI,KAAK,GAAG;AACV,YAAE,eAAe;AACjB,YAAE,gBAAgB;AAElB,cAAI,aAAa,MAAM,sBAAsB;AAE7C,cAAI,SAAS,KAAK,IAAI,WAAW,OAAO,WAAW,MAAM;AACzD,cAAI,iBAAiB;AACrB,cAAI,KAAK,SAAS,iBAAiB;AACnC,cAAI,KAAK,SAAS,iBAAiB;AAGnC,yBAAe,IAAI,EAAE;AAAA,QACvB;AAEA,YAAI,GAAG;AACL,cAAI,kBAAkB,mBAAmB,IAAI,GAAG;AAChD,cAAI,SAAS,kBAAkB,yBAAyB,IAAI,SAAS;AACrE,uBAAa,OAAO,GAAG,OAAO,GAAG,eAAe;AAAA,QAClD;AAAA,MACF;AAEA,eAAS,WAAW;AAClB,YAAI,YAAY,MAAM,sBAAsB;AAC5C,eAAO;AAAA,UACL,GAAG,UAAU,QAAQ;AAAA,UACrB,GAAG,UAAU,SAAS;AAAA,QACxB;AAAA,MACF;AAEA,eAAS,QAAQ,GAAG;AAElB,oBAAY,CAAC;AACb,sCAA8B;AAE9B,YAAI,EAAE,QAAQ,WAAW,GAAG;AAC1B,iBAAO,wBAAwB,GAAG,EAAE,QAAQ,CAAC,CAAC;AAAA,QAChD,WAAW,EAAE,QAAQ,WAAW,GAAG;AAEjC,4BAAkB,mBAAmB,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC/D,uBAAa;AACb,qCAA2B;AAAA,QAC7B;AAAA,MACF;AAEA,eAAS,YAAY,GAAG;AAEtB,YAAI,QAAQ,WAAW,CAAC,QAAQ,QAAQ,CAAC,GAAG;AAG1C;AAAA,QACF;AAEA,UAAE,gBAAgB;AAClB,UAAE,eAAe;AAAA,MACnB;AAEA,eAAS,kBAAkB,GAAG;AAC5B,sCAA8B;AAG9B,YAAI,QAAQ,iBAAiB,CAAC,QAAQ,cAAc,CAAC,GAAG;AAGtD;AAAA,QACF;AAEA,UAAE,eAAe;AACjB,UAAE,gBAAgB;AAAA,MACpB;AAEA,eAAS,wBAAwB,GAAG;AAClC,6BAAqB,oBAAI,KAAK;AAC9B,YAAI,QAAQ,EAAE,QAAQ,CAAC;AACvB,YAAI,SAAS,YAAY,KAAK;AAC9B,iCAAyB;AACzB,YAAI,QAAQ,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAChD,iBAAS,MAAM;AACf,iBAAS,MAAM;AACf,iBAAS;AACT,iBAAS;AAET,qBAAa,OAAO;AACpB,mCAA2B;AAAA,MAC7B;AAEA,eAAS,6BAA6B;AACpC,YAAI,iBAAiB;AAEnB;AAAA,QACF;AAEA,0BAAkB;AAClB,iBAAS,iBAAiB,aAAa,eAAe;AACtD,iBAAS,iBAAiB,YAAY,cAAc;AACpD,iBAAS,iBAAiB,eAAe,cAAc;AAAA,MACzD;AAEA,eAAS,gBAAgB,GAAG;AAC1B,YAAI,EAAE,QAAQ,WAAW,GAAG;AAC1B,YAAE,gBAAgB;AAClB,cAAI,QAAQ,EAAE,QAAQ,CAAC;AAEvB,cAAI,SAAS,YAAY,KAAK;AAC9B,cAAI,QAAQ,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAEhD,cAAI,KAAK,MAAM,IAAI;AACnB,cAAI,KAAK,MAAM,IAAI;AAEnB,cAAI,OAAO,KAAK,OAAO,GAAG;AACxB,4BAAgB;AAAA,UAClB;AACA,mBAAS,MAAM;AACf,mBAAS,MAAM;AACf,yBAAe,IAAI,EAAE;AAAA,QACvB,WAAW,EAAE,QAAQ,WAAW,GAAG;AAEjC,uBAAa;AACb,cAAI,KAAK,EAAE,QAAQ,CAAC;AACpB,cAAI,KAAK,EAAE,QAAQ,CAAC;AACpB,cAAI,qBAAqB,mBAAmB,IAAI,EAAE;AAIlD,cAAI,kBACF,KAAK,qBAAqB,kBAAkB,KAAK;AAEnD,cAAI,kBAAkB,YAAY,EAAE;AACpC,cAAI,mBAAmB,YAAY,EAAE;AACrC,oBAAU,gBAAgB,IAAI,iBAAiB,KAAK;AACpD,oBAAU,gBAAgB,IAAI,iBAAiB,KAAK;AACpD,cAAI,iBAAiB;AACnB,gBAAI,SAAS,yBAAyB;AACtC,qBAAS,OAAO;AAChB,qBAAS,OAAO;AAAA,UAClB;AAEA,uBAAa,QAAQ,QAAQ,eAAe;AAE5C,4BAAkB;AAClB,YAAE,gBAAgB;AAClB,YAAE,eAAe;AAAA,QACnB;AAAA,MACF;AAEA,eAAS,gCAAgC;AACvC,YAAI,0BAA0B;AAC5B,uBAAa,wBAAwB;AACrC,qCAA2B;AAAA,QAC7B;AAAA,MACF;AAEA,eAAS,0BAA0B,GAAG;AAGpC,YAAI,CAAC,QAAQ,QAAS;AACtB,sCAA8B;AAC9B,YAAI,KAAK,SAAS;AAClB,YAAI,KAAK,SAAS;AAClB,YAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACnC,YAAI,IAAI,EAAG;AAEX,mCAA2B,WAAW,WAAW;AAC/C,qCAA2B;AAC3B,kBAAQ,QAAQ,CAAC;AAAA,QACnB,GAAG,kBAAkB;AAAA,MACvB;AAEA,eAAS,eAAe,GAAG;AACzB,sCAA8B;AAC9B,YAAI,EAAE,QAAQ,SAAS,GAAG;AACxB,cAAI,SAAS,YAAY,EAAE,QAAQ,CAAC,CAAC;AACrC,cAAI,QAAQ,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAChD,mBAAS,MAAM;AACf,mBAAS,MAAM;AAAA,QACjB,OAAO;AACL,cAAI,MAAM,oBAAI,KAAK;AACnB,cAAI,MAAM,mBAAmB,oBAAoB;AAE/C,gBAAI,iBAAiB;AACnB,kBAAI,SAAS,yBAAyB;AACtC,yBAAW,OAAO,GAAG,OAAO,GAAG,oBAAoB;AAAA,YACrD,OAAO;AAEL,yBAAW,uBAAuB,GAAG,uBAAuB,GAAG,oBAAoB;AAAA,YACrF;AAAA,UACF,WAAW,MAAM,qBAAqB,oBAAoB;AACxD,sCAA0B,CAAC;AAAA,UAC7B;AAEA,6BAAmB;AAEnB,wBAAc;AACd,yBAAe;AAAA,QACjB;AAAA,MACF;AAEA,eAAS,mBAAmB,SAAS,SAAS;AAC5C,YAAI,KAAK,QAAQ,UAAU,QAAQ;AACnC,YAAI,KAAK,QAAQ,UAAU,QAAQ;AACnC,eAAO,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAAA,MACpC;AAEA,eAAS,cAAc,GAAG;AACxB,0BAAkB,CAAC;AACnB,YAAI,SAAS,YAAY,CAAC;AAC1B,YAAI,iBAAiB;AAGnB,mBAAS,yBAAyB;AAAA,QACpC;AACA,mBAAW,OAAO,GAAG,OAAO,GAAG,oBAAoB;AAAA,MACrD;AAEA,eAAS,YAAY,GAAG;AACtB,sCAA8B;AAG9B,YAAI,gBAAgB,CAAC,EAAG;AAExB,+BAAuB;AACvB,4BAAoB,oBAAI,KAAK;AAE7B,YAAI,iBAAiB;AAGnB,YAAE,gBAAgB;AAClB,iBAAO;AAAA,QACT;AAGA,YAAI,eACD,EAAE,WAAW,KAAK,OAAO,UAAU,QAAS,EAAE,WAAW;AAC5D,YAAI,CAAC,aAAc;AAEnB,qBAAa,OAAO;AAEpB,YAAI,SAAS,YAAY,CAAC;AAC1B,YAAI,QAAQ,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAChD,iBAAS,SAAS,MAAM;AACxB,iBAAS,SAAS,MAAM;AAIxB,iBAAS,iBAAiB,aAAa,WAAW;AAClD,iBAAS,iBAAiB,WAAW,SAAS;AAC9C,sBAAc,QAAQ,EAAE,UAAU,EAAE,UAAU;AAE9C,eAAO;AAAA,MACT;AAEA,eAAS,YAAY,GAAG;AAEtB,YAAI,gBAAiB;AAErB,wBAAgB;AAEhB,YAAI,SAAS,YAAY,CAAC;AAC1B,YAAI,QAAQ,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAChD,YAAI,KAAK,MAAM,IAAI;AACnB,YAAI,KAAK,MAAM,IAAI;AAEnB,iBAAS,MAAM;AACf,iBAAS,MAAM;AAEf,uBAAe,IAAI,EAAE;AAAA,MACvB;AAEA,eAAS,YAAY;AACnB,YAAI,MAAM,oBAAI,KAAK;AACnB,YAAI,MAAM,oBAAoB,mBAAoB,2BAA0B,oBAAoB;AAChG,sBAAc,QAAQ;AACtB,sBAAc;AACd,6BAAqB;AAAA,MACvB;AAEA,eAAS,uBAAuB;AAC9B,iBAAS,oBAAoB,aAAa,WAAW;AACrD,iBAAS,oBAAoB,WAAW,SAAS;AACjD,wBAAgB;AAAA,MAClB;AAEA,eAAS,iBAAiB;AACxB,iBAAS,oBAAoB,aAAa,eAAe;AACzD,iBAAS,oBAAoB,YAAY,cAAc;AACvD,iBAAS,oBAAoB,eAAe,cAAc;AAC1D,wBAAgB;AAChB,qBAAa;AACb,0BAAkB;AAAA,MACpB;AAEA,eAAS,aAAa,GAAG;AAEvB,YAAI,YAAY,CAAC,EAAG;AAEpB,qBAAa,OAAO;AAEpB,YAAI,QAAQ,EAAE;AACd,YAAI,EAAE,YAAY,EAAG,UAAS;AAE9B,YAAI,kBAAkB,mBAAmB,KAAK;AAE9C,YAAI,oBAAoB,GAAG;AACzB,cAAI,SAAS,kBACT,yBAAyB,IACzB,YAAY,CAAC;AACjB,uBAAa,OAAO,GAAG,OAAO,GAAG,eAAe;AAChD,YAAE,eAAe;AAAA,QACnB;AAAA,MACF;AAEA,eAAS,YAAY,GAAG;AACtB,YAAI,SAAS;AAEb,YAAI,YAAY,MAAM,sBAAsB;AAC5C,kBAAU,EAAE,UAAU,UAAU;AAChC,kBAAU,EAAE,UAAU,UAAU;AAEhC,eAAO,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,MAClC;AAEA,eAAS,WAAW,SAAS,SAAS,iBAAiB;AACrD,YAAI,YAAY,UAAU;AAC1B,YAAI,OAAO,EAAE,OAAO,UAAU;AAC9B,YAAI,KAAK,EAAE,OAAO,kBAAkB,UAAU;AAE9C,qBAAa,OAAO;AACpB,4BAAoB;AAEpB,0BAAkB,QAAQ,MAAM,IAAI;AAAA,UAClC,MAAM,SAAU,GAAG;AACjB,oBAAQ,SAAS,SAAS,EAAE,KAAK;AAAA,UACnC;AAAA,UACA,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAEA,eAAS,cAAc,SAAS,SAAS,cAAc;AACrD,YAAI,YAAY,UAAU;AAC1B,YAAI,OAAO,EAAE,OAAO,UAAU;AAC9B,YAAI,KAAK,EAAE,OAAO,aAAa;AAE/B,qBAAa,OAAO;AACpB,4BAAoB;AAEpB,0BAAkB,QAAQ,MAAM,IAAI;AAAA,UAClC,MAAM,SAAU,GAAG;AACjB,oBAAQ,SAAS,SAAS,EAAE,KAAK;AAAA,UACnC;AAAA,UACA,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAEA,eAAS,2BAA2B;AAClC,YAAI,YAAY,MAAM,sBAAsB;AAC5C,eAAO;AAAA,UACL,GAAG,UAAU,QAAQ,gBAAgB;AAAA,UACrC,GAAG,UAAU,SAAS,gBAAgB;AAAA,QACxC;AAAA,MACF;AAEA,eAAS,aAAa,SAAS,SAAS,iBAAiB;AACvD,qBAAa,OAAO;AACpB,4BAAoB;AACpB,eAAO,YAAY,SAAS,SAAS,eAAe;AAAA,MACtD;AAEA,eAAS,sBAAsB;AAC7B,YAAI,iBAAiB;AACnB,0BAAgB,OAAO;AACvB,4BAAkB;AAAA,QACpB;AAAA,MACF;AAEA,eAAS,mBAAmB,OAAO;AACjC,YAAI,OAAO,KAAK,KAAK,KAAK;AAC1B,YAAI,qBAAqB,KAAK,IAAI,MAAM,KAAK,IAAI,QAAQ,QAAQ,GAAG,CAAC;AACrE,eAAO,IAAI,OAAO;AAAA,MACpB;AAEA,eAAS,kBAAkB;AACzB,YAAI,CAAC,eAAe;AAClB,uBAAa,UAAU;AACvB,0BAAgB;AAChB,uBAAa,MAAM;AAAA,QACrB;AAAA,MACF;AAEA,eAAS,gBAAgB;AACvB,YAAI,eAAe;AAEjB,cAAI,CAAC,WAAY,cAAa,KAAK;AACnC,uBAAa,QAAQ;AAAA,QACvB;AAAA,MACF;AAEA,eAAS,iBAAiB;AACxB,qBAAa,SAAS;AAAA,MACxB;AAEA,eAAS,aAAa,MAAM;AAC1B,YAAI,KAAK,MAAM,GAAG;AAAA,MACpB;AAAA,IACF;AAEA,aAAS,qBAAqB,SAAS;AACrC,UAAI,CAAC,QAAS;AACd,UAAI,OAAO,YAAY,UAAU;AAC/B,YAAI,CAAC,SAAS,QAAQ,CAAC,KAAK,CAAC,SAAS,QAAQ,CAAC;AAC7C,8BAAoB,OAAO;AAC7B,eAAO;AAAA,MACT;AAEA,0BAAoB;AAAA,IACtB;AAEA,aAAS,oBAAoB,SAAS;AACpC,cAAQ,MAAM,OAAO;AACrB,YAAM,IAAI;AAAA,QACR;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,EAAE,KAAK,IAAI;AAAA,MACb;AAAA,IACF;AAEA,aAAS,OAAO;AAAA,IAAE;AAElB,aAAS,eAAe,QAAQ;AAC9B,UAAI,aAAa,OAAO;AACxB,UAAI,eAAe,eAAe,eAAe,UAAW;AAE5D,UAAI,cACF,SAAS,OAAO,IAAI,KACpB,SAAS,OAAO,GAAG,KACnB,SAAS,OAAO,MAAM,KACtB,SAAS,OAAO,KAAK;AAEvB,UAAI,CAAC;AACH,cAAM,IAAI;AAAA,UACR;AAAA,QAEF;AAAA,IACJ;AAEA,aAAS,SAAS,GAAG;AACnB,aAAO,OAAO,SAAS,CAAC;AAAA,IAC1B;AAGA,aAASF,OAAM,OAAO;AACpB,UAAI,OAAO,OAAO;AAChB,eAAO,OAAO,MAAM,KAAK;AAAA,MAC3B;AAEA,aAAO,UAAU;AAAA,IACnB;AAEA,aAAS,cAAc;AACrB,aAAO;AAAA,QACL,OAAO;AAAA,QACP,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,aAAS,UAAU;AACjB,UAAI,OAAO,aAAa,YAAa;AAErC,UAAI,UAAU,SAAS,qBAAqB,QAAQ;AACpD,UAAI,CAAC,QAAS;AACd,UAAI;AAEJ,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,YAAI,IAAI,QAAQ,CAAC;AACjB,YAAI,EAAE,OAAO,EAAE,IAAI,MAAM,uBAAuB,GAAG;AACjD,0BAAgB;AAChB;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,cAAe;AAEpB,UAAI,QAAQ,cAAc,aAAa,OAAO;AAC9C,UAAI,CAAC,MAAO;AAEZ,UAAI,aAAa,cAAc,aAAa,MAAM,KAAK;AACvD,UAAI,UAAU,KAAK,IAAI;AAEvB,gBAAU;AAEV,eAAS,YAAY;AACnB,YAAIG,MAAK,SAAS,cAAc,KAAK;AACrC,YAAI,CAACA,KAAI;AACP,cAAI,MAAM,KAAK,IAAI;AACnB,cAAI,UAAU,MAAM;AACpB,cAAI,UAAU,KAAM;AAElB,uBAAW,WAAW,GAAG;AACzB;AAAA,UACF;AAEA,kBAAQ,MAAM,mCAAmC,UAAU;AAC3D;AAAA,QACF;AACA,YAAI,UAAU,eAAe,aAAa;AAC1C,gBAAQ,IAAI,OAAO;AACnB,eAAO,UAAU,IAAI,cAAcA,KAAI,OAAO;AAAA,MAChD;AAEA,eAAS,eAAe,QAAQ;AAC9B,YAAI,QAAQ,OAAO;AACnB,YAAI,UAAU,CAAC;AACf,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AACrC,cAAI,OAAO,MAAM,CAAC;AAClB,cAAI,YAAY,6BAA6B,IAAI;AACjD,cAAI,WAAW;AACb,oBAAQ,UAAU,IAAI,IAAI,UAAU;AAAA,UACtC;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,6BAA6B,MAAM;AAC1C,YAAI,CAAC,KAAK,KAAM;AAChB,YAAI,qBACF,KAAK,KAAK,CAAC,MAAM,OAAO,KAAK,KAAK,CAAC,MAAM,OAAO,KAAK,KAAK,CAAC,MAAM;AAEnE,YAAI,CAAC,mBAAoB;AAEzB,YAAI,OAAO,KAAK,KAAK,OAAO,CAAC;AAC7B,YAAI,QAAQ,KAAK,MAAM,KAAK,KAAK;AACjC,eAAO,EAAE,MAAY,MAAa;AAAA,MACpC;AAAA,IACF;AAEA,YAAQ;AAAA;AAAA;;;AC3kCR,oBAAmB;AAGnB,IAAO,qCAAQ,cAAAC;;;ACGf,2BAAO;AALP,IAAM,YAAY;AAClB,UAAU,IAAI;AACd,UAAU,SAAS;AAClB,mCAAU,UAAU,MAAM;;;ACC3B,OAAO,gBAAgB,CAAC;AACxB,OAAO,iBAAiB;AACxB,IAAI;AAEJ,IAAM,YAAY,CAAC,IAAY,MAAiC,QAAyB;AACvF,QAAM,eAAe;AACrB,SAAO,cAAc,KAAK,EAAE,IAAI,MAAM,IAAI,CAAC;AAC3C,MAAI,OAAO,cAAc,SAAS,aAAc,QAAO,cAAc,MAAM;AAC3E,SAAO,iBAAiB;AAC1B;AAEA,IAAM,eAAe,OAAOC,QAAmC;AAC7D,QAAM,YAAYA,IAAG;AACrB,MAAI,UAAW,WAAU,eAAe,EAAE,UAAU,SAAS,CAAC;AAChE;AAEO,IAAM,MAAM,UAAU,QAAkC;AAC7D,QAAM,KAAK,oBAAI,KAAK;AACpB,QAAM,KAAK,GAAG,GAAG,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACzM,MAAI,OAAO,QAAQ;AACjB,QAAI,OAAO,eAAgB,QAAO,OAAO,aAAa,OAAO,eAAe,GAAG,GAAG;AAClF,iBAAa,OAAO,MAAM;AAAA,EAC5B;AACA,UAAQ,IAAI,IAAI,GAAG,GAAG;AACtB,YAAU,IAAI,OAAO,GAAG;AAC1B;AAEO,IAAM,QAAQ,UAAU,QAAkC;AAC/D,QAAM,KAAK,oBAAI,KAAK;AACpB,QAAM,KAAK,GAAG,GAAG,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACzM,MAAI,OAAO,QAAQ;AACjB,QAAI,OAAO,eAAgB,QAAO,OAAO,aAAa,OAAO,eAAe,GAAG,GAAG;AAClF,iBAAa,OAAO,MAAM;AAAA,EAC5B;AACA,UAAQ,MAAM,IAAI,GAAG,GAAG;AACxB,YAAU,IAAI,SAAS,GAAG;AAC5B;AAEO,IAAM,QAAQ,UAAU,QAAkC;AAC/D,QAAM,KAAK,oBAAI,KAAK;AACpB,QAAM,KAAK,GAAG,GAAG,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACzM,MAAI,OAAO,QAAQ;AACjB,QAAI,OAAO,eAAgB,QAAO,OAAO,aAAa,OAAO,eAAe,GAAG,GAAG;AAClF,iBAAa,OAAO,MAAM;AAAA,EAC5B;AACA,UAAQ,MAAM,IAAI,GAAG,GAAG;AACxB,YAAU,IAAI,SAAS,GAAG;AAG5B;AAEA,IAAM,cAAc,OAClB,QACA,MACA,SACA,cACA,SAAS,OACT,gBAAgB,OAAO,KAAK,sBAAsB,QAChC;AAClB,QAAM,MAAM,CAAC,QAAsB;AACjC,QAAI,CAAC,QAAQ;AACX,YAAM,GAAG,GAAG,WAAW,OAAO,UAAU,WAAW,OAAO,MAAM,aAAa,OAAO,YAAY,EAAE;AAClG,UAAI,aAAc,cAAa,MAAM;AAAA,IACvC;AAAA,EACF;AAEA,MAAI,YAAa,QAAO,iBAAiB,iBAAiB,SAAS,WAAW,EAAE;AAChF,SAAO,iBAAiB,gBAAgB,kBAAkB;AAC1D,SAAO,UAAU;AACjB,SAAO,YAAY,MAAM,IAAI,eAAe;AAC5C,SAAO,UAAU,MAAM,IAAI,aAAa;AACxC,SAAO,UAAU,MAAM,IAAI,aAAa;AACxC,SAAO,qBAAqB,MAAM;AAChC,QAAI,OAAO,eAAe,GAAG;AAC3B,UAAI,OAAO,WAAW,KAAK;AACzB,YAAI;AACF,gBAAM,OAAO,KAAK,MAAM,OAAO,YAAY;AAC3C,cAAI,QAAS,SAAQ,IAAI;AAAA,QAC3B,QAAQ;AAAA,QAER;AAAA,MACF,OAAO;AAAA,MAEP;AAAA,IACF;AAAA,EACF;AACA,QAAM,MAAM,KAAK,UAAU,IAAI;AAC/B,SAAO,KAAK,GAAG;AACjB;AAEO,IAAM,SAAS,CACpBC,MACA,MACA,SACA,cACA,SAAS,OACT,gBAAgB,OAAO,KAAK,sBAAsB,QACzC;AACT,QAAM,MAAM,IAAI,eAAe;AAC/B,QAAM,OAAO,OAAO,KAAK,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,CAAC,IAAI,mBAAmB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG;AAC7G,MAAI,KAAK,OAAO,GAAGA,IAAG,IAAI,IAAI,IAAI,IAAI;AACtC,cAAY,KAAK,MAAM,SAAS,cAAc,QAAQ,aAAa;AACrE;AAEO,SAAS,QACdA,MACA,MACA,SACA,cACA,SAAS,OACT,gBAAgB,OAAO,KAAK,sBAAsB,KAC5C;AACN,QAAM,MAAM,IAAI,eAAe;AAC/B,MAAI,KAAK,QAAQA,MAAK,IAAI;AAC1B,cAAY,KAAK,MAAM,SAAS,cAAc,QAAQ,aAAa;AACrE;AAEO,IAAM,iBAAiB,CAACC,OAA0BC,WAAoC;AAC3F,MAAID,SAAQC,QAAO;AACjB,kBAAc,KAAK,GAAGD,KAAI,IAAIC,MAAK,EAAE;AACrC,QAAI,YAAY,EAAE,MAAAD,MAAK,CAAC;AAAA,EAC1B;AACF;AAEA,OAAO,MAAM;AACb,OAAO,QAAQ;AACf,OAAO,QAAQ;AACf,OAAO,SAAS;AAChB,OAAO,UAAU;;;AC/HjB,IAAI;AACJ,IAAI;AACJ,IAAI;AAEJ,eAAsB,WAA6E;AACjG,MAAI,UAAU,UAAa,SAAS,QAAW;AAC7C,UAAM,MAAM,MAAM,MAAM,GAAG,OAAO,OAAO,QAAQ;AACjD,QAAI,IAAI,IAAI;AACV,YAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,aAAO,KAAK;AACZ,cAAQ,KAAK;AACb,UAAI,YAAY,EAAE,KAAK,CAAC;AACxB,qBAAe,MAAM,KAAK;AAAA,IAC5B;AAAA,EACF;AACA,SAAO,EAAE,MAAM,MAAM;AACvB;AAOA,eAAsBE,WAAUC,MAAwB,UAAuB,CAAC,GAAkC;AAChH,QAAM,SAAS;AACf,MAAI,QAAQ,OAAO;AACjB,UAAM,UAAU,KAAK,GAAG,IAAI,IAAI,KAAK,EAAE;AACvC,UAAM,UAAU,IAAI,QAAQ,QAAQ,OAAO;AAC3C,YAAQ,IAAI,iBAAiB,SAAS,OAAO,EAAE;AAC/C,YAAQ,UAAU;AAAA,EACpB;AACA,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,MAAMA,MAAK,OAAO;AAC9B,QAAI,CAAC,IAAI,GAAI,OAAM,SAAS,EAAE,QAAQ,KAAK,UAAU,KAAK,KAAAA,MAAK,MAAM,MAAM,CAAC;AAAA,EAC9E,SAAS,KAAK;AACZ,QAAI,UAAU,QAAQ;AACpB,YAAM,SAAS,EAAE,QAAQ,KAAK,UAAU,KAAK,KAAAA,MAAK,MAAM,OAAO,OAAO,IAAI,CAAC;AAAA,IAC7E;AAAA,EACF;AACA,MAAI,CAAC,SAAS;AAEZ,cAAU,OAAO,SAAS;AAC1B,QAAI,UAAU,OAAO;AAAA,EACvB;AACA,SAAO;AACT;AACA,OAAO,YAAYD;;;ACpDZ,IAAM,YAAgC,CAAC;AAE9C,eAAsB,MAAM,MAAc,SAAgC;AACxE,YAAU,KAAK,CAAC,MAAM,KAAK,MAAM,OAAO,CAAC,CAAC;AAC5C;AACA,OAAO,QAAQ;AAEf,eAAsB,YAA2B;AAE/C,QAAM,iBAAiB,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG;AACzD,QAAM,YAAoC,CAAC;AAC3C,aAAW,CAAC,MAAM,OAAO,KAAK,eAAgB,WAAU,IAAI,IAAI;AAChE,QAAM,iBAAiB,SAAS;AAElC;;;ACZA,IAAI,iBAA0C;AAE9C,eAAsB,MAAM,IAAI;AAC9B,SAAO,IAAI,QAAQ,CAAC,YAAY;AAAE,eAAW,SAAS,EAAE;AAAA,EAAG,CAAC;AAC9D;AAEO,SAAS,YAA6C;AAC3D,QAAM,QAAQ,SAAS,qBAAqB,YAAY;AACxD,QAAM,OAA2B,MAAM,WAAW,IAAI,WAAW,MAAM,CAAC;AACxE,MAAI,SAAS,SAAU,MAAK,iBAAiB,CAAC,OAAO,SAAS,eAAe,EAAE;AAC/E,MAAI,SAAS,YAAY,KAAK,YAAY;AACxC,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AACA,OAAO,YAAY;AAaZ,SAAS,kBAAkB;AAChC,SAAO,UAAU,EAAE,cAAc,uBAAuB;AAC1D;AAEO,SAAS,yBAAyB;AACvC,MAAI,OAAO,eAAgB,QAAO,UAAU,EAAE,cAAc,mCAAmC;AAC/F,SAAO,UAAU,EAAE,cAAc,kDAAkD;AACrF;AAIO,IAAM,yBAAyB,CAAC;AAChC,IAAM,oBAAoB,CAAC;AAC3B,IAAM,oBAAoB,CAAC;AAC3B,IAAM,mBAAmB,CAAC;AAC1B,IAAM,uBAAuB,CAAC;AAC9B,IAAM,0BAA0B,CAAC;AAExC,IAAI,eAAe;AACnB,IAAI;AAEJ,SAAS,iBAAiB,OAAO,UAAU;AACzC,MAAI,MAAM,SAAS,QAAQ,EAAG;AAC9B,QAAM,KAAK,QAAQ;AACrB;AAEO,SAAS,gBAAgB,UAAU;AACxC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,kFAAkF,QAAQ,EAAE;AAClG;AAAA,EACF;AACA,mBAAiB,wBAAwB,QAAQ;AACnD;AACA,OAAO,kBAAkB;AAElB,SAAS,WAAW,UAAU;AACnC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,6EAA6E,QAAQ,EAAE;AAC7F;AAAA,EACF;AACA,mBAAiB,mBAAmB,QAAQ;AAC9C;AACA,OAAO,aAAa;AAEb,SAAS,WAAW,UAAU;AACnC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,6EAA6E,QAAQ,EAAE;AAC7F;AAAA,EACF;AACA,mBAAiB,mBAAmB,QAAQ;AAC9C;AACA,OAAO,aAAa;AAEb,SAAS,UAAU,UAAU;AAClC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,4EAA4E,QAAQ,EAAE;AAC5F;AAAA,EACF;AACA,mBAAiB,kBAAkB,QAAQ;AAC7C;AACA,OAAO,YAAY;AAEZ,SAAS,cAAc,UAAU;AACtC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,gFAAgF,QAAQ,EAAE;AAChG;AAAA,EACF;AACA,mBAAiB,sBAAsB,QAAQ;AACjD;AACA,OAAO,gBAAgB;AAEhB,SAAS,iBAAiB,UAAU;AACzC,MAAI,OAAO,aAAa,YAAY;AAClC,UAAM,mFAAmF,QAAQ,EAAE;AACnG;AAAA,EACF;AACA,mBAAiB,yBAAyB,QAAQ;AACpD;AACA,OAAO,mBAAmB;AAEnB,SAAS,iBAAiB,OAAc,KAAW;AAExD,aAAW,YAAY,OAAO;AAC5B,QAAI,CAAC,SAAU;AACf,QAAI;AACF,YAAM,KAAK,YAAY,IAAI;AAC3B,eAAS,GAAG;AACZ,YAAM,KAAK,YAAY,IAAI;AAC3B,UAAI,KAAK,KAAK,IAAK,KAAI,gBAAgB,EAAE,UAAU,SAAS,QAAQ,UAAU,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACzG,YAAM,SAAS,QAAQ,qBAAqB,KAAK,EAAE;AAAA,IACrD,SAAS,GAAG;AACV,YAAM,qBAAqB,QAAQ,IAAI,CAAC,EAAE;AAAA,IAC5C;AAAA,EACF;AACF;AAEA,IAAM,kBAAkB,MAAM,UAAU,EAAE,iBAAiB,eAAe,EAAE,SAAS;AAErF,SAAS,iCAAiC;AACxC,eAAa,oBAAoB;AACjC,yBAAuB,WAAW,MAAM,iBAAiB,sBAAsB,GAAG,GAAG;AACvF;AAEA,IAAI,mBAAmB;AACvB,IAAM,iBAAiB,CAAC,kBAAkB,eAAe,aAAa,qBAAqB,QAAQ;AACnG,IAAM,oBAAoB,IAAI,IAAI,cAAc;AAChD,IAAM,gBAAgB,CAAC,MAAM;AAE7B,IAAI;AACJ,IAAI;AACJ,IAAI,iBAAiB,CAAC;AAEtB,eAAe,iBAAiB,WAAW;AACzC,MAAI,UAAU,UAAU,EAAG;AAC3B,aAAW,YAAY,WAAW;AAChC,UAAM,EAAE,OAAO,IAAI;AACnB,QAAI,OAAO,aAAa,QAAS;AACjC,QAAI,kBAAkB,IAAI,OAAO,EAAE,EAAG;AACtC,QAAI,OAAO,WAAW,SAAS,cAAc,CAAC,CAAC,EAAG;AAClD,mBAAe,KAAK,QAAQ;AAAA,EAC9B;AACA,MAAI,eAAe,SAAS,EAAG;AAE/B,MAAI,cAAe,cAAa,aAAa;AAC7C,kBAAgB,WAAW,YAAY;AACrC,UAAM,KAAK,KAAK,IAAI,IAAI;AACxB,QAAI,CAAC,oBAAqB,KAAK,IAAO,KAAI,sBAAsB,EAAE,IAAI,SAAS,gBAAgB,EAAE,CAAC;AAClG,QAAI,CAAC,oBAAoB,gBAAgB,GAAG;AAC1C,UAAI,cAAc,EAAE;AACpB,yBAAmB;AACnB,uBAAiB,iBAAiB;AAAA,IACpC;AACA,QAAI,kBAAkB;AACpB,uBAAiB,mBAAmB,SAAS;AAC7C,qCAA+B;AAAA,IACjC;AACA,UAAM,SAAS,gBAAgB;AAC/B,QAAI,UAAW,WAAW,cAAe;AACvC,qBAAe;AACf,uBAAiB,oBAAoB;AAAA,IACvC;AACA,qBAAiB,CAAC;AAClB,oBAAgB;AAAA,EAClB,GAAG,GAAG;AACR;AAEA,SAAS,iBAAiB,oBAAoB,MAAM;AAClD,MAAI,kBAAkB;AACtB,eAAa,KAAK,IAAI;AACtB,mBAAiB,IAAI,iBAAiB,gBAAgB;AACtD,iBAAe,QAAQ,UAAU,GAAG,EAAE,WAAW,MAAM,SAAS,MAAM,YAAY,MAAM,CAAC;AAC3F,CAAC;AAED,eAAe,oBAAoB,GAAkB,IAAY;AAC/D,QAAM,OAAO,uBAAuB,EAAE,cAAc,EAAE;AACtD,MAAI,UAAU,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,SAAS,MAAM,EAAE,SAAS,KAAK,EAAE,QAAQ,IAAI,MAAM,MAAM,IAAI,QAAQ,MAAM,SAAS,CAAC;AACzH,MAAI,MAAM;AACR,MAAE,eAAe;AACjB,QAAI,KAAK,aAAa,SAAU,CAAC,KAA2B,MAAM;AAAA,QAC7D,CAAC,KAAqB,MAAM;AAAA,EACnC;AACF;AAKA,SAAS,iBAAiB,WAAW,CAAC,MAAM;AAC1C,MAAI,EAAE,QAAQ,SAAU,qBAAoB,GAAG,wBAAwB;AACvE,MAAI,EAAE,QAAQ,WAAW,EAAE,QAAS,qBAAoB,GAAG,uBAAuB;AAClF,MAAI,EAAE,QAAQ,OAAO,EAAE,QAAS,qBAAoB,GAAG,wBAAwB;AAC/E,MAAI,EAAE,QAAQ,OAAO,EAAE,QAAS,qBAAoB,GAAG,iCAAiC;AACxF,MAAI,EAAE,QAAQ,OAAO,EAAE,QAAS,qBAAoB,GAAG,iCAAiC;AACxF,MAAI,EAAE,QAAQ,OAAO,EAAE,QAAS,qBAAoB,GAAG,mBAAmB;AAC1E,MAAI,EAAE,QAAQ,YAAY,EAAE,QAAS,qBAAoB,GAAG,mBAAmB;AAC/E,MAAI,EAAE,QAAQ,OAAO,EAAE,QAAS,qBAAoB,GAAG,qBAAqB;AAC9E,CAAC;AAED,SAAS,qBAAqB,MAAM,UAAU;AAC5C,QAAM,WAAW,MAAM,SAAS,aAAa,MAAM,aAAa,KAAK,KAAK;AAC1E,MAAI,aAAa,UAAU;AACzB,UAAM,eAAe,OAAO,WAAW,QAAQ;AAC/C,WAAO,OAAO,MAAM,YAAY,IAAI,OAAO,oBAAoB;AAAA,EACjE;AACA,SAAO,SAAS,YAAY;AAC9B;AAEA,SAAS,UAAU,OAAO,aAAa,UAAU,WAAW;AAC1D,QAAM,QAAQ,MAAM,cAAc,OAAO;AACzC,MAAI,CAAC,MAAO;AACZ,QAAM,OAAO,MAAM,KAAU,MAAM,iBAAiB,IAAI,CAAC;AACzD,QAAM,YAAY,cAAc,SAAS,KAAK;AAC9C,QAAM,aAAa,KAChB,IAAI,CAAC,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,EACpC,KAAK,CAAC,GAAG,MAAM;AACd,UAAM,QAAQ,EAAE,IAAI,SAAS,WAAW;AACxC,UAAM,QAAQ,EAAE,IAAI,SAAS,WAAW;AACxC,UAAM,SAAS,qBAAqB,OAAO,QAAQ;AACnD,UAAM,SAAS,qBAAqB,OAAO,QAAQ;AACnD,QAAI,SAAS,OAAQ,QAAO,KAAK;AACjC,QAAI,SAAS,OAAQ,QAAO,IAAI;AAChC,WAAO,EAAE,QAAQ,EAAE;AAAA,EACrB,CAAC;AACH,QAAM,gBAAgB,GAAG,WAAW,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC;AAC7D;AAEA,SAAS,oBAAoB,OAAO,cAAc,WAAW;AAC3D,QAAM,UAAU,MAAM,iBAAiB,aAAa;AACpD,aAAW,UAAU,SAAS;AAC5B,WAAO,UAAU,OAAO,cAAc,aAAa;AACnD,WAAO,gBAAgB,WAAW;AAAA,EACpC;AACA,eAAa,UAAU,IAAI,cAAc,SAAS,gBAAgB,YAAY;AAC9E,eAAa,aAAa,aAAa,cAAc,SAAS,eAAe,WAAW;AAC1F;AAEA,SAAS,yBAAyBE,QAAO;AACvC,QAAM,SAASA,OAAM,OAAO,QAAQ,aAAa;AACjD,MAAI,CAAC,OAAQ;AACb,QAAM,QAAQ,OAAO,QAAQ,6BAA6B;AAC1D,MAAI,CAAC,MAAO;AACZ,QAAM,UAAU,MAAM,KAAU,MAAM,iBAAiB,aAAa,CAAC;AACrE,QAAM,cAAc,QAAQ,QAAQ,MAAM;AAC1C,MAAI,cAAc,EAAG;AAErB,QAAM,iBAAiB,MAAM,QAAQ,WAAW,MAAM,QAAQ;AAC9D,QAAM,mBAAmB,MAAM,QAAQ,aAAa,MAAM,QAAQ,oBAAoB;AACtF,QAAM,kBAAkB,mBAAmB,OAAO,QAAQ;AAC1D,QAAM,YAAY,mBAAmB,qBAAqB,QAAQ,SAAS;AAE3E,QAAM,QAAQ,UAAU,OAAO,QAAQ;AACvC,QAAM,QAAQ,YAAY;AAC1B,YAAU,OAAO,aAAa,OAAO,QAAQ,YAAY,QAAQ,SAAS;AAC1E,sBAAoB,OAAO,QAAQ,SAAS;AAC9C;AAEA,eAAsB,kBAAkB;AACtC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,OAAO,UAAU;AACvB,MAAI,CAAC,KAAK,QAAQ,kBAAkB;AAClC,SAAK,iBAAiB,SAAS,wBAAwB;AACvD,SAAK,QAAQ,mBAAmB;AAAA,EAClC;AACA,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,mBAAmB,KAAK,MAAM,KAAK,EAAE,CAAC;AAC1C,QAAM,mBAAmB,KAAK,EAAE;AAClC;AAEA,eAAsB,WAAW,UAAU;AACzC,MAAI,CAAC,SAAU;AAEf,MAAI,CAAC,QAAQ,sFAAsF,QAAQ,EAAE,EAAG;AAChH,QAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,qBAAqB,mBAAmB,QAAQ,CAAC,IAAI,EAAE,QAAQ,SAAS,CAAC;AAClH,MAAI,CAAC,OAAO,IAAI,WAAW,KAAK;AAC9B,UAAM,cAAc,EAAE,MAAM,UAAU,QAAQ,KAAK,QAAQ,YAAY,KAAK,WAAW,CAAC;AACxF;AAAA,EACF;AACA,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,MAAI,cAAc,IAAI;AACxB;AACA,OAAO,aAAa;AAKb,SAAS,mBAAmBC,KAAI;AACrC,MAAIA,QAAO,SAAU,QAAO;AAC5B,QAAM,gBAAgB,iBAAiBA,GAAE;AACzC,QAAMC,aAAY,cAAc,YAAY;AAC5C,MAAI,CAACA,WAAW,QAAO;AACvB,SAAO,mBAAmBD,IAAG,UAAU;AACzC;AAEO,SAAS,iBAAiBA,KAAI;AACnC,QAAM,SAASA,IAAG,sBAAsB;AACxC,QAAM,eAAe,OAAO;AAC5B,QAAM,aAAa,OAAO,SAAS,KAAK,OAAO,MAAM;AACrD,SAAO;AACT;;;ACnTA,IAAI,oBAA+B,CAAC;AAEpC,IAAM,iBAAiB,CAACE,QAA2B;AACjD,QAAM,WAAsB,CAAC;AAC7B,WAAS,IAAI,GAAG,IAAIA,IAAG,SAAS,QAAQ,KAAK;AAC3C,aAAS,KAAKA,IAAG,SAAS,CAAC,CAAC;AAC5B,QAAIA,IAAG,SAAS,CAAC,EAAE,SAAS,OAAQ,UAAS,KAAK,GAAG,eAAeA,IAAG,SAAS,CAAC,CAAC,CAAC;AAAA,EACrF;AACA,SAAO;AACT;AAEA,SAAS,QAAQA,KAAqB;AACpC,MAAI,OAAO;AACX,EAAAA,IAAG,WAAW,QAAQ,CAAC,SAAS;AAC9B,QAAI,KAAK,aAAa,KAAK,UAAW,SAAQ,KAAK,aAAa;AAAA,EAClE,CAAC;AACD,SAAO,KAAK,KAAK;AACnB;AAEA,IAAI,iBAAiB;AAErB,SAAS,kBAAkB,OAAwB;AACjD,QAAM,SAAS,UAAU,EAAE,eAAe,kBAAkB;AAC5D,MAAI,CAAC,OAAQ;AACb,SAAO,YAAY;AACnB,QAAM,OAAO,SAAS,cAAc,GAAG;AAEvC,QAAM,SAAS,MAAM;AACnB,QAAI,iBAAiB,GAAG;AACtB;AACA,YAAM,cAAc,EAAE,eAAe;AACrC,WAAK,YAAY,sBAAsB,iBAAiB,CAAC,OAAO,MAAM,MAAM;AAAA,IAC9E;AAAA,EACF;AACA,QAAM,SAAS,MAAM;AACnB,QAAI,iBAAiB,MAAM,SAAS,GAAG;AACrC;AACA,YAAM,cAAc,EAAE,eAAe;AACrC,WAAK,YAAY,sBAAsB,iBAAiB,CAAC,OAAO,MAAM,MAAM;AAAA,IAC9E;AAAA,EACF;AAEA,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,YAAY;AACjB,OAAK,YAAY;AACjB,OAAK,UAAU;AACf,OAAK,QAAQ;AACb,SAAO,YAAY,IAAI;AAEvB,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,YAAY;AACjB,OAAK,YAAY;AACjB,OAAK,QAAQ;AACb,OAAK,UAAU;AACf,SAAO,YAAY,IAAI;AAEvB,OAAK,YAAY,gBAAgB,MAAM,MAAM;AAC7C,SAAO,YAAY,IAAI;AACzB;AAEA,eAAsB,gBAAgB;AACpC,QAAM,SAAS,UAAU,EAAE,cAAc,qCAAqC;AAC9E,QAAM,KAAK,UAAU,EAAE,eAAe,oBAAoB;AAC1D,MAAI,EAAE,kBAAkB,wBAAwB,CAAC,IAAI;AAEnD;AAAA,EACF;AACA,QAAM,kBAAkB,YAAY;AAClC,QAAI,kBAAkB,SAAS,IAAK,qBAAoB,eAAe,EAAE;AACzE,UAAM,QAAQ,CAAC;AACf,eAAWA,OAAM,mBAAmB;AAClC,UAAI,OAAO,MAAM,SAAS,KAAK,QAAQA,GAAE,EAAE,YAAY,EAAE,SAAS,OAAO,MAAM,YAAY,CAAC,GAAG;AAC7F,QAAAA,IAAG,UAAU,IAAI,qBAAqB;AACtC,cAAM,KAAKA,GAAE;AAAA,MACf,OAAO;AACL,QAAAA,IAAG,UAAU,OAAO,qBAAqB;AAAA,MAC3C;AAAA,IACF;AACA,sBAAkB,KAAK;AAAA,EACzB;AACA,SAAO,iBAAiB,SAAS,eAAe;AAClD;;;AC/EO,SAAS,iBAAiB,cAAsB,MAA4B;AACjF,QAAM,WAAW,UAAU,EAAE,eAAe,gBAAgB;AAC5D,MAAI,SAAU,UAAS,MAAM;AAC7B,QAAM,MAAM,UAAU,EAAE,cAAc,oCAAoC;AAC1E,MAAI,CAAC,IAAK,QAAO,CAAC,SAAS,GAAG,IAAI;AAClC,QAAM,OAAO,MAAM,KAAU,UAAU,EAAE,iBAAiB,2BAA2B,CAAC;AACtF,QAAM,SAAS,KAAK,UAAU,CAAC,QAAQ,IAAI,UAAU,SAAS,UAAU,CAAC;AACzE,QAAM,WAAW,CAAC,SAAS,SAAS,SAAS,QAAQ;AACrD,MAAI,WAAW,SAAS,MAAM,KAAK;AACnC,MAAI,oBAAoB,EAAE,MAAM,WAAW,KAAK,UAAU,QAAQ,OAAO,OAAO,OAAO,CAAC;AAGxF,MAAK,aAAa,WAAa,OAAO,OAAO,WAAW,eAAgB,OAAO,QAAQ;AACrF,eAAW;AACX,aAAS,IAAI,GAAG,IAAI,OAAO,OAAO,OAAO,WAAW,KAAK;AACvD,WAAK,IAAI,CAAC,IAAI,OAAO,OAAO,SAAS,IAAI,GAAG,OAAO,KAAK;AAAA,IAC1D;AAAA,EACF;AAEA,SAAO,CAAC,UAAU,GAAG,IAAI;AAC3B;AAEA,OAAO,mBAAmB;AAE1B,eAAsB,iBAAiB;AACrC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,OAAO,CAAC,SAAS,UAAU,SAAS;AAC1C,aAAW,OAAO,MAAM;AACtB,UAAM,MAAM,UAAU,EAAE,eAAe,WAAW,GAAG,SAAS;AAC9D,QAAI,CAAC,IAAK;AACV,QAAI,MAAM,SAAS;AACnB,QAAI,UAAU,MAAM;AAClB,YAAM,IAAI,UAAU,EAAE,eAAe,eAAe,GAAG,EAAE;AACzD,UAAI,CAAC,EAAG;AACR,QAAE,MAAM,UAAU,EAAE,MAAM,YAAY,SAAS,UAAU;AACzD,YAAM,IAAI,UAAU,EAAE,eAAe,WAAW,GAAG,SAAS;AAC5D,UAAI,CAAC,EAAG;AACR,QAAE,MAAM,WAAW,EAAE,MAAM,aAAa,MAAM,MAAM;AAAA,IACtD;AAAA,EACF;AAEA,QAAMC,MAAK,UAAU,EAAE,eAAe,sBAAsB;AAC5D,MAAI,CAACA,IAAI;AACT,QAAM,uBAAuB,IAAI,qBAAqB,CAAC,YAAY;AACjE,QAAI,QAAQ,CAAC,EAAE,oBAAoB,GAAG;AACpC,YAAM,UAAU,MAAM,KAAU,UAAU,EAAE,iBAAiB,sCAAsC,CAAC;AACpG,iBAAW,OAAO,SAAS;AACzB,YAAI,EAAE,eAAe,aAAc;AACnC,cAAM,OAAO,IAAI,UAAU,YAAY;AACvC,iBAAS,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC9B,gBAAM,MAAM,UAAU,EAAE,eAAe,WAAW,IAAI,WAAW,CAAC,EAAE;AACpE,cAAI,IAAK,KAAI,MAAM;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACD,uBAAqB,QAAQA,GAAE;AAE/B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,kBAAkB,KAAK,MAAM,KAAK,EAAE,CAAC;AACzC,QAAM,kBAAkB,KAAK,EAAE;AACjC;;;AC5DA,IAAM,uBAAuB,CAAC;AAC9B,IAAM,mBAAmB,CAAC;AAC1B,IAAI,UAAU;AACd,IAAI,aAAa;AACjB,IAAI,UAAU;AAIP,SAAS,sBAAsB;AACpC,SAAO;AACT;AAEO,IAAM,iBAAiB,MAAM;AAClC,MAAI,UAAU;AACd,MAAI,UAAU,EAAE,eAAe,gBAAgB,GAAG,gBAAgB,KAAK,UAAU,EAAE,eAAe,kBAAkB,GAAG,gBAAgB,EAAG,WAAU;AAAA,WAC3I,UAAU,EAAE,eAAe,gBAAgB,GAAG,gBAAgB,KAAK,UAAU,EAAE,eAAe,kBAAkB,GAAG,gBAAgB,EAAG,WAAU;AAAA,WAChJ,UAAU,EAAE,eAAe,gBAAgB,GAAG,gBAAgB,KAAK,UAAU,EAAE,eAAe,kBAAkB,GAAG,gBAAgB,EAAG,WAAU;AAAA,WAChJ,UAAU,EAAE,eAAe,cAAc,GAAG,gBAAgB,KAAK,UAAU,EAAE,eAAe,gBAAgB,GAAG,gBAAgB,EAAG,WAAU;AAAA,WAC5I,UAAU,EAAE,eAAe,cAAc,GAAG,gBAAgB,EAAG,WAAU;AAAA,WACzE,UAAU,EAAE,eAAe,mBAAmB,GAAG,gBAAgB,EAAG,WAAU;AAAA,WAC9E,UAAU,EAAE,eAAe,oBAAoB,GAAG,gBAAgB,EAAG,WAAU;AAExF,MAAI,CAAC,WAAW,WAAW,SAAS,EAAE,SAAS,OAAO,GAAG;AACvD,cAAU;AAAA,EACZ,WAAW,YAAY,IAAI;AACzB,cAAU;AAAA,EACZ;AAEA,MAAI,YAAY,GAAI,QAAO;AAE3B,MAAI,UAAU,EAAE,eAAe,aAAa,GAAG,MAAM,YAAY,QAAS,WAAU;AAAA,WAC3E,UAAU,EAAE,eAAe,aAAa,GAAG,MAAM,YAAY,QAAS,WAAU;AAAA,WAChF,UAAU,EAAE,eAAe,aAAa,GAAG,MAAM,YAAY,QAAS,WAAU;AAAA,WAChF,UAAU,EAAE,eAAe,WAAW,GAAG,MAAM,YAAY,QAAS,WAAU;AAAA,MAClF,WAAU;AAEf,SAAO;AACT;AAEA,IAAM,kBAAkB,MAAM;AAC5B,QAAM,UAAU,eAAe;AAC/B,MAAI,OAAO,UAAU,EAAE,cAAc,IAAI,OAAO,gDAAgD;AAChG,MAAI,CAAC,KAAM,QAAO,UAAU,EAAE,cAAc,IAAI,OAAO,oCAAoC;AAC3F,QAAM,WAAW,OAAO,KAAK,YAAY;AACzC,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,MAAI,SAAU,UAAS,MAAM,UAAU,aAAa,UAAU,gBAAgB;AAE9E,SAAO;AACT;AAEA,IAAM,aAAa,CAAC,UAAU;AAC5B,MAAI,CAAC,MAAO;AACZ,QAAM,MAAM,eAAe;AAC3B,QAAM,OAAO,gBAAgB;AAE7B,QAAMC,MAAK,UAAU,EAAE,cAAc,IAAI,MAAM,GAAG,kCAAkC;AACpF,MAAIA,KAAI;AACN,IAAAA,IAAG,QAAQ,KAAK,UAAU,KAAK;AAC/B,gBAAYA,GAAE;AAAA,EAChB;AACF;AAIO,SAAS,gBAAgBC,QAAO;AAErC,QAAM,UAAU,eAAe;AAC/B,QAAM,MAAM,UAAU,EAAE,eAAe,GAAG,OAAO,oBAAoB;AACrE,MAAI,MAAM;AACV,EAAAA,OAAM,gBAAgB;AACtB,EAAAA,OAAM,eAAe;AACvB;AACA,OAAO,kBAAkB;AAEzB,SAAS,kBAAkB,MAAM;AAE/B,QAAMD,MAAM,OAAO,QAAgB,eAAe;AAClD,MAAIA,KAAI,WAAW,SAAS,MAAM,EAAG,YAAW,EAAE,IAAI,kBAAkB,MAAMA,IAAG,QAAQ,KAAK,CAAC;AAAA,MAC1F,YAAW,EAAE,IAAI,kBAAkB,MAAM,KAAK,CAAC;AACpD,SAAO,CAAC,GAAG,IAAI;AACjB;AAEA,SAAS,aAAaA,KAAI,MAAM;AAC9B,QAAM,yBAAyB,CAAC,OAAO,QAAQ,gBAAgB,MAAM,MAAM,sBAAsB,EAAE,IAAI,CAAC,MAAM,MAAM;AAClH,QAAI,IAAI,MAAM,EAAG,QAAO,KAAK,MAAM,MAAM,EAAE,KAAK,WAAW;AAC3D,WAAO;AAAA,EACT,CAAC,EAAE,KAAK,EAAE;AAEV,QAAM,WAAW,CAAC,GAAG,QAAQ;AAC3B,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,UAAM,WAAW,qBAAqB,eAAe,CAAC;AACtD,QAAI,aAAa,SAAS;AAC1B,iBAAa,uBAAuB,YAAY,IAAI,GAAG,IAAI,EAAE;AAC7D,iBAAa,uBAAuB,YAAY,GAAG,GAAG,KAAK,EAAE;AAC7D,QAAI,eAAe,SAAS,MAAO,eAAc,IAAI,GAAG;AACxD,aAAS,QAAQ;AACjB,gBAAY,QAAQ;AAAA,EACtB;AAEA,MAAI,KAAK,WAAW,EAAG;AACvB,QAAM,WAAW,KAAK,MAAM,GAAG;AAC/B,MAAI,CAAC,YAAY,SAAS,WAAW,EAAG;AACxC,QAAM,SAASA,IAAG,uBAAuB,MAAM,EAAE,CAAC;AAClD,MAAI,CAAC,QAAQ,YAAY,OAAO,SAAS,SAAS,EAAG;AACrD,aAAW,OAAO,UAAU;AAC1B,UAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,SAAK,UAAU,IAAI,KAAK;AACxB,SAAK,cAAc;AACnB,SAAK,UAAU,CAAC,MAAM,SAAS,GAAG,GAAG;AACrC,WAAO,YAAY,IAAI;AAAA,EACzB;AACF;AAEA,SAAS,oBAAoB,MAAM,MAAM;AACvC,SAAO,0BAA0B,EAAE,MAAM,KAAK,GAAG,CAAC,SAAS;AACzD,UAAM,UAAU,eAAe;AAC/B,UAAM,cAAc,UAAU,EAAE,cAAc,IAAI,OAAO,iCAAiC;AAC1F,QAAI,aAAa;AACf,kBAAY,QAAS,MAAc,aAAa,KAAK,KAAK;AAC1D,MAAC,OAAe,YAAY,WAAW;AAAA,IACzC;AACA,eAAW,EAAE,IAAI,uBAAuB,MAAM,KAAK,CAAC;AAAA,EACtD,CAAC;AACH;AAEA,SAAS,wBAAwB;AAC/B,QAAM,WAAW,gBAAgB;AACjC,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,MAAI,WAAW,MAAM,KAAU,UAAU,EAAE,iBAAiB,8BAA8B,CAAC;AAC3F,aAAW,SAAS,OAAO,CAACA,QAAOA,IAAG,QAAQ,MAAM,YAAY,EAAE,SAAS,SAAS,YAAY,CAAC,CAAC;AAElG,SAAO;AACT;AAEA,eAAe,0BAA0B,YAAY;AACnD,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,eAAa,WAAW,YAAY,EAAE,KAAK;AAC3C,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,WAAW,gBAAgB;AACjC,MAAI,CAAC,SAAU;AACf,QAAM,WAAW,MAAM,KAAU,UAAU,EAAE,iBAAiB,sBAAsB,CAAC;AACrF,QAAM,QAAQ,SAAS,OAAO,CAACA,QAAOA,IAAG,GAAG,YAAY,EAAE,SAAS,SAAS,YAAY,CAAC,CAAC;AAC1F,aAAW,MAAM,OAAO;AACtB,UAAM,QAAQ,MAAM,KAAU,GAAG,iBAAiB,OAAO,KAAK,CAAC,CAAC;AAChE,aAAS,MAAM;AACf,QAAI,eAAe,MAAM,eAAe,QAAQ;AAC9C,YAAM,QAAQ,CAAC,SAAS;AAAE,aAAK,MAAM,UAAU;AAAA,MAAI,CAAC;AAAA,IACtD,WAAW,eAAe,cAAc;AACtC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,YAAY,KAAK,KAAK,QAAQ,SAAS,KAAK,KAAK;AAAA,MAC/D,CAAC;AAAA,IACH,WAAW,eAAe,SAAS;AACjC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,MAAM,IAAI,KAAK;AAAA,MAC7B,CAAC;AAAA,IACH,WAAW,eAAe,cAAc;AACtC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,WAAW,IAAI,KAAK;AAAA,MAClC,CAAC;AAAA,IACH,WAAW,eAAe,cAAc;AACtC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,WAAW,IAAI,KAAK;AAAA,MAClC,CAAC;AAAA,IACH,WAAW,eAAe,UAAU;AAClC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,OAAO,IAAI,KAAK;AAAA,MAC9B,CAAC;AAAA,IACH,WAAW,eAAe,cAAc;AACtC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,WAAW,IAAI,KAAK;AAAA,MAClC,CAAC;AAAA,IACH,WAAW,eAAe,aAAa;AACrC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,UAAU,IAAI,KAAK;AAAA,MACjC,CAAC;AAAA,IACH,WAAW,eAAe,UAAU;AAClC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EACZ,SAAS,YAAY,IAAI,SAAS;AAAA,MACvC,CAAC;AAAA,IACH,WAAW,eAAe,cAAc;AACtC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,KAAK,QAAQ,KAC/B,YAAY,EAAE,QAAQ,YAAY,WAAW,EAAE,WAAW,MAAM,GAAG,EACnE,SAAS,YAAY,IAAI,KAAK;AAAA,MACnC,CAAC;AAAA,IACH,WAAW,WAAW,WAAW,IAAI,GAAG;AACtC,mBAAa,WAAW,UAAU,CAAC;AACnC,YAAM,KAAK,IAAI,OAAO,YAAY,GAAG;AACrC,YAAM,QAAQ,CAAC,SAAS;AACtB,aAAK,MAAM,UAAU,GAAG,KAAK,aAAa,KAAK,QAAQ,QAAQ,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ,IAAI,EAAE,IAAI,KAAK;AAAA,MAClI,CAAC;AAAA,IACH,OAAO;AAEL,UAAI,WAAW;AACf,UAAI,aAAa,WAAW,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,MAAM,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AACxG,UAAI,cAAc,WAAW,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC;AACnI,UAAI,WAAW,WAAW,KAAK,WAAW,SAAS,GAAG,GAAG;AACvD,qBAAa,WAAW,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,MAAM,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AACpG,sBAAc,WAAW,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC;AAC/H,mBAAW;AAAA,MACb;AACA,YAAM,gBAAgB,WAAW,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7E,YAAM,iBAAiB,YAAY,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC/E,YAAM,QAAQ,CAAC,SAAS;AACtB,YAAI,OAAO;AACX,YAAI,KAAK,QAAQ,SAAU,SAAQ,GAAG,KAAK,QAAQ,QAAQ;AAC3D,YAAI,KAAK,QAAQ,KAAM,SAAQ,GAAG,KAAK,QAAQ,IAAI;AACnD,YAAI,KAAK,QAAQ,KAAM,SAAQ,GAAG,KAAK,QAAQ,IAAI;AACnD,eAAO,KAAK,YAAY,EAAE,QAAQ,YAAY,WAAW,EAAE,WAAW,MAAM,GAAG;AAC/E,YAAI,YAAY,cAAc,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,CAACA,QAAOA,IAAG,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,GAAG;AACrJ,eAAK,MAAM,UAAU;AAAA,QACvB,WAAW,CAAC,YAAY,cAAc,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,CAACA,QAAOA,IAAG,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,GAAG;AAC5J,eAAK,MAAM,UAAU;AAAA,QACvB,OAAO;AACL,eAAK,MAAM,UAAU;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,IACH;AACA,aAAS,MAAM,OAAO,CAAC,SAAS,KAAK,MAAM,YAAY,EAAE,EAAE;AAAA,EAC7D;AACA,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,8BAA8B,UAAU,WAAW,KAAK,UAAU,KAAK,SAAS,KAAK,MAAM,KAAK,EAAE,CAAC,EAAE;AACzG,QAAM,uBAAuB,UAAU,IAAI,KAAK,EAAE;AACpD;AAkCA,SAAS,kBAAkB,QAAQ,MAAM;AACvC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,WAAW,CAAC,WAAW,cAAc,cAAc,iBAAiB,iBAAiB,kBAAkB,iBAAiB;AAC9H,QAAM,WAAW,gBAAgB;AACjC,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,WAAW,MAAM,KAAU,UAAU,EAAE,iBAAiB,sBAAsB,CAAC;AACrF,QAAM,QAAQ,SAAS,OAAO,CAACE,QAAOA,IAAG,GAAG,YAAY,EAAE,SAAS,SAAS,YAAY,CAAC,CAAC;AAC1F,MAAI,MAAM;AACV,MAAI,YAAY,GAAI,WAAU,SAAS,QAAQ,KAAK,mBAAmB;AACvE,MAAI,UAAU,QAAS,YAAW,UAAU,KAAK,SAAS;AAC1D,QAAM,eAAe,CAAC,GAAG,MAAM;AAC7B,YAAQ,SAAS;AAAA,MACf,KAAK;AAAG,eAAO;AAAA,MACf,KAAK;AAAG,eAAO,EAAE,QAAQ,OAAO,EAAE,QAAQ,KAAK,cAAc,EAAE,QAAQ,IAAI,IAAI;AAAA,MAC/E,KAAK;AAAG,eAAO,EAAE,QAAQ,OAAO,EAAE,QAAQ,KAAK,cAAc,EAAE,QAAQ,IAAI,IAAI;AAAA,MAC/E,KAAK;AAAG,eAAO,EAAE,QAAQ,QAAS,IAAI,KAAK,EAAE,QAAQ,KAAK,EAAG,QAAQ,IAAK,IAAI,KAAK,EAAE,QAAQ,KAAK,EAAG,QAAQ,IAAI;AAAA,MACjH,KAAK;AAAG,eAAO,EAAE,QAAQ,QAAS,IAAI,KAAK,EAAE,QAAQ,KAAK,EAAG,QAAQ,IAAK,IAAI,KAAK,EAAE,QAAQ,KAAK,EAAG,QAAQ,IAAI;AAAA,MACjH,KAAK;AAAG,eAAO,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,WAAW,EAAE,QAAQ,IAAI,IAAI,WAAW,EAAE,QAAQ,IAAI,IAAI;AAAA,MACpH,KAAK;AAAG,eAAO,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,WAAW,EAAE,QAAQ,IAAI,IAAI,WAAW,EAAE,QAAQ,IAAI,IAAI;AAAA,IACtH;AACA,WAAO;AAAA,EACT;AACA,aAAW,MAAM,OAAO;AACtB,UAAM,QAAQ,MAAM,KAAU,GAAG,iBAAiB,OAAO,KAAK,CAAC,CAAC;AAChE,QAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,WAAO,MAAM;AACb,UAAM,KAAK,YAAY;AACvB,eAAW,QAAQ,MAAO,IAAG,YAAY,IAAI;AAAA,EAC/C;AACA,QAAM,OAAO,SAAS,OAAO;AAC7B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,gBAAgB,EAAE,MAAM,UAAU,KAAK,SAAS,OAAO,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACxG,QAAM,qBAAqB,IAAI,IAAI,KAAK,EAAE;AAC1C,SAAO;AACT;AAOA,eAAsB,kBAAkB,UAAU,OAAO,IAAI;AAC3D,MAAI,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC3C,mBAAiB,IAAI,IAAI;AACzB,YAAU,EAAE,iBAAiB,4BAA4B,EAAE,QAAQ,CAACC,QAAO;AACzE,QAAI,KAAK,SAAS,KAAKA,IAAG,QAAQ,SAAS,KAAM;AACjD,QAAI,SAAS,SAASA,IAAG,QAAQ,IAAI,KAAK,SAAS,SAASA,IAAG,QAAQ,KAAK,EAAG,CAAAA,IAAG,UAAU,IAAI,eAAe;AAAA,QAC1G,CAAAA,IAAG,UAAU,OAAO,eAAe;AAAA,EAC1C,CAAC;AACH;AAEA,SAAS,iBAAiB,QAAQ;AAChC,QAAM,QAAQ;AACd,QAAM,QAAQ,CAAC;AACf,MAAI,QAAQ,MAAM,KAAK,MAAM;AAC7B,SAAO,UAAU,MAAM;AACrB,UAAM,KAAK,MAAM,CAAC,CAAC;AACnB,YAAQ,MAAM,KAAK,MAAM;AAAA,EAC3B;AACA,SAAO;AACT;AAEA,SAAS,YAAY,WAAW;AAC9B,QAAM,UAAU,eAAe;AAC/B,MAAI,eAAe,EAAE,KAAK,SAAS,MAAM,UAAU,CAAC;AACpD,QAAM,WAAW,qBAAqB,OAAO;AAC7C,MAAI,SAAS,MAAM,QAAQ,SAAS,MAAM,GAAI,UAAS,QAAQ,SAAS,MAAM,QAAQ,WAAW,EAAE;AAAA,MAC9F,UAAS,SAAS;AACvB,cAAY,QAAQ;AACpB,oBAAkB,iBAAiB,SAAS,KAAK,GAAG,MAAM;AAC5D;AACA,OAAO,cAAc;AAErB,SAAS,0BAA0BC,QAAO;AAExC,QAAM,UAAU,eAAe;AAC/B,QAAM,iBAAiB,UAAU,EAAE,cAAc,IAAI,OAAO,wBAAwB;AACpF,QAAM,SAASA,OAAM;AACrB,MAAI,gBAAgB;AAClB,mBAAe,QAAQ,GAAG,OAAO,YAAY,KAAK,CAAC;AACnD,gBAAY,cAAc;AAAA,EAC5B,OAAO;AACL,YAAQ,MAAM,mDAAmD,OAAO,EAAE;AAAA,EAC5E;AACF;AAEA,SAAS,2BAA2BA,QAAO;AACzC,QAAM,UAAUA,OAAM,OAAO,YAAY,KAAK;AAC9C,QAAM,aAAa,gBAAgB,EAAE,YAAY;AACjD,QAAM,iBAAiB,UAAU,EAAE,iBAAiB,sBAAsB;AAC1E,MAAI,8BAA8B,EAAE,YAAY,QAAQ,CAAC;AACzD,aAAW,iBAAiB,gBAAgB;AAC1C,QAAI,CAAC,cAAc,GAAG,SAAS,UAAU,EAAG;AAC5C,QAAI,cAAc,QAAQ,kBAAkB,SAAS;AACnD,oBAAc,QAAQ,gBAAgB;AACtC,oBAAc,iBAAiB,OAAO,EAAE,QAAQ,CAAC,SAAS;AAAE,aAAK,MAAM,UAAU;AAAA,MAAI,CAAC;AAAA,IACxF,OAAO;AACL,oBAAc,QAAQ,gBAAgB;AACtC,oBAAc,iBAAiB,OAAO,EAAE,QAAQ,CAAC,SAAS;AACxD,YAAI,KAAK,QAAQ,YAAY,QAAS,MAAK,MAAM,UAAU;AAAA,YACtD,MAAK,MAAM,UAAU;AAAA,MAC5B,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,IAAI,eAAe;AACZ,SAAS,YAAY,MAAM;AAChC,iBAAe;AACf,QAAM,UAAU,eAAe;AAC/B,QAAM,SAAS,UAAU,EAAE,cAAc,IAAI,OAAO,gBAAgB;AACpE,SAAO,MAAM;AACf;AAEO,SAAS,YAAY,QAAc;AACxC,MAAI;AACJ,MAAI,QAAQ;AACV,gBAAY,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AAAA,EACtD,OAAO;AACL,UAAM,UAAU,eAAe;AAC/B,aAAS,UAAU,EAAE,iBAAiB,IAAI,OAAO,qBAAqB;AACtE,gBAAY,MAAM,KAAU,MAAM,EAAE,IAAI,CAACD,QAAOA,IAAG,WAAW,EAAE,OAAO,CAACA,QAAOA,IAAG,SAAS,CAAC;AAAA,EAC9F;AACA,QAAM,QAAQ,UAAU,QAAQ,YAAY;AAC5C,MAAI,QAAQ,GAAI,WAAU,OAAO,OAAO,CAAC;AAAA,MACpC,WAAU,KAAK,YAAY;AAChC,oBAAkB,WAAW,OAAO;AACpC,SAAO,UAAU,KAAK,GAAG;AAC3B;AAEO,SAAS,kBAAkB;AAChC,QAAM,UAAU,eAAe;AAC/B,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,MAAI,SAAU,UAAS,MAAM;AAC/B;AAEO,SAAS,iBAAiB;AAC/B,QAAM,UAAU,eAAe;AAC/B,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,kBAAkB;AACvE,MAAI,QAAS,SAAQ,MAAM;AAC3B,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,gBAAgB;AACxE,MAAI,YAAY;AACd,eAAW,MAAM,WAAW,MAAM,GAAG,GAAG;AAAA,EAE1C;AACF;AACA,OAAO,iBAAiB;AASxB,IAAI,UAAU;AACd,SAAS,kBAAkB,MAAM;AAE/B,YAAU;AACV,QAAM,UAAU,eAAe;AAC/B,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,sBAAsB;AAC5E,MAAI,SAAU,YAAW,MAAM,SAAS,MAAM,GAAG,GAAG;AACpD,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,gBAAgB;AACxE,MAAI,cAAc,QAAS,YAAW,MAAM,WAAW,MAAM,GAAG,GAAG;AACnE,SAAO,CAAC,GAAG,IAAI;AACjB;AAEA,SAAS,gBAAgB,MAAM;AAE7B,QAAM,UAAU,eAAe;AAC/B,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,gBAAgB;AACxE,MAAI,cAAc,QAAS,YAAW,MAAM,WAAW,MAAM,GAAG,GAAG;AACnE,YAAU;AACV,SAAO;AACT;AAGA,SAAS,gBAAgB;AACvB,MAAI,sBAAsB,EAAE,WAAW,GAAG;AAExC,UAAM,UAAU,eAAe;AAC/B,UAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,gBAAgB;AACxE,QAAI,WAAY,YAAW,MAAM;AAAA,EACnC;AACF;AAGA,SAAS,yBAAyB,SAAS;AACzC,MAAI,OAAO,UAAU,EAAE,cAAc,IAAI,OAAO,aAAa;AAC7D,MAAI,KAAM,MAAK,UAAU,IAAI,gBAAgB;AAC7C,QAAM,KAAK,UAAU,EAAE,eAAe,GAAG,OAAO,iBAAiB;AACjE,SAAO,UAAU,EAAE,cAAc,IAAI,OAAO,mBAAmB;AAC/D,MAAI,CAAC,KAAM;AAGX,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,qBAAqB;AAC1E,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,gBAAgB;AACxE,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa;AAClE,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa;AAClE,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa;AAClE,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa;AAClE,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,QAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,UAAQ,UAAU,IAAI,SAAS;AAC/B,MAAI,WAAY,SAAQ,YAAY,UAAU;AAC9C,MAAI,SAAU,SAAQ,YAAY,QAAQ;AAC1C,MAAI,SAAU,SAAQ,YAAY,QAAQ;AAC1C,MAAI,QAAS,SAAQ,YAAY,OAAO;AACxC,MAAI,QAAS,SAAQ,YAAY,OAAO;AACxC,MAAI,QAAS,SAAQ,YAAY,OAAO;AACxC,MAAI,QAAS,SAAQ,YAAY,OAAO;AACxC,MAAI,SAAU,SAAQ,YAAY,QAAQ;AAC1C,WAAS,UAAU,MAAM,SAAS,UAAU,OAAO,qBAAqB;AAExE,OAAK,YAAY,OAAO;AAGxB,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,oBAAoB;AAC5E,QAAM,eAAe,UAAU,EAAE,eAAe,GAAG,OAAO,sBAAsB;AAChF,MAAI,cAAc,cAAc;AAC9B,eAAW,QAAQ;AACnB,eAAW,UAAU,MAAM,aAAa,MAAM;AAAA,EAChD;AAGA,QAAM,MAAM,SAAS,cAAc,KAAK;AACxC,MAAI,UAAU,IAAI,aAAa;AAC/B,OAAK,YAAY,GAAG;AACpB,QAAM,YAAY,UAAU,EAAE,cAAc,IAAI,OAAO,eAAe;AACtE,QAAM,iBAAiB,UAAU,EAAE,cAAc,IAAI,OAAO,wBAAwB;AACpF,QAAM,iBAAiB,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AAC1E,MAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,eAAgB;AACtD,YAAU,UAAU,IAAI,QAAQ;AAChC,iBAAe,UAAU,IAAI,aAAa;AAC1C,MAAI,YAAY,SAAS;AACzB,MAAI,YAAY,cAAc;AAC9B,MAAI;AACJ,iBAAe,iBAAiB,SAAS,CAAC,QAAQ;AAChD,QAAI,cAAe,cAAa,aAAa;AAC7C,oBAAgB,WAAW,YAAY;AACrC,YAAM,0BAA0B,eAAe,MAAM,YAAY,CAAC;AAClE,sBAAgB;AAAA,IAClB,GAAG,GAAG;AAAA,EACR,CAAC;AAGD,MAAI;AACJ,MAAI,eAA8B;AAClC,MAAI,OAAO,KAAK,sBAAsB;AACpC,cAAU,EAAE,eAAe,GAAG,OAAO,aAAa,EAAE,cAAc,OAAO,MAAM;AAC7E,YAAME,MAAK,EAAE,OAAO,QAAQ,OAAO;AACnC,UAAI,CAACA,OAAOA,IAAG,UAAU,aAAe;AACxC,UAAI,CAAC,eAAe;AAClB,wBAAgB,WAAW,MAAM;AAC/B,8BAAoBA,IAAG,QAAQ,MAAMA,IAAG,QAAQ,IAAI;AACpD,uBAAaA,KAAIA,IAAG,QAAQ,IAAI;AAChC,yBAAeA,IAAG;AAAA,QACpB,GAAG,GAAG;AAAA,MACR;AACA,MAAAA,IAAG,aAAa,MAAM;AACpB,qBAAa,aAAa;AAC1B,wBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAGA,QAAM,iBAAiB,IAAI,eAAe,CAAC,YAAY;AACrD,eAAW,SAAS,SAAS;AAC3B,iBAAWA,OAAM,MAAM,KAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa,EAAE,iBAAiB,sBAAsB,CAAC,GAAG;AAC9H,cAAM,IAAI,KAAK,MAAM,MAAM,YAAY,MAAM;AAC7C,YAAI,KAAK,EAAG;AACZ,cAAM,KAAK,KAAK,kBAAkB,SAAS;AAC3C,YAAI,OAAO,KAAK,8BAA8B,aAAa,OAAO,KAAK,eAAe,WAAY,CAAAA,IAAG,MAAM,SAAS,OAAO,EAAE,KAAK,IAAI,EAAE;AAAA,iBAC/H,OAAO,KAAK,8BAA8B,YAAY,OAAO,KAAK,eAAe,WAAY,CAAAA,IAAG,MAAM,SAAS;AAAA,iBAC/G,OAAO,KAAK,8BAA8B,WAAW,OAAO,KAAK,eAAe,WAAY,CAAAA,IAAG,MAAM,SAAS;AAAA,YAClH,CAAAA,IAAG,MAAM,SAAS;AAAA,MAEzB;AAAA,IACF;AAAA,EACF,CAAC;AACD,QAAM,aAAa,UAAU,EAAE,eAAe,GAAG,OAAO,WAAW;AACnE,QAAM,cAAc,UAAU,EAAE,eAAe,GAAG,OAAO,YAAY;AACrE,MAAI,WAAY,gBAAe,QAAQ,UAAU;AACjD,MAAI,YAAa,gBAAe,QAAQ,WAAW;AAGnD,MAAI,CAAC,GAAI;AACT,MAAI;AACJ,MAAI,oBAAoB;AACxB,QAAM,uBAAuB,IAAI,qBAAqB,CAAC,YAAY;AACjE,QAAI,CAAC,mBAAmB;AACtB,0BAAoB;AACpB,UAAI;AACJ,YAAM,SAAS,OAAO,KAAK,8BAA8B,YAAY,IAAI,OAAO,KAAK;AACrF,UAAI,OAAO,KAAK,eAAe,WAAY,KAAI,SAAS,IAAI,SAAS;AAAA,UAChE,KAAI,SAAS,IAAI,SAAS;AAC/B,iBAAWA,OAAM,MAAM,KAAU,UAAU,EAAE,eAAe,GAAG,OAAO,aAAa,EAAE,iBAAiB,sBAAsB,CAAC,GAAG;AAC9H,YAAI,IAAI,EAAG,CAAAA,IAAG,MAAM,SAAS,GAAG,CAAC;AACjC,QAAAA,IAAG,cAAc,MAAM,QAAQ;AAAA,MACjC;AAAA,IACF;AACA,UAAM,QAAQ,MAAM,KAAU,UAAU,EAAE,iBAAiB,8BAA8B,CAAC;AAC1F,QAAI,MAAM,SAAS,KAAK,MAAM,WAAW,YAAY;AACnD,mBAAa,MAAM;AACnB,wBAAkB,OAAO;AAAA,IAC3B;AACA,QAAI,aAAa,QAAQ,CAAC,EAAE,oBAAoB,GAAG;AACjD,iBAAW,QAAQ,CAAC,EAAE,oBAAoB;AAC1C,UAAI,UAAU;AACZ,sBAAc;AACd,YAAI,OAAO,KAAK,8BAA8B,SAAS;AACrD,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,SAAS;AAClB,aAAG,MAAM,QAAQ;AACjB,aAAG,MAAM,QAAQ;AACjB,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY;AACrB,aAAG,MAAM,MAAM;AACf,aAAG,MAAM,aAAa;AACtB,aAAG,MAAM,SAAS;AAClB,oBAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM,QAAQ;AAAA,QAC7E,WAAW,OAAO,KAAK,8BAA8B,WAAW;AAC9D,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,SAAS;AAClB,aAAG,MAAM,QAAQ,GAAG,OAAO,KAAK,4BAA4B;AAC5D,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY;AACrB,aAAG,MAAM,QAAQ;AACjB,aAAG,MAAM,MAAM;AACf,aAAG,MAAM,aAAa;AACtB,aAAG,MAAM,SAAS;AAClB,oBAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM,QAAQ,0BAA0B,OAAO,KAAK,4BAA4B;AAAA,QAC/I,OAAO;AACL,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,SAAS;AAClB,aAAG,MAAM,QAAQ;AACjB,aAAG,MAAM,QAAQ;AACjB,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY;AACrB,aAAG,MAAM,MAAM;AACf,aAAG,MAAM,aAAa;AACtB,aAAG,MAAM,SAAS;AAClB,oBAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM,QAAQ;AAAA,QAC7E;AAAA,MACF,OAAO;AACL,YAAI,OAAO,KAAK,8BAA8B,UAAW,IAAG,MAAM,QAAQ;AAC1E,kBAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM,QAAQ;AAAA,MAC7E;AACA,UAAI,YAAY,SAAS;AACvB,kBAAU,EAAE,eAAe,oBAAoB,EAAE,WAAW,MAAM,QAAQ,UAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM;AAC7I,kBAAU,EAAE,eAAe,cAAc,EAAE,WAAW,MAAM,QAAQ,UAAU,EAAE,eAAe,GAAG,OAAO,WAAW,EAAE,WAAW,MAAM;AAAA,MACzI;AAAA,IACF;AAAA,EACF,CAAC;AACD,uBAAqB,QAAQ,EAAE;AACjC;AAEA,eAAsB,eAAe;AACnC,aAAW,WAAW,CAAC,WAAW,WAAW,WAAW,OAAO,GAAG;AAChE,UAAM,MAAM,UAAU,EAAE,eAAe,GAAG,OAAO,qBAAqB;AACtE,QAAI,OAAO,KAAK,uBAAuB,IAAK,KAAI,MAAM;AAAA,EACxD;AACA,MAAI,cAAc;AACpB;AAEA,eAAsB,qBAAqB;AACzC,2BAAyB,SAAS;AAClC,2BAAyB,SAAS;AAClC,2BAAyB,SAAS;AAClC,2BAAyB,OAAO;AAEhC,WAAS,eAAe,SAAS,IAAI;AACnC,UAAM,WAAW,UAAU,EAAE,cAAc,IAAI,EAAE,qBAAqB;AACtE,QAAI,CAAC,SAAU;AACf,QAAI,CAAC,qBAAqB,OAAO,EAAG,sBAAqB,OAAO,IAAI;AACpE,aAAS,iBAAiB,SAAS,MAAM;AAAE,2BAAqB,OAAO,IAAI;AAAA,IAAU,CAAC;AAAA,EACxF;AAEA,iBAAe,WAAW,gBAAgB;AAC1C,iBAAe,WAAW,oBAAoB;AAC9C,iBAAe,WAAW,gBAAgB;AAC1C,iBAAe,WAAW,oBAAoB;AAC9C,iBAAe,WAAW,gBAAgB;AAC1C,iBAAe,WAAW,oBAAoB;AAC9C,iBAAe,SAAS,cAAc;AACtC,iBAAe,SAAS,kBAAkB;AAC1C,MAAI,gBAAgB,OAAO,KAAK,wBAAwB;AACxD,WAAS,gBAAgB,MAAM,YAAY,eAAe,GAAG,OAAO,KAAK,wBAAwB,IAAI;AACvG;AAEA,OAAO,cAAc;AACrB,OAAO,iBAAiB;AACxB,OAAO,kBAAkB;AACzB,OAAO,iBAAiB;AACxB,OAAO,sBAAsB;AAC7B,OAAO,oBAAoB;AAC3B,OAAO,kBAAkB;AACzB,OAAO,4BAA4B;AACnC,OAAO,6BAA6B;AACpC,OAAO,cAAc;;;ACnqBrB,SAAS,uBAAuB,SAAqC;AACnE,QAAM,UAA8B,UAAU,EAAE,cAAc,IAAI,OAAO,UAAU;AACnF,MAAI,CAAC,QAAS,QAAO;AACrB,UAAQ,iBAAiB,SAAS,MAAM;AAEtC,UAAM,MAAM,UAAU,EAAE,eAAe,GAAG,OAAO,yBAAyB;AAC1E,QAAI,IAAK,KAAI,MAAM;AAAA,EACrB,CAAC;AACD,UAAQ,iBAAiB,WAAW,CAAC,MAAqB;AACxD,QAAI,EAAE,YAAY,MAAM,EAAE,YAAY,IAAI;AACxC,YAAM,MAAM,UAAU,EAAE,eAAe,GAAG,OAAO,yBAAyB;AAC1E,UAAI,IAAK,KAAI,MAAM;AAAA,IACrB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AAEJ,eAAsB,wBAAwB;AAC5C,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,CAAC,MAAO,SAAQ,UAAU,EAAE,eAAe,eAAe;AAC9D,MAAI,CAAC,MAAO;AAEZ,QAAM,gBAAgB,IAAI,iBAAiB,CAAC,cAAgC;AAC1E,cAAU,QAAQ,CAAC,mBAAmB;AACpC,YAAM,UAAU,eAAe;AAC/B,YAAM,iBAAiB,eAAe;AACtC,UAAI,0BAA0B,eAAe,eAAe,MAAM,YAAY,QAAQ;AACpF,cAAM,MAAM,UAAU,EAAE,eAAe,GAAG,OAAO,yBAAyB;AAC1E,YAAI,IAAK,KAAI,MAAM;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,MAAI,CAAC,eAAgB,kBAAiB,uBAAuB,SAAS;AACtE,MAAI,CAAC,eAAgB,kBAAiB,uBAAuB,SAAS;AACtE,MAAI,CAAC,eAAgB,kBAAiB,uBAAuB,SAAS;AACtE,gBAAc,QAAQ,OAAO,EAAE,YAAY,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC;AAC7E,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,wBAAwB,KAAK,MAAM,KAAK,EAAE,CAAC;AAC/C,QAAM,wBAAwB,KAAK,EAAE;AACvC;;;AC5CA,eAAsB,eAAe;AACnC,MAAI,cAAc;AAClB,SAAO,iBAAiB,QAAQ,CAAC,MAAiB;AAChD,UAAM,SAAS,EAAE,aAAa,EAAE,CAAC;AACjC,QAAI,CAAC,OAAO,YAAa;AACzB,QAAI,OAAO,YAAY,QAAQ,QAAQ,MAAM,GAAI;AACjD,UAAM,UAAU,eAAe;AAC/B,UAAM,eAAe,GAAG,OAAO;AAC/B,UAAM,YAAY,UAAU,EAAE,eAAe,YAAY;AACzD,QAAI,aAAa,QAAQ,cAAc,SAAS;AAChD,QAAI,CAAC,UAAW;AAChB,UAAM,YAAY,UAAU,cAAc,oBAAoB;AAC9D,QAAI,CAAC,aAAa,CAAC,UAAW;AAC9B,SAAK,EAAE,cAAc,OAAO,UAAU,KAAK,GAAG;AAC5C,QAAE,gBAAgB;AAClB,QAAE,eAAe;AACjB,UAAI,qBAAqB,iBAAkB,WAAU,QAAQ,EAAE,aAAa;AAC5E,gBAAU,cAAc,IAAI,MAAM,QAAQ,CAAC;AAC3C,UAAI,mBAAmB,UAAU,KAAK;AAAA,IACxC;AAAA,EACF,CAAC;AACH;;;AC1BA,IAAI,cAAc;AAClB,IAAI,qBAAqB;AAEzB,eAAsB,mBAAmB;AACvC,MAAI;AACF,QAAI,CAAC,oBAAoB;AACvB,2BAAqB,UAAU,EAAE,eAAe,uBAAuB;AACvE,UAAI,mBAAoB,oBAAmB,iBAAiB,SAAS,MAAM,aAAa,kBAAkB,GAAG,IAAI;AAAA,IACnH;AACA,QAAI,SAAS,SAAS,EAAG;AACzB,QAAI,kBAAkB,UAAU,EAAE,iBAAiB,oFAAoF;AACvI,QAAI,CAAC,mBAAmB,gBAAgB,WAAW,EAAG,mBAAkB,UAAU,EAAE,iBAAiB,uBAAuB;AAC5H,QAAI,CAAC,mBAAmB,gBAAgB,WAAW,EAAG;AACtD,UAAM,UAAU,gBAAgB,CAAC,GAAG;AACpC,QAAI,CAAC,WAAW,YAAY,eAAe,QAAQ,SAAS,UAAU,EAAG;AACzE,UAAM,oBAAoB,UAAU,EAAE,cAAc,2BAA2B;AAC/E,QAAI,6BAA6B,iBAAkB,mBAAkB,KAAK;AAC1E,kBAAc;AACd,UAAM,OAAO,IAAI,IAAI,MAAM,KAAU,eAAe,EAAE,IAAI,CAAC,QAAS,eAAe,mBAAmB,IAAI,MAAM,EAAG,CAAC;AACpH,UAAM,eAAe,IAAI,aAAa,WAAW;AAAA,MAC/C,MAAM,aAAa,KAAK,OAAO,IAAI,KAAK,OAAO,OAAO,KAAK,cAAc,CAAC,SAAS,KAAK,OAAO,IAAI,MAAM,EAAE;AAAA,MAC3G,MAAM;AAAA,MACN,OAAO;AAAA,IACT,CAAQ;AACR,iBAAa,UAAU,SAAS,UAAU;AACxC,aAAO,MAAM;AACb,WAAK,MAAM;AAAA,IACb;AACA,QAAI,mBAAmB;AAAA,EACzB,SAAS,GAAG;AACV,UAAM,qBAAqB,CAAC,EAAE;AAAA,EAChC;AACF;;;AC/BA,IAAI,YAAiB,CAAC;AACtB,IAAI,kBAAkB;AACtB,IAAM,kBAAkB;AACxB,IAAM,eAAe;AAEd,SAAS,qBAAqB;AACnC,oBAAkB,OAAO,KAAK,+BAA+B;AAC7D,MAAI,mBAAmB,EAAE,SAAS,SAAS,iBAAiB,UAAU,gBAAgB,CAAC;AACvF,WAAS,iBAAiB,oBAAoB,MAAM;AAClD,QAAI,OAAO,KAAK,+BAA+B,SAAS,SAAS,OAAQ,mBAAkB,KAAK,IAAI,MAAM,OAAO,KAAK,+BAA+B,GAAI;AAAA,QACpJ,mBAAkB,OAAO,KAAK,+BAA+B;AAAA,EAEpE,CAAC;AACH;AAEA,SAAS,KAAK,GAAG;AACf,SAAO,IAAI,KAAK,IAAI,CAAC,KAAK;AAC5B;AAEA,SAAS,WAAW,MAAM;AACxB,MAAI,OAAO,KAAM,QAAO,GAAG,KAAK,KAAK,MAAM,OAAO,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,MAAM,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC;AAC9H,MAAI,OAAO,GAAI,QAAO,GAAG,KAAK,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC;AACnF,SAAO,GAAG,KAAK,MAAM,IAAI,CAAC;AAC5B;AAEO,SAAS,YAAY,OAAO;AACjC,YAAU,SAAS,QAAQ,CAAC,QAAQ,CAAC,UAAU;AAC/C,QAAM,OAAO,SAAS,eAAe,eAAe;AACpD,QAAM,OAAO,SAAS,eAAe,eAAe;AACpD,QAAM,OAAO,SAAS,eAAe,eAAe;AACpD,QAAM,OAAO,SAAS,eAAe,aAAa;AAClD,MAAI,KAAM,MAAK,YAAY,UAAU,SAAS,WAAW;AACzD,MAAI,KAAM,MAAK,YAAY,UAAU,SAAS,WAAW;AACzD,MAAI,KAAM,MAAK,YAAY,UAAU,SAAS,WAAW;AACzD,MAAI,KAAM,MAAK,YAAY,UAAU,SAAS,WAAW;AAC3D;AAEO,SAAS,YAAY,KAAW;AACrC,QAAM,WAAW,CAAC,oBAAoB,oBAAoB,mBAAmB,oBAAoB,kBAAkB,sBAAsB,gBAAgB,kBAAkB;AAC3K,QAAM,WAAW,KAAK,YAAY;AAClC,QAAM,MAAM,KAAK,YAAY,KAAK,OAAO;AACzC,MAAI;AACJ,MAAI,MAAM;AACV,MAAI,QAAQ,MAAO,QAAO;AAAA,OACrB;AACH,WAAO,OAAQ,WAAW,KAAO,WAAW,IAAK,GAAG,KAAK,MAAM,MAAQ,QAAQ,CAAC,OAAO;AACvF,QAAI,MAAM,KAAK,OAAO;AACtB,QAAI,KAAK,OAAQ,OAAM;AAAA,aACd,KAAK,aAAc,WAAW,KAAO,OAAM;AAAA,aAC3C,IAAI,WAAW,KAAK,KAAK,IAAI,WAAW,MAAM,EAAG,OAAM;AAAA,aACvD,QAAQ,EAAG,OAAM;AAAA,SACrB;AACH,YAAM,MAAM,KAAK,MAAM,MAAM,EAAE;AAC/B,aAAO;AACP,YAAM,MAAM,IAAI,GAAG,KAAK,MAAM,GAAG,CAAC,KAAK,KAAK,MAAM,GAAG,CAAC,MAAM,GAAG,KAAK,MAAM,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACA,QAAM,SAAS,SAAS,eAAe,qBAAqB;AAC5D,MAAI,OAAO;AACX,MAAI,UAAU,KAAK;AACjB,UAAM,SAAS,IAAI,OAAO,IAAI,QAAQ,KAAK,UAAU,IAAI,GAAG,GAAG,IAAI,WAAW,KAAK,IAAI,QAAQ,KAAK,EAAE,KAAK;AAC3G,UAAM,WAAW,IAAI,QAAQ,IAAI,YAAY,IAAI,KAAK,IAAI,IAAI,OAAO,KAAK;AAC1E,UAAM,WAAW,IAAI,SAAS,WAAW,IAAI,SAAS,WAAW,IAAI,YAAY,cAAc,IAAI,SAAS,WAAW;AACvH,UAAM,WAAW,IAAI,OAAO,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK;AACrE,UAAM,cAAc,IAAI,WAAW,IAAI,eAAe,KAAK,MAAM,MAAQ,IAAI,QAAQ,CAAC,MAAM;AAC5F,UAAM,SAAS,IAAI,MAAM,IAAI,UAAU,WAAW,IAAI,GAAG,CAAC,KAAK;AAC/D,UAAM,aAAa,IAAI,kBAAkB,IAAI,cAAc,IAAI,eAAe,KAAK;AACnF,UAAM,aAAa,IAAI,WAAW,IAAI,cAAc,WAAY,KAAK,IAAI,IAAI,MAAQ,IAAI,QAAQ,CAAC,KAAK;AACvG,UAAM,aAAa,IAAI,WAAW,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,GAAI,EAAE,mBAAmB,CAAC,KAAK;AAC3G,WAAO,gBAAW,QAAQ,IAAI,MAAM,IAAI,UAAU,IAAI,UAAU,IAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,MAAM,IAAI,UAAU,GAAG,WAAW,MAAM,GAAG,EAAE,KAAK;AAC7J,WAAO,YAAY,MAAM,IAAI;AAAA,EAC/B;AACA,WAAS,QAAQ,WAAW,IAAI;AAChC,aAAW,QAAQ,UAAU;AAC3B,UAAMC,MAAK,SAAS,eAAe,IAAI;AACvC,QAAI,CAACA,IAAI;AACT,UAAM,YAAY,MAAM,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,KAAK,YAAY,KAAK;AAClE,IAAAA,IAAG,YAAY;AACf,IAAAA,IAAG,QAAQ,KAAK,SAAS,IAAI,OAAO;AACpC,QAAI,CAAC,OAAO,gBAAgB;AAC1B,YAAM,WAAW,SAAS,KAAK,OAAO;AACtC,UAAI,aAAa,WAAY,CAAAA,IAAG,MAAM,aAAa;AAAA,eAC1C,SAAS,SAAS,QAAQ,EAAG;AAAA,eAC7B,SAAS,SAAS,OAAO,KAAK,SAAS,SAAS,WAAW,EAAG,CAAAA,IAAG,MAAM,aAAa;AAAA,eACpF,OAAO,WAAW,KAAK,WAAW,EAAG,CAAAA,IAAG,MAAM,aAAa,uEAAuE,QAAQ,wBAAwB,QAAQ;AAAA,UAC9K,CAAAA,IAAG,MAAM,aAAa;AAAA,IAC7B;AAAA,EACF;AACA,QAAMA,MAAK,SAAS,eAAe,qBAAqB;AACxD,MAAIA,OAAM,KAAK;AACb,UAAM,SAAS,IAAI,OAAO,IAAI,QAAQ,KAAK,UAAU,IAAI,GAAG,GAAG,IAAI,WAAW,KAAK,IAAI,QAAQ,KAAK,EAAE,KAAK;AAC3G,UAAM,WAAW,IAAI,QAAQ,IAAI,YAAY,IAAI,KAAK,IAAI,IAAI,OAAO,KAAK;AAC1E,UAAM,WAAW,IAAI,SAAS,WAAW,IAAI,SAAS,WAAW,IAAI,YAAY,cAAc,IAAI,SAAS,WAAW;AACvH,UAAM,WAAW,IAAI,OAAO,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK;AACrE,UAAM,cAAc,IAAI,WAAW,IAAI,eAAe,KAAK,MAAM,MAAQ,IAAI,QAAQ,CAAC,MAAM;AAC5F,UAAM,SAAS,IAAI,MAAM,IAAI,UAAU,WAAW,IAAI,GAAG,CAAC,KAAK;AAC/D,UAAM,aAAa,IAAI,kBAAkB,IAAI,cAAc,IAAI,eAAe,KAAK;AACnF,UAAM,aAAa,IAAI,WAAW,IAAI,cAAc,WAAY,KAAK,IAAI,IAAI,MAAQ,IAAI,QAAQ,CAAC,KAAK;AACvG,UAAM,aAAa,IAAI,WAAW,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,GAAI,EAAE,mBAAmB,CAAC,KAAK;AAC3G,IAAAA,IAAG,YAAY,mBAAc,QAAQ,IAAI,MAAM,IAAI,UAAU,IAAI,UAAU,IAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,MAAM,IAAI,UAAU,OAAO,WAAW,MAAM,GAAG,EAAE,KAAK;AAAA,EAC9K;AACF;AAEO,SAAS,mBAAmB;AACjC,cAAY;AACd;AAEO,SAAS,WAAW;AACzB,SAAO,QAAQ,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AACzI;AAIO,SAAS,gBAAgB,UAAU,aAAa,aAAa,MAAM,YAAY,MAAM,QAAQ,MAAM,aAAa,MAAM,OAAO,OAAO;AACzI,MAAI,QAAS,cAAa,QAAQ,QAAQ,OAAO;AACjD,MAAI,aAAa;AACjB,MAAI,YAAY,KAAK,IAAI;AACzB,MAAI,eAAoB;AACxB,QAAM,gBAAgB,YAAY,UAAU,aAAa;AACzD,MAAI;AACJ,MAAI;AAEJ,QAAM,kBAAkB,MAAM;AAC5B,QAAI,CAAC,cAAe;AACpB,UAAM,mBAAmB,EAAE,IAAI,WAAW,QAAQ,cAAc,CAAC;AACjE,UAAM,UAAU,MAAM,KAAU,UAAU,EAAE,iBAAiB,iBAAiB,CAAC;AAC/E,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,OAAO,iBAAkB,QAAO,MAAM,UAAU;AAAA,IAC7D;AACA,UAAM,YAAY,MAAM,KAAU,UAAU,EAAE,iBAAiB,eAAe,CAAC;AAC/E,eAAW,WAAW,WAAW;AAC/B,UAAI,QAAQ,OAAO,kBAAmB,SAAQ,MAAM,UAAU;AAAA,IAChE;AAEA,kBAAc,SAAS,cAAc,KAAK;AAC1C,gBAAY,YAAY;AACxB,kBAAc,aAAa,aAAa,SAAS;AACjD,UAAM,IAAI,MAAM;AAChB,QAAI,KAAK;AACT,gBAAY,YAAY,GAAG;AAC3B,QAAI,SAAS,MAAM;AACjB,UAAI,MAAM,QAAQ,iBAAiB,IAAI,YAAY;AACnD,YAAM,WAAW,YAAY,kBAAkB;AAC/C,UAAI,UAAU;AAGZ,sBAAc,MAAM,WAAW;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,WAAW,UAAU;AAC9C,UAAM,YAAY,OAAO;AACzB,iBAAa,WAAW,MAAM;AAC9B,gBAAY;AACZ,UAAM,UAAU,MAAM,KAAU,UAAU,EAAE,iBAAiB,iBAAiB,CAAC;AAC/E,eAAW,UAAU,QAAS,QAAO,MAAM,UAAU;AACrD,UAAM,YAAY,MAAM,KAAU,UAAU,EAAE,iBAAiB,eAAe,CAAC;AAC/E,eAAW,WAAW,UAAW,SAAQ,MAAM,UAAU;AACzD,QAAI;AACF,UAAI,iBAAiB,aAAa;AAChC,YAAI,UAAU;AACZ,gBAAM,aAAa,UAAU,EAAE,cAAc,mBAAmB;AAChE,gBAAM,aAAa,cAAc,cAAc,KAAK;AACpD,cAAI,YAAY,OAAO,WAAY,YAAW,MAAM,WAAW;AAAA,QACjE;AACA,sBAAc,YAAY,WAAW;AAAA,MACvC;AACA,UAAI,eAAe;AAGjB,sBAAc,MAAM,WAAW;AAAA,MACjC;AAAA,IACF,QAAQ;AAAA,IAAe;AACvB,gBAAY,IAAI;AAChB,qBAAiB;AACjB,QAAI,MAAO,OAAM;AAAA,EACnB;AAEA,QAAM,iBAAiB,MAAM;AAC3B,QAAI;AACF,aAAO,YAAY,CAAC,UAAU,QAAQ,UAAU,GAAG,UAAU,SAAS,UAAU,IAAI;AAAA,IACtF,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,wBAAwB,OAAO,KAAK,WAAW;AACnD,QAAI,KAAK,MAAO,OAAM,aAAa,EAAE,OAAO,WAAW,IAAI,CAAC;AAC5D,gBAAY;AACZ,UAAM,oBAAoB,KAAK,IAAI,IAAI,aAAa;AACpD,iBAAa,cAAc,IAAI;AAC/B,QAAI,IAAI,aAAc,CAAC,IAAI,WAAW,cAAc,OAAQ;AAC1D,YAAM,YAAY,EAAE,KAAK,KAAK,QAAQ,IAAI,YAAY,cAAc,WAAW,CAAC;AAChF,YAAM,SAAS,SAAS,UAAU,CAAC,eAAe;AAClD,UAAI,CAAC,IAAI,OAAQ,mBAAkB,CAAC,MAAM;AAC1C;AAAA,IACF;AACA,QAAI,mBAAmB,mBAAmB,CAAC,IAAI,UAAU,IAAI,aAAa,cAAc;AACtF,YAAM,YAAY,EAAE,KAAK,KAAK,QAAQ,kBAAkB,CAAC;AACzD,UAAI,CAAC,IAAI,OAAQ,mBAAkB,KAAK;AACxC;AAAA,IACF;AACA,QAAI,mBAAmB,gBAAgB,CAAC,IAAI,UAAU,CAAC,IAAI,QAAQ;AACjE,YAAM,YAAY,EAAE,KAAK,KAAK,QAAQ,eAAe,CAAC;AACtD,UAAI,CAAC,IAAI,OAAQ,mBAAkB,KAAK;AACxC;AAAA,IACF;AACA,QAAI,IAAI,aAAa,cAAc;AACjC,kBAAY,KAAK,IAAI;AACrB,qBAAe,IAAI;AAAA,IACrB;AACA,gBAAY,GAAG;AACf,QAAI,IAAI,gBAAgB,CAAC,YAAa,iBAAgB;AACtD,QAAI,kBAAkB,IAAI;AAC1B,QAAI,IAAI,gBAAgB,WAAW;AACjC,UAAI,IAAI,QAAQ,IAAI,aAAc,KAAI,MAAM,IAAI;AAChD,wBAAkB,IAAI;AAAA,IACxB;AACA,QAAI,WAAY,YAAW,GAAG;AAE9B,QAAI,UAAU,KAAK,IAAI,OAAO,KAAK,+BAA+B,KAAK,GAAG;AAC1E,gBAAY,KAAK,OAAO,IAAI,MAAM,OAAO;AACzC,eAAW,MAAM,OAAO,SAAS,eAAe,GAAG,OAAO;AAAA,EAC5D;AAEA,QAAM,yBAAyB,CAAC,QAAQ;AACtC,UAAM,YAAY,EAAE,OAAO,IAAI,CAAC;AAChC,sBAAkB,KAAK;AAAA,EACzB;AAEA,QAAM,mBAAmB,CAAC,QAAgB,oBAA4B;AACpE,UAAM,SAAS,SAAS,UAAU,CAAC,eAAe;AAClD,QAAI,aAAa;AACjB,QAAI,QAAQ;AACV,UAAI,CAAC,OAAO,KAAK,2BAA4B,cAAa;AAAA,IAC5D,WAAW,OAAO,KAAK,gCAAgC,GAAG;AACxD,mBAAa;AAAA,IACf;AAEA,YAAQ,uBAAuB,EAAE,SAAS,iBAAiB,WAAW,GAAG,sBAAsB,wBAAwB,OAAO,GAAK;AAAA,EACrI;AAEA,QAAM,gBAAgB,CAAC,QAAgB,oBAA4B;AAEjE,YAAQ,uBAAuB,EAAE,SAAS,iBAAiB,GAAG,GAAG,mBAAmB,wBAAwB,OAAO,GAAK;AAAA,EAC1H;AAEA,QAAM,oBAAoB,CAAC,QAAQ,sBAAsB,KAAK,aAAa;AAC3E,QAAM,uBAAuB,CAAC,QAAQ,sBAAsB,KAAK,gBAAgB;AAEjF,QAAM,YAAY,EAAE,OAAO,UAAU,CAAC;AACtC,mBAAiB,SAAS,CAAC;AAC3B,gBAAc,SAAS,EAAE;AAC3B;AAEA,OAAO,cAAc;AACrB,OAAO,mBAAmB;AAC1B,OAAO,WAAW;AAClB,OAAO,kBAAkB;;;AC7PzB,IAAI,iBAAiB;AAErB,eAAe,SAAS,OAAc;AACpC,MAAI,MAAM,eAAe,eAAgB;AACzC,mBAAiB,MAAM;AACvB,MAAI,eAAe,KAAK;AAC1B;AAEA,eAAsB,cAAc;AAClC,QAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,aAAa;AACtD,MAAI,OAAO,IAAI,IAAI;AACjB,UAAM,QAAQ,MAAM,IAAI,KAAK;AAC7B,QAAI,OAAO,MAAM,SAAS,EAAG,UAAS,KAAK;AAAA,EAC7C;AACF;;;AChBA,OAAO,OAAO,CAAC;AACf,OAAO,eAAe,CAAC;AACvB,OAAO,SAAS,CAAC;AAIjB,IAAI,mBAAmB;AACvB,IAAI,kBAAiC;AACrC,IAAI,kBAAiC;AACrC,IAAI,mBAAwB;AAC5B,IAAM,YAAY;AAClB,IAAM,iBAAiB,CAAC;AACxB,IAAI,WAAW;AACf,IAAI,qBAAqB;AACzB,OAAO,gBAAgB,MAAM;AAMtB,SAAS,UAAU,OAAO;AAC/B,QAAM,YAAY,OAAO,SAAS;AAClC,MAAI,CAAC,UAAU,SAAS,WAAW,EAAG,QAAO,SAAS,QAAQ,GAAG,SAAS,YAAY,KAAK,EAAE;AAC/F;AAEA,SAAS,qBAAqB,WAAW;AACvC,MAAI,eAAe,SAAS,EAAG,cAAa,eAAe,SAAS,CAAC;AACrE,iBAAe,SAAS,IAAI,WAAW,MAAM,UAAU,EAAE,eAAe,SAAS,GAAG,MAAM,GAAG,SAAS;AACxG;AAEA,SAAS,kBAAkB,SAAS;AAClC,QAAM,QAAQ,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI;AACvC,YAAU,UAAU,UAAU,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,IACnD,MAAM,IAAI,cAAc,KAAK;AAAA,IAC7B,CAAC,QAAQ,MAAM,cAAc,KAAK,IAAI,GAAG,EAAE;AAAA,EAC7C;AACF;AAEA,SAAS,UAAUC,KAAI;AACrB,MAAI,CAACA,IAAI,QAAO;AAChB,QAAM,OAAOA,IAAG,sBAAsB;AACtC,MAAI,KAAK,UAAU,KAAK,KAAK,WAAW,EAAG,QAAO;AAClD,SAAQ,KAAK,OAAO,KAAO,KAAK,QAAQ,KAAO,KAAK,WAAW,OAAO,eAAe,SAAS,gBAAgB,iBAAmB,KAAK,UAAU,OAAO,cAAc,SAAS,gBAAgB;AAChM;AAEO,SAAS,sBAAsB;AACpC,MAAI,oBAAoB,UAAU,EAAE,iBAAiB,kHAAkH;AACvK,MAAI,kBAAkB,WAAW,EAAG,qBAAoB,UAAU,EAAE,iBAAiB,+DAA+D;AACpJ,QAAM,wBAAwB,CAAC;AAC/B,oBAAkB,QAAQ,CAAC,SAAS;AAClC,QAAI,KAAK,cAAc,aAAc,uBAAsB,KAAK,IAAI;AAAA,EACtE,CAAC;AACD,SAAO;AACT;AAEO,SAAS,0BAA0B;AACxC,MAAI,oBAAoB,UAAU,EAAE,iBAAiB,6GAA6G;AAClK,MAAI,kBAAkB,WAAW,EAAG,qBAAoB,UAAU,EAAE,iBAAiB,wEAAwE;AAC7J,MAAI,uBAAuB;AAC3B,oBAAkB,QAAQ,CAAC,SAAS;AAClC,QAAI,KAAK,cAAc,aAAc,wBAAuB;AAAA,EAC9D,CAAC;AACD,SAAO;AACT;AAEA,SAAS,yBAAyB;AAChC,QAAM,UAAU,oBAAoB;AACpC,QAAM,SAAS,wBAAwB;AACvC,MAAI,SAAS;AACb,UAAQ,QAAQ,CAAC,GAAG,MAAM;AAAE,QAAI,MAAM,QAAQ;AAAE,eAAS;AAAA,IAAG;AAAA,EAAE,CAAC;AAC/D,MAAI,WAAW,MAAM,UAAU,EAAE,eAAe,oBAAoB,GAAG,gBAAgB,GAAG;AACxF,UAAMC,oBAAmB,OAAO,oBAAoB;AACpD,QAAI,OAAO,UAAUA,kBAAiB,KAAK,EAAG,UAASA,kBAAiB;AAAA,EAC1E;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,SAAS;AACvC,MAAI,YAAY,CAAC;AACjB,MAAI;AACJ,MAAI,WAAW,YAAY,UAAW,iBAAgB,UAAU,EAAE,iBAAiB,kEAAkE;AAAA,MAChJ,iBAAgB,UAAU,EAAE,iBAAiB,+DAA+D;AACjH,MAAI;AACF,gBAAY,MAAM,KAAU,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,KAAK,CAAC;AAC5E,QAAI,WAAW,YAAY,UAAW,aAAY,UAAU,OAAO,CAAC,QAAQ,UAAU,GAAG,CAAC;AAC1F,gBAAY,UAAU,IAAI,CAAC,QAAQ;AACjC,UAAI,KAAK,IAAI;AACb,UAAI,GAAG,SAAS,OAAO,EAAG,MAAK,GAAG,MAAM,OAAO,EAAE,CAAC;AAClD,aAAO,UAAU,EAAE;AAAA,IACrB,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,UAAM,2BAA2B,GAAG,EAAE;AAAA,EACxC;AACA,MAAI,gBAAgB;AACpB,MAAI,WAAW,YAAY,UAAW,iBAAgB,uBAAuB;AAC7E,SAAO,CAAC,WAAW,aAAa;AAClC;AAEA,SAAS,2BAA2B,SAAS;AAC3C,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC,IAAI;AACtC,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC,QAAQ,CAAC,CAAC;AAC5C,MAAI,QAAQ,uBAAuB;AACnC,MAAI,QAAQ,KAAK,SAAS,QAAQ,OAAQ,SAAQ;AAClD,SAAO,CAAC,QAAQ,KAAK,CAAC;AACxB;AAEA,SAAS,eAAe,SAAS;AAC/B,QAAM,CAAC,KAAK,IAAI,2BAA2B,OAAO;AAClD,MAAI,gBAAgB,KAAK;AACzB,MAAI,OAAO,eAAe,SAAS,MAAM,KAAM,QAAO,YAAY,MAAM,IAAI;AAC9E;AAEA,eAAsB,SAAS,KAAK,KAAK;AACvC,MAAI,CAAC,OAAO,QAAQ,IAAK;AACzB,QAAM,IAAI,QAAQ,WAAW,EAAE;AAC/B,QAAM,IAAI,QAAQ,WAAW,EAAE;AAC/B,QAAM,QAAQ,MAAM,KAAU,SAAS,qBAAqB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,SAAS,GAAG,CAAC;AACvG,MAAI,MAAM,WAAW,GAAG;AACtB,QAAI,uCAAuC,GAAG;AAC9C;AAAA,EACF;AACA,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,KAAK,KAAK,QAAQ,KAAK,GAAG;AACvC,UAAM,MAAM,MAAMC,WAAU,IAAI;AAChC,QAAI,KAAK,IAAI;AACX,UAAI,YAAY,KAAK,GAAG;AACxB,WAAK,OAAO,KAAK,KAAK,QAAQ,KAAK,GAAG;AAAA,IACxC,OAAO;AACL,UAAI,2BAA2B,GAAG;AAAA,IACpC;AAAA,EACF;AACF;AAEO,SAAS,YAAY,KAAK,KAAK;AACpC,QAAM,OAAO,OAAO,OAAO,KAAK,SAAS;AACzC,MAAI,CAAC,OAAO,SAAS,IAAI,EAAG;AAC5B,MAAI,SAAS,OAAO,SAAS,mBAAmB,SAAS,gBAAiB;AAC1E,oBAAkB;AAClB,MAAI,iBAAkB;AAEtB,qBAAmB,sBAAsB,MAAM;AAC7C,UAAM,KAAK,YAAY,IAAI;AAC3B,uBAAmB;AACnB,UAAM,WAAW;AACjB,sBAAkB;AAClB,QAAI,CAAC,OAAO,SAAS,QAAQ,KAAK,aAAa,gBAAiB;AAEhE,uBAAmB,oBAAoB,UAAU;AACjD,UAAM,YAAY,iBAAiB;AACnC,aAAS,gBAAgB,MAAM,YAAY,eAAe,GAAG,QAAQ,IAAI;AACzE,cAAU,YAAY,eAAe,GAAG,QAAQ,IAAI;AACpD,cAAU,YAAY,cAAc,GAAG,WAAW,CAAC,IAAI;AACvD,cAAU,YAAY,aAAa,GAAG,WAAW,CAAC,IAAI;AACtD,cAAU,YAAY,aAAa,GAAG,WAAW,CAAC,IAAI;AACtD,cAAU,YAAY,aAAa,GAAG,QAAQ,IAAI;AAClD,cAAU,YAAY,aAAa,GAAG,WAAW,CAAC,IAAI;AACtD,cAAU,YAAY,aAAa,GAAG,WAAW,CAAC,IAAI;AACtD,cAAU,YAAY,cAAc,GAAG,WAAW,CAAC,IAAI;AACvD,sBAAkB;AAClB,UAAM,KAAK,YAAY,IAAI;AAC3B,QAAI,eAAe,EAAE,MAAM,UAAU,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AAAA,EAClE,CAAC;AACH;AAEA,SAAS,YAAY,KAAK;AACxB,QAAM,OAAO,MAAM,KAAU,UAAU,EAAE,iBAAiB,2BAA2B,CAAC;AACtF,QAAM,MAAM,MAAM,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG;AACjD,MAAI,eAAe,EAAE,IAAI,CAAC;AAC1B,MAAI,IAAK,KAAI,MAAM;AACrB;AAEA,SAAS,qBAAqB,MAAM;AAClC,cAAY,MAAM;AAClB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,sBAAsB,IAAI;AACjC,cAAY,OAAO;AACnB,YAAU,EAAE,eAAe,cAAc,EAAE,iBAAiB,QAAQ,EAAE,EAAE,EAAE,MAAM;AAClF;AAEA,SAAS,qBAAqB,MAAM;AAClC,cAAY,OAAO;AACnB,wBAAsB,CAAC;AACvB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,qBAAqB,MAAM;AAClC,cAAY,OAAO;AACnB,wBAAsB,CAAC;AACvB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,oBAAoB,MAAM;AACjC,cAAY,OAAO;AACnB,wBAAsB,CAAC;AACvB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,uBAAuB,MAAM;AACpC,cAAY,OAAO;AACnB,wBAAsB,CAAC;AACvB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,oBAAoB,MAAM;AACjC,cAAY,SAAS;AACrB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,qBAAqB,MAAM;AAClC,cAAY,SAAS;AACrB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,mBAAmB,MAAM;AAChC,cAAY,OAAO;AACnB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,qBAAqB,MAAM;AAClC,cAAY,SAAS;AACrB,SAAO,MAAM,KAAU,SAAS;AAClC;AAEO,SAAS,cAAc,OAAO;AACnC,MAAI,MAAM;AACV,YAAU,EAAE,eAAe,KAAK,GAAG,cAAc,KAAK,EAAE,iBAAiB,QAAQ,EAC9E,QAAQ,CAAC,QAAQ,MAAM;AACtB,QAAI,OAAO,UAAU,QAAQ,UAAU,MAAM,GAAI,OAAM;AAAA,EACzD,CAAC;AACH,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAO,MAAM;AAC1C,QAAM,MAAM,MAAM,KAAU,IAAI;AAChC,MAAI,CAAC,IAAI,cAAc,KAAK;AAC5B,SAAO;AACT;AAEA,SAAS,yBAAyB,MAAM;AACtC,QAAM,MAAM,MAAM,KAAU,SAAS;AACrC,MAAI,OAAO,EAAE;AACb,MAAI,CAAC,IAAI,cAAc,cAAc;AACrC,SAAO;AACT;AAEO,SAAS,mBAAmB,MAAM;AACvC,QAAM,MAAM,MAAM,KAAU,IAAI;AAChC,MAAI,MAAM,QAAQ,IAAI,IAAI,SAAS,CAAC,CAAC,EAAG,KAAI,IAAI,SAAS,CAAC,IAAI;AAC9D,SAAO;AACT;AAEA,SAAS,uBAAuB,MAAM;AACpC,QAAM,MAAM,sBAAsB,gBAAgB,IAAI;AACtD,SAAO;AACT;AAIA,SAAS,aAAa,SAAS;AAC7B,QAAM,UAAU,UAAU,EAAE,eAAe,GAAG,OAAO,UAAU;AAC/D,UAAQ,UAAU,OAAO,MAAM;AAE/B,QAAM,SAAS,UAAU,EAAE,eAAe,GAAG,OAAO,SAAS;AAC7D,SAAO,MAAM,UAAU;AACzB;AAEO,SAAS,kBAAkB,MAAM;AACtC,MAAI,WAAW;AACf,eAAa,SAAS;AACtB,QAAM,KAAK,SAAS;AACpB,kBAAgB,IAAI,MAAM,UAAU,EAAE,eAAe,iBAAiB,CAAC;AACvE,QAAM,MAAM,mBAAmB,IAAI;AACnC,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI,OAAO;AAChB,SAAO,eAAe;AACtB,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAM;AAC/B,MAAI,WAAW;AACf,eAAa,SAAS;AACtB,QAAM,KAAK,SAAS;AACpB,kBAAgB,IAAI,MAAM,UAAU,EAAE,eAAe,iBAAiB,CAAC;AACvE,QAAM,MAAM,mBAAmB,IAAI;AACnC,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI,OAAO;AAChB,MAAI,CAAC,IAAI,cAAc,cAAc;AACrC,SAAO,eAAe;AACtB,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAM;AAC/B,MAAI,eAAe;AACnB,eAAa,SAAS;AACtB,QAAM,KAAK,SAAS;AACpB,kBAAgB,IAAI,MAAM,UAAU,EAAE,eAAe,iBAAiB,CAAC;AACvE,QAAM,MAAM,mBAAmB,IAAI;AACnC,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI,OAAO;AAEhB,QAAM,OAAO,MAAM,KAAU,UAAU,EAAE,iBAAiB,mCAAmC,CAAC;AAC9F,QAAM,SAAS,KAAK,UAAU,CAAC,QAAQ,IAAI,UAAU,SAAS,UAAU,CAAC;AACzE,QAAM,WAAW,CAAC,cAAc,eAAe,MAAM,QAAQ,WAAW;AACxE,QAAM,cAAc,SAAS,MAAM,KAAK;AACxC,MAAI,CAAC,IAAI,YAAY,YAAY;AACjC,SAAO,eAAe;AACtB,SAAO;AACT;AAEA,SAAS,gBAAgB,MAAM;AAC7B,eAAa,OAAO;AACpB,QAAM,KAAK,SAAS;AACpB,MAAI,eAAe,EAAE;AACrB,kBAAgB,IAAI,MAAM,UAAU,EAAE,eAAe,eAAe,CAAC;AACrE,QAAM,MAAM,mBAAmB,IAAI;AACnC,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI,OAAO;AAChB,SAAO,eAAe;AACtB,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAM;AACjC,QAAM,KAAK,SAAS;AACpB,MAAI,mBAAmB,EAAE;AACzB,kBAAgB,IAAI,MAAM,IAAI;AAC9B,SAAO,eAAe;AACtB,OAAK,CAAC,IAAI;AACV,SAAO;AACT;AAEA,SAAS,cAAc,MAAM;AAC3B,QAAM,KAAK,SAAS;AACpB,MAAI,mBAAmB,EAAE;AACzB,kBAAgB,IAAI,MAAM,UAAU,EAAE,eAAe,kBAAkB,CAAC;AACxE,SAAO,eAAe;AACtB,OAAK,CAAC,IAAI;AACV,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAM;AAC/B,QAAM,KAAK,SAAS;AACpB,MAAI,iBAAiB,EAAE;AACvB,kBAAgB,IAAI,MAAM,UAAU,EAAE,eAAe,sBAAsB,CAAC;AAC5E,SAAO,eAAe;AACtB,OAAK,CAAC,IAAI;AACV,SAAO;AACT;AAEA,SAAS,wBAAwB,MAAM;AACrC,QAAM,WAAW,UAAU,EAAE,cAAc,uBAAuB;AAClE,MAAI,KAAK,WAAW,SAAS,KAAK,KAAK,CAAC;AACxC,OAAK,GAAG,QAAQ,mBAAmB,EAAE;AACrC,QAAM,MAAM,UAAU,EAAE,eAAe,GAAG,EAAE,eAAe;AAC3D,MAAI,sBAAsB,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;AACpD,MAAI,IAAK,KAAI,MAAM;AACrB;AAEA,SAAS,yBAAyB,MAAM;AACtC,QAAM,KAAK,SAAS;AACpB,MAAI,iBAAiB,EAAE;AACvB,eAAa,QAAQ;AACrB,kBAAgB,IAAI,MAAM,IAAI;AAC9B,SAAO,eAAe;AACtB,OAAK,CAAC,IAAI;AACV,SAAO;AACT;AAEA,OAAO,eAAe;AAEtB,SAAS,eAAe,MAAM;AAC5B,QAAM,KAAK,SAAS;AACpB,QAAM,MAAM,mBAAmB,IAAI;AACnC,MAAI,CAAC,IAAI;AACT,SAAO;AACT;AAQA,IAAM,8BAA0D,CAAC;AACjE,IAAM,4BAA4B,oBAAI,QAA6B;AACnE,IAAM,sBAAsB,oBAAI,IAAY;AAC5C,IAAM,0BAA0B,oBAAI,IAAY;AAChD,IAAM,2BAAuD;AAAA,EAC3D,CAAC,kBAAkB,yBAAyB,sBAAsB;AAAA,EAClE,CAAC,sBAAsB,kCAAkC,+BAA+B;AAAA,EACxF,CAAC,kBAAkB,yBAAyB,sBAAsB;AAAA,EAClE,CAAC,sBAAsB,kCAAkC,+BAA+B;AAAA,EACxF,CAAC,kBAAkB,yBAAyB,sBAAsB;AAAA,EAClE,CAAC,sBAAsB,kCAAkC,+BAA+B;AAC1F;AACA,IAAI,wBAAwB;AAC5B,IAAI,2BAA2B;AAC/B,IAAI,+BAA+B;AAEnC,SAAS,eAAe,MAAkB;AACxC,MAAI,OAAO,OAAO,wBAAwB,YAAY;AACpD,WAAO,oBAAoB,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,EACnD,OAAO;AACL,eAAW,MAAM,CAAC;AAAA,EACpB;AACF;AAEA,SAAS,wBAAwB,MAAM;AACrC,MAAI,4BAA4B,IAAI,GAAG;AACrC,gCAA4B,IAAI,EAAE;AAAA,EACpC;AACF;AAEA,SAAS,+BAA+B,MAAM;AAC5C,0BAAwB,gBAAgB;AACxC,0BAAwB,oBAAoB;AAC5C,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,+BAA+B,MAAM;AAC5C,0BAAwB,gBAAgB;AACxC,0BAAwB,oBAAoB;AAC5C,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,+BAA+B,MAAM;AAC5C,0BAAwB,gBAAgB;AACxC,0BAAwB,oBAAoB;AAC5C,SAAO,MAAM,KAAU,SAAS;AAClC;AAEA,SAAS,+BAA+B,MAAM;AAC5C,0BAAwB,gBAAgB;AACxC,0BAAwB,oBAAoB;AAC5C,SAAO,MAAM,KAAU,SAAS;AAClC;AAEO,SAAS,mBAAmB;AACjC,QAAM,KAAK,UAAU,EAAE,eAAe,eAAe;AACrD,MAAI,CAAC,GAAI;AACT,KAAG,iBAAiB,YAAY,CAAC,QAAQ;AACvC,QAAI,eAAe;AACnB,QAAI,aAAa,aAAa;AAAA,EAChC,CAAC;AACD,KAAG,iBAAiB,QAAQ,CAAC,QAAQ;AACnC,QAAI,eAAe;AACnB,QAAI,aAAa,aAAa;AAC9B,eAAW,KAAK,IAAI,aAAa,OAAO;AACtC,UAAI,qBAAqB,CAAC;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;AAgCA,SAAS,2BAA2B;AAElC,MAAI,mBAAoB;AACxB,MAAI,6BAA8B;AAClC,QAAM,KAAK,YAAY,IAAI;AAE3B,QAAM,MAAM,UAAU;AACtB,MAAI,CAAC,IAAK;AAEV,QAAM,mBAAmB,CAAC,IAAI,YAAY,cAAc;AACtD,UAAM,SAAS,IAAI,eAAe,EAAE;AACpC,UAAM,UAAU,IAAI,eAAe,UAAU;AAC7C,UAAM,gBAAgB,QAAQ,cAAc,kBAAkB;AAC9D,QAAI,CAAC,UAAU,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,cAAe,QAAO;AAE3E,UAAM,eAAe,OAAO;AAC5B,UAAM,wBAAwB,QAAQ,kBAAkB,gBAAgB,QAAQ,uBAAuB;AACvG,QAAI,yBAAyB,CAAC,wBAAwB,IAAI,EAAE,GAAG;AAC7D,8BAAwB,IAAI,EAAE;AAC9B,qBAAe,MAAM;AACnB,gCAAwB,OAAO,EAAE;AACjC,cAAM,gBAAgB,IAAI,eAAe,EAAE;AAC3C,cAAM,iBAAiB,IAAI,eAAe,UAAU;AACpD,YAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,cAAc,cAAe;AACvE,cAAM,gBAAgB,cAAc;AACpC,YAAI,eAAe,kBAAkB,iBAAiB,eAAe,uBAAuB,eAAe;AACzG,wBAAc,aAAa,gBAAgB,aAAa;AAAA,QAC1D;AACA,YAAI,cAAc,MAAM,aAAa,YAAY;AAC/C,wBAAc,MAAM,WAAW;AAAA,QACjC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,4BAA4B,EAAE,EAAG,6BAA4B,EAAE,IAAI,MAAM;AAAE,2BAAqB,SAAS;AAAA,IAAG;AACjH,QAAI,CAAC,0BAA0B,IAAI,aAAa,GAAG;AACjD,oBAAc,iBAAiB,SAAS,4BAA4B,EAAE,CAAC;AACvE,gCAA0B,IAAI,aAAa;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAEA,QAAM,4BAA4B,MAAM;AACtC,4BAAwB;AACxB,UAAM,QAAQ,yBAAyB;AACvC,QAAI,MAAuC;AAG3C,aAAS,WAAW,GAAG,WAAW,OAAO,YAAY,GAAG;AACtD,YAAM,UAAU,yBAAyB,wBAAwB;AACjE,kCAA4B,2BAA2B,KAAK;AAC5D,YAAM,CAAC,EAAE,IAAI;AACb,UAAI,CAAC,oBAAoB,IAAI,EAAE,GAAG;AAChC,cAAM;AACN;AAAA,MACF;AAAA,IACF;AAEA,QAAI,KAAK;AACP,YAAM,CAAC,EAAE,IAAI;AACb,UAAI,iBAAiB,GAAG,GAAG,GAAG;AAC5B,4BAAoB,IAAI,EAAE;AAAA,MAC5B,OAAO;AAEL,uCAA+B;AAC/B;AAAA,MACF;AAAA,IACF;AAEA,yBAAqB,oBAAoB,SAAS;AAClD,QAAI,oBAAoB;AACtB,qCAA+B;AAC/B,YAAM,KAAK,YAAY,IAAI;AAC3B,UAAI,eAAe,EAAE,OAAO,oBAAoB,MAAM,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACjF,YAAM,eAAe,KAAK,EAAE;AAC5B;AAAA,IACF;AAEA,4BAAwB,sBAAsB,yBAAyB;AAAA,EACzE;AAEA,iCAA+B;AAC/B,0BAAwB,sBAAsB,yBAAyB;AACzE;AAEA,gBAAgB,wBAAwB;AA8CxC,IAAM,QAAQ,CAAC,OAAe,IAAI,QAAQ,CAAC,YAAY;AAAE,aAAW,SAAS,EAAE;AAAG,CAAC;AAEnF,eAAsB,cAAc,UAAU,MAAM;AAClD,WAAS,KAAK,QAAQ;AACtB,WAAS,KAAK,YAAY;AAC1B,MAAI,QAAS,OAAM,MAAM,GAAK;AAC9B,MAAI;AACF,UAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,mCAAmC;AAC5E,YAAQ,IAAI,iBAAiB,GAAG;AAChC,QAAI,KAAK,IAAI;AACX,eAAS,KAAK,YAAY;AAC1B,iBAAW,MAAM,SAAS,OAAO,GAAG,GAAK;AAAA,IAC3C,OAAO;AACL,iBAAW,MAAM,cAAc,KAAK,GAAG,IAAI;AAAA,IAC7C;AAAA,EACF,QAAQ;AACN,eAAW,MAAM,cAAc,KAAK,GAAG,IAAI;AAAA,EAC7C;AACA,SAAO,CAAC;AACV;AAEO,SAASC,aAAY,QAAQ;AAClC,QAAM,IAAI,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC;AAC9C,SAAO,eAAe,GAAG,UAAU,EAAE,OAAO,OAAO,CAAC;AACpD,SAAO,cAAc,CAAC;AACxB;AAEA,IAAI,wBAAwB;AACrB,SAAS,iBAAiB,MAAM;AACrC,0BAAwB;AACxB,QAAM,UAAU,eAAe;AAC/B,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,QAAM,YAAY,YAAY,SAAS,UAAU,SAAS,qBAAqB;AAC/E,MAAI,UAAW,WAAU,EAAE,eAAe,gBAAgB,EAAE,MAAM;AAAA,MAC7D,WAAU,EAAE,eAAe,mBAAmB,EAAE,MAAM;AAC3D,MAAI,oBAAoB,YAAY,YAAY,OAAO,KAAK,qBAAqB,EAAE;AACnF,oBAAkB,CAAC,qBAAqB,GAAG,OAAO;AAClD,aAAW,iBAAiB,GAAG;AACjC;AAEA,IAAI,iBAAiB;AACd,SAAS,UAAU,MAAM;AAC9B,mBAAiB;AACjB,YAAU,EAAE,eAAe,YAAY,EAAE,MAAM;AAC/C,MAAI,cAAc,cAAc,EAAE;AAClC,oBAAkB,CAAC,cAAc,GAAG,KAAK;AAC3C;AAEA,IAAI,kBAAkB;AAEtB,SAAS,6BAA6B,GAAG;AACvC,QAAM,MAAM;AACZ,0BAAwB;AACxB,SAAO,CAAC,OAAO,GAAG,IAAI;AACxB;AAEA,SAAS,sBAAsB,GAAG;AAChC,QAAM,MAAM;AACZ,mBAAiB;AACjB,SAAO,CAAC,OAAO,GAAG,IAAI;AACxB;AAEA,SAAS,uBAAuB,GAAG;AACjC,QAAM,MAAM;AACZ,oBAAkB;AAClB,SAAO,CAAC,OAAO,GAAG,IAAI;AACxB;AAEA,SAAS,2BAA2B;AAClC,SAAO;AACT;AAEO,SAAS,WAAW,MAAM;AAC/B,oBAAkB;AAClB,QAAM,UAAU,eAAe;AAC/B,QAAM,WAAW,UAAU,EAAE,eAAe,GAAG,OAAO,cAAc;AACpE,QAAM,cAAc,YAAY,SAAS,UAAU,SAAS,qBAAqB;AACjF,MAAI,YAAa,WAAU,EAAE,eAAe,uBAAuB,EAAE,MAAM;AAAA,MACtE,WAAU,EAAE,eAAe,aAAa,EAAE,MAAM;AACrD,MAAI,cAAc,cAAc,cAAc,SAAS,KAAK,eAAe,EAAE;AAC7E,oBAAkB,CAAC,eAAe,GAAG,MAAM;AAC7C;AAEO,SAAS,gBAAgB,MAAM;AACpC,MAAI,oBAAoB,IAAI,EAAE;AAC9B,0BAAwB;AACxB,YAAU,EAAE,eAAe,kBAAkB,EAAE,MAAM;AACrD,oBAAkB,CAAC,qBAAqB,GAAG,OAAO;AAClD,aAAW,iBAAiB,GAAG;AACjC;AAEA,SAAS,8BAA8B,IAAI,IAAI,SAAS;AACtD,QAAM,MAAM,UAAU,EAAE,cAAc,kDAAkD;AACxF,SAAO,MAAM,CAAC,IAAI,cAAc,IAAI,eAAe,OAAO,IAAI,CAAC,GAAG,GAAG,OAAO;AAC9E;AAEA,SAAS,8BAA8B,IAAI,IAAI,SAAS;AACtD,MAAI,OAAO,QAAQ;AACjB,UAAMC,UAAS,OAAO,OAAO,QAAQ,eAAe;AACpD,WAAO,CAACA,SAAQ,SAAS,GAAGA,SAAQ,UAAU,GAAG,OAAO;AAAA,EAC1D;AACA,QAAM,MAAM,UAAU,EAAE,cAAc,uDAAuD;AAC7F,SAAO,MAAM,CAAC,IAAI,cAAc,IAAI,eAAe,OAAO,IAAI,CAAC,GAAG,GAAG,OAAO;AAC9E;AAEA,SAAS,8CAA8C;AACrD,QAAMC,MAAK,UAAU,EAAE,eAAe,0BAA0B;AAChE,MAAIA,IAAI,YAAW,MAAM,UAAU,EAAE,eAAe,0BAA0B,EAAE,MAAM,GAAG,GAAG;AAC5F,SAAO,CAAC;AACV;AAWA,eAAsB,cAAc,KAAK,KAAK;AAC5C,MAAI,QAAQ,IAAK;AACjB,MAAI,iBAAiB,GAAG;AACxB,MAAI,KAAK;AACP,cAAU,EAAE,MAAM,YAAY,gBAAgB,mBAAmB;AACjE,cAAU,EAAE,iBAAiB,mBAAmB,EAAE,QAAQ,CAACC,QAAOA,IAAG,UAAU,IAAI,QAAQ,CAAC;AAC5F,cAAU,EAAE,iBAAiB,WAAW,EAAE,QAAQ,CAACA,QAAOA,IAAG,UAAU,IAAI,cAAc,CAAC;AAC1F,cAAU,EAAE,iBAAiB,8BAA8B,EAAE,QAAQ,CAACA,QAAOA,IAAG,UAAU,IAAI,mBAAmB,CAAC;AAAA,EACpH,OAAO;AACL,cAAU,EAAE,MAAM,YAAY,gBAAgB,oBAAoB;AAClE,cAAU,EAAE,iBAAiB,mBAAmB,EAAE,QAAQ,CAACA,QAAOA,IAAG,UAAU,OAAO,QAAQ,CAAC;AAC/F,cAAU,EAAE,iBAAiB,WAAW,EAAE,QAAQ,CAACA,QAAOA,IAAG,UAAU,OAAO,cAAc,CAAC;AAC7F,cAAU,EAAE,iBAAiB,8BAA8B,EAAE,QAAQ,CAACA,QAAOA,IAAG,UAAU,OAAO,mBAAmB,CAAC;AAAA,EACvH;AACF;AA+BA,IAAI;AAIG,SAAS,mBAAmB,OAAe,QAAgB;AAChE,MAAI,OAAO,aAAa;AACtB,UAAM,IAAI,OAAO,KAAK;AACtB,UAAM,IAAI,OAAO,MAAM;AACvB,iBAAa,iBAAiB;AAC9B,wBAAoB,WAAW,MAAM,OAAO,cAAc,GAAG,CAAC,GAAG,GAAG;AAAA,EACtE;AACF;AAEA,eAAsB,cAAc;AAClC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,UAAU,UAAU,EAAE,eAAe,iBAAiB;AAC5D,QAAM,UAAU,aAAa,QAAQ,MAAM;AAC3C,QAAM,WAAW,MAAM,KAAU,UAAU,EAAE,iBAAiB,KAAK,CAAC,EAAE,OAAO,CAACC,QAAOA,IAAG,IAAI,SAAS,cAAc,CAAC;AACpH,MAAI,SAAS,SAAS,EAAG,UAAS,CAAC,EAAE,OAAO;AAC5C,MAAI,SAAS;AACX,UAAM,eAAe,OAAO;AAC5B,oBAAgB,SAAS,MAAM,SAAS,MAAM,MAAM,IAAI;AAAA,EAC1D;AACA,aAAW;AAEX,QAAM,WAAW,UAAU,EAAE,eAAe,6BAA6B;AACzE,MAAI,iBAAiB;AACrB,MAAI,iBAAwD;AAE5D,QAAM,oBAAoB,YAAY;AACpC,UAAM,UAAU,SAAS,cAAc,UAAU;AACjD,QAAI,CAAC,SAAS;AACZ,uBAAiB;AACjB,oBAAc,cAAc;AAC5B,kBAAY;AAAA,IACd,WAAW,mBAAmB,GAAG;AAC/B,uBAAiB,KAAK,IAAI;AAC1B,uBAAiB,YAAY,MAAM;AACjC,cAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,YAAI,UAAU,OAAQ,QAAS,SAAQ,MAAM,UAAU;AAAA,MACzD,GAAG,GAAI;AAAA,IACT;AAAA,EACF;AACA,QAAM,oBAAoB,IAAI,iBAAiB,iBAAiB;AAChE,oBAAkB,QAAQ,UAAU,EAAE,YAAY,MAAM,WAAW,MAAM,SAAS,KAAK,CAAC;AACxF,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,eAAe,KAAK,MAAM,KAAK,EAAE,CAAC;AACtC,QAAM,eAAe,KAAK,EAAE;AAC9B;AAEA,OAAO,gBAAgB;AACvB,OAAO,cAAcC;AACrB,OAAO,qBAAqB;AAC5B,OAAO,oBAAoB;AAC3B,OAAO,6BAA6B;AACpC,OAAO,sBAAsB;AAC7B,OAAO,wBAAwB;AAC/B,OAAO,cAAc;AACrB,OAAO,yBAAyB;AAChC,OAAO,yBAAyB;AAChC,OAAO,iBAAiB;AACxB,OAAO,iBAAiB;AACxB,OAAO,mBAAmB;AAC1B,OAAO,iBAAiB;AACxB,OAAO,aAAa;AACpB,OAAO,iBAAiB;AACxB,OAAO,wBAAwB;AAC/B,OAAO,SAAS;AAChB,OAAO,iBAAiB;AACxB,OAAO,eAAe;AACtB,OAAO,uBAAuB;AAC9B,OAAO,oBAAoB;AAC3B,OAAO,wBAAwB;AAC/B,OAAO,oBAAoB;AAC3B,OAAO,oBAAoB;AAC3B,OAAO,mBAAmB;AAC1B,OAAO,sBAAsB;AAC7B,OAAO,mBAAmB;AAC1B,OAAO,oBAAoB;AAC3B,OAAO,kBAAkB;AACzB,OAAO,oBAAoB;AAC3B,OAAO,8BAA8B;AACrC,OAAO,8BAA8B;AACrC,OAAO,8BAA8B;AACrC,OAAO,8BAA8B;AACrC,OAAO,mBAAmB;AAC1B,OAAO,YAAY;AACnB,OAAO,aAAa;AACpB,OAAO,kBAAkB;AACzB,OAAO,+BAA+B;AACtC,OAAO,wBAAwB;AAC/B,OAAO,yBAAyB;AAChC,OAAO,2BAA2B;AAClC,OAAO,gCAAgC;AACvC,OAAO,gCAAgC;AACvC,OAAO,8CAA8C;AACrD,OAAO,qBAAqB;AAC5B,OAAO,YAAY;;;AC52BZ,SAAS,sBAAsB,IAAY,SAAwB;AACxE,QAAM,YAAY,UAAU,EAAE,eAAe,EAAE;AAC/C,MAAI,EAAE,qBAAqB,aAAc;AACzC,QAAM,MAAM;AACZ,MAAI,gBAAgB,UAAU;AAC9B,MAAI,wBAAwB;AAC9B;AAEA,SAAS,eAAe,WAA0B;AAChD,MAAI,EAAE,qBAAqB,aAAc;AACzC,QAAM,MAAM;AACZ,QAAM,YAAY,UAAU,cAAc,aAAa;AACvD,QAAM,iBAAiB,UAAU,EAAE,cAAc,IAAI,UAAU,EAAE,iBAAiB;AAClF,QAAM,QAAQ,UAAU,EAAE,cAAc,IAAI,UAAU,EAAE,QAAQ;AAChE,MAAI,EAAE,qBAAqB,gBAAgB,EAAE,0BAA0B,kBAAmB;AAC1F,QAAM,OAAO,UAAU,cAAc,MAAM;AAC3C,MAAI,EAAE,gBAAgB,aAAc;AACpC,MAAI,SAAS;AACb,QAAM,SAAS,MAAM,UAAU,UAAU,SAAS,MAAM;AACxD,QAAM,wBAAwB,IAAI,iBAAiB,CAAC,cAAc;AAChE,cAAU,QAAQ,CAAC,mBAAmB;AACpC,gBAAU,UAAU,OAAO,wBAAwB,OAAO,CAAC;AAC3D,UAAI,QAAQ;AACV,YAAI,gBAAgB,UAAU,OAAO;AACrC,YAAI,wBAAwB;AAAA,MAC9B;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACD,wBAAsB,QAAQ,WAAW,EAAE,YAAY,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC;AACzF,MAAI,iBAAiB,KAAM,WAAU,aAAa,OAAO,UAAU,gBAAgB;AACnF,MAAI,YAAY,CAAC,YAAqB;AACpC,QAAI,OAAO,MAAM,QAAS,WAAU,MAAM;AAAA,EAC5C;AAEA,QAAM,kBAAkB,SAAS,cAAc,OAAO;AACtD,kBAAgB,OAAO;AACvB,kBAAgB,UAAU,OAAO;AACjC,kBAAgB,KAAK,GAAG,UAAU,EAAE;AACpC,kBAAgB,YAAY,GAAG,eAAe,SAAS;AACvD,OAAK,aAAa,iBAAiB,KAAK,UAAU;AAClD,MAAI,kBAAkB;AACtB,MAAI,0BAA0B,MAAM;AAClC,QAAI,UAAU,OAAO,MAAM,gBAAgB,QAAS,WAAU,MAAM;AACpE,mBAAe,UAAU,gBAAgB;AACzC,IAAAC,aAAY,cAAc;AAAA,EAC5B;AAEA,kBAAgB,iBAAiB,SAAS,CAACC,WAAU;AACnD,aAAS;AACT,IAAAA,OAAM,gBAAgB;AAAA,EACxB,CAAC;AACD,kBAAgB,iBAAiB,SAAS,IAAI,uBAAuB;AACvE;AAEA,OAAO,wBAAwB;AAMxB,SAAS,iBAAiB;AAC/B,aAAW,aAAa,UAAU,EAAE,iBAAiB,kBAAkB,EAAG,gBAAe,SAAS;AACpG;;;AClEA,IAAI,KAAK;AAQT,eAAsB,cAA6B;AACjD,iBAAe,WAA0B;AACvC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,UAAU,KAAK,UAAU,CAAC;AAC1C,cAAQ,UAAU,CAAC,QAAe,OAAO,GAAG;AAC5C,cAAQ,YAAY,CAAC,QAAe;AAClC,aAAM,IAAI,OAA4B;AACtC,cAAM,WAAW,GACd,YAAY,CAAC,QAAQ,GAAG,WAAW,EACnC,YAAY,QAAQ,EACpB,MAAM;AACT,iBAAS,YAAY,MAAM,IAAI,eAAe,SAAS,MAAM;AAC7D,gBAAQ;AAAA,MACV;AACA,cAAQ,kBAAkB,CAAC,QAA+B;AACxD,aAAM,IAAI,OAA4B;AACtC,cAAM,SAAS,IAAI;AACnB,YAAI,SAAS,GAAG;AACd,gBAAM,QAAQ,GAAG,kBAAkB,UAAU,EAAE,SAAS,OAAO,CAAC;AAChE,gBAAM,YAAY,QAAQ,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAAA,QACpD;AACA,YAAI,SAAS,GAAG;AACd,gBAAM,gBAAgB,QAAQ,YAAY,YAAY,QAAQ;AAC9D,wBAAc,YAAY,UAAU,UAAU,EAAE,QAAQ,MAAM,CAAC;AAAA,QACjE;AACA,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,GAAI,OAAM,SAAS;AAC1B;AAEO,SAAS,aAAsB;AACpC,SAAO,OAAO;AAChB;AAYA,SAAS,0BAA6B;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG,cAA6B;AAC9B,WAAS,mBAAmB;AAC1B,WAAO,oBAAoB,SAAS,gBAAgB;AACpD,gBAAY,MAAM;AAAA,EACpB;AACA,SAAO,iBAAiB,SAAS,gBAAgB;AACjD,cAAY,UAAU,MAAM;AAC1B,WAAO,oBAAoB,SAAS,gBAAgB;AACpD,WAAO,IAAI,aAAa,kCAAkC,OAAO,MAAM,IAAI,YAAY,CAAC;AAAA,EAC1F;AACA,cAAY,UAAU,CAAC,MAAM;AAC3B,WAAO,oBAAoB,SAAS,gBAAgB;AACpD,WAAO,IAAI,MAAM,6BAA6B,CAAC;AAAA,EACjD;AACA,cAAY,aAAa,MAAM;AAC7B,WAAO,oBAAoB,SAAS,gBAAgB;AACpD,YAAQ,YAAY;AAAA,EACtB;AACA,SAAO;AACT;AAEA,eAAe,IAAI,QAA4C;AAC7D,MAAI,CAAC,GAAI,QAAO;AAChB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,UAAU,GACb,YAAY,CAAC,QAAQ,GAAG,WAAW,EACnC,YAAY,QAAQ,EACpB,IAAI,MAAM;AACb,YAAQ,YAAY,CAAC,QAAQ,QAAQ,GAAG;AACxC,YAAQ,UAAU,CAAC,QAAQ,OAAO,GAAG;AAAA,EACvC,CAAC;AACH;AAcA,eAAe,IAAIC,OAA2C;AAC5D,MAAI,CAAC,GAAI,QAAO;AAChB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,UAAU,GACb,YAAY,CAAC,QAAQ,GAAG,UAAU,EAClC,YAAY,QAAQ,EACpB,MAAM,MAAM,EACZ,IAAIA,KAAI;AACX,YAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,YAAQ,UAAU,CAAC,QAAQ,OAAO,GAAG;AAAA,EACvC,CAAC;AACH;AA2BA,eAAsB,cAAc,QAAuB,MAAM,QAA0C,MAAqC;AAC9I,MAAI,CAAC,GAAI,QAAO;AAChB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI;AACF,UAAI;AACJ,YAAM,cAAc,GAAG,YAAY,UAAU,UAAU;AACvD,kBAAY,UAAU,CAAC,MAAM,OAAO,CAAC;AACrC,YAAM,QAAQ,YAAY,YAAY,QAAQ;AAC9C,UAAI,MAAO,WAAU,MAAM,MAAM,KAAK,EAAE,WAAW,KAAK;AAAA,UACnD,WAAU,MAAM,WAAW,KAAK;AACrC,cAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,cAAQ,UAAU,CAAC,MAAM,OAAO,CAAC;AAAA,IACnC,SAAS,KAAK;AACZ,aAAO,GAAG;AAAA,IACZ;AAAA,EACF,CAAC;AACH;AAQA,eAAsB,SAAS,QAA4D;AACzF,MAAI,CAAC,GAAI,QAAO;AAChB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI;AACF,UAAI;AACJ,YAAM,cAAc,GAAG,YAAY,UAAU,UAAU;AACvD,kBAAY,UAAU,CAAC,MAAM,OAAO,CAAC;AACrC,YAAM,QAAQ,YAAY,YAAY,QAAQ;AAC9C,UAAI,OAAQ,WAAU,MAAM,MAAM,QAAQ,EAAE,MAAM,MAAM;AAAA,UACnD,WAAU,MAAM,MAAM;AAC3B,cAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,cAAQ,UAAU,CAAC,MAAM,OAAO,CAAC;AAAA,IACnC,SAAS,KAAK;AACZ,aAAO,GAAG;AAAA,IACZ;AAAA,EACF,CAAC;AACH;AASA,eAAsB,iBAAiB,SAAsB,QAAmC,QAA6C;AAC3I,MAAI,CAAC,GAAI,QAAO;AAChB,QAAM,WAAW,MAAM,cAAc,UAAU,MAAM;AACrD,QAAM,WAAW,IAAI,KAAK,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,OAAO,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;AAC9G,QAAM,gBAAgB,SAAS;AAC/B,MAAI,OAAO,SAAS;AAClB,UAAM,IAAI,MAAM,aAAa,OAAO,OAAO,MAAM,CAAC,EAAE;AAAA,EACtD;AACA,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,cAAc,GAAG,YAAY,UAAU,WAAW;AACxD,UAAM,QAAQ,EAAE,aAAa,QAAQ,SAAS,OAAO;AACrD,8BAA0B,OAAO,aAAa;AAC9C,UAAM,QAAQ,YAAY,YAAY,QAAQ;AAC9C,aAAS,QAAQ,CAAC,UAAU;AAAE,YAAM,OAAO,KAAK;AAAA,IAAG,CAAC;AAAA,EACtD,CAAC;AACH;AAYO,IAAM,SAAS;AAEf,IAAM,SAAS;;;AC3NtB,IAAI,eAAmC;AACvC,IAAI,mBAAmB;AACvB,IAAI,cAAc;AAClB,IAAI,YAAY;AAChB,IAAI,eAAe;AAEnB,SAAS,UAAU,IAAoB;AACrC,QAAM,KAAK,IAAI,KAAK,MAAO,EAAE;AAI7B,QAAM,OAAO,OAAO,GAAG,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AAClD,QAAM,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACnD,QAAM,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACnD,QAAM,KAAK,OAAO,GAAG,gBAAgB,CAAC,EAAE,SAAS,GAAG,GAAG;AAEvD,QAAM,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE;AACrC,SAAO;AACT;AAEA,SAAS,WAAW,MAAsB;AACxC,SAAO,KAAK,WAAW,KAAK,OAAO,EAAE,WAAW,KAAK,MAAM,EAAE,WAAW,KAAK,MAAM;AACrF;AAEA,SAAS,aAAa,MAAuB;AAC3C,MAAI,MAAM,KAAK,WAAW,MAAM,GAAG,EAAE,WAAW,MAAM,MAAM;AAC5D,QAAM,iBAAiB,IAAI,QAAQ,WAAW;AAC9C,MAAI,mBAAmB,GAAI,OAAM,IAAI,UAAU,GAAG,cAAc;AAChE,QAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,SAAO;AAAA,IACL,SAAS,OAAO,OAAO,WAAW,KAAK,IAAI,CAAC;AAAA,IAC5C,OAAO,OAAO,OAAO,SAAS,MAAM;AAAA,IACpC,QAAQ,OAAO,OAAO,UAAU,YAAY;AAAA,IAC5C,UAAU,OAAO,OAAO,YAAY,IAAI;AAAA,IACxC,KAAK,OAAO,OAAO,OAAO,EAAE;AAAA,EAC9B;AACF;AAEA,eAAe,cAA6B;AAC1C,gBAAc;AACd,cAAY;AACZ,MAAI,aAAa;AACnB;AAEA,eAAsB,wBAAwB;AAC5C,QAAM,iBAAiB,SAAS,eAAe,8BAA8B;AAC7E,MAAI,gBAAgB;AAClB,mBAAe,UAAU,OAAO,QAAQ;AACtC,UAAI,eAAe;AACnB,UAAI,gBAAgB;AACpB,kBAAY;AAAA,IACd;AAAA,EACF;AACF;AAEA,eAAe,aAAa;AAC1B,QAAM,aAAa,CAAC,SAAuB;AACzC,QAAI,CAAC,aAAc,gBAAe,SAAS,eAAe,gBAAgB;AAC1E,QAAI,CAAC,aAAc;AACnB,QAAI;AACF,YAAM,IAAI,aAAa,IAAI;AAC3B,YAAM,MAAM,SAAS,cAAc,IAAI;AAEvC,YAAM,QAAQ,iCAAiC,EAAE,MAAM,YAAY,CAAC,MAAM,EAAE,KAAK;AACjF,UAAI,EAAE,UAAU,UAAW;AAC3B,UAAI,EAAE,UAAU,QAAS;AACzB,YAAM,SAAS,8BAA8B,EAAE,MAAM;AACrD,YAAM,eAAe,EAAE,SAAS,SAAS,KAAK,GAAG,EAAE,SAAS,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE;AACtF,YAAM,WAAW,EAAE,aAAa,OAAO,8BAA8B,YAAY,UAAU;AAC3F,UAAI,YAAY,OAAO,UAAU,EAAE,OAAO,CAAC,QAAQ,KAAK,GAAG,QAAQ,GAAG,MAAM,OAAO,WAAW,EAAE,GAAG,CAAC;AACpG,mBAAa,YAAY,GAAG;AAAA,IAC9B,SAAS,KAAK;AACZ,YAAM,cAAc,EAAE,OAAO,OAAO,GAAG,GAAG,KAAK,CAAC;AAAA,IAClD;AAAA,EACF;AAEA,QAAM,aAAa,CAACC,cAA4B;AAC9C,QAAI,CAAC,aAAc;AACnB,WAAO,aAAa,oBAAoB,OAAO,aAAa,mBAAmB;AAC7E,mBAAa,YAAY,aAAa,iBAAiB;AAAA,IACzD;AACA,QAAIA,UAAU,cAAa,YAAY,aAAa;AAAA,aAC3C,aAAa,cAAe,cAAa,cAAc,MAAM,UAAU;AAChF,UAAM,SAAS,SAAS,eAAe,aAAa;AACpD,UAAM,QAAQ,SAAS,eAAe,WAAW;AACjD,UAAM,aAAa,SAAS,eAAe,aAAa;AACxD,QAAI,OAAQ,QAAO,YAAY,OAAO,WAAW;AACjD,QAAI,MAAO,OAAM,YAAY,OAAO,SAAS;AAC7C,QAAI,YAAY;AACd,iBAAW,aAAa,eAAe,YAAY,IAAI,OAAO,SAAS,IAAI,EAAE;AAC7E,iBAAW,MAAM,kBAAkB,YAAY,IAAI,uBAAuB;AAC1E,iBAAW,QAAQ;AAAA,SAAe,SAAS;AAAA,WAAc,WAAW;AAAA,IACtE;AAAA,EACF;AAEA,QAAM,aAAa,SAAS,eAAe,iBAAiB;AAC5D,MAAI,WAAY,YAAW,MAAM,SAAS,OAAO,KAAK,kBAAkB,SAAS;AACjF,QAAM,aAAa,SAAS,eAAe,iBAAiB;AAC5D,MAAI,WAAY,YAAW,MAAM,SAAS,OAAO,KAAK,kBAAkB,SAAS;AAEjF,MAAI,CAAC,OAAO,KAAK,iBAAiB;AAChC,UAAM,KAAU,SAAS,uBAAuB,aAAa,CAAC,EAAE,QAAQ,CAACC,QAAO;AAC9E,UAAIA,eAAc,YAAa,CAAAA,IAAG,MAAM,UAAU;AAAA,IACpD,CAAC;AACD;AAAA,EACF;AAEA,MAAI,iBAAkB,YAAW,YAAY,OAAO,KAAK,yBAAyB;AAAA,MAC7E,YAAW,YAAY,KAAK,GAAI;AAErC,qBAAmB;AACnB,MAAI,CAAC,cAAc;AACjB,mBAAe,SAAS,eAAe,gBAAgB;AACvD,QAAI,cAAc;AAChB,mBAAa,iBAAiB,UAAU,MAAM;AAC5C,cAAMD,YAAW,aAAa,gBAAiB,aAAa,YAAY,aAAa;AACrF,YAAIA,aAAY,aAAa,cAAe,cAAa,cAAc,MAAM,UAAU;AAAA,MACzF,CAAC;AAAA,IACH;AAAA,EACF;AACA,MAAI,CAAC,aAAc;AACnB,QAAM,WAAW,aAAa,gBAAiB,aAAa,YAAY,aAAa;AAErF,MAAI;AACF,UAAM,MAAM,MAAME,WAAU,GAAG,OAAO,GAAG,iBAAiB;AAC1D,QAAI,KAAK,IAAI;AACX,yBAAmB;AACnB,YAAM,QAAS,MAAM,IAAI,KAAK;AAC9B,UAAI,gBAAgB,OAAO,SAAS,KAAK,aAAa,eAAe,yBAAyB,aAAa;AACzG,qBAAa,cAAc,cAAc,MAAM,UAAU,OAAO,KAAK,kBAAkB,UAAU;AAAA,MACnG;AACA,UAAI,CAAC,cAAc;AACjB,uBAAe;AACf,gBAAQ,GAAG,OAAO,GAAG,QAAQ,EAAE,OAAO,YAAY,CAAC;AACnD,oBAAY;AAAA,MACd;AACA,iBAAW,QAAQ,MAAO,YAAW,IAAI;AAAA,IAC3C,OAAO;AACL,qBAAe;AACf;AACA,UAAI,IAAK,YAAW,gBAAgB,KAAK,IAAI,CAAC,0FAA0F,KAAK,MAAM,IAAI,KAAK,UAAU,KAAK;AAAA,UACtK,YAAW,gBAAgB,KAAK,IAAI,CAAC,yFAAyF;AAAA,IACrI;AACA,eAAW,QAAQ;AAAA,EACrB,QAAQ;AACN,mBAAe;AACf;AACA,eAAW,gBAAgB,KAAK,IAAI,CAAC,yFAAyF;AAC9H,eAAW,QAAQ;AAAA,EACrB;AACF;AAEA,eAAsB,iBAAiB;AACrC,MAAID,MAAK,SAAS,eAAe,uBAAuB;AACxD,QAAM,WAAW,QAAQA,GAAE;AAC3B,MAAI,CAACA,IAAI,CAAAA,MAAK,SAAS,qBAAqB,QAAQ,EAAE,CAAC;AACvD,MAAI,CAACA,IAAI;AACT,QAAM,KAAK,YAAY,IAAI;AAC3B,EAAAA,IAAG,UAAU,IAAI,aAAa;AAC9B,QAAM,aAAa,MAAM,QAAQ,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,cAAc,CAAC;AACvF,MAAI,WAAW,SAAS,MAAM,EAAG;AACjC,MAAI,UAAU;AACZ,IAAAA,IAAG,MAAM,WAAW;AACpB,IAAAA,IAAG,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,OAAO;AACL,IAAAA,IAAG,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBjB;AACA,EAAAA,IAAG,MAAM,UAAU;AACnB,EAAAC,WAAU,GAAG,OAAO,GAAG,gBAAgB,UAAU,UAAU,SAAS,CAAC,EAAE;AACvE,aAAW;AACX,wBAAsB;AACtB,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,kBAAkB,EAAE,MAAM,OAAO,KAAK,iBAAiB,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACtF,QAAM,kBAAkB,KAAK,EAAE;AACjC;;;ACxMA,IAAI,sBAAsB;AAC1B,IAAI,gBAAgB,CAAC;AACrB,IAAM,YAAY,CAAC;AAEnB,SAAS,kBAAkB;AACzB,MAAI,QAAQ,UAAU,EAAE,iBAAiB,wBAAwB;AACjE,MAAI,CAAC,SAAS,MAAM,WAAW,EAAG,SAAQ,UAAU,EAAE,iBAAiB,uBAAuB;AAC9F,SAAO;AACT;AAEA,IAAM,gBAAuC;AAAA,EAC3C,EAAE,qBAAqB,KAAK;AAAA,EAC5B,EAAE,YAAY,MAAM,UAAU,EAAE,eAAe,6BAA6B,GAAG,MAAM,EAAE;AACzF;AAEO,SAAS,cAAc,QAAQ,UAAU;AAC9C,gBAAc,KAAK,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC;AAC3C;AAEA,IAAM,WAAW;AAAA;AAAA,EACf,EAAE,cAAc,CAAC,KAAK,QAAQ,cAAc,KAAK,GAAG,EAAE;AAAA,EACtD,EAAE,cAAc,CAAC,KAAK,QAAQ,SAAS,KAAK,GAAG,EAAE;AAAA,EACjD,EAAE,WAAW,CAAC,KAAK,QAAQ,YAAY,KAAK,GAAG,EAAE;AACnD;AAEA,eAAe,WAAW,aAAa;AACrC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,gBAAgB,KAAK,MAAM,WAAW;AAC5C,QAAM,WAAW,cAAc;AAC/B,kBAAgB,cAAc;AAE9B,QAAM,KAAK,YAAY,IAAI;AAC3B,aAAW,MAAM,eAAe;AAC9B,UAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,QAAQ,EAAE,EAAE,CAAC;AAC5C,QAAI,OAAO,OAAO,MAAM,GAAG,KAAK,KAAK,GAAG,MAAM,SAAS,GAAG,GAAG;AAC3D,UAAI,aAAa,EAAE,KAAK,KAAK,SAAS,GAAG,EAAE,CAAC;AAC5C,UAAI,SAAU,UAAS,SAAS,GAAG,GAAG,KAAK,GAAG,CAAC;AAAA,IACjD;AAAA,EACF;AAEA,aAAW,MAAM,UAAU;AACzB,UAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,QAAQ,EAAE,EAAE,CAAC;AAC5C,QAAI,UAAU;AACZ,YAAM,KAAK,YAAY,IAAI;AAC3B,eAAS,SAAS,GAAG,GAAG,KAAK,GAAG,CAAC;AACjC,YAAM,KAAK,YAAY,IAAI;AAC3B,UAAI,KAAK,KAAK,IAAK,OAAM,eAAe,KAAK,QAAQ,KAAK,MAAM,KAAK,EAAE,CAAC,EAAE;AAAA,IAC5E;AAAA,EACF;AAEA,SAAO,OAAO;AACd,SAAO,QAAQ,aAAoC,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,MAAqB;AAC3F,QAAI,CAAC,UAAU,KAAK,QAAQ,EAAG,WAAU,KAAK,QAAQ,IAAI,CAAC;AAC3D,QAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,aAAc,WAAU,KAAK,QAAQ,EAAE,eAAe,oBAAI,IAAI;AAC5F,QAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,WAAY,WAAU,KAAK,QAAQ,EAAE,aAAa,oBAAI,IAAI;AACxF,QAAI,CAAC,KAAK,UAAW,WAAU,KAAK,QAAQ,EAAE,aAAa,IAAI,GAAG;AAAA,QAC7D,WAAU,KAAK,QAAQ,EAAE,WAAW,IAAI,GAAG;AAAA,EAClD,CAAC;AACD,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,cAAc,EAAE,UAAU,OAAO,KAAK,QAAQ,EAAE,QAAQ,WAAW,KAAK,MAAM,KAAK,EAAE,GAAG,OAAO,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACxH,QAAM,cAAc,KAAK,EAAE;AAC7B;AAEA,SAAS,kBAAkB;AAIzB,kBAAgB,EAAE,QAAQ,CAAC,SAAS;AAClC,QAAI,KAAK,OAAO,2BAA2B,KAAK,OAAO,0BAA2B;AAClF,SAAK,MAAM,UAAU;AAAA,EACvB,CAAC;AACH;AAEA,SAAS,eAAe,cAAc,OAAO;AAC3C,MAAI,CAAC,cAAc,YAAY,EAAG;AAClC,QAAM,OAAO,UAAU,EAAE,eAAe,0BAA0B,YAAY,EAAE;AAChF,MAAI,CAAC,KAAM;AACX,QAAM,iBAAiB,KAAK,UAAU,KAAK,YAAY,CAAC;AACxD,QAAM,gBAAgB,KAAK,UAAU,KAAK;AAC1C,QAAM,gBAAgB,mBAAmB;AACzC,MAAI,cAAe,MAAK,QAAQ,sCAAsC,cAAc;AACpF,QAAM,EAAE,UAAU,IAAI,cAAc,YAAY;AAChD,MAAI,UAAW,MAAK,QAAQ;AAC5B,OAAK,WAAW,CAAC,iBAAiB,CAAC;AACnC,OAAK,UAAU,OAAO,WAAW,aAAa;AAC9C,OAAK,UAAU,OAAO,SAAS,SAAS;AAExC,QAAM,EAAE,SAAS,IAAI,cAAc,YAAY;AAC/C,MAAI,CAAC,UAAU,QAAQ,EAAE,QAAS,WAAU,QAAQ,EAAE,UAAU,oBAAI,IAAI;AACxE,QAAM,gBAAgB,UAAU,QAAQ,EAAE;AAC1C,MAAI,cAAe,eAAc,IAAI,YAAY;AAAA,MAC5C,eAAc,OAAO,YAAY;AACtC,QAAM,UAAU,UAAU,QAAQ,EAAE;AACpC,QAAM,QAAQ,UAAU,QAAQ,EAAE;AAGlC,QAAM,oBAAoB,UAAU,EAAE,eAAe,0BAA0B,QAAQ,EAAE;AACzF,oBAAkB,WAAY,cAAc,SAAS,KAAO,QAAQ,SAAS;AAC7E,oBAAkB,QAAQ;AAC1B,oBAAkB,UAAU,OAAO,WAAW,cAAc,OAAO,CAAC;AACpE,oBAAkB,UAAU,OAAO,SAAS,MAAM,OAAO,CAAC;AAC1D,MAAI,cAAc,OAAO,EAAG,mBAAkB,SAAS,kBAAkB,cAAc,IAAI;AAAA;AAC3F,MAAI,MAAM,OAAO,EAAG,mBAAkB,SAAS,GAAG,MAAM,IAAI;AAAA,EAAmB,QAAQ,IAAI;AAG7F;AACA,OAAO,iBAAiB;AAExB,SAAS,gBAAgB;AACvB,MAAI,OAAO,KAAK,IAAI,EAAE,WAAW,EAAG,QAAO;AAC3C,QAAM,YAAY,UAAU,EAAE,eAAe,eAAe;AAC5D,MAAI,iBAAiB,CAAC,CAAC,SAAS;AAChC,MAAI,CAAC,UAAW,QAAO;AACvB,YAAU,cAAc,MAAM,UAAU;AACxC,QAAM,WAAW,UAAU,cAAc,UAAU;AACnD,QAAM,SAAS,SAAS;AACxB,aAAW,MAAM;AACjB,SAAO;AACT;AAEA,eAAe,0BAA0B;AACvC,MAAI,CAAC,cAAc,EAAG;AACtB,QAAM,YAAY,UAAU,EAAE,eAAe,eAAe;AAC5D,QAAM,WAAW,UAAU,cAAc,UAAU;AACnD,mBAAiB,uBAAuB;AACxC,mBAAiB;AAEjB,SAAO,eAAe,UAAU,SAAS;AAAA,IACvC,IAAI,UAAU;AACZ,YAAM,YAAY,OAAO,yBAAyB,oBAAoB,WAAW,OAAO;AACxF,YAAM,WAAW,UAAU,IAAI,KAAK,QAAQ;AAC5C,gBAAU,IAAI,KAAK,UAAU,QAAQ;AACrC,UAAI,aAAa,SAAU,YAAW,SAAS,KAAK;AACpD,uBAAiB,uBAAuB;AAAA,IAC1C;AAAA,IACA,MAAM;AACJ,YAAM,YAAY,OAAO,yBAAyB,oBAAoB,WAAW,OAAO;AACxF,aAAO,UAAU,IAAI,KAAK,QAAQ;AAAA,IACpC;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,UAAU,EAAE,iBAAiB,qCAAqC,EAAE,CAAC;AAC5F,MAAI;AACJ,MAAI,qBAAqB;AAEzB,WAAS,mBAAmB;AAC1B,QAAI,uBAAuB,eAAe,MAAM,KAAK,EAAE,YAAY,EAAG;AACtE,oBAAgB;AAChB,UAAM,QAAQ,eAAe,MAAM,KAAK,EAAE,YAAY;AACtD,QAAI,oBAAoB,KAAK;AAC7B,yBAAqB;AACrB,oBAAgB,EAAE,QAAQ,CAAC,YAAY;AACrC,cAAQ,iBAAiB,YAAY,EAAE,QAAQ,CAAC,YAAY;AAC1D,cAAM,UAAU,QAAQ,UAAU,YAAY,EAAE,SAAS,KAAK,KAAK,QAAQ,GAAG,YAAY,EAAE,SAAS,KAAK;AAC1G,cAAMC,UAAS,QAAQ,QAAQ,mBAAmB;AAClD,YAAI,CAAC,QAAS,CAAAA,QAAO,MAAM,UAAU;AAAA,YAChC,CAAAA,QAAO,MAAM,eAAe,SAAS;AAAA,MAC5C,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,iBAAe,UAAU,CAAC,MAAM;AAC9B,QAAI,cAAe,cAAa,aAAa;AAC7C,oBAAgB,WAAW,kBAAkB,GAAG;AAAA,EAClD;AACA,iBAAe,aAAa,CAAC,MAAM;AACjC,QAAI,EAAE,QAAQ,SAAS;AACrB,UAAI,cAAe,cAAa,aAAa;AAC7C,uBAAiB;AAAA,IACnB;AAAA,EACF;AACF;AAEA,gBAAgB,uBAAuB;AAEvC,eAAe,2BAA2B;AACxC,QAAM,gBAAgB,UAAU,EAAE,iBAAiB,4BAA4B;AAC/E,gBAAc,QAAQ,CAAC,SAAS;AAC9B,UAAM,eAAe,KAAK,GAAG,QAAQ,YAAY,EAAE;AACnD,mBAAe,cAAc,KAAK,YAAY,CAAC;AAAA,EACjD,CAAC;AACH;AAEA,iBAAiB,wBAAwB;AAEzC,eAAsB,aAAa;AACjC,QAAM,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA,0BAIK,KAAK,QAAQ;AAAA;AAErC,QAAMC,MAAK,UAAU,EAAE,eAAe,WAAW;AACjD,QAAM,KAAK,UAAU,EAAE,eAAe,wBAAwB;AAC9D,MAAI,CAACA,OAAM,CAAC,GAAI;AAChB,QAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,YAAY;AACrD,QAAM,MAAO,OAAO,IAAI,KAAM,MAAM,IAAI,KAAK,IAAI,CAAC;AAClD,MAAI,cAAc,IAAI,MAAM;AAC5B,QAAM,QAAQ,MAAM;AAAA;AAAA,MAEhB,IAAI,MAAM;AAAA;AAEd,EAAAD,IAAG,YAAY,IAAI,SAAS,IAAI,MAAM,IAAI,KAAK;AAC/C,EAAAA,IAAG,MAAM,UAAU;AACnB,aAAW,MAAM;AAAE,IAAAA,IAAG,MAAM,UAAU;AAAA,EAAQ,GAAG,IAAI,WAAW,IAAI,MAAQ,IAAI;AAChF,MAAI,IAAI,WAAW,GAAG;AACpB,QAAI,GAAG,UAAU,SAAS,MAAM,EAAG,WAAU,EAAE,eAAe,4BAA4B,EAAE,MAAM;AAClG,UAAM,SAAS,YAAY,MAAM;AAC/B,YAAM,UAAU,MAAM,KAAU,UAAU,EAAE,iBAAiB,iCAAiC,CAAC,KAAK,CAAC;AACrG,YAAM,YAAY,QAAQ,KAAK,CAAC,MAAO,EAAE,cAAc,eAAiB,EAAE,cAAc,eAAiB,EAAE,cAAc,eAAiB,EAAE,cAAc,eAAiB,EAAE,cAAc,OAAQ;AACnM,UAAI,WAAW;AACb,sBAAc,MAAM;AACpB,kBAAU,MAAM;AAChB,YAAI,mBAAmB;AAAA,MACzB;AAAA,IACF,GAAG,GAAG;AAAA,EACR;AACF;AAEA,eAAsB,eAAe;AACnC,MAAI,oBAAqB;AACzB,QAAM,KAAK,YAAY,IAAI;AAC3B,wBAAsB;AACtB,QAAM,iBAAiB,UAAU,EAAE,cAAc,sBAAsB;AACvE,MAAI,CAAC,gBAAgB;AACnB,UAAM,gBAAgB,2BAA2B;AACjD;AAAA,EACF;AACA,QAAM,gBAAgB,UAAU,EAAE,iBAAiB,+BAA+B;AAClF,QAAM,cAAc,UAAU,EAAE,iBAAiB,+BAA+B;AAChF,QAAM,WAAW,IAAI,iBAAiB,CAAC,cAAc;AACnD,UAAM,eAAe,UAAU,EAAE,eAAe,yBAAyB;AACzE,QAAI,aAAa,MAAM,YAAY,OAAQ;AAC3C,UAAM,WAAW,CAAC,QAAQ,IAAI,SAAS,gBAAgB,IAAI,kBAAkB;AAC7E,QAAI,UAAU,KAAK,QAAQ,EAAG,iBAAgB;AAAA,EAChD,CAAC;AACD,QAAM,oBAAoB,SAAS,cAAc,KAAK;AACtD,oBAAkB,YAAY;AAC9B,iBAAe,cAAc,aAAa,mBAAmB,eAAe,WAAW;AACvF,cAAY,QAAQ,CAAC,MAAM,UAAU;AACnC,UAAM,UAAU,KAAK,GAAG,QAAQ,yBAAyB,EAAE;AAC3D,UAAM,YAAY,UAAU,EAAE,eAAe,0BAA0B,OAAO,EAAE;AAChF,QAAI,WAAW;AACb,qBAAe,aAAa,SAAS,cAAc,IAAI,GAAG,cAAc,KAAK,CAAC;AAC9E,qBAAe,aAAa,WAAW,cAAc,KAAK,CAAC;AAAA,IAC7D;AACA,sBAAkB,YAAY,IAAI;AAClC,aAAS,QAAQ,MAAM,EAAE,YAAY,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC;AAAA,EACzE,CAAC;AACD,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,gBAAgB,KAAK,MAAM,KAAK,EAAE,CAAC;AACvC,QAAM,gBAAgB,KAAK,EAAE;AAC/B;;;ACxPA,IAAI,gBAAgB;AACpB,IAAI;AAEG,IAAM,yBAAN,MAAM,wBAAuB;AAAA,EAClC,OAAO;AAAA,EACP,OAAO,MAAM;AAAA,EACb,OAAO,QAAQ;AAAA,EACf,OAAO;AAAA,EACP,OAAO,UAAU;AAAA,EACjB,OAAO,SAAS;AAAA,EAChB,OAAO,SAAS;AAAA,EAChB,OAAO,QAAQ;AAAA,EACf,OAAO,UAAgB,oBAAI,KAAK;AAAA,EAChC,OAAO,SAAS;AAAA,EAChB,OAAO,KAAW,oBAAI,KAAK;AAAA,EAE3B,OAAO,WAAmB;AACxB,UAAM,KAAK,OAAO,MAAM,uBAAuB;AAC/C,WAAO,KAAK,KAAK,cAAc,EAAE,IAAI;AAAA,EACvC;AAAA,EAEA,OAAO,cAAc,MAAsB;AACzC,WAAO,KAAK,QAAQ,iBAAiB,EAAE,EAAE,MAAM,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK;AAAA,EAC1E;AAAA,EAEA,OAAO,QAAQ,EAAE,QAAQ,KAAK,GAA2C;AACvE,QAAI,WAAW,KAAK,QAAQ;AAC1B,WAAK,SAAS;AACd,WAAK,KAAK,oBAAI,KAAK;AACnB,YAAM,gBAAgB,EAAE,QAAQ,wBAAuB,QAAQ,IAAI,wBAAuB,IAAI,mBAAmB,EAAE,CAAC;AAAA,IACtH;AACA,QAAI,MAAM,QAAS,MAAK,UAAU,KAAK;AACvC,QAAI,MAAM,OAAQ,MAAK,SAAS,KAAK;AACrC,QAAI,MAAM,OAAQ,MAAK,SAAS,KAAK;AACrC,QAAI,MAAM,MAAO,MAAK,QAAQ,KAAK,cAAc,KAAK,KAAK;AAAA,EAC7D;AAAA,EAEA,OAAO,SAAiB;AACtB,QAAI,CAAC,KAAK,MAAO,MAAK,QAAQ,KAAK,SAAS;AAC5C,WAAO;AAAA,oBACS,KAAK,OAAO;AAAA,mBACb,KAAK,MAAM;AAAA,mBACX,KAAK,MAAM;AAAA,gBACd,KAAK,SAAS,qCAAqC,sCAAsC;AAAA,kBACvF,KAAK,KAAK;AAAA,eACb,KAAK,QAAQ,eAAe,CAAC;AAAA;AAAA,EAE1C;AAAA,EAEA,OAAO,cAAc;AACnB,QAAI,CAAC,KAAK,SAAS;AACjB,YAAME,MAAK,SAAS,eAAe,UAAU;AAC7C,UAAIA,IAAI,MAAK,UAAUA;AAAA,UAClB;AAAA,IACP;AACA,SAAK,QAAQ,QAAQ,OAAO,KAAK,OAAO;AACxC,SAAK,QAAQ,MAAM,kBAAkB,KAAK,SAAS,gCAAgC;AAAA,EACrF;AACF;AAEA,eAAe,gBAAgB,QAAiB,OAAoB,CAAC,GAAG,KAA6B;AACnG,yBAAuB,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAC/C,yBAAuB,YAAY;AACnC,MAAI,IAAK,KAAI,sBAAsB,EAAE,QAAQ,MAAM,IAAI,CAAC;AAC1D;AAEA,SAAS,mBAAmB;AAC1B,MAAI,SAAS;AACX,iBAAa,OAAO;AACpB,cAAU;AAAA,EACZ;AACA,QAAM,oBAAoB,KAAK,IAAI,IAAI,uBAAuB,GAAG,QAAQ;AACzE,MAAI,CAAC,uBAAuB,UAAU,oBAAqB,KAAK,KAAK,IAAO,wBAAuB,QAAQ;AAAA,WAClG,CAAC,uBAAuB,UAAU,oBAAqB,IAAI,KAAK,IAAO,wBAAuB,QAAQ;AAAA,MAC1G,wBAAuB,QAAQ;AACpC,YAAU,WAAW,eAAe,uBAAuB,KAAK;AAClE;AAEA,eAAe,gBAAgB;AAE7B,MAAI,uBAAuB,IAAI;AAC7B,2BAAuB,GAAG,SAAS;AACnC,2BAAuB,GAAG,YAAY;AACtC,2BAAuB,GAAG,UAAU;AACpC,2BAAuB,GAAG,UAAU;AACpC,QAAI;AACF,6BAAuB,GAAG,MAAM;AAAA,IAClC,QAAQ;AAAA,IAER;AACA,2BAAuB,KAAK;AAAA,EAC9B;AAEA,MAAI;AACF,2BAAuB,KAAK,IAAI,UAAU,GAAG,uBAAuB,GAAG,mBAAmB;AAC1F,2BAAuB,GAAG,SAAS,MAAM,gBAAgB,IAAI;AAC7D,2BAAuB,GAAG,YAAY,CAAC,QAAsB,gBAAgB,MAAM,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC;AACvH,2BAAuB,GAAG,UAAU,MAAM;AACxC,sBAAgB,KAAK;AACrB,uBAAiB;AAAA,IACnB;AACA,2BAAuB,GAAG,UAAU,CAAC,MAAa,gBAAgB,OAAO,CAAC,GAAG,OAAQ,EAAiB,WAAW,eAAe,CAAC;AAAA,EACnI,SAAS,GAAG;AACV,oBAAgB,OAAO,CAAC,GAAG,OAAQ,EAAY,WAAW,CAAC,CAAC;AAC5D,qBAAiB;AAAA,EACnB;AACF;AAEA,eAAsB,oBAAoB;AACxC,MAAI,CAAC,eAAe;AAClB,oBAAgB;AAChB,kBAAc,uBAAuB,CAAC,WAAW;AAC/C,6BAAuB,QAAQ;AAC/B,6BAAuB,YAAY;AAAA,IACrC,CAAC;AAAA,EACH;AACA,yBAAuB,UAAU,oBAAI,KAAK;AAE1C,MAAI,OAAoB,CAAC;AACzB,MAAI;AACF,UAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,UAAU;AACnD,QAAI,CAAC,IAAK,OAAM,IAAI,MAAM,aAAa;AACvC,WAAO,MAAM,IAAI,KAAK;AACtB,QAAI,sBAAsB,EAAE,KAAK,CAAC;AAClC,2BAAuB,UAAU,oBAAI,KAAK;AAC1C,2BAAuB,MAAM,IAAI,IAAI,MAAM,QAAQ,EAAE,CAAC,EAAE,QAAQ,UAAU,MAAM,EAAE,QAAQ,SAAS,KAAK;AACxG,oBAAgB,MAAM,IAAI;AAC1B,kBAAc;AAAA,EAChB,QAAQ;AACN,oBAAgB,OAAO,IAAI;AAC3B,qBAAiB;AAAA,EACnB;AACF;;;ACtIA,SAAS,cAAc,UAA+B,YAA+B;AACnF,QAAM,SAAiC,CAAC;AACxC,QAAM,SAAmB,CAAC;AAE1B,WAAS,UAAU,MAAc,OAAe,MAAoB;AAClE,QAAI,OAAO,IAAI,MAAM,OAAO,KAAK,EAAG,QAAO,KAAK,GAAG,IAAI,MAAM,KAAK,eAAe,OAAO,IAAI,KAAK,CAAC,gBAAgB,OAAO,KAAK,KAAK,CAAC,YAAY,IAAI,GAAG;AAAA,EACzJ;AAEA,GAAC,SAAS,MAAM,MAAM,YAAY,KAAK,CAAC,GAAG,QAAQ,CAAC,YAAY;AAAE,WAAO,OAAO,KAAK,OAAO,OAAO,KAAK,KAAK;AAAA,EAAG,CAAC;AACjH,YAAU,KAAK,KAAK,gBAAgB;AACpC,YAAU,KAAK,KAAK,iBAAiB;AACrC,YAAU,KAAK,KAAK,gBAAgB;AACpC,aAAW,QAAQ,OAAO,KAAK,IAAI;AACnC,aAAW,UAAU,OAAO,SAAS,OAAO,WAAW,CAAC;AAC1D;AAEA,SAAS,qBAAqB,UAAkB,WAAyB;AACvE,QAAM,WAAW,UAAU,EAAE,cAAc,IAAI,QAAQ,qBAAqB;AAC5E,QAAM,UAAU,UAAU,EAAE,eAAe,SAAS;AACpD,MAAI,EAAE,oBAAoB,wBAAwB,CAAC,QAAS;AAC5D,WAAS,iBAAiB,SAAS,MAAM,cAAc,UAAU,OAAO,CAAC;AAC3E;AAEA,eAAsB,oBAAoB;AACxC,QAAM,KAAK,YAAY,IAAI;AAC3B,uBAAqB,kBAAkB,uBAAuB;AAC9D,uBAAqB,sBAAsB,gCAAgC;AAC3E,uBAAqB,kBAAkB,uBAAuB;AAC9D,uBAAqB,sBAAsB,gCAAgC;AAC3E,uBAAqB,kBAAkB,uBAAuB;AAC9D,uBAAqB,sBAAsB,gCAAgC;AAC3E,uBAAqB,gBAAgB,qBAAqB;AAC1D,uBAAqB,oBAAoB,8BAA8B;AACvE,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,qBAAqB,KAAK,MAAM,KAAK,EAAE,CAAC;AAC5C,QAAM,qBAAqB,KAAK,EAAE;AACpC;;;ACzBA,IAAM,eAAe;AACrB,IAAM,YAAY;AAIlB,IAAM,IAAI,IAAI,YAAY;AAAA,EACxB;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAChD;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AACtC,CAAC;AACD,SAAS,WAAW,GAAG,GAAG,GAAG,KAAK,KAAK;AACrC,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAG,MAAI;AAAI,MACnF;AACF,SAAO,OAAO,IAAI;AAChB,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,QAAI,EAAE,CAAC;AACP,SAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,UAAI,MAAM,IAAI;AACd,QAAE,CAAC,KAAO,EAAE,CAAC,IAAI,QAAS,MAAQ,EAAE,IAAI,CAAC,IAAI,QAAS,MAC1C,EAAE,IAAI,CAAC,IAAI,QAAS,IAAM,EAAE,IAAI,CAAC,IAAI;AAAA,IACnD;AACA,SAAK,IAAI,IAAI,IAAI,IAAI,KAAK;AACxB,UAAI,EAAE,IAAI,CAAC;AACX,YAAM,MAAM,KAAK,KAAM,KAAK,OAAQ,MAAM,KAAK,KAAM,KAAK,MAAQ,MAAM;AACxE,UAAI,EAAE,IAAI,EAAE;AACZ,YAAM,MAAM,IAAI,KAAM,KAAK,MAAO,MAAM,KAAK,KAAM,KAAK,MAAQ,MAAM;AACtE,QAAE,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,KAAK,EAAE,IAAI,EAAE,IAAI;AAAA,IACjD;AACA,SAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,cAAU,MAAM,IAAI,KAAM,KAAK,MAAO,MAAM,KAAK,KAAM,KAAK,OACjD,MAAM,KAAK,KAAM,KAAK,QAAU,IAAI,IAAM,CAAC,IAAI,KAAO,MACrD,KAAM,EAAE,CAAC,IAAI,EAAE,CAAC,IAAK,KAAM,KAAM;AAC7C,aAAQ,MAAM,IAAI,KAAM,KAAK,MAAO,MAAM,KAAK,KAAM,KAAK,OAC/C,MAAM,KAAK,KAAM,KAAK,QAAU,IAAI,IAAM,IAAI,IAAM,IAAI,KAAO;AAC1E,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAK,IAAI,KAAM;AACf,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAK,KAAK,KAAM;AAAA,IAClB;AACA,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,MAAE,CAAC,KAAK;AACR,WAAO;AACP,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,IAAM;AAAA;AAAA,GAAsB,WAAY;AACtC,aAASC,QAAO;AACd,WAAK,eAAe;AACpB,WAAK,YAAY;AAEjB,WAAK,QAAQ,IAAI,WAAW,CAAC;AAC7B,WAAK,OAAO,IAAI,WAAW,EAAE;AAC7B,WAAK,SAAS,IAAI,WAAW,GAAG;AAChC,WAAK,eAAe;AACpB,WAAK,cAAc;AACnB,WAAK,WAAW;AAChB,WAAK,MAAM;AAAA,IACb;AAGA,IAAAA,MAAK,UAAU,QAAQ,WAAY;AACjC,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,eAAe;AACpB,WAAK,cAAc;AACnB,WAAK,WAAW;AAChB,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,QAAQ,WAAY;AACjC,eAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAC3C,aAAK,OAAO,CAAC,IAAI;AAAA,MACnB;AACA,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACzC,aAAK,KAAK,CAAC,IAAI;AAAA,MACjB;AACA,WAAK,MAAM;AAAA,IACb;AAQA,IAAAA,MAAK,UAAU,SAAS,SAAU,MAAM,YAAY;AAClD,UAAI,eAAe,QAAQ;AAAE,qBAAa,KAAK;AAAA,MAAQ;AACvD,UAAI,KAAK,UAAU;AACjB,cAAM,IAAI,MAAM,iDAAiD;AAAA,MACnE;AACA,UAAI,UAAU;AACd,WAAK,eAAe;AACpB,UAAI,KAAK,eAAe,GAAG;AACzB,eAAO,KAAK,eAAe,MAAM,aAAa,GAAG;AAC/C,eAAK,OAAO,KAAK,cAAc,IAAI,KAAK,SAAS;AACjD;AAAA,QACF;AACA,YAAI,KAAK,iBAAiB,IAAI;AAC5B,qBAAW,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,EAAE;AACpD,eAAK,eAAe;AAAA,QACtB;AAAA,MACF;AACA,UAAI,cAAc,IAAI;AACpB,kBAAU,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM,SAAS,UAAU;AACrE,sBAAc;AAAA,MAChB;AACA,aAAO,aAAa,GAAG;AACrB,aAAK,OAAO,KAAK,cAAc,IAAI,KAAK,SAAS;AACjD;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAIA,IAAAA,MAAK,UAAU,SAAS,SAAU,KAAK;AACrC,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,cAAc,KAAK;AACzB,cAAM,OAAO,KAAK;AAClB,cAAM,WAAY,cAAc,YAAc;AAC9C,cAAM,WAAW,eAAe;AAChC,cAAM,YAAa,cAAc,KAAK,KAAM,KAAK;AACjD,aAAK,OAAO,IAAI,IAAI;AACpB,iBAAS,IAAI,OAAO,GAAG,IAAI,YAAY,GAAG,KAAK;AAC7C,eAAK,OAAO,CAAC,IAAI;AAAA,QACnB;AACA,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,aAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,mBAAW,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,SAAS;AAC3D,aAAK,WAAW;AAAA,MAClB;AACA,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAI,IAAI,IAAI,CAAC,IAAK,KAAK,MAAM,CAAC,MAAM,KAAM;AAC1C,YAAI,IAAI,IAAI,CAAC,IAAK,KAAK,MAAM,CAAC,MAAM,KAAM;AAC1C,YAAI,IAAI,IAAI,CAAC,IAAK,KAAK,MAAM,CAAC,MAAM,IAAK;AACzC,YAAI,IAAI,IAAI,CAAC,IAAK,KAAK,MAAM,CAAC,MAAM,IAAK;AAAA,MAC3C;AACA,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,SAAS,WAAY;AAClC,YAAM,MAAM,IAAI,WAAW,KAAK,YAAY;AAC5C,WAAK,OAAO,GAAG;AACf,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,aAAa,SAAU,KAAK;AACzC,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC1C,YAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAAA,MACvB;AAAA,IACF;AAEA,IAAAA,MAAK,UAAU,gBAAgB,SAAU,MAAM,aAAa;AAC1D,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC1C,aAAK,MAAM,CAAC,IAAI,KAAK,CAAC;AAAA,MACxB;AACA,WAAK,cAAc;AACnB,WAAK,WAAW;AAChB,WAAK,eAAe;AAAA,IACtB;AACA,WAAOA;AAAA,EACT,GAAE;AAAA;AACF,OAAO,OAAO;AAEd,IAAM;AAAA;AAAA,GAAsB,WAAY;AACtC,aAASC,MAAK,KAAK;AACjB,WAAK,QAAQ,IAAI,KAAK;AACtB,WAAK,QAAQ,IAAI,KAAK;AACtB,WAAK,YAAY,KAAK,MAAM;AAC5B,WAAK,eAAe,KAAK,MAAM;AAC/B,YAAM,MAAM,IAAI,WAAW,KAAK,SAAS;AACzC,UAAI,IAAI,SAAS,KAAK,WAAW;AAC/B,QAAC,IAAI,KAAK,EAAG,OAAO,GAAG,EAAE,OAAO,GAAG,EAAE,MAAM;AAAA,MAC7C,OAAO;AACL,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,cAAI,CAAC,IAAI,IAAI,CAAC;AAAA,QAChB;AAAA,MACF;AACA,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAI,CAAC,KAAK;AAAA,MACZ;AACA,WAAK,MAAM,OAAO,GAAG;AACrB,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAI,CAAC,KAAK,KAAO;AAAA,MACnB;AACA,WAAK,MAAM,OAAO,GAAG;AACrB,WAAK,SAAS,IAAI,YAAY,CAAC;AAC/B,WAAK,SAAS,IAAI,YAAY,CAAC;AAC/B,WAAK,MAAM,WAAW,KAAK,MAAM;AACjC,WAAK,MAAM,WAAW,KAAK,MAAM;AACjC,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAI,CAAC,IAAI;AAAA,MACX;AAAA,IACF;AAIA,IAAAA,MAAK,UAAU,QAAQ,WAAY;AACjC,WAAK,MAAM,cAAc,KAAK,QAAQ,KAAK,MAAM,SAAS;AAC1D,WAAK,MAAM,cAAc,KAAK,QAAQ,KAAK,MAAM,SAAS;AAC1D,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,QAAQ,WAAY;AACjC,eAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAC3C,aAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;AAAA,MACpC;AACA,WAAK,MAAM,MAAM;AACjB,WAAK,MAAM,MAAM;AAAA,IACnB;AAEA,IAAAA,MAAK,UAAU,SAAS,SAAU,MAAM;AACtC,WAAK,MAAM,OAAO,IAAI;AACtB,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,SAAS,SAAU,KAAK;AACrC,UAAI,KAAK,MAAM,UAAU;AACvB,aAAK,MAAM,OAAO,GAAG;AAAA,MACvB,OAAO;AACL,aAAK,MAAM,OAAO,GAAG;AACrB,aAAK,MAAM,OAAO,KAAK,KAAK,YAAY,EAAE,OAAO,GAAG;AAAA,MACtD;AACA,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,UAAU,SAAS,WAAY;AAClC,YAAM,MAAM,IAAI,WAAW,KAAK,YAAY;AAC5C,WAAK,OAAO,GAAG;AACf,aAAO;AAAA,IACT;AACA,WAAOA;AAAA,EACT,GAAE;AAAA;AACF,OAAO,OAAO;AAEd,SAASC,MAAK,MAAM;AAClB,QAAM,IAAK,IAAI,KAAK,EAAG,OAAO,IAAI;AAClC,QAAM,SAAS,EAAE,OAAO;AACxB,IAAE,MAAM;AACR,SAAO;AACT;AACA,OAAO,OAAOA;AAGd,SAAS,KAAK,KAAK,MAAM;AACvB,QAAM,IAAK,IAAI,KAAK,GAAG,EAAG,OAAO,IAAI;AACrC,QAAM,SAAS,EAAE,OAAO;AACxB,IAAE,MAAM;AACR,SAAO;AACT;AACA,OAAO,OAAO;AAGd,SAAS,WAAW,QAAQC,OAAM,MAAM,SAAS;AAE/C,QAAM,MAAM,QAAQ,CAAC;AACrB,MAAI,QAAQ,GAAG;AACb,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AAEA,EAAAA,MAAK,MAAM;AAGX,MAAI,MAAM,GAAG;AACX,IAAAA,MAAK,OAAO,MAAM;AAAA,EACpB;AAEA,MAAI,MAAM;AACR,IAAAA,MAAK,OAAO,IAAI;AAAA,EAClB;AAEA,EAAAA,MAAK,OAAO,OAAO;AAEnB,EAAAA,MAAK,OAAO,MAAM;AAElB,UAAQ,CAAC;AACX;AACA,IAAM,WAAW,IAAI,WAAW,YAAY;AAC5C,SAAS,KAAK,KAAK,MAAM,MAAM,QAAQ;AACrC,MAAI,SAAS,QAAQ;AAAE,WAAO;AAAA,EAAU;AACxC,MAAI,WAAW,QAAQ;AAAE,aAAS;AAAA,EAAI;AACtC,QAAM,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;AAElC,QAAM,MAAM,KAAK,MAAM,GAAG;AAG1B,QAAM,QAAQ,IAAI,KAAK,GAAG;AAE1B,QAAM,SAAS,IAAI,WAAW,MAAM,YAAY;AAChD,MAAI,SAAS,OAAO;AACpB,QAAM,MAAM,IAAI,WAAW,MAAM;AACjC,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,QAAI,WAAW,OAAO,QAAQ;AAC5B,iBAAW,QAAQ,OAAO,MAAM,OAAO;AACvC,eAAS;AAAA,IACX;AACA,QAAI,CAAC,IAAI,OAAO,QAAQ;AAAA,EAC1B;AACA,QAAM,MAAM;AACZ,SAAO,KAAK,CAAC;AACb,UAAQ,KAAK,CAAC;AACd,SAAO;AACT;AACA,OAAO,OAAO;AAOd,SAAS,OAAO,UAAU,MAAM,YAAY,OAAO;AACjD,QAAM,MAAM,IAAI,KAAK,QAAQ;AAC7B,QAAM,MAAM,IAAI;AAChB,QAAM,MAAM,IAAI,WAAW,CAAC;AAC5B,QAAM,IAAI,IAAI,WAAW,GAAG;AAC5B,QAAM,IAAI,IAAI,WAAW,GAAG;AAC5B,QAAM,KAAK,IAAI,WAAW,KAAK;AAC/B,WAAS,IAAI,GAAG,IAAI,MAAM,OAAO,KAAK;AACpC,UAAM,IAAI,IAAI;AACd,QAAI,CAAC,IAAK,MAAM,KAAM;AACtB,QAAI,CAAC,IAAK,MAAM,KAAM;AACtB,QAAI,CAAC,IAAK,MAAM,IAAK;AACrB,QAAI,CAAC,IAAK,MAAM,IAAK;AACrB,QAAI,MAAM;AACV,QAAI,OAAO,IAAI;AACf,QAAI,OAAO,GAAG;AACd,QAAI,OAAO,CAAC;AACZ,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,QAAE,CAAC,IAAI,EAAE,CAAC;AAAA,IACZ;AACA,aAAS,IAAI,GAAG,KAAK,YAAY,KAAK;AACpC,UAAI,MAAM;AACV,UAAI,OAAO,CAAC,EAAE,OAAO,CAAC;AACtB,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAE,CAAC,KAAK,EAAE,CAAC;AAAA,MACb;AAAA,IACF;AACA,aAAS,IAAI,GAAG,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,KAAK;AACnD,SAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;AAAA,IACvB;AAAA,EACF;AACA,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,MAAE,CAAC,IAAI,EAAE,CAAC,IAAI;AAAA,EAChB;AACA,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,QAAI,CAAC,IAAI;AAAA,EACX;AACA,MAAI,MAAM;AACV,SAAO;AACT;AACA,OAAO,SAAS;;;ACxYhB,IAAI;AACJ,IAAI;AAEJ,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,eAAe;AACnB,IAAI,eAAe;AACnB,IAAI,uBAAuB;AAE3B,IAAI,cAAc;AAClB,IAAI,mBAAmB,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG;AAC9C,IAAI,wBAAwB,IAAI,gBAAgB;AAChD,IAAM,mBAAmB;AACzB,IAAM,eAAe;AACrB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB,MAAO,KAAK;AACnC,IAAM,mBAAmB,IAAI,cAAc;AAC3C,IAAM,iBAAiB,IAAI,cAAc;AACzC,IAAI,qBAAqB;AAEzB,IAAM,kBAAkB,oBAAI,IAAI;AAChC,IAAM,KAAK;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AACR;AACA,IAAM,gBAAgB,CAAC;AACvB,IAAM,oBAAoB,CAAC;AAC3B,IAAM,aAAa,CAAC;AACpB,IAAM,QAAQ;AAAA,EACZ,MAAM,OAAO,cAAc,IAAI;AAAA,EAC/B,QAAQ,OAAO,cAAc,MAAM;AAAA;AAAA,EACnC,MAAM,OAAO,cAAc,IAAI;AAAA,EAC/B,QAAQ,OAAO,cAAc,MAAM;AACrC;AAEA,IAAM,aAAa;AAEnB,IAAM,uBAAuB,CAAC,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,SAAS,OAAO,OAAO,QAAQ,QAAQ,OAAO,IAAI;AAEhK,IAAM,gBAAgB;AAAA,EACpB,OAAO,EAAE,MAAM,kBAAkB,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,EAAE;AAAA,EAC9E,OAAO,EAAE,MAAM,mBAAmB,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,EAAE;AAAA,EAC/E,OAAO,EAAE,MAAM,kBAAkB,MAAM,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK;AAAA,EACjE,OAAO,EAAE,MAAM,mBAAmB,MAAM,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK;AAAA,EAClE,MAAM,EAAE,MAAM,wBAAwB,MAAM,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;AAAA,EAC9F,MAAM,EAAE,MAAM,yBAAyB,MAAM,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;AAAA,EAC/F,MAAM,EAAE,MAAM,sBAAsB,MAAM,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AAAA,EACtE,MAAM,EAAE,MAAM,uBAAuB,MAAM,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AAAA,EACvE,MAAM,EAAE,MAAM,QAAQ,MAAM,OAAU;AACxC;AAaA,IAAI,WAAW,cAAc;AAE7B,eAAe,QAAQ,KAAK;AAC1B,MAAI,MAAM;AACV,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,GAAG;AAC3C,MAAI;AACJ,MAAI,QAAQ,QAAQ,QAAQ;AAC1B,cAAU,MAAM,OAAO,OAAO,OAAO,WAAW,MAAM;AAAA,EACxD,OAAO;AACL,UAAM,aAAkB,KAAK,MAAM;AACnC,cAAU,WAAW;AAAA,EACvB;AACA,QAAM,OAAO,IAAI,SAAS,OAAO;AACjC,WAAS,IAAI,GAAG,IAAI,QAAQ,YAAY,KAAK,EAAG,QAAQ,WAAW,KAAK,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,GAAI,MAAM,EAAE;AAC7G,SAAO;AACT;AAEA,SAAS,yBAAyB;AAChC,MAAI,CAAC,GAAG,MAAO,QAAO,CAAC;AACvB,SAAO,MAAM,KAAU,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ,KAAK,YAAY;AAC3F;AAEA,SAAS,8BAA8B,QAAQ,iBAAiB,OAAO,QAAQ,iBAAiB,OAAO;AACrG,QAAM,QAAQ,CAAC,MAAM,MAAM;AACzB,SAAK,UAAU,OAAO,yBAAyB,MAAM,KAAK;AAAA,EAC5D,CAAC;AACH;AAEA,SAAS,0BAA0B;AACjC,gCAA8B,iBAAiB,OAAO,EAAE;AACxD,QAAM,QAAQ,uBAAuB;AACrC,QAAM,QAAQ,MAAM,UAAU,CAAC,SAAS,KAAK,QAAQ,YAAY;AACjE,qBAAmB,EAAE,OAAO,MAAM;AAClC,gCAA8B,OAAO,KAAK;AAC5C;AAEA,SAAS,wBAAwB;AAC/B,gCAA8B,iBAAiB,OAAO,EAAE;AACxD,qBAAmB,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG;AAC1C,iBAAe;AACf,gBAAc;AACd,iBAAe;AACjB;AAEA,SAAS,sBAAsB,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG;AAC1D,MAAI,CAAC,iBAAiB,MAAM,OAAQ,yBAAwB;AAC5D,QAAM,EAAE,MAAM,IAAI;AAClB,MAAI,CAAC,MAAM,OAAQ;AACnB,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,SAAS,MAAM,QAAQ;AAClE,QAAI,wCAAwC,OAAO,MAAM,MAAM;AAC/D,0BAAsB;AACtB;AAAA,EACF;AACA,mBAAiB,QAAQ;AACzB,iBAAe,MAAM,KAAK,EAAE;AAC5B,gBAAc,MAAM,KAAK,EAAE;AAC3B,iBAAe,MAAM,KAAK,EAAE;AAC5B,gCAA8B,OAAO,KAAK;AAC1C,MAAI,QAAQ,GAAG,QAAS,IAAG,QAAQ,MAAM;AAC3C;AAEA,SAAS,6BAA6B,SAAS,SAAS;AACtD,MAAI,CAAC,iBAAiB,MAAM,OAAQ,yBAAwB;AAC5D,MAAI,QAAQ,iBAAiB,MAAM,UAAU,CAAC,SAAS,SAAS,OAAO;AACvE,MAAI,QAAQ,GAAG;AACb,4BAAwB;AACxB,YAAQ,iBAAiB,MAAM,UAAU,CAAC,SAAS,SAAS,OAAO;AAAA,EACrE;AACA,MAAI,SAAS,EAAG,uBAAsB,OAAO,OAAO;AACtD;AAEA,SAAS,oBAAoB,MAAM;AACjC,SAAO,IAAI,IAAI,SAAS,UAAU,IAAI,CAAC,IAAI,OAAO,SAAS,MAAM,EAAE,SAAS;AAC9E;AAEA,OAAO,sBAAsB,OAAO,EAAE,OAAO,iBAAiB,OAAO,OAAO,iBAAiB,MAAM;AACnG,OAAO,sBAAsB,CAAC,OAAO,YAAY,sBAAsB,OAAO,OAAO;AACrF,OAAO,wBAAwB,MAAO,eAAe,oBAAoB,YAAY,IAAI;AAOzF,eAAe,gBAAgB,cAAc,QAAQ;AACnD,SAAO,KAAK,IAAI,cAAc,MAAM,cAAc,QAAQ,IAAI,gBAAgB,CAAC,OAAO,QAAS,OAAM,IAAI,QAAQ,CAAC,YAAY;AAAE,eAAW,SAAS,GAAG;AAAA,EAAG,CAAC;AAC3J,SAAO,eAAe;AACxB;AAEA,SAAS,sBAAsB;AAC7B,MAAI,KAAK,YAAY,YAAY,MAAM,UAAU;AAC/C,qBAAiB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA+BxB;AAAA,EACH,OAAO;AACL,qBAAiB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAexB;AAAA,EACH;AACA,QAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,KAAK;AAC5C,iBAAe,QAAQ;AAAA;AAAA;AAAA;AAAA,gBAIT,IAAI;AAAA,eACL,KAAK,sBAAsB,GAAG,IAAI,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqB5D;AACH;AAIA,IAAM,UAAN,cAAsB,IAAI;AAAA,EACxB,WAAW;AAAA,EACX,YAAY,KAAW;AACrB,UAAM,GAAG;AACT,SAAK,WAAW;AAAA,EAClB;AAAA,EAES,IAAI,OAAkB;AAC7B,MAAE,KAAK;AACP,UAAM,IAAI,KAAK;AACf,WAAO;AAAA,EACT;AAAA,EAES,QAAc;AACrB,SAAK,WAAW;AAChB,UAAM,MAAM;AAAA,EACd;AACF;AAEA,IAAM,gBAAgB,IAAI,QAAQ;AAElC,IAAM,oBAAN,MAAwB;AAAA,EACtB,aAAa,SAAS,cAAc,KAAK;AAAA,EACzC,YAAY,SAAS,cAAc,KAAK;AAAA,EACxC,WAAW,SAAS,cAAc,KAAK;AAAA,EACvC,QAAQ,SAAS,cAAc,MAAM;AAAA,EACrC,WAAW;AAAA,EACX;AAAA,EACA,OAAO;AAAA,EACP,eAAe,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,EAAE;AAAA,EACnI,QAAQ,EAAE,GAAG,KAAK,aAAa;AAAA;AAAA,EAE/B;AAAA,EAEA,YAAY,cAAc;AACxB,SAAK,gBAAgB;AACrB,SAAK,WAAW,MAAM,UAAU;AAChC,SAAK,UAAU,MAAM,UAAU;AAC/B,SAAK,UAAU,MAAM,kBAAkB;AACvC,SAAK,SAAS,MAAM,UAAU;AAC9B,SAAK,MAAM,MAAM,UAAU;AAC3B,SAAK,SAAS,OAAO,KAAK,KAAK;AAC/B,SAAK,WAAW,OAAO,KAAK,WAAW,KAAK,QAAQ;AAAA,EACtD;AAAA,EAEA,MAAM,OAAO;AACX,QAAI,SAAS,EAAG;AAChB,SAAK,KAAK;AACV,SAAK,OAAO;AACZ,QAAI,KAAK,cAAc,QAAQ,KAAK,MAAM;AACxC,WAAK,KAAK;AACV;AAAA,IACF;AACA,SAAK,YAAY,YAAY,MAAM,KAAK,OAAO,KAAK,cAAc,MAAM,KAAK,IAAI,GAAG,GAAG;AAAA,EACzF;AAAA,EAEA,SAAS,SAAS;AAChB,QAAI,QAAQ,cAAe,SAAQ,YAAY;AAC/C,YAAQ,YAAY,KAAK,UAAU;AAAA,EACrC;AAAA,EAEA,OAAO;AACL,SAAK,WAAW,MAAM,UAAU;AAChC,SAAK,WAAW;AAChB,SAAK,UAAU,MAAM,QAAQ;AAC7B,SAAK,MAAM,cAAc;AAAA,EAC3B;AAAA,EAEA,OAAO,QAAQ,KAAK;AAClB,SAAK,UAAU,MAAM,QAAQ,GAAG,KAAK,MAAO,SAAS,MAAO,GAAG,CAAC;AAChE,SAAK,MAAM,cAAc,GAAG,MAAM,IAAI,GAAG;AACzC,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,WAAW,MAAM,UAAU;AAChC,WAAK,WAAW;AAAA,IAClB;AACA,QAAI,UAAU,IAAK,MAAK,KAAK;AAAA,EAC/B;AAAA,EAEA,OAAO;AACL,kBAAc,KAAK,SAAS;AAE5B,QAAI,KAAK,MAAM,OAAO;AACpB,YAAM,4BAA4B,KAAK,KAAK;AAC5C,WAAK,QAAQ,EAAE,GAAG,KAAK,aAAa;AAAA,IACtC;AACA,eAAW,MAAM,KAAK,KAAK,GAAG,GAAG;AAAA,EACnC;AACF;AAEA,IAAM,KAAK,IAAI,kBAAkB,aAAa;AAG9C,IAAM,sBAAN,MAA0B;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,IAAI;AACd,SAAK,MAAM;AACX,SAAK,WAAW;AAChB,SAAK,SAAS,CAAC;AAAA,EACjB;AAAA,EAEA,OAAO,YAAY,YAAY,QAAQ;AACrC,QAAI,OAAO,WAAW,YAAa,kBAAkB,gBAAgB,OAAO,SAAS,cAAe;AAClG,UAAI,YAAY,OAAO,WAAW,YAAY,WAAW,OAAQ,OAAe,WAAW,SAAS,MAAM;AAAA,IAC5G,OAAO;AACL,YAAM,YAAY,OAAO,OAAO;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,QAAQ;AACd,QAAI,EAAE,OAAO,kBAAkB,gBAAgB,OAAO,OAAO,aAAa,YAAY;AACpF,YAAM,IAAI,MAAM,0EAA0E;AAAA,IAC5F;AACA,QAAI,OAAO,OAAO,SAAS;AACzB,YAAM,GAAG,KAAK,GAAG,8CAA8C,OAAO,OAAO,MAAM,GAAG;AACtF;AAAA,IACF;AACA,SAAK,OAAO,KAAK,MAAM;AACvB,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,MAAM,cAAc;AAClB,QAAI,KAAK,YAAY,CAAC,KAAK,OAAO,OAAQ;AAC1C,QAAI;AACF,YAAM,EAAE,QAAQ,SAAS,IAAI,KAAK,OAAO,MAAM;AAC/C,UAAI,OAAO,SAAS;AAClB;AAAA,MACF;AACA,WAAK,WAAW;AAChB,UAAI,SAAS,YAAY,KAAK,YAAY,MAAM,iBAAiB;AAC/D,cAAM,SAAS;AAAA,MACjB,OAAO;AACL,iBAAS;AAAA,MACX;AAAA,IACF,SAAS,KAAK;AACZ,YAAM,GAAG,KAAK,GAAG,WAAW,GAAG;AAAA,IACjC,UAAE;AACA,WAAK,WAAW;AAChB,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AACF;AAIA,IAAM,gBAAN,MAAM,uBAAsB,YAAY;AAAA,EACtC,OAAO,UAAU,oBAAI,IAAI;AAAA;AAAA,EAEzB,OAAO,UAAU;AAAA,EAEjB,YAAY,QAAQ;AAClB,UAAM;AAEN,QAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,WAAK,OAAO,UAAU,OAAO,QAAQ,EAAE;AACvC,WAAK,QAAQ,UAAU,OAAO,SAAS,OAAO,QAAQ,EAAE;AAAA,IAC1D,OAAO;AACL,WAAK,OAAO,UAAU,MAAM;AAC5B,WAAK,QAAQ,KAAK;AAAA,IACpB;AACA,SAAK,MAAM,YAAY;AACvB,SAAK,SAAS,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAChD,SAAK,OAAO,qBAAqB,CAAC,gBAAgB;AAElD,SAAK,MAAM,SAAS,cAAc,KAAK;AAAA,EACzC;AAAA,EAEA,oBAAoB;AAClB,QAAI,eAAc,QAAQ,IAAI,IAAI,EAAG;AACrC,SAAK,IAAI,YAAY;AACrB,SAAK,IAAI,YAAY,mDAAmD,KAAK,KAAK;AAClF,SAAK,IAAI,QAAQ,KAAK;AACtB,SAAK,iBAAiB,SAAS,KAAK,cAAc;AAClD,SAAK,iBAAiB,SAAS,YAAY;AAC3C,SAAK,OAAO,YAAY,KAAK,GAAG;AAChC,mBAAc,QAAQ,IAAI,IAAI;AAC9B,QAAI,KAAK,SAAS,sBAAsB;AACtC,WAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAM,uBAAuB;AAC3B,UAAM,QAAQ,QAAQ;AACtB,QAAI,KAAK,YAAa;AACtB,mBAAc,QAAQ,OAAO,IAAI;AACjC,QAAI,eAAc,YAAY,MAAM;AAClC,qBAAc,UAAU;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,YAAY;AACjB,WAAO,eAAc;AAAA,EACvB;AAAA,EAEA,iBAAiB;AACf,SAAK,IAAI,UAAU,IAAI,yBAAyB;AAChD,mBAAc,UAAU;AACxB,eAAW,UAAU,eAAc,SAAgB;AACjD,UAAI,WAAW,KAAM,QAAO,IAAI,UAAU,OAAO,yBAAyB;AAAA,IAC5E;AAAA,EACF;AACF;AAMA,eAAe,oBAAoB,QAAQ;AACzC,MAAI,QAAQ,QAAS,OAAM,IAAI,aAAa,WAAW,YAAY;AACnE,MAAI,cAAc,iBAAkB;AACpC,QAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AACrC,UAAM,YAAY,MAAM;AACtB,cAAQ,oBAAoB,SAAS,OAAO;AAC5C,cAAQ,IAAI;AAAA,IACd;AACA,UAAM,UAAU,MAAM;AACpB,YAAM,MAAM,WAAW,UAAU,CAAC,SAAS,KAAK,YAAY,SAAS;AACrE,UAAI,QAAQ,GAAI,YAAW,OAAO,KAAK,CAAC;AACxC,aAAO,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,IAClD;AACA,eAAW,KAAK,EAAE,SAAS,UAAU,CAAC;AACtC,YAAQ,iBAAiB,SAAS,OAAO;AAAA,EAC3C,CAAC;AACH;AAEA,eAAe,gBAAgB,IAAI,QAAQ;AACzC,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI;AACF,UAAM,oBAAoB,MAAM;AAAA,EAClC,SAAS,KAAK;AACZ,QAAK,IAAqB,SAAS,aAAc,QAAO;AACxD,UAAM;AAAA,EACR;AACA,KAAG,MAAM,SAAS,GAAG,MAAM,SAAS,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AAC1E,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI;AACF;AACA,UAAM,KAAK,GAAG,SAAS;AACvB,UAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,uBAAuB,UAAU,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,MAAM,CAAC;AACxH,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,eAAe,IAAI,UAAU,EAAE;AACrC,aAAO;AAAA,IACT;AACA,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,OAAO,KAAK,IAAI,EAAE,WAAW,GAAG;AACjE,UAAI,KAAK,MAAO,OAAM,eAAe,KAAK,KAAK,EAAE;AACjD,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,UAAE;AACA;AACA,OAAG,MAAM,SAAS,GAAG,MAAM,SAAS,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AAC1E,QAAI,WAAW,SAAS,KAAK,cAAc,kBAAkB;AAC3D,YAAM,cAAc,WAAW,MAAM;AACrC,kBAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AACF;AAEA,IAAM,cAAN,cAA0B,YAAY;AAAA;AAAA,EAEpC;AAAA,EAEA,YAAY,QAAQ,MAAM,QAAQ;AAChC,UAAM;AACN,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,UAAU;AACf,SAAK,MAAM,GAAG,KAAK,MAAM,IAAI,KAAK,IAAI,GAAG,QAAQ,QAAQ,GAAG;AAC5D,SAAK,aAAa,KAAK,IAAI,QAAQ,YAAY,EAAE;AACjD,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,SAAS,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAChD,SAAK,OAAO,qBAAqB,CAAC,cAAc;AAChD,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,oBAAoB;AACxB,QAAI,CAAC,KAAK,SAAU;AACpB,SAAK,WAAW;AAChB,UAAM,KAAK,YAAY,IAAI;AAC3B,OAAG,MAAM,SAAS,GAAG,MAAM,SAAS,KAAK;AAEzC,UAAM,MAAM,KAAK,KAAK,MAAM,WAAW;AACvC,QAAI,OAAO,IAAI,CAAC,GAAG;AACjB,YAAM,UAAU,IAAI,CAAC;AACrB,YAAM,SAAS,gBAAgB,IAAI,OAAO;AAC1C,UAAI,WAAW,MAAO,MAAK,MAAM,UAAU;AAAA,IAC7C;AAEA,SAAK,OAAO,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAC/D,MAAM,CAAC,QAAQ;AACd,YAAM,YAAY,GAAG;AACrB,aAAO;AAAA,IACT,CAAC;AACH,OAAG,MAAM,QAAQ,GAAG,MAAM,QAAQ,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AACxE,QAAI;AACJ,QAAI,KAAK,eAAe;AACtB,YAAM,KAAK,YAAY,IAAI;AAG3B,mBAAa,MAAM,OAAO,KAAK,IAAI,EAAE,MAAM,MAAM,MAAS;AAC1D,SAAG,MAAM,MAAM,GAAG,MAAM,MAAM,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AAAA,IACtE;AACA,UAAM,MAAM,SAAS,cAAc,KAAK;AACxC,QAAI,YAAY;AAChB,QAAI,UAAU;AACd,QAAI,SAAS,YAAY;AACvB,UAAI,SAAS;AAAA,cAAiB,KAAK,KAAK,MAAM,KAAK,MAAM;AACzD,WAAK,QAAQ,IAAI;AACjB,UAAI,CAAC,cAAc,KAAK,eAAe;AACrC,YAAK,KAAK,UAAU,KAAO,KAAK,WAAW,GAAI;AAC7C,eAAK,QAAQ,IAAI;AACjB,eAAK,SAAS,IAAI;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AACA,QAAI,KAAK;AACT,QAAI,YAAY,KAAK;AACnB,UAAI,MAAM,WAAW;AACrB,WAAK,OAAO,WAAW;AACvB,WAAK,QAAQ,WAAW;AACxB,WAAK,SAAS,WAAW;AACzB,WAAK,OAAO,WAAW;AACvB,WAAK,QAAQ,IAAI,KAAK,WAAW,KAAK;AACtC,SAAG,MAAM,UAAU,GAAG,MAAM,UAAU,KAAK;AAAA,IAC7C,OAAO;AACL,UAAI;AACF,cAAM,OAAO,MAAM,gBAAgB,KAAK,KAAK,KAAK,OAAO;AACzD,YAAI,CAAC,MAAM;AACT,eAAK;AACL,aAAG,MAAM,UAAU,GAAG,MAAM,UAAU,KAAK;AAAA,QAC7C,OAAO;AACL,cAAI,MAAM,KAAK;AACf,eAAK,OAAO,KAAK;AACjB,eAAK,QAAQ,KAAK;AAClB,eAAK,SAAS,KAAK;AACnB,eAAK,OAAO,KAAK;AACjB,eAAK,QAAQ,IAAI,KAAK,KAAK,KAAK;AAChC,aAAG,MAAM,WAAW,GAAG,MAAM,WAAW,KAAK;AAC7C,cAAI,KAAK,iBAAiB,KAAK,MAAM;AACnC,mBAAO;AAAA,cACL,MAAM,KAAK;AAAA,cACX,QAAQ,KAAK;AAAA,cACb,MAAM,KAAK;AAAA,cACX,MAAM,KAAK;AAAA,cACX,OAAO,KAAK;AAAA,cACZ,OAAO,KAAK;AAAA,cACZ,QAAQ,KAAK;AAAA,cACb,KAAK,KAAK;AAAA,cACV,MAAM,KAAK;AAAA,cACX,KAAK,IAAI;AAAA;AAAA;AAAA,YAGX,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,SAAS,KAAK;AACZ,YAAI,MAAM,QAAQ,KAAK,GAAG;AAC1B,WAAG,MAAM,SAAS,GAAG,MAAM,SAAS,KAAK;AAAA,MAC3C;AAAA,IACF;AACA,OAAG,MAAM,YAAY,GAAG,MAAM,YAAY,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AAChF,QAAI,KAAK,QAAQ,QAAS;AAC1B,kBAAc,IAAI,KAAK,IAAI;AAC3B,QAAI,CAAC,GAAI;AAET,QAAI,UAAU,MAAM;AAClB,mCAA6B,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,IACnD;AACA,QAAI,iBAAiB,MAAM;AACzB,SAAG,QAAQ,UAAU;AACrB,WAAK,OAAO,YAAY,GAAG,OAAO;AAClC,qBAAe,KAAK;AACpB,oBAAc,KAAK;AACnB,qBAAe,KAAK;AAAA,IACtB;AACA,QAAI,iBAAiB,MAAM;AACzB,SAAG,QAAQ,UAAU;AAAA,IACvB;AACA,QAAI,QAAQ,WAAW,KAAK,MAAM;AAAA,QAAW,KAAK,IAAI;AAAA,QAAW,KAAK,KAAK,eAAe,CAAC;AAAA,YAAqB,KAAK,MAAM,eAAe,CAAC;AAC3I,SAAK,QAAQ,IAAI;AACjB,UAAM,6BAA6B,KAAK,MAAM,YAAY,EAAE,SAAS,GAAG,OAAO,MAAM,YAAY,CAAC;AAClG,QAAI,KAAK,MAAM,YAAY,OAAQ,MAAK,MAAM,UAAU,6BAA6B,KAAK;AAC1F,SAAK,OAAO,YAAY,GAAG;AAC3B,OAAG,MAAM,WAAW,GAAG,MAAM,WAAW,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE;AAAA,EAChF;AACF;AAqBA,eAAe,gBAAgB,WAAW;AACxC,YAAU,UAAU,OAAO,0BAA0B;AACrD,QAAM,YAAY,UAAU,UAAU,SAAS,0BAA0B;AAGzE,kBAAgB,IAAI,UAAU,OAAO,CAAC,SAAS;AAG/C,QAAM,QAAQ,UAAU,cAAc,0BAA0B;AAChE,QAAM,MAAM,YAAY,YAAY,iBAAiB;AAErD,QAAM,MAAM,MAAM,KAAU,GAAG,MAAM,QAAQ;AAC7C,aAAW,KAAK,KAAK;AACnB,QAAI,CAAC,EAAE,KAAM;AAGb,UAAM,UAAU,EAAE,KAAK,MAAM,WAAW;AACxC,UAAM,cAAc,UAAU,QAAQ,CAAC,IAAI;AAE3C,QAAI,UAAU,MAAM,SAAS,KAAK,gBAAgB,UAAU,OAAO;AACjE,QAAE,MAAM,UAAU,YAAY,SAAS;AAAA,IACzC;AAAA,EACF;AAGF;AAEA,eAAe,gBAAgB;AAC7B,WAAS,iBAAiB,oBAAoB,EAAE,QAAQ,CAAC,SAAS;AAAE,OAAG,MAAM,YAAY,IAAI;AAAA,EAAG,CAAC;AACjG,QAAM,MAAM,MAAM,KAAU,GAAG,MAAM,QAAQ;AAC7C,MAAI;AAGJ,QAAM,eAAe,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,MAAM,OAAO,CAAC;AAErE,MAAI,mBAAmB,CAAC;AAGxB,aAAW,KAAK,KAAK;AACnB,QAAI,MAAM,EAAE,MAAM,MAAM,WAAW;AACnC,QAAI,CAAC,IAAK,OAAM;AAAA,QACX,OAAM,IAAI,CAAC;AAChB,QAAI,QAAQ,SAAS;AACnB,gBAAU;AACV,UAAI,IAAI,SAAS,GAAG;AAElB,YAAI,YAAY;AAChB,mBAAW,QAAQ,KAAK;AACtB,cAAI,CAAC,KAAK,KAAM;AAChB,gBAAM,UAAU,KAAK,KAAK,MAAM,WAAW;AAC3C,gBAAM,cAAc,UAAU,QAAQ,CAAC,IAAI;AAC3C,cAAI,gBAAgB,IAAK;AAAA,QAC3B;AAEA,cAAM,MAAM,SAAS,cAAc,KAAK;AACxC,YAAI,YAAY;AAChB,YAAI,QAAQ;AAGZ,cAAM,SAAS,gBAAgB,IAAI,GAAG,IAAI,gBAAgB,IAAI,GAAG,IAAI;AACrE,wBAAgB,IAAI,KAAK,MAAM;AAC/B,YAAI,iBAAkB,oBAAmB;AAEzC,YAAI,CAAC,QAAQ;AACX,cAAI,UAAU,IAAI,0BAA0B;AAAA,QAC9C;AAGA,cAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,cAAM,YAAY;AAClB,cAAM,cAAc;AACpB,cAAM,MAAM,YAAY,SAAS,kBAAkB;AAGnD,cAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,gBAAQ,YAAY;AACpB,gBAAQ,cAAc;AACtB,gBAAQ,QAAQ;AAGhB,cAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,cAAM,YAAY;AAClB,cAAM,cAAc,GAAG,SAAS;AAChC,YAAI,QAAQ,aAAa,OAAO,SAAS;AAEzC,YAAI,YAAY,KAAK;AACrB,YAAI,YAAY,OAAO;AACvB,YAAI,YAAY,KAAK;AAErB,YAAI,UAAU,MAAM,gBAAgB,GAAG;AACvC,WAAG,MAAM,aAAa,KAAK,CAAC;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAGA,aAAW,KAAK,KAAK;AACnB,QAAI,CAAC,EAAE,KAAM;AAEb,UAAM,MAAM,EAAE,KAAK,MAAM,WAAW;AACpC,QAAI,OAAO,IAAI,CAAC,GAAG;AACjB,YAAM,UAAU,IAAI,CAAC;AACrB,YAAM,SAAS,gBAAgB,IAAI,OAAO;AAC1C,UAAI,WAAW,OAAO;AACpB,UAAE,MAAM,UAAU;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;AAIA,IAAM,mBAAmB,CAAC,YAAY,CAAC,YAAY;AACnD,OAAO,mBAAmB;AAO1B,SAAS,oBAAoB,UAAU;AACrC,MAAI,CAAC,GAAG,OAAQ;AAChB,WAAS,QAAQ,CAAC,QAAQ,SAAS,IAAI,CAAC;AACxC,QAAM,WAAW,SAAS,uBAAuB;AACjD,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,MAAM,SAAS,cAAc,KAAK;AACxC,QAAI,MAAM,QAAQ,SAAS,CAAC,CAAC,GAAG;AAC9B,YAAM,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AACzB,YAAM,OAAO,SAAS,cAAc,KAAK;AACzC,YAAM,MAAM,MAAM,CAAC,KAAK,GAAG,CAAC;AAC5B,WAAK,YAAY,GAAG,GAAG,IAAI,CAAC;AAC5B,UAAI,OAAO,IAAI;AAAA,IACjB,OAAO;AACL,YAAM,OAAO,SAAS,cAAc,KAAK;AACzC,WAAK,YAAY,SAAS,CAAC;AAC3B,UAAI,OAAO,IAAI;AAAA,IACjB;AACA,aAAS,OAAO,GAAG;AAAA,EACrB;AACA,MAAI,GAAG,OAAO,cAAc,EAAG,IAAG,OAAO,YAAY;AACrD,KAAG,OAAO,OAAO,QAAQ;AAC3B;AAEA,eAAe,yBAAyB;AACtC,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,cAAc;AAAA;AAAA;AAAA;AAAA,uBAIC,KAAK,YAAY,YAAY,MAAM,WAAW,eAAe,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB5F,WAAS,KAAK,OAAO,KAAK;AAC5B;AAEA,eAAe,UAAU,QAAQ,UAAU,KAAM;AAC/C,QAAM,aAAa;AACnB,QAAM,MAAM,UAAU;AACtB,QAAM,WAAW,MAAO,OAAO,eAAe,UAAU;AACxD,MAAI,OAAO,eAAe,UAAU,WAAY,QAAO,SAAS;AAEhE,MAAI,OAAO;AACX,SAAO,OAAO,eAAe,UAAU,cAAc,OAAO,KAAK;AAC/D,UAAM,IAAI,QAAQ,CAAC,YAAY;AAAE,iBAAW,SAAS,UAAU;AAAA,IAAG,CAAC;AACnE;AAAA,EACF;AACA,SAAO,SAAS;AAClB;AAEA,eAAe,gBAAgB;AAC7B,MAAI,GAAG,OAAO,KAAM,cAAa,GAAG,OAAO,IAAI;AAC/C,KAAG,OAAO,OAAO,WAAW,YAAY;AACtC,UAAM,KAAK,YAAY,IAAI;AAC3B,UAAM,MAAM,GAAG,OAAO,MAAM,YAAY;AACxC,UAAM,WAAW,MAAM,KAAU,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI;AAC9E,UAAM,gBAAgB,MAAM,KAAU,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,UAAU,SAAS,mBAAmB,CAAC;AAGtH,QAAI,QAAQ,IAAI;AACd,oBAAc,QAAQ,CAAC,QAAQ;AAC7B,YAAI,MAAM,UAAU;AACpB,cAAM,SAAS,gBAAgB,IAAI,IAAI,KAAK,IAAI,gBAAgB,IAAI,IAAI,KAAK,IAAI;AAEjF,cAAM,YAAY,IAAI,cAAc,0BAA0B;AAC9D,YAAI,aAAa,IAAI,QAAQ,YAAY;AACvC,oBAAU,cAAc,GAAG,IAAI,QAAQ,UAAU;AAAA,QACnD;AAEA,cAAM,QAAQ,IAAI,cAAc,0BAA0B;AAC1D,YAAI,UAAU,OAAO,4BAA4B,CAAC,MAAM;AACxD,YAAI,MAAO,OAAM,MAAM,YAAY,SAAS,kBAAkB;AAAA,MAChE,CAAC;AAED,eAAS,QAAQ,CAAC,MAAM;AACtB,cAAM,MAAM,EAAE,KAAK,MAAM,WAAW;AACpC,cAAM,UAAW,OAAO,IAAI,CAAC,IAAK,IAAI,CAAC,IAAI;AAC3C,cAAM,SAAS,gBAAgB,IAAI,OAAO;AAC1C,UAAE,MAAM,UAAW,CAAC,WAAW,SAAU,UAAU;AAAA,MACrD,CAAC;AAED,uBAAiB,UAAU,WAAW,CAAC,UAAU,SAAS,OAAO,eAAe,CAAC,CAAC;AAClF;AAAA,IACF;AAGA,QAAI,aAAa;AACjB,UAAM,mBAAmB,oBAAI,IAAI;AACjC,UAAM,cAAc,oBAAI,QAAQ;AAChC,UAAM,IAAI;AAEV,eAAW,KAAK,UAAU;AACxB,UAAI,UAAU;AACd,UAAI,EAAE,KAAK,GAAG,GAAG;AACf,cAAM,QAAQ,IAAI,MAAM,CAAC;AACzB,cAAM,MAAM,MAAM,CAAC,EAAE,KAAK;AAC1B,cAAM,KAAK,MAAM,CAAC,EAAE,KAAK;AACzB,YAAI,MAAM,MAAM,CAAC,EAAE,KAAK;AACxB,YAAI,QAAQ,QAAS,OAAM,IAAI,KAAK,GAAG;AACvC,YAAM,OAAO,OAAS,EAAE,GAAG,MAAM,OAAW,OAAO,OAAS,EAAE,GAAG,IAAI,OAAW,OAAO,OAAS,EAAE,GAAG,IAAI,KAAO;AAC9G,oBAAU;AAAA,QACZ;AAAA,MACF,WAAW,EAAE,OAAO,YAAY,EAAE,SAAS,GAAG,KAAK,EAAE,MAAM,YAAY,EAAE,SAAS,GAAG,GAAG;AACtF,kBAAU;AAAA,MACZ;AAEA,UAAI,SAAS;AACX,oBAAY,IAAI,CAAC;AACjB;AACA,cAAM,MAAM,EAAE,KAAK,MAAM,WAAW;AACpC,cAAM,UAAW,OAAO,IAAI,CAAC,IAAK,IAAI,CAAC,IAAI;AAC3C,yBAAiB,IAAI,UAAU,iBAAiB,IAAI,OAAO,KAAK,KAAK,CAAC;AAAA,MACxE;AAAA,IACF;AAGA,eAAW,OAAO,eAAe;AAC/B,YAAM,UAAU,IAAI;AACpB,YAAM,aAAa,iBAAiB,IAAI,OAAO,KAAK;AAEpD,UAAI,aAAa,GAAG;AAClB,YAAI,MAAM,UAAU;AACpB,YAAI,UAAU,OAAO,0BAA0B;AAE/C,cAAM,QAAQ,IAAI,cAAc,0BAA0B;AAC1D,YAAI,MAAO,OAAM,MAAM,YAAY;AAAA,MAGrC,OAAO;AACL,YAAI,MAAM,UAAU;AAAA,MACtB;AAAA,IACF;AAGA,eAAW,KAAK,UAAU;AACxB,QAAE,MAAM,UAAU,YAAY,IAAI,CAAC,IAAI,UAAU;AAAA,IACnD;AAEA,UAAM,KAAK,YAAY,IAAI;AAC3B,qBAAiB,UAAU,CAAC,UAAU,GAAG,WAAW,eAAe,CAAC,MAAM,SAAS,OAAO,eAAe,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,KAAK,MAAM,KAAK,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;AACpK,UAAM,iBAAiB,GAAG,IAAI,KAAK,EAAE;AACrC,4BAAwB;AAAA,EAC1B,GAAG,GAAG;AACR;AAYA,eAAsB,YAAY,KAAK;AAGrC,MAAI,YAAY,WAAW,GAAG,EAAG,eAAc,YAAY,SAAS,GAAG,IAAI,GAAG,GAAG,MAAM,GAAG,GAAG;AAAA,MACxF,eAAc,GAAG,GAAG;AAEzB,MAAI,CAAC,OAAO,OAAO,eAAe,WAAW,GAAG;AAC9C,UAAM,aAAa,WAAW,sCAAsC;AACpE;AAAA,EACF;AACA,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,MAAM,MAAM,KAAU,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI;AACzE,MAAI,IAAI,WAAW,EAAG;AACtB,QAAM,WAAW,SAAS,uBAAuB;AAGjD,QAAM,aAAa,CAAC,SAAS;AAC3B,UAAM,QAAQ,KAAK,KAAK,MAAM,WAAW;AACzC,WAAO,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC5B;AAGA,QAAM,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC;AACxD,QAAM,iBAAiB,IAAI,OAAO,CAAC,SAAS,WAAW,IAAI,CAAC;AAG5D,QAAM,eAAe,oBAAI,IAAI;AAC7B,aAAW,QAAQ,gBAAgB;AACjC,UAAM,MAAM,WAAW,IAAI;AAC3B,QAAI,CAAC,aAAa,IAAI,GAAG,EAAG,cAAa,IAAI,KAAK,CAAC,CAAC;AACpD,iBAAa,IAAI,GAAG,EAAE,KAAK,IAAI;AAAA,EACjC;AAEA,aAAW,cAAc,WAAW;AAGpC,YAAU,KAAK,SAAS,IAAI;AAC5B,YAAU,QAAQ,CAAC,SAAS,SAAS,YAAY,IAAI,CAAC;AAItD,QAAM,cAAc,MAAM,KAAa,aAAa,KAAK,CAAC;AAC1D,QAAM,oBAAoB,YAAY,SAAS,GAAG,IAAI,YAAY,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAEpJ,aAAW,cAAc,mBAAmB;AAC1C,UAAM,QAAQ,aAAa,IAAI,UAAU;AACzC,UAAM,KAAK,SAAS,IAAI;AACxB,UAAM,QAAQ,CAAC,SAAS,SAAS,YAAY,IAAI,CAAC;AAAA,EACpD;AAEA,MAAI,SAAS,SAAS,WAAW,EAAG;AACpC,KAAG,MAAM,YAAY;AACrB,KAAG,MAAM,YAAY,QAAQ;AAC7B,gBAAc;AAGd,QAAM,MAAM,MAAM,KAAU,GAAG,MAAM,QAAQ;AAC7C,aAAW,KAAK,KAAK;AACnB,QAAI,CAAC,EAAE,KAAM;AAEb,UAAM,MAAM,EAAE,KAAK,MAAM,WAAW;AACpC,QAAI,OAAO,IAAI,CAAC,GAAG;AACjB,YAAM,UAAU,IAAI,CAAC;AACrB,YAAM,SAAS,gBAAgB,IAAI,OAAO;AAC1C,UAAI,WAAW,OAAO;AACpB,UAAE,MAAM,UAAU;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,qBAAqB,SAAS,IAAI,QAAQ,IAAI,MAAM,SAAS,KAAK,MAAM,KAAK,EAAE,CAAC,EAAE;AACtF,mBAAiB,CAAC,UAAU,IAAI,OAAO,eAAe,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,MAAM,KAAK,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;AAC/G,QAAM,eAAe,SAAS,IAAI,IAAI,KAAK,EAAE;AAC7C,0BAAwB;AAC1B;AACA,OAAO,cAAc;AAcrB,SAAS,gBAAgB,OAAO,MAAM,OAAO;AAE3C,QAAMC,UAAS,GAAG,QAAQ;AAC1B,QAAM,kBAAkB,SAAS,cAAc,KAAK;AACpD,QAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,QAAM,OAAO,SAAS,cAAc,MAAM;AAE1C,EAAAA,QAAO,MAAM,WAAW;AACxB,kBAAgB,MAAM,UAAU;AAChC,SAAO,MAAM,UAAU;AACvB,UAAQ,MAAM,UAAU;AACxB,UAAQ,MAAM,UAAU;AACxB,UAAQ,YAAY;AACpB,UAAQ,YAAY,MAAM,yBAAyB,SAAS,KAAK;AACjE,OAAK,UAAU,IAAI,aAAa;AAEhC,SAAO,OAAO,SAAS,OAAO;AAC9B,kBAAgB,OAAO,QAAQ,IAAI;AACnC,EAAAA,QAAO,OAAO,eAAe;AAC7B,SAAO,MAAM;AAAE,oBAAgB,OAAO;AAAA,EAAG;AAC3C;AAEA,IAAM,mBAAmB,IAAI,oBAAoB,qBAAqB;AAStE,eAAe,kBAAkB,QAAQ,UAAU,YAAY,QAAQ,OAAO;AAC5E,MAAI,CAAC,KAAK,iBAAiB,CAAC,MAAO;AACnC,MAAI,CAAC,UAAU,CAAC,SAAU;AAC1B,MAAI,KAAK,IAAI,IAAI,cAAc,MAAM,IAAI,eAAgB;AACzD,gBAAc,MAAM,IAAI,KAAK,IAAI;AACjC,MAAI;AACF,QAAI,OAAO,WAAW,YAAY,OAAO,aAAa,UAAU;AAC9D,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AACA,UAAM,qBAAqB,EAAE,QAAQ,SAAS,CAAC;AAC/C,UAAM,gBAAgB,UAAU,WAAW,MAAM;AAAA,EACnD,SAAS,KAAK;AACZ,UAAM,qBAAqB,EAAE,QAAQ,OAAO,IAAI,CAAC;AACjD;AAAA,EACF;AAEA,mBAAiB,QAAQ;AAAA,IACvB,QAAQ,WAAW;AAAA,IACnB,UAAU,YAAY;AACpB,UAAI,KAAK,IAAI,IAAI,kBAAkB,MAAM,IAAI,eAAgB;AAC7D,wBAAkB,MAAM,IAAI,KAAK,IAAI;AACrC,YAAM,KAAK,YAAY,IAAI;AAC3B,YAAM,oBAAoB,QAAQ,oBAAI,IAAI,IAAI,IAAI,IAAI,cAAc,OAAO,CAAC;AAC5E,YAAM,mBAAmB,OAAO,QAAQ,QAAQ,GAAG,EAAE,QAAQ,OAAO,EAAE;AACtE,YAAM,kBAAkB,YAAY,MAAM,kBAAkB,GAAG,gBAAgB,UAAU,OAAO,IAAI;AACpG,YAAM,oBAAoB,MAAM,SAAS,eAAe,EACrD,MAAM,CAAC,MAAM;AACZ,cAAM,oBAAoB,EAAE,QAAQ,OAAO,EAAE,CAAC;AAC9C,eAAO;AAAA,MACT,CAAC;AACH,YAAM,eAAe,oBAAoB,kBAAkB;AAC3D,UAAI,CAAC,UAAU,eAAe,mBAAmB,CAAC,OAAO,SAAS,YAAY,GAAI;AAClF,UAAI,sBAAsB,EAAE,OAAO,CAAC;AAEpC,UAAI,WAAW,OAAO,SAAS;AAC7B,cAAM,oBAAoB,EAAE,QAAQ,QAAQ,WAAW,OAAO,OAAO,CAAC;AACtE;AAAA,MACF;AACA,YAAM,cAAc,gBAAgB,YAAY;AAChD,YAAM,iBAAiB,mBAAmB,iBAAiB,WAAW,MAAM,EACzE,KAAK,CAAC,aAAa;AAClB,cAAM,KAAK,YAAY,IAAI;AAC3B,YAAI,sBAAsB,EAAE,QAAQ,MAAM,kBAAkB,MAAM,SAAS,UAAU,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AAChH,cAAM,sBAAsB,MAAM,IAAI,KAAK,EAAE;AAC7C,+BAAuB;AACvB,yBAAiB,yBAAyB;AAAA,MAC5C,CAAC,EACA,MAAM,CAAC,WAAW;AACjB,4BAAoB,YAAY,qBAAqB,MAAM;AAAA,MAC7D,CAAC,EACA,QAAQ,YAAY;AACnB,cAAM,IAAI,QAAQ,CAAC,YAAY;AAAE,qBAAW,SAAS,GAAI;AAAA,QAAG,CAAC;AAC7D,oBAAY;AAAA,MACd,CAAC;AAAA,IACL;AAAA,EACF,CAAC;AACH;AAEA,SAAS,kBAAkB,QAAQ;AACjC,wBAAsB,MAAM,MAAM;AAClC,QAAM,aAAa,IAAI,gBAAgB;AACvC,0BAAwB;AAExB,gBAAc,MAAM;AACpB,KAAG,KAAK;AACR,wBAAsB;AACtB,SAAO;AACT;AA6BO,SAAS,aAAa;AAC3B,MAAI,CAAC,qBAAsB;AAC3B,QAAM,aAAa,kBAAkB,kCAAkC;AACvE,KAAG,MAAM,YAAY;AACrB,MAAI,cAAc,EAAE,QAAQ,qBAAqB,CAAC;AAClD,oBAAkB,sBAAsB,GAAG,YAAY,IAAI;AAC7D;AACA,OAAO,aAAa;AAEpB,eAAe,aAAa,KAAK,YAAY;AAC3C,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,WAAW,SAAS,uBAAuB;AACjD,mBAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,GAAG,aAAa;AAC3D,MAAI,WAAW;AAEf,QAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,yBAAyB,UAAU,IAAI,OAAO,IAAI,CAAC,EAAE;AAC9F,MAAI,CAAC,OAAO,IAAI,WAAW,KAAK;AAC9B,qBAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,GAAG,CAAC,UAAU,KAAK,cAAc,aAAa,CAAC;AAC1F;AAAA,EACF;AACA,QAAM,WAAW,MAAM,IAAI,KAAK;AAChC,aAAW,QAAQ,UAAU;AAC3B,UAAM,OAAO,UAAU,IAAI,EAAE,MAAM,OAAO;AAC1C,UAAM,WAAW,KAAK,CAAC;AACvB,UAAM,MAAM,SAAS,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY;AAClD,QAAI,qBAAqB,SAAS,GAAG,GAAG;AACtC;AACA,YAAM,IAAI,IAAI,YAAY,KAAK,CAAC,GAAG,UAAU,WAAW,MAAM;AAC9D,eAAS,YAAY,CAAC;AAAA,IACxB;AAAA,EACF;AAEA,MAAI,WAAW,OAAO,QAAS;AAC/B,KAAG,MAAM,YAAY,QAAQ;AAE7B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,mBAAmB,IAAI,OAAO,IAAI,QAAQ,QAAQ,qBAAqB,KAAK,MAAM,KAAK,EAAE,CAAC,IAAI;AAClG,QAAM,gBAAgB,IAAI,OAAO,IAAI,IAAI,KAAK,EAAE;AAChD,mBAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,GAAG,CAAC,UAAU,SAAS,eAAe,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,MAAM,KAAK,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;AAC1I,KAAG,MAAM,QAAQ;AACjB,gBAAc;AACd,0BAAwB;AACxB,oBAAkB,IAAI,OAAO,MAAM,UAAU,UAAU;AACzD;AAEA,eAAe,aAAa,KAAK;AAC/B,MAAI,CAAC,IAAK;AAEV,QAAM,aAAa,kBAAkB,gBAAgB;AAErD,KAAG,MAAM,YAAY;AACrB,sBAAoB;AACpB,MAAI,MAAM,GAAG,eAAe,UAAU,KAAM,IAAG,MAAM;AACrD,MAAI,cAAc;AAClB,MAAI;AACF,SAAK,IAAI,UAAU,GAAG,GAAG,yBAAyB;AAClD,kBAAc,MAAM,UAAU,EAAE;AAAA,EAClC,SAAS,KAAK;AACZ,QAAI,6BAA6B,GAAG;AACpC;AAAA,EACF;AACA,MAAI,sBAAsB,WAAW,UAAU,IAAI,UAAU,QAAQ,IAAI,GAAG,EAAE;AAC9E,yBAAuB,IAAI,OAAO;AAClC,MAAI,CAAC,aAAa;AAChB,UAAM,aAAa,KAAK,UAAU;AAClC;AAAA,EACF;AACA,mBAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,CAAC;AAC5C,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,WAAW;AACf,MAAI,KAAK,YAAY,IAAI;AACzB,MAAI,WAAW,SAAS,uBAAuB;AAE/C,KAAG,YAAY,CAACC,WAAU;AACxB,SAAK,YAAY,IAAI;AACrB,UAAM,OAAO,UAAUA,OAAM,IAAI,EAAE,MAAM,OAAO;AAChD,QAAI,KAAK,CAAC,MAAM,SAAS;AACvB,SAAG,MAAM;AAAA,IACX,OAAO;AACL,YAAM,WAAW,KAAK,CAAC;AACvB,YAAM,MAAM,SAAS,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY;AAClD,UAAI,qBAAqB,SAAS,GAAG,GAAG;AACtC,cAAM,OAAO,IAAI,YAAY,KAAK,CAAC,GAAG,UAAU,WAAW,MAAM;AACjE;AACA,iBAAS,YAAY,IAAI;AACzB,YAAI,WAAW,iBAAiB,GAAG;AACjC,2BAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,GAAG,CAAC,UAAU,SAAS,eAAe,CAAC,GAAG,CAAC,UAAU,aAAa,GAAG,CAAC,QAAQ,GAAG,KAAK,MAAM,KAAK,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;AACrK,aAAG,MAAM,YAAY,QAAQ;AAC7B,qBAAW,SAAS,uBAAuB;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,KAAG,UAAU,CAACA,WAAU;AACtB,QAAI,WAAW,OAAO,QAAS;AAC/B,OAAG,MAAM,YAAY,QAAQ;AAE7B,QAAI,mBAAmB,IAAI,OAAO,IAAI,QAAQ,QAAQ,mBAAmB,KAAK,MAAM,KAAK,EAAE,CAAC,IAAI;AAChG,qBAAiB,CAAC,UAAU,IAAI,OAAO,IAAI,GAAG,CAAC,UAAU,SAAS,eAAe,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,MAAM,KAAK,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;AAC1I,OAAG,MAAM,QAAQ;AACjB,kBAAc;AACd,4BAAwB;AACxB,sBAAkB,IAAI,OAAO,MAAM,UAAU,UAAU;AAAA,EACzD;AACA,KAAG,UAAU,CAACA,WAAU;AACtB,QAAI,oBAAoBA,MAAK;AAAA,EAC/B;AACA,KAAG,KAAK,UAAU,IAAI,OAAO,IAAI,CAAC;AACpC;AAEA,eAAe,gBAAgB;AAE7B,QAAM,MAAM,MAAMD,WAAU,GAAG,OAAO,GAAG,kBAAkB;AAC3D,MAAI,CAAC,OAAO,IAAI,WAAW,IAAK;AAChC,QAAM,IAAI,IAAI,MAAM,QAAQ,EAAE,CAAC,EAAE,QAAQ,QAAQ,IAAI;AACrD,QAAM,UAAU,MAAM,IAAI,KAAK;AAC/B,KAAG,QAAQ,YAAY;AACvB,aAAW,UAAU,SAAS;AAC5B,UAAM,IAAI,IAAI,cAAc,MAAM;AAClC,OAAG,QAAQ,YAAY,CAAC;AAAA,EAC1B;AACF;AAEA,eAAe,mBAAmB;AAChC,iBAAe,gBAAgB,WAAW;AACxC,UAAM,YAAY,UAAU,OAAO,CAAC,MAAM,EAAE,QAAQ,WAAW,SAAS,SAAS,CAAC;AAClF,eAAW,WAAW,WAAW;AAC/B,YAAM,QAAQ,QAAQ,OAAO,iBAAiB,GAAG;AACjD,iBAAW,QAAQ,OAAO;AACxB,cAAM,OAAO,KAAK,aAAa,MAAM;AACrC,YAAI,CAAC,KAAM;AACX,cAAM,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,IAAI;AACjD,aAAK,aAAa,YAAY,EAAE;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,kBAAkB,UAAU,EAAE,iBAAiB,iBAAiB;AACtE,aAAW,WAAW,iBAAiB;AACrC,UAAM,kBAAkB,IAAI,iBAAiB,eAAe;AAC5D,oBAAgB,QAAQ,SAAS,EAAE,WAAW,MAAM,SAAS,MAAM,YAAY,KAAK,CAAC;AAAA,EACvF;AACF;AAEA,eAAe,sBAAsB;AACnC,QAAM,gBAAgB,SAAS,cAAc,OAAO;AAGpD,gBAAc,cAAc;AAC5B,WAAS,KAAK,OAAO,aAAa;AACpC;AAEA,eAAe,yBAAyB;AACtC,QAAM,WAAW,KAAK,YAAY,YAAY,MAAM;AACpD,MAAI,aAAa,WAAW,SAAS,eAAe,iBAAiB,IAAI,SAAS,eAAe,aAAa;AAC9G,MAAI,UAAU;AACd,SAAO,CAAC,cAAc,YAAY,IAAI;AACpC,UAAM,IAAI,QAAQ,CAAC,YAAY;AAAE,iBAAW,SAAS,IAAI;AAAA,IAAG,CAAC;AAC7D,iBAAa,WAAW,SAAS,eAAe,iBAAiB,IAAI,SAAS,eAAe,aAAa;AAAA,EAC5G;AACA,MAAI,CAAC,YAAY;AACf,UAAM,kBAAkB;AACxB;AAAA,EACF;AACA,QAAM,mBAAmB;AACzB,iBAAe,mBAAmB,WAAW;AAC3C,QAAI,CAAC,KAAK,2BAA4B;AACtC,eAAW,YAAY,WAAW;AAChC,cAAQ,SAAS,eAAe;AAAA,QAC9B,KAAK;AACH,cAAI,SAAS,SAAS,SAAS,QAAQ,KAAK,CAAC,SAAS,OAAO,UAAU,SAAS,QAAQ,GAAG;AACzF,kBAAM,cAAc;AACpB,0BAAc,UAAU,GAAG,MAAM;AAAA,UACnC;AACA;AAAA,QACF,KAAK;AACH,cAAI,iBAAiB,KAAK,SAAS,QAAQ,KAAK,CAAC,iBAAiB,KAAK,SAAS,OAAO,MAAM,OAAO,GAAG;AACrG,kBAAM,cAAc;AACpB,0BAAc,UAAU,GAAG,MAAM;AAAA,UACnC;AACA;AAAA,QACF;AACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACA,QAAM,qBAAqB,IAAI,iBAAiB,kBAAkB;AAClE,qBAAmB,QAAQ,YAAY,EAAE,iBAAiB,CAAC,SAAS,OAAO,GAAG,mBAAmB,KAAK,CAAC;AACzG;AAEA,eAAe,cAAc,KAAK;AAChC,QAAM,MAAM,MAAMA,WAAU,GAAG,OAAO,GAAG,sBAAsB,mBAAmB,YAAY,CAAC,IAAI,EAAE,QAAQ,SAAS,CAAC;AACvH,MAAI,gBAAgB;AACpB,MAAI,CAAC,OAAO,IAAI,WAAW,KAAK;AAC9B,UAAM,iBAAiB,EAAE,MAAM,cAAc,QAAQ,KAAK,QAAQ,YAAY,KAAK,WAAW,CAAC;AAC/F;AAAA,EACF;AACA,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,MAAI,iBAAiB,IAAI;AACzB,gBAAc,UAAU,GAAG,MAAM;AACnC;AAEA,eAAe,gBAAgB,KAAK;AAClC,MAAI,mBAAmB,YAAY;AACnC,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,OAAO,SAAS,mBAAmB,YAAY,CAAC;AACrD,OAAK,WAAW;AAChB,WAAS,KAAK,YAAY,IAAI;AAC9B,OAAK,MAAM;AACX,WAAS,KAAK,YAAY,IAAI;AAC9B,MAAI,gBAAgB;AACtB;AAEA,eAAe,YAAY,KAAK;AAC9B,MAAI,gBAAgB;AACpB,QAAM,MAAM,SAAS,eAAe,6BAA6B;AACjE,MAAI,CAAC,IAAK;AACV,QAAM,MAAM,MAAMA,WAAU,GAAG,OAAO,GAAG,kBAAkB,UAAU,YAAY,CAAC,EAAE;AACpF,MAAI,CAAC,OAAO,IAAI,WAAW,IAAK;AAChC,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,MAAI,mBAAmB,IAAI;AAC3B,QAAM,SAAS,MAAM,YAAY,UAAU;AAC3C,QAAM,WAAW,MAAM,YAAY,YAAY,MAAM,aAAa,iBAAiB,KAAK;AACxF,QAAM,MAAM,MAAM,QAAQ;AAC1B,QAAM,SAAS,MAAM,cAAc,CAAC;AACpC,SAAO,OAAO;AACd,SAAO,OAAO;AACd,SAAO,OAAO,iBAAiB;AAC/B,QAAM,kBAAkB,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,MAAM,GAAG,SAAS,KAAK,EAAE,EAAE,KAAK,KAAK;AAC1G,MAAI,YAAY;AAAA,wBACM,YAAY;AAAA,0BACV,MAAM;AAAA,4BACJ,QAAQ;AAAA,WACzB,eAAe;AAAA,wEAC8C,GAAG;AAAA;AAEzE,QAAM,MAAM,SAAS,cAAc,sBAAsB;AACzD,MAAI,IAAK,KAAI,MAAM,SAAS,mBAAmB,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC;AAC5E,QAAM,SAAS,SAAS,cAAc,qBAAqB;AAC3D,MAAI,OAAQ,QAAO,YAAY;AACjC;AAEA,eAAe,gBAAgB;AAC7B,MAAI,GAAG,QAAS;AAChB,KAAG,UAAU,SAAS,cAAc,KAAK;AACzC,KAAG,QAAQ,YAAY;AACvB,QAAM,cAAc,SAAS,cAAc,MAAM;AACjD,cAAY,YAAY;AACxB,cAAY,QAAQ;AACpB,cAAY,MAAM,SAAS;AAC3B,cAAY,iBAAiB,SAAS,eAAe;AACrD,QAAM,YAAY,SAAS,cAAc,MAAM;AAC/C,YAAU,YAAY;AACtB,YAAU,QAAQ;AAClB,YAAU,MAAM,SAAS;AACzB,YAAU,iBAAiB,SAAS,aAAa;AACjD,QAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,UAAQ,YAAY;AACpB,UAAQ,QAAQ;AAChB,UAAQ,MAAM,SAAS;AACvB,UAAQ,iBAAiB,SAAS,WAAW;AAC7C,KAAG,QAAQ,OAAO,SAAS,WAAW,WAAW;AACnD;AAEA,eAAe,kBAAkB,KAAuB;AACtD,MAAI,CAAC,OAAO,CAAC,IAAI,IAAK;AACtB,MAAI,CAAC,IAAI,IAAI,YAAY,EAAE,SAAS,OAAO,KAAK,CAAC,IAAI,IAAI,YAAY,EAAE,SAAS,OAAO,EAAG;AAC1F,QAAM,UAAU,IAAI;AACpB,MAAI;AACF,UAAM,KAAK,YAAY,IAAI;AAC3B,QAAI,MAAM;AAGV,UAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,+BAA+B;AAC1E,UAAM,MAAM,MAAMA,WAAU,OAAO;AACnC,QAAI,CAAC,OAAO,IAAI,WAAW,IAAK;AAChC,UAAM,YAAY,MAAM,IAAI,KAAK;AACjC,QAAI,CAAC,aAAa,UAAU,QAAQ,MAAM;AACxC,YAAM,aAAa,EAAE,KAAK,SAAS,KAAK,MAAM,UAAU,CAAC;AACzD;AAAA,IACF;AACA,UAAM,gBAAgB,MAAM,SAAS;AAAA,MACnC,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,IACX,CAAC;AACD,QAAI,MAAM,IAAI,gBAAgB,aAAa;AAC3C,UAAM,KAAK,YAAY,IAAI;AAC3B,QAAI,aAAa,EAAE,MAAM,KAAK,MAAM,KAAK,EAAE,GAAG,cAAc,UAAU,MAAM,eAAe,cAAc,KAAK,CAAC;AAAA,EACjH,SAAS,KAAK;AACZ,UAAM,cAAc,EAAE,KAAK,SAAS,IAAI,CAAC;AAAA,EAC3C;AACF;AAEA,eAAe,0BAA0B;AACvC,QAAM,oBAAoB,SAAS,iBAAiB,iBAAiB;AACrE,aAAW,oBAAoB,mBAAmB;AAChD,QAAI,CAAC,iBAAkB;AACvB,UAAM,kBAAkB,IAAI,iBAAiB,CAAC,cAAc;AAC1D,iBAAW,YAAY,WAAW;AAChC,YAAI,SAAS,SAAS,eAAe,SAAS,WAAW,SAAS,GAAG;AACnE,gBAAM,MAAM,iBAAiB,cAAc,KAAK;AAChD,cAAI,OAAO,CAAC,iBAAiB,QAAQ,eAAe;AAClD,6BAAiB,QAAQ,gBAAgB;AACzC,gBAAI,qBAAqB,EAAE,SAAS,iBAAiB,GAAG,CAAC;AACzD,gBAAI,iBAAiB,SAAS,MAAM,kBAAkB,GAAG,CAAC;AAC1D,4BAAgB,WAAW;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AACD,oBAAgB,QAAQ,kBAAkB,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,EAC9E;AACF;AAEA,eAAe,uBAAuB;AAEpC,mBAAiB,QAAQ;AAAA,IACvB,QAAQ,IAAI,gBAAgB,EAAE;AAAA;AAAA,IAC9B,UAAU,YAAY;AACpB,UAAI,UAAU;AACd,aAAO,CAAC,WAAW,KAAK,YAAY,IAAI;AACtC,cAAM,IAAI,QAAQ,CAAC,YAAY;AAAE,qBAAW,SAAS,GAAI;AAAA,QAAG,CAAC;AAAA,MAC/D;AACA,UAAI,CAAC,WAAW,GAAG;AACjB,cAAM,IAAI,MAAM,uCAAuC;AAAA,MACzD;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,cAAc;AAClC,QAAM,KAAK,YAAY,IAAI;AAC3B,KAAG,UAAU,UAAU,EAAE,eAAe,qBAAqB;AAC7D,KAAG,QAAQ,UAAU,EAAE,eAAe,mBAAmB;AACzD,KAAG,SAAS,UAAU,EAAE,eAAe,oBAAoB;AAC3D,KAAG,SAAS,UAAU,EAAE,cAAc,8BAA8B;AACpE,KAAG,OAAO,SAAS,eAAe,wBAAwB;AAC1D,MAAI,CAAC,GAAG,WAAW,CAAC,GAAG,SAAS,CAAC,GAAG,UAAU,CAAC,GAAG,QAAQ;AACxD,UAAM,eAAe,0BAA0B;AAC/C;AAAA,EACF;AAEA,MAAI,GAAG,MAAM;AACX,OAAG,KAAK,QAAQ,KAAK;AACrB,OAAG,KAAK,iBAAiB,SAAS,mBAAmB;AAAA,EACvD;AACA,uBAAqB;AACrB,gBAAc;AACd,sBAAoB;AACpB,yBAAuB;AACvB,sBAAoB;AAEpB,QAAM,WAAW,UAAU,EAAE,eAAe,sBAAsB;AAClE,MAAI,SAAU,IAAG,SAAS,QAAQ;AAAA,MAC7B,KAAI,eAAe,uCAAuC;AAE/D,MAAI,oBAAoB;AACtB,QAAI,eAAe,qBAAqB;AACxC;AAAA,EACF;AACA,uBAAqB;AAErB,KAAG,OAAO,iBAAiB,SAAS,aAAa;AACjD,KAAG,UAAU,UAAU,EAAE,eAAe,wBAAwB;AAChE,WAAS,eAAe,mBAAmB,EAAE,MAAM,SAAS,KAAK,kBAAkB,SAAS;AAE5F,mBAAiB;AACjB,gBAAc;AACd,yBAAuB;AACvB,0BAAwB;AACxB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,QAAQ,CAAC,OAAO;AAAE,kBAAc,IAAI,aAAa;AAAA,EAAG,CAAC;AACvD,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,eAAe,KAAK,MAAM,KAAK,EAAE,CAAC;AACtC,QAAM,eAAe,KAAK,EAAE;AAC9B;AAIA,eAAe,OAAO,kBAAkB,aAAa;AACrD,eAAe,OAAO,gBAAgB,WAAW;;;ACnjDjD,mBAAkB;AAClB,qBAAoB;AAQpB,IAAI,cAAc;AAClB,IAAI;AACJ,IAAI;AAEJ,SAAS,gBAAgB;AACvB,QAAM,OAAO,SAAS;AACtB,QAAM,UAAU,iBAAiB,IAAI,EAAE,iBAAiB,gBAAgB,EAAE,KAAK;AAC/E,MAAI,OAAO;AACX,MAAI,YAAY,UAAW,QAAO;AAAA,WACzB,YAAY,QAAS,QAAO;AAAA,WAC5B,YAAY,OAAQ,QAAO;AAAA,WAC3B,YAAY,aAAc,QAAO;AAC1C,OAAK,MAAM,YAAY,kBAAkB,IAAI;AAC7C,MAAI,iBAAiB,SAAS,IAAI;AACpC;AAEA,OAAO,gBAAgB;AAOvB,SAAS,WAAW,KAAK,QAAQ,OAAO;AACtC,MAAI,MAAO,WAAU,EAAE,eAAe,eAAe,EAAE,MAAM,UAAU;AACvE,MAAI,YAAa;AACjB,MAAI,KAAK,WAAW,EAAG;AACvB,YAAU,EAAE,eAAe,eAAe,EAAE,MAAM,UAAU;AAC5D,MAAI,aAAa,MAAM,KAAU,UAAU,EAAE,iBAAiB,6BAA6B,CAAC;AAC5F,eAAa,WAAW,OAAO,CAACE,QAAOA,IAAG,gBAAgB,CAAC;AAC3D,MAAI,WAAW,WAAW,EAAG;AAC7B,aAAW,CAAC,EAAE,MAAM;AACtB;AAEA,SAAS,iBAAiB,QAAQ;AAChC,QAAM,SAAS,CAAC,GAAG,OAAQ,IAAI,IAAK,KAAK;AACzC,QAAM,iBAAiB,oBAAoB;AAC3C,MAAI,eAAe,SAAS,GAAG;AAC7B,UAAM,gBAAgB,wBAAwB;AAC9C,QAAI,SAAS;AACb,mBAAe,QAAQ,CAAC,GAAG,MAAM;AAC/B,UAAI,MAAM,cAAe,UAAS;AAAA,IACpC,CAAC;AACD,QAAI,WAAW,IAAI;AACjB,YAAM,aAAa,eAAe,OAAQ,SAAS,QAAS,eAAe,MAAM,CAAC;AAClF,iBAAW,MAAM;AACjB,YAAMC,cAAa,UAAU,EAAE,eAAe,YAAY;AAC1D,YAAMC,SAAQ,UAAU,EAAE,eAAe,eAAe;AACxD,MAAAD,YAAW,MAAM,WAAW,SAAS,CAAC,EAAE;AACxC,UAAIA,YAAW,MAAM,YAAY,OAAQ,CAAAC,OAAM,MAAM,YAAY,oBAAoB,OAAOD,YAAW,GAAG,GAAG;AAC7G;AAAA,IACF;AAAA,EACF;AAEA,QAAM,wBAAwB,UAAU,EAAE,eAAe,mBAAmB;AAC5E,MAAI,CAAC,yBAAyB,CAAC,sBAAsB,aAAc;AACnE,QAAME,oBAAmB,OAAO,oBAAoB;AACpD,MAAI,CAACA,kBAAiB,MAAM,UAAUA,kBAAiB,MAAM,UAAU,EAAG;AAC1E,QAAM,YAAYA,kBAAiB,SAAS,IAAIA,kBAAiB,QAAQ;AACzE,QAAM,YAAY,OAAQ,YAAY,QAASA,kBAAiB,MAAM,MAAM;AAC5E,SAAO,oBAAoB,WAAW,EAAE,MAAM,KAAK,CAAC;AACpD,QAAM,aAAa,UAAU,EAAE,eAAe,YAAY;AAC1D,QAAMD,SAAQ,UAAU,EAAE,eAAe,eAAe;AACxD,QAAM,YAAY,OAAO,sBAAsB;AAC/C,MAAI,cAAcA,UAAS,WAAW;AACpC,eAAW,MAAM;AACjB,QAAI,WAAW,MAAM,YAAY,OAAQ,CAAAA,OAAM,MAAM,YAAY,oBAAoB,OAAO,SAAS,GAAG;AAAA,EAC1G;AACF;AAEA,SAAS,eAAeE,QAAa;AACnC,QAAM,UAAU,eAAe;AAC/B,QAAM,UAAU,UAAU,EAAE,eAAe,QAAQ,OAAO,EAAE;AAC5D,MAAI,kBAAkB,SAAS,OAAO;AACtC,MAAI,QAAS,SAAQ,MAAM;AAC3B,mBAAiB,CAAC;AACpB;AAEA,SAAS,gBAAgBA,QAAO;AAC9B,MAAI,mBAAmBA,OAAM,GAAG;AAChC,UAAQA,OAAM,KAAK;AAAA,IACjB,KAAK;AACH,qBAAe;AACf;AAAA,IACF,KAAK;AACH,uBAAiB,EAAE;AACnB;AAAA,IACF,KAAK;AACH,uBAAiB,CAAC;AAClB;AAAA,IACF,KAAK;AACH,iBAAW,MAAM,IAAI;AACrB;AAAA,EACJ;AACA,EAAAA,OAAM,gBAAgB;AACxB;AAEA,SAAS,YAAY,OAA2B;AAC9C,MAAI,CAAC,SAAS,MAAM,SAAS,EAAG,QAAO;AACvC,QAAM,SAAS,IAAI,YAAY,OAAO,EAAE,OAAO,MAAM,MAAM,GAAG,CAAC,CAAC;AAChE,QAAM,OAAO,MAAM,MAAM,CAAC;AAC1B,MAAI,OAAO,WAAW,OAAO,EAAG,QAAO,IAAI,YAAY,OAAO,EAAE,OAAO,IAAI,EAAE,QAAQ,QAAQ,EAAE;AAC/F,MAAI,OAAO,WAAW,SAAS,EAAG,QAAO,IAAI,YAAY,UAAU,EAAE,OAAO,IAAI,EAAE,QAAQ,QAAQ,EAAE;AACpG,MAAI,OAAO,WAAW,KAAK,EAAG,QAAO,IAAI,YAAY,WAAW,EAAE,OAAO,IAAI,EAAE,QAAQ,QAAQ,EAAE;AACjG,SAAO,IAAI,YAAY,EAAE,OAAO,KAAK,EAAE,QAAQ,QAAQ,EAAE;AAC3D;AAEA,eAAsB,QAAQJ,KAAI;AAChC,MAAI,OAAY;AAChB,MAAI;AACF,WAAO,MAAM,aAAAK,QAAM,MAAML,KAAI,EAAE,aAAa,KAAK,CAAC;AAAA,EACpD,SAAS,GAAG;AACV,QAAI,WAAWA,KAAI,CAAC;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO;AACX,MAAI;AACJ,MAAI,CAAC,MAAM;AACT,QAAI,WAAW,cAAc;AAC7B,WAAO;AAAA,EACT;AACA,MAAI,KAAK,WAAY,UAAS,KAAK;AAAA,WAC1B,KAAK,YAAa,UAAS,YAAY,KAAK,WAAW;AAAA,MAC3D,UAAS;AAEd,MAAI,OAAO,SAAS,EAAG,SAAQ,iBAAiB,UAAU,EAAE;AAC5D,SAAO,KAAK,QAAQ,oBAAoB,qBAAqB;AAC7D,SAAO,KAAK,QAAQ,UAAU,0BAA0B;AACxD,SAAO,KAAK,WAAW,MAAM,MAAM;AACnC,SAAO,KAAK,WAAW,YAAY,MAAM;AACzC,SAAO;AACT;AAEA,eAAe,YAAYA,KAAI;AAC7B,QAAM,YAAY,UAAU,EAAE,eAAe,WAAW;AACxD,QAAM,OAAO,MAAM,QAAQA,GAAE;AAC7B,YAAU,YAAY;AACxB;AAEA,SAAS,UAAUI,QAAO;AACxB,QAAM,SAASA,OAAM,UAAUA,OAAM;AACrC,QAAM,aAAa,UAAU,EAAE,eAAe,YAAY;AAC1D,QAAM,KAAK,UAAU,EAAE,eAAe,eAAe;AACrD,KAAG,kBAAkB;AACrB,aAAW,SAAS,MAAM;AACxB,oBAAgB,OAAO,GAAG,CAAC;AAC3B,qBAAiB,MAAM;AACvB,QAAI,KAAK,qBAAsB,aAAY,UAAU;AAAA,EACvD;AACA,aAAW,MAAM,OAAO;AACxB,MAAI,WAAW,MAAM,YAAY,OAAQ,IAAG,MAAM,YAAY,oBAAoB,OAAO,OAAO,GAAG,GAAG;AACtG,KAAG,MAAM,UAAU;AACnB,KAAG,YAAY;AACf,EAAAA,OAAM,gBAAgB;AACxB;AAEA,SAAS,qBAAqB;AAC5B,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,MAAM,UAAU;AACrB,OAAK,OAAO,UAAU,EAAE,eAAe,YAAY,EAAE;AACrD,OAAK,WAAW;AAChB,WAAS,KAAK,YAAY,IAAI;AAC9B,OAAK,MAAM;AACX,aAAW,MAAM;AACf,QAAI,gBAAgB,KAAK,IAAI;AAC7B,SAAK,WAAW,YAAY,IAAI;AAAA,EAClC,GAAG,CAAC;AACN;AAEA,SAAS,aAAa,YAAY,QAAQ;AACxC,eAAa,QAAQ,aAAa,SAAS,QAAQ,IAAI;AACvD,MAAI,WAAY,YAAW,UAAU,OAAO,wBAAwB,CAAC,CAAC,MAAM;AAC9E;AAEA,SAAS,sBAAsB,OAAO;AACpC,MAAI,MAAM,QAAQ,OAAQ;AAC1B,QAAM,QAAQ,SAAS;AACvB,QAAM,MAAM,SAAS;AACrB,QAAM,MAAM,aAAa;AAC3B;AAEA,SAAS,gBAAgBA,QAAO;AAC9B,QAAM,aAAa,UAAU,EAAE,eAAe,YAAY;AAC1D,eAAa,YAAY,CAAC,WAAW,UAAU,SAAS,sBAAsB,CAAC;AAC/E,EAAAA,OAAM,gBAAgB;AACtB,mBAAiB,CAAC;AACpB;AAEA,SAAS,gBAAgBA,QAAO;AAC9B,QAAM,aAAa,UAAU,EAAE,eAAe,YAAY;AAC1D,QAAMF,SAAQ,UAAU,EAAE,eAAe,eAAe;AACxD,QAAM,WAAW,WAAW,MAAM,YAAY;AAC9C,MAAI,UAAU;AACZ,eAAW,MAAM,UAAU;AAC3B,IAAAA,OAAM,MAAM,YAAY,oBAAoB,MAAM;AAAA,EACpD,OAAO;AACL,eAAW,MAAM,UAAU;AAC3B,IAAAA,OAAM,MAAM,YAAY,oBAAoB,OAAO,WAAW,GAAG,GAAG;AAAA,EACtE;AACA,EAAAE,OAAM,gBAAgB;AACtB,mBAAiB,CAAC;AACpB;AAEA,SAAS,mBAAmBA,QAAO;AACjC,QAAM,aAAa,SAAS,eAAe,YAAY;AACvD,kBAAgB,QAAQ;AACxB,wBAAkB,eAAAE,SAAQ,YAAY,EAAE,WAAW,MAAM,SAAS,KAAK,SAAS,GAAK,WAAW,MAAyB,KAAK,CAAC;AAC/H,EAAAF,OAAM,gBAAgB;AACtB,mBAAiB,CAAC;AACpB;AAEA,SAAS,kBAAkBA,QAAO;AAChC,QAAM,YAAY,UAAU,EAAE,eAAe,WAAW;AACxD,MAAI,UAAU,MAAM,YAAY,UAAU,UAAU,MAAM,YAAY,IAAI;AACxE,cAAU,MAAM,UAAU;AAAA,EAC5B,OAAO;AACL,cAAU,MAAM,UAAU;AAAA,EAC5B;AACA,EAAAA,OAAM,gBAAgB;AACtB,mBAAiB,CAAC;AACpB;AAEA,SAAS,yBAAyBA,QAAO;AACvC,MAAIA,OAAM,WAAW,EAAG;AACxB,MAAIA,OAAM,OAAO,aAAa,SAAS,CAACA,OAAM,OAAO,WAAW,UAAU,SAAS,gBAAgB,GAAG;AACpG,UAAM,eAAe,aAAa,QAAQ,WAAW,KAAK,UAAU;AACpE,iBAAa,UAAU,EAAE,eAAe,YAAY,GAAG,WAAW;AAClE,IAAAA,OAAM,eAAe;AACrB,cAAUA,MAAK;AAAA,EACjB;AACF;AAEA,eAAe,kBAAkB;AAE/B,QAAM,kBAAkB,UAAU,EAAE,iBAAiB,+BAA+B;AACpF,aAAW,kBAAkB,iBAAiB;AAC5C,QAAI,CAAC,eAAe,aAAa,eAAe,EAAG,gBAAe,iBAAiB,SAAS,0BAA0B,IAAI;AAC1H,mBAAe,aAAa,iBAAiB,MAAM;AACnD,mBAAe,iBAAiB,KAAK,EAAE,QAAQ,qBAAqB;AAAA,EACtE;AACF;AAEA,eAAsB,kBAAkB;AACtC,QAAM,KAAK,YAAY,IAAI;AAE3B,QAAMF,SAAQ,SAAS,cAAc,KAAK;AAC1C,EAAAA,OAAM,KAAK;AAEX,qBAAmB,SAAS,cAAc,KAAK;AAC/C,mBAAiB,YAAY;AAE7B,QAAM,aAAa,SAAS,cAAc,KAAK;AAC/C,aAAW,KAAK;AAChB,mBAAiB,YAAY,UAAU;AACvC,wBAAkB,eAAAI,SAAQ,YAAY,EAAE,WAAW,MAAM,SAAS,KAAK,SAAS,GAAK,WAAW,MAAyB,KAAK,CAAC;AAG/H,QAAM,YAAY,SAAS,cAAc,MAAM;AAC/C,YAAU,KAAK;AACf,YAAU,YAAY;AACtB,YAAU,YAAY;AACtB,YAAU,QAAQ;AAClB,YAAU,iBAAiB,SAAS,iBAAiB,IAAI;AAEzD,QAAM,aAAa,SAAS,cAAc,MAAM;AAChD,aAAW,KAAK;AAChB,aAAW,YAAY;AACvB,aAAW,YAAY;AACvB,aAAW,QAAQ;AACnB,aAAW,iBAAiB,SAAS,oBAAoB,IAAI;AAE7D,QAAM,YAAY,SAAS,cAAc,MAAM;AAC/C,YAAU,KAAK;AACf,YAAU,YAAY;AACtB,YAAU,YAAY;AACtB,YAAU,QAAQ;AAClB,YAAU,iBAAiB,SAAS,iBAAiB,IAAI;AAEzD,QAAM,YAAY,SAAS,cAAc,MAAM;AAC/C,YAAU,KAAK;AACf,YAAU,YAAY;AACtB,YAAU,YAAY;AACtB,YAAU,QAAQ;AAClB,YAAU,iBAAiB,SAAS,gBAAgB,IAAI;AAExD,QAAM,gBAAgB,SAAS,cAAc,MAAM;AACnD,gBAAc,KAAK;AACnB,gBAAc,YAAY;AAC1B,gBAAc,YAAY;AAC1B,gBAAc,QAAQ;AACtB,gBAAc,iBAAiB,SAAS,oBAAoB,IAAI;AAEhE,QAAM,aAAa,SAAS,cAAc,MAAM;AAChD,aAAW,KAAK;AAChB,aAAW,YAAY;AACvB,aAAW,YAAY;AACvB,aAAW,QAAQ;AACnB,aAAW,iBAAiB,SAAS,CAAC,QAAQ,WAAW,KAAK,IAAI,GAAG,IAAI;AAEzE,QAAM,uBAAuB,SAAS,cAAc,MAAM;AAC1D,uBAAqB,KAAK;AAC1B,uBAAqB,YAAY;AACjC,uBAAqB,YAAY;AACjC,uBAAqB,QAAQ;AAC7B,uBAAqB,iBAAiB,SAAS,mBAAmB,IAAI;AAGtE,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,YAAU,KAAK;AACf,YAAU,QAAQ;AAGlB,mBAAiB,iBAAiB,aAAa,MAAM;AAAE,kBAAc;AAAA,EAAO,CAAC;AAC7E,mBAAiB,iBAAiB,cAAc,MAAM;AAAE,kBAAc;AAAA,EAAO,GAAG,EAAE,SAAS,KAAK,CAAC;AACjG,mBAAiB,iBAAiB,aAAa,MAAM;AAAE,kBAAc;AAAA,EAAM,CAAC;AAC5E,mBAAiB,iBAAiB,aAAa,MAAM;AAAE,kBAAc;AAAA,EAAM,GAAG,EAAE,SAAS,KAAK,CAAC;AAC/F,mBAAiB,iBAAiB,UAAU,MAAM;AAAE,kBAAc;AAAA,EAAM,CAAC;AACzE,mBAAiB,iBAAiB,WAAW,CAAC,QAAQ,WAAW,GAAG,CAAC;AACrE,mBAAiB,iBAAiB,YAAY,CAAC,QAAQ,WAAW,GAAG,CAAC;AAEtE,QAAM,YAAY,SAAS,cAAc,GAAG;AAC5C,YAAU,YAAY;AACtB,YAAU,YAAY;AACtB,YAAU,iBAAiB,SAAS,MAAM,iBAAiB,EAAE,GAAG,IAAI;AAGpE,QAAM,YAAY,SAAS,cAAc,GAAG;AAC5C,YAAU,YAAY;AACtB,YAAU,YAAY;AACtB,YAAU,iBAAiB,SAAS,MAAM,iBAAiB,CAAC,GAAG,IAAI;AAGnE,QAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,gBAAc,YAAY;AAG1B,EAAAJ,OAAM,YAAY,SAAS;AAC3B,EAAAA,OAAM,YAAY,gBAAgB;AAClC,EAAAA,OAAM,YAAY,SAAS;AAC3B,EAAAA,OAAM,OAAO,aAAa;AAC1B,gBAAc,YAAY,SAAS;AACnC,gBAAc,YAAY,UAAU;AACpC,gBAAc,YAAY,SAAS;AACnC,gBAAc,YAAY,SAAS;AACnC,gBAAc,YAAY,aAAa;AACvC,gBAAc,YAAY,oBAAoB;AAC9C,gBAAc,YAAY,UAAU;AACpC,EAAAA,OAAM,OAAO,SAAS;AAEtB,YAAU,EAAE,YAAYA,MAAK;AAC7B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,mBAAmB,KAAK,MAAM,KAAK,EAAE,CAAC;AAC1C,QAAM,mBAAmB,KAAK,EAAE;AAClC;AAEA,gBAAgB,eAAe;;;ACtVxB,SAAS,WAAW,OAA2B,OAAuB;AAC3E,MAAI,KAAK;AACT,MAAI,KAAK,MAAM;AACf,SAAO,KAAK,IAAI;AACd,UAAM,MAAO,KAAK,OAAQ;AAC1B,QAAI,MAAM,GAAG,EAAE,OAAO,MAAO,MAAK,MAAM;AAAA,QACnC,MAAK;AAAA,EACZ;AACA,SAAO;AACT;AAeA,IAAM,UAAN,MAAc;AAAA,EACZ;AAAA,EAEA,YAAY,OAAiB;AAE3B,SAAK,QAAQ,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,OAAO;AAAA,MAC7C,MAAM,OAAO,IAAI,EAAE,YAAY;AAAA,MAC/B,SAAS,WAAW;AAAA,IACtB,EAAE;AACF,SAAK,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,EACxD;AAAA,EAEA,OAAO,QAAgB,QAAQ,IAAkB;AAC/C,UAAM,QAAQ,OAAO,MAAM,EAAE,YAAY;AAEzC,QAAI,CAAC,MAAO,QAAO,KAAK,MAAM,MAAM,GAAG,KAAK;AAC5C,UAAM,QAAQ,WAAW,KAAK,OAAO,KAAK;AAC1C,UAAM,UAAU,CAAC;AACjB,aAAS,IAAI,OAAO,IAAI,KAAK,MAAM,UAAU,QAAQ,SAAS,OAAO,KAAK;AACxE,UAAI,CAAC,KAAK,MAAM,CAAC,EAAE,KAAK,WAAW,KAAK,EAAG;AAC3C,cAAQ,KAAK,KAAK,MAAM,CAAC,CAAC;AAAA,IAC5B;AAEA,QAAI,QAAQ,WAAW,KAAK,MAAM,UAAU,GAAG;AAC7C,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,UAAU,QAAQ,SAAS,OAAO,KAAK;AACpE,YAAI,KAAK,MAAM,CAAC,EAAE,KAAK,SAAS,KAAK,EAAG,SAAQ,KAAK,KAAK,MAAM,CAAC,CAAC;AAAA,MACpE;AAAA,IACF;AACA,WAAO,QAAQ,MAAM,GAAG,KAAK;AAAA,EAC/B;AACF;AAIO,IAAM,WAAqB;AAAA,EAChC,MAAM,IAAI,QAAQ,CAAC,CAAC;AAAA,EACpB,OAAO,IAAI,QAAQ,CAAC,CAAC;AAAA,EACrB,UAAU,IAAI,QAAQ,CAAC,CAAC;AAAA,EAExB,MAAM,UAAU,MAAM;AACpB,QAAI;AAEF,YAAM,OAAO,MAAM,UAAU,GAAG,OAAO,GAAG,GAAG,IAAI,EAAE;AACnD,UAAI,CAAC,MAAM,GAAI,OAAM,IAAI,MAAM,GAAG,MAAM,MAAM,EAAE;AAChD,aAAO,MAAM,KAAK,KAAK;AAAA,IACzB,SAAS,GAAG;AACV,UAAI,gBAAgB,EAAE,eAAe,MAAM,OAAO,OAAO,CAAC,EAAE,CAAC;AAC7D,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,UAAU;AAEd,UAAM,WAAW,MAAM,KAAK,UAAU,QAAQ;AAC9C,QAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,YAAM,QAAkB,CAAC;AACzB,iBAAW,MAAM,UAAU;AACzB,YAAI,OAAO,OAAO,YAAY,MAAM,UAAU,MAAM,OAAO,GAAG,SAAS,SAAU,OAAM,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;AAC7G,YAAI,OAAO,OAAO,YAAY,MAAM,WAAW,MAAM,OAAO,GAAG,UAAU,YAAY,GAAG,UAAW,GAAyB,KAAM,OAAM,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;AAAA,MACjK;AACA,WAAK,OAAO,IAAI,QAAQ,KAAK;AAAA,IAC/B;AAEA,UAAM,UAAU,MAAM,KAAK,UAAU,aAAa;AAClD,QAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,YAAM,SAAS,MAAM,QAAQ,QAAQ,MAAM,IAAI,QAAQ,SAAS,CAAC;AACjE,WAAK,QAAQ,IAAI,QAAQ,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,OAAO,IAAI,EAAE,EAAE,CAAC;AAAA,IACzE;AAEA,UAAM,SAAS,MAAM,KAAK,UAAU,YAAY;AAChD,QAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAK,WAAW,IAAI;AAAA,QAClB,OACG,OAAO,CAAC,MAAM,OAAO,MAAM,YAAY,KAAK,UAAU,KAAK,OAAO,EAAE,SAAS,QAAQ,EACrF,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;AAAA,MAClC;AAAA,IACF;AACA,QAAI,gBAAgB;AAAA,MAClB,UAAU;AAAA,MACV,MAAM,KAAK,KAAK,MAAM;AAAA,MACtB,OAAO,KAAK,MAAM,MAAM;AAAA,MACxB,UAAU,KAAK,SAAS,MAAM;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EAEA,YAAY,QAAQ,QAAQ,IAAI;AAC9B,WAAO,KAAK,KAAK,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,MAAM,OAAgB,EAAE;AAAA,EAC3F;AAAA,EAEA,iBAAiB,QAAQ,QAAQ,IAAI;AACnC,WAAO,KAAK,MAAM,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,MAAM,QAAiB,EAAE;AAAA,EAC7F;AAAA,EAEA,gBAAgB,QAAQ,QAAQ,IAAI;AAClC,WAAO,KAAK,SAAS,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,MAAM,WAAoB,EAAE;AAAA,EACnG;AACF;;;AC/HA,IAAM,kBAAkB;AAAA,EACtB,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AACN;AAEA,IAAM,iBAAiB;AAAA,EACrB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAGA,IAAM,cAAc;AAAA,EAClB,KAAK,EAAE,OAAO,UAAK,OAAO,KAAK;AAAA;AAAA,EAC/B,MAAM,EAAE,OAAO,UAAK,OAAO,UAAU;AAAA,EACrC,OAAO,EAAE,OAAO,UAAK,OAAO,UAAU;AAAA,EACtC,UAAU,EAAE,OAAO,UAAK,OAAO,UAAU;AAC3C;AAEA,IAAI,SAAS;AAgBb,SAAS,YAAY,OAAuB;AAC1C,MAAI,SAAS,IAAW,QAAO,IAAI,QAAQ,KAAW,QAAQ,CAAC,CAAC;AAChE,MAAI,SAAS,IAAO,QAAO,GAAG,KAAK,MAAM,QAAQ,GAAK,CAAC;AACvD,SAAO,OAAO,KAAK;AACrB;AAOA,IAAI,cAAqC;AACzC,IAAI,cAAsC;AAC1C,IAAM,eAAe;AAAA,EAAC;AAAA,EAAc;AAAA,EAAY;AAAA,EAAc;AAAA,EAC5D;AAAA,EAAc;AAAA,EAAiB;AAAA,EAAe;AAAA,EAC9C;AAAA,EAAW;AAAA,EAAU;AAAW;AAElC,SAAS,eAAe,UAAuC;AAC7D,MAAI,CAAC,aAAa;AAChB,kBAAc,SAAS,cAAc,KAAK;AAC1C,gBAAY,YAAY;AACxB,gBAAY,MAAM,aAAa;AAC/B,gBAAY,MAAM,WAAW;AAC7B,gBAAY,MAAM,WAAW;AAC7B,gBAAY,MAAM,OAAO;AACzB,gBAAY,MAAM,WAAW;AAC7B,kBAAc,SAAS,cAAc,MAAM;AAC3C,gBAAY,cAAc;AAC1B,aAAS,KAAK,YAAY,WAAW;AAAA,EACvC;AACA,QAAM,KAAK,iBAAiB,QAAQ;AACpC,aAAW,KAAK,aAAc,aAAY,MAAM,CAAC,IAAI,GAAG,CAAC;AACzD,cAAY,MAAM,QAAQ,GAAG,SAAS,WAAW;AACjD,cAAY,cAAc,SAAS,MAAM,UAAU,GAAG,SAAS,cAAc;AAC7E,cAAY,YAAY,WAAW;AACnC,QAAM,SAAS,YAAY,YAAY,YAAY;AACnD,SAAO,SAAS,sBAAsB,EAAE,MAAM,SAAS,SAAS;AAClE;AAIA,IAAM,WAAN,MAAe;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAW;AACrB,SAAK,aAAa,KAAK,cAAc,CAAC;AAGtC,SAAK,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,UAAU,OAAO,UAAU,CAAC,CAAC,OAAO;AAAA,MACpE,MAAM,KAAK,YAAY;AAAA,MACvB,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE;AACF,SAAK,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAErD,SAAK,eAAe,CAAC;AACrB,eAAW,OAAO,KAAK,MAAM;AAC3B,UAAI,CAAC,IAAI,WAAW,IAAI,QAAQ,WAAW,EAAG;AAC9C,iBAAW,SAAS,IAAI,SAAS;AAC/B,aAAK,aAAa,KAAK,EAAE,MAAM,MAAM,YAAY,GAAG,SAAS,OAAO,IAAI,CAAC;AAAA,MAC3E;AAAA,IACF;AACA,SAAK,aAAa,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAG7D,SAAK,eAAe,oBAAI,IAAI;AAC5B,SAAK,YAAY,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1D,QAAI,KAAK,gBAAgB,OAAO,KAAK,iBAAiB,UAAU;AAC9D,iBAAW,CAAC,SAAS,SAAS,KAAK,OAAO,QAAQ,KAAK,YAAY,GAAG;AACpE,YAAI,OAAO,YAAY,YAAY,OAAO,cAAc,SAAU;AAClE,aAAK,aAAa,IAAI,QAAQ,YAAY,GAAG,EAAE,WAAW,UAAU,YAAY,GAAG,QAAQ,CAAC;AAAA,MAC9F;AAAA,IACF;AAEA,SAAK,qBAAqB,CAAC,GAAG,KAAK,aAAa,QAAQ,CAAC,EACtD,IAAI,CAAC,CAAC,cAAc,EAAE,WAAW,QAAQ,CAAC,OAAO,EAAE,MAAM,cAAc,SAAS,UAAU,EAAE,EAC5F,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,EAChD;AAAA;AAAA,EAGA,OAAO,QAAgB,QAAQ,IAAiB;AAC9C,UAAM,QAAQ,OAAO,YAAY,EAAE,QAAQ,MAAM,GAAG;AACpD,QAAI,CAAC,MAAO,QAAO,CAAC;AAEpB,UAAM,UAAU,CAAC;AACjB,UAAM,QAAQ,WAAW,KAAK,MAAM,KAAK;AACzC,aAAS,IAAI,OAAO,IAAI,KAAK,KAAK,UAAU,QAAQ,SAAS,QAAQ,GAAG,KAAK;AAC3E,UAAI,CAAC,KAAK,KAAK,CAAC,EAAE,KAAK,WAAW,KAAK,EAAG;AAC1C,cAAQ,KAAK,KAAK,KAAK,CAAC,CAAC;AAAA,IAC3B;AAEA,UAAM,aAAa,WAAW,KAAK,cAAc,KAAK;AACtD,aAAS,IAAI,YAAY,IAAI,KAAK,aAAa,UAAU,QAAQ,SAAS,QAAQ,IAAI,KAAK;AACzF,YAAM,QAAQ,KAAK,aAAa,CAAC;AACjC,UAAI,CAAC,MAAM,KAAK,WAAW,KAAK,EAAG;AACnC,cAAQ,KAAK,EAAE,GAAG,MAAM,KAAK,YAAY,SAAS,cAAc,MAAM,QAAQ,CAAC;AAAA,IACjF;AAEA,QAAI,QAAQ,WAAW,KAAK,MAAM,UAAU,GAAG;AAC7C,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,UAAU,QAAQ,SAAS,QAAQ,GAAG,KAAK;AACvE,YAAI,KAAK,KAAK,CAAC,EAAE,KAAK,SAAS,KAAK,EAAG,SAAQ,KAAK,KAAK,KAAK,CAAC,CAAC;AAAA,MAClE;AACA,eAAS,IAAI,GAAG,IAAI,KAAK,aAAa,UAAU,QAAQ,SAAS,QAAQ,IAAI,KAAK;AAChF,cAAM,QAAQ,KAAK,aAAa,CAAC;AACjC,YAAI,MAAM,KAAK,SAAS,KAAK,EAAG,SAAQ,KAAK,EAAE,GAAG,MAAM,KAAK,YAAY,SAAS,cAAc,MAAM,QAAQ,CAAC;AAAA,MACjH;AAAA,IACF;AAEA,QAAI,KAAK,mBAAmB,SAAS,GAAG;AACtC,YAAM,SAAS,WAAW,KAAK,oBAAoB,KAAK;AACxD,eAAS,IAAI,QAAQ,IAAI,KAAK,mBAAmB,UAAU,QAAQ,SAAS,QAAQ,IAAI,KAAK;AAC3F,cAAM,QAAQ,KAAK,mBAAmB,CAAC;AACvC,YAAI,CAAC,MAAM,KAAK,WAAW,KAAK,EAAG;AACnC,cAAM,eAAe,KAAK,UAAU,IAAI,MAAM,SAAS;AACvD,YAAI,aAAc,SAAQ,KAAK,EAAE,GAAG,cAAc,YAAY,eAAe,aAAa,MAAM,QAAQ,CAAC;AAAA,MAC3G;AAEA,UAAI,MAAM,UAAU,GAAG;AACrB,iBAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,UAAU,QAAQ,SAAS,QAAQ,IAAI,KAAK;AACtF,gBAAM,QAAQ,KAAK,mBAAmB,CAAC;AACvC,cAAI,MAAM,KAAK,SAAS,KAAK,KAAK,CAAC,MAAM,KAAK,WAAW,KAAK,GAAG;AAC/D,kBAAM,eAAe,KAAK,UAAU,IAAI,MAAM,SAAS;AACvD,gBAAI,aAAc,SAAQ,KAAK,EAAE,GAAG,cAAc,YAAY,eAAe,aAAa,MAAM,QAAQ,CAAC;AAAA,UAC3G;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,OAAO,oBAAI,IAAI;AACrB,eAAW,OAAO,SAAS;AACzB,YAAM,WAAW,KAAK,IAAI,IAAI,IAAI;AAClC,UAAI,CAAC,YAAa,SAAS,cAAc,CAAC,IAAI,WAAa,MAAK,IAAI,IAAI,MAAM,GAAG;AAAA,IACnF;AACA,UAAM,SAAS,CAAC,GAAG,KAAK,OAAO,CAAC;AAChC,WAAO,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACvC,WAAO,OAAO,MAAM,GAAG,KAAK;AAAA,EAC9B;AACF;AAIA,IAAM,SAAS;AAAA,EACb,SAAS,oBAAI,IAAI;AAAA;AAAA,EACjB,gBAAgB,EAAE,GAAG,gBAAgB;AAAA,EACrC,eAAe,EAAE,GAAG,eAAe;AAAA,EAEnC,MAAM,cAAc;AAClB,UAAM,UAAU,OAAO,MAAM,wBAAwB,CAAC;AACtD,aAAS,OAAO,MAAM,uBAAuB;AAC7C,QAAI,CAAC,QAAQ;AACX,WAAK,QAAQ,MAAM;AACnB;AAAA,IACF;AACA,UAAM,KAAK,YAAY,IAAI;AAC3B,UAAM,SAAS,QAAQ,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC;AACzD,UAAM,WAAW,CAAC,GAAG,KAAK,QAAQ,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,SAAS,CAAC,CAAC;AAC5E,aAAS,QAAQ,CAAC,MAAM,KAAK,QAAQ,OAAO,CAAC,CAAC;AAC9C,UAAM,QAAQ,IAAI,OAAO,IAAI,OAAO,SAAS;AAC3C,UAAI;AACF,cAAM,OAAO,MAAM,UAAU,GAAG,OAAO,GAAG,iBAAiB,IAAI,EAAE;AACjE,YAAI,CAAC,MAAM,GAAI,OAAM,IAAI,MAAM,GAAG,MAAM,MAAM,EAAE;AAChD,cAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,aAAK,QAAQ,IAAI,MAAM,IAAI,SAAS,IAAI,CAAC;AAEzC,YAAI,KAAK,YAAY;AACnB,iBAAO,QAAQ,KAAK,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,GAAG,MAAM;AACrD,kBAAM,WAAgB;AACtB,gBAAI,SAAS,MAAO,MAAK,eAAe,EAAE,IAAI,SAAS;AACvD,gBAAI,SAAS,KAAM,MAAK,cAAc,EAAE,IAAI,SAAS;AAAA,UACvD,CAAC;AAAA,QACH;AACA,cAAM,KAAK,YAAY,IAAI;AAC3B,YAAI,gBAAgB,EAAE,QAAQ,MAAM,MAAM,KAAK,MAAM,UAAU,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AAC7F,cAAM,oBAAoB,IAAI,IAAI,KAAK,EAAE;AAAA,MAC3C,SAAS,GAAG;AACV,YAAI,gBAAgB,EAAE,QAAQ,MAAM,OAAO,EAAE,CAAC;AAAA,MAChD;AAAA,IACF,CAAC,CAAC;AAAA,EACJ;AAAA,EAEA,UAAU,QAAQ,QAAQ,IAAI;AAC5B,QAAI,KAAK,QAAQ,SAAS,EAAG,QAAO,CAAC;AACrC,UAAM,MAAM,CAAC;AACb,SAAK,QAAQ,QAAQ,CAAC,UAAU;AAC9B,UAAI,KAAK,GAAG,MAAM,OAAO,QAAQ,KAAK,CAAC;AAAA,IACzC,CAAC;AAED,UAAM,OAAO,oBAAI,IAAI;AACrB,QAAI,QAAQ,CAAC,QAAQ;AACnB,YAAM,WAAW,KAAK,IAAI,IAAI,IAAI;AAClC,UAAI,CAAC,YAAY,IAAI,QAAQ,SAAS,MAAO,MAAK,IAAI,IAAI,MAAM,GAAG;AAAA,IACrE,CAAC;AACD,UAAM,UAAU,CAAC,GAAG,KAAK,OAAO,CAAC;AACjC,YAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACxC,WAAO,QAAQ,MAAM,GAAG,KAAK;AAAA,EAC/B;AACF;AAgBA,SAAS,eAAe,UAAU;AAChC,QAAM,EAAE,OAAO,eAAe,IAAI;AAClC,MAAI,mBAAmB,SAAS,aAAc,QAAO;AAErD,MAAI,YAAY;AAChB,SAAO,YAAY,GAAG;AACpB,UAAM,KAAK,MAAM,YAAY,CAAC;AAC9B,QAAI,OAAO,OAAO,OAAO,KAAM;AAC/B;AAAA,EACF;AAEA,SAAO,YAAY,kBAAkB,MAAM,SAAS,MAAM,IAAK;AAC/D,QAAM,UAAU,MAAM,MAAM,WAAW,cAAc;AAErD,QAAM,SAAS,MAAM,MAAM,GAAG,cAAc;AAC5C,QAAM,WAAW,OAAO,YAAY,GAAG;AACvC,QAAM,YAAY,OAAO,YAAY,GAAG;AACxC,MAAI,WAAW,aAAa,YAAY,WAAW;AACjD,UAAM,SAAS,OAAO,MAAM,WAAW,CAAC;AACxC,UAAM,QAAQ,OAAO,QAAQ,GAAG;AAChC,QAAI,QAAQ,GAAG;AAGb,aAAO,EAAE,MAAM,IAAI,OAAO,UAAU,KAAK,gBAAgB,MAAM,OAAO;AAAA,IACxE;AACA,QAAI,OAAO,MAAM,GAAG,KAAK,EAAE,YAAY,MAAM,QAAQ;AACnD,aAAO,EAAE,MAAM,OAAO,MAAM,QAAQ,CAAC,GAAG,OAAO,UAAU,KAAK,gBAAgB,MAAM,OAAO;AAAA,IAC7F;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,WAAW,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,EAAE,SAAS,IAAI,GAAG;AAChE,WAAO,EAAE,MAAM,QAAQ,MAAM,CAAC,GAAG,OAAO,WAAW,KAAK,gBAAgB,MAAM,WAAW;AAAA,EAC3F;AAEA,MAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,WAAO,EAAE,MAAM,QAAQ,MAAM,CAAC,GAAG,OAAO,WAAW,KAAK,gBAAgB,MAAM,SAAS;AAAA,EACzF;AAEA,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,EAAE,MAAM,SAAS,OAAO,WAAW,KAAK,gBAAgB,MAAM,MAAM;AAC7E;AAGA,IAAM,qBAAqB;AAG3B,SAAS,sBAAsB,MAAM;AACnC,SAAO,KAAK,QAAQ,WAAW,MAAM;AACvC;AAQA,SAAS,mBAAmB,UAAU,MAAM,MAAM;AAChD,QAAM,OAAO,eAAe,QAAQ;AACpC,MAAI,CAAC,QAAQ,KAAK,SAAS,KAAM;AACjC,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,SAAS,MAAM,MAAM,GAAG,KAAK,KAAK;AACxC,QAAM,QAAQ,MAAM,MAAM,KAAK,GAAG;AAClC,MAAI;AACJ,MAAI,SAAS,QAAQ;AACnB,gBAAY,SAAS,KAAK,WAAW,KAAK,IAAI;AAAA,EAChD,WAAW,SAAS,YAAY;AAC9B,gBAAY,KAAK,KAAK,WAAW,KAAK,IAAI;AAAA,EAC5C,OAAO;AACL;AAAA,EACF;AACA,WAAS,QAAQ,SAAS,YAAY;AACtC,QAAM,YAAY,OAAO,SAAS,UAAU;AAC5C,WAAS,iBAAiB;AAC1B,WAAS,eAAe;AACxB,MAAI,OAAOK,iBAAgB,WAAY,CAAAA,aAAY,QAAQ;AAC7D;AAGA,SAAS,UAAU,UAAU,SAAS,OAAO,OAAO;AAClD,QAAM,OAAO,eAAe,QAAQ;AACpC,MAAI,CAAC,QAAS,KAAK,SAAS,SAAS,KAAK,SAAS,SAAW;AAC9D,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,SAAS,MAAM,MAAM,GAAG,KAAK,KAAK;AACxC,QAAM,QAAQ,MAAM,MAAM,KAAK,GAAG;AAElC,QAAM,WAAW,OAAO,MAAM,6BAA6B;AAC3D,QAAM,MAAM,WAAW,MAAM;AAC7B,QAAM,iBAAiB,OAAO,SAAS,KAAK,OAAO,QAAQ,EAAE,SAAS,KAAK,CAAC,OAAO,QAAQ,EAAE,SAAS,GAAG;AACzG,QAAM,SAAS,iBAAiB,GAAG,GAAG,MAAM;AAC5C,MAAI,SAAS,GAAG,GAAG;AACnB,MAAI,MAAM,SAAS,KAAK,MAAM,UAAU,EAAE,WAAW,GAAG,EAAG,UAAS;AAGpE,QAAM,kBAAkB,OAAO,MAAM,iCAAiC;AACtE,MAAI,OAAO;AACX,MAAI,SAAS,WAAW,CAAC,gBAAiB,QAAO,KAAK,QAAQ,MAAM,GAAG;AAEvE,MAAI,KAAK,SAAS,YAAY,OAAO,MAAM,8BAA+B,QAAO,IAAI,IAAI;AACzF,QAAM,YAAY,GAAG,MAAM,GAAG,sBAAsB,IAAI,CAAC,GAAG,MAAM;AAClE,WAAS,QAAQ,OAAO,QAAQ,KAAK,OAAO,QAAQ,EAAE,SAAS,IAAI,MAAM,MAAM,YAAY,MAAM,UAAU;AAE3G,QAAM,YAAY,OAAO,QAAQ,EAAE,UAAU,OAAO,QAAQ,EAAE,SAAS,IAAI,IAAI,KAAK,UAAU;AAC9F,WAAS,iBAAiB;AAC1B,WAAS,eAAe;AAExB,MAAI,OAAOA,iBAAgB,WAAY,CAAAA,aAAY,QAAQ;AAC7D;AAIA,IAAM,WAAW;AAAA,EACf,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,SAAS,CAAC;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,gBAAgB;AAAA,EAEhB,OAAO;AACL,SAAK,KAAK,SAAS,cAAc,KAAK;AACtC,SAAK,GAAG,YAAY;AACpB,SAAK,GAAG,MAAM,UAAU;AACxB,SAAK,SAAS,SAAS,cAAc,IAAI;AACzC,SAAK,OAAO,YAAY;AACxB,SAAK,GAAG,YAAY,KAAK,MAAM;AAC/B,aAAS,KAAK,YAAY,KAAK,EAAE;AACjC,SAAK,GAAG,iBAAiB,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC;AAC/D,SAAK,GAAG,iBAAiB,SAAS,CAAC,MAAM;AACvC,YAAM,KAAK,EAAE,OAAO,QAAQ,IAAI;AAChC,UAAI,CAAC,GAAI;AACT,YAAM,MAAM,CAAC,GAAG,KAAK,OAAO,QAAQ,EAAE,QAAQ,EAAE;AAChD,UAAI,OAAO,KAAK,MAAM,KAAK,QAAQ,QAAQ;AACzC,aAAK,gBAAgB;AACrB,aAAK,OAAO;AAAA,MACd;AAAA,IACF,CAAC;AACD,SAAK,iBAAiB,IAAI,eAAe,MAAM;AAC7C,UAAI,KAAK,QAAS,MAAK,SAAS;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAEA,KAAK,SAAS,UAAU,OAAO;AAC7B,QAAI,QAAQ,WAAW,GAAG;AAAE,WAAK,KAAK;AAAG;AAAA,IAAQ;AAEjD,QAAI,KAAK,YAAY,KAAK,aAAa,SAAU,MAAK,KAAK;AAC3D,QAAI,KAAK,aAAa,SAAU,MAAK,gBAAgB,QAAQ,QAAQ;AACrE,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,QAAQ,SAAS;AACtB,SAAK,gBAAgB;AACrB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,GAAG,MAAM,UAAU;AACxB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO;AACL,QAAI,KAAK,SAAU,MAAK,gBAAgB,UAAU,KAAK,QAAQ;AAC/D,SAAK,WAAW;AAChB,SAAK,GAAG,MAAM,UAAU;AACxB,SAAK,UAAU;AACf,SAAK,UAAU,CAAC;AAChB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,SAAS;AACP,UAAM,kBAAkB,OAAO,MAAM,iCAAiC;AACtE,UAAM,YAAY,KAAK,MAAM,YAAY,EAAE,QAAQ,MAAM,GAAG;AAC5D,SAAK,OAAO,gBAAgB;AAC5B,SAAK,QAAQ,QAAQ,CAAC,KAAK,MAAM;AAC/B,YAAM,KAAK,SAAS,cAAc,IAAI;AACtC,UAAI,MAAM,KAAK,cAAe,IAAG,UAAU,IAAI,UAAU;AACzD,YAAM,MAAM,SAAS,cAAc,MAAM;AACzC,UAAI,YAAY;AAChB,YAAM,OAAO,IAAI,QAAQ;AACzB,YAAM,YAAY,YAAY,IAAI,KAAK,YAAY;AACnD,UAAI,MAAM,QAAQ,UAAU,SAAS,OAAO,eAAe,IAAI,QAAQ,KAAK;AAC5E,UAAI,cAAc,UAAU;AAC5B,UAAI,QAAQ,SAAS,QAAS,OAAO,cAAc,IAAI,QAAQ,KAAK,KAAM;AAC1E,YAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,WAAK,YAAY;AAEjB,YAAM,cAAc,SAAS;AAC7B,YAAM,UAAW,eAAe,CAAC,kBAAmB,IAAI,QAAQ,QAAQ,MAAM,GAAG,IAAI,IAAI;AACzF,YAAM,iBAAiB,IAAI,KAAK,QAAQ,SAAS;AACjD,UAAI,kBAAkB,KAAK,UAAU,SAAS,GAAG;AAC/C,cAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,cAAc,QAAQ,MAAM,gBAAgB,iBAAiB,UAAU,MAAM;AAClF,aAAK;AAAA,UACH,SAAS,eAAe,QAAQ,MAAM,GAAG,cAAc,CAAC;AAAA,UACxD;AAAA,UACA,SAAS,eAAe,QAAQ,MAAM,iBAAiB,UAAU,MAAM,CAAC;AAAA,QAC1E;AAAA,MACF,OAAO;AACL,aAAK,cAAc;AAAA,MACrB;AAEA,UAAI,iBAAiB;AACrB,UAAI,IAAI,eAAe,QAAS,kBAAiB,IAAI;AAAA,eAC5C,IAAI,eAAe,cAAe,kBAAiB,IAAI;AAChE,UAAI,gBAAgB;AAClB,cAAM,oBAAqB,eAAe,CAAC,kBAAmB,eAAe,QAAQ,MAAM,GAAG,IAAI;AAClG,cAAM,kBAAkB,eAAe,YAAY;AACnD,cAAM,kBAAkB,gBAAgB,QAAQ,SAAS;AACzD,cAAM,SAAS,IAAI,eAAe,gBAAgB,gBAAgB;AAClE,cAAM,SAAS,IAAI,eAAe,gBAAgB,KAAK;AACvD,aAAK,YAAY,SAAS,eAAe,MAAM,CAAC;AAChD,YAAI,mBAAmB,KAAK,UAAU,SAAS,GAAG;AAChD,gBAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,eAAK,cAAc,kBAAkB,MAAM,iBAAiB,kBAAkB,UAAU,MAAM;AAC9F,eAAK;AAAA,YACH,SAAS,eAAe,kBAAkB,MAAM,GAAG,eAAe,CAAC;AAAA,YACnE;AAAA,YACA,SAAS,eAAe,kBAAkB,MAAM,kBAAkB,UAAU,MAAM,CAAC;AAAA,UACrF;AAAA,QACF,OAAO;AACL,eAAK,YAAY,SAAS,eAAe,iBAAiB,CAAC;AAAA,QAC7D;AACA,YAAI,OAAQ,MAAK,YAAY,SAAS,eAAe,MAAM,CAAC;AAAA,MAC9D;AACA,YAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,YAAM,YAAY;AAClB,YAAM,cAAc,IAAI,QAAQ,IAAI,YAAY,IAAI,KAAK,IAAI;AAC7D,SAAG,OAAO,KAAK,MAAM,KAAK;AAC1B,SAAG,iBAAiB,cAAc,MAAM;AACtC,aAAK,gBAAgB;AACrB,aAAK,gBAAgB;AAAA,MACvB,CAAC;AACD,WAAK,OAAO,YAAY,EAAE;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,WAAW;AACT,QAAI,CAAC,KAAK,SAAU;AACpB,UAAM,OAAO,KAAK,SAAS,sBAAsB;AAEjD,UAAM,eAAe,eAAe,KAAK,QAAQ;AACjD,UAAM,UAAU,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,cAAc,KAAK,MAAM,CAAC;AACtE,UAAM,aAAa,OAAO,cAAc;AACxC,UAAM,aAAa,KAAK,IAAI,KAAK,GAAG,cAAc,GAAG;AACrD,QAAI,cAAc,cAAc,cAAc,UAAU,KAAK,KAAK;AAChE,WAAK,GAAG,MAAM,MAAM,GAAG,UAAU,CAAC;AAAA,IACpC,OAAO;AACL,WAAK,GAAG,MAAM,MAAM,GAAG,UAAU,aAAa,CAAC;AAAA,IACjD;AACA,SAAK,GAAG,MAAM,OAAO,GAAG,KAAK,IAAI;AACjC,SAAK,GAAG,MAAM,QAAQ,GAAG,KAAK,KAAK;AAAA,EACrC;AAAA,EAEA,kBAAkB;AAChB,KAAC,GAAG,KAAK,OAAO,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM;AAC3C,SAAG,UAAU,OAAO,YAAY,MAAM,KAAK,aAAa;AAAA,IAC1D,CAAC;AACD,UAAM,WAAW,KAAK,OAAO,SAAS,KAAK,aAAa;AACxD,QAAI,SAAU,UAAS,eAAe,EAAE,OAAO,UAAU,CAAC;AAAA,EAC5D;AAAA,EAEA,SAAS,KAAK;AACZ,QAAI,KAAK,QAAQ,WAAW,EAAG;AAC/B,QAAI,KAAK,kBAAkB,IAAI;AAC7B,WAAK,gBAAgB,MAAM,IAAI,IAAI,KAAK,QAAQ,SAAS;AAAA,IAC3D,OAAO;AACL,WAAK,iBAAiB,KAAK,gBAAgB,MAAM,KAAK,QAAQ,UAAU,KAAK,QAAQ;AAAA,IACvF;AACA,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,SAAS;AACP,QAAI,KAAK,gBAAgB,KAAK,KAAK,iBAAiB,KAAK,QAAQ,QAAQ;AAEvE,UAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,aAAK,gBAAgB;AACrB,aAAK,gBAAgB;AAAA,MACvB;AACA;AAAA,IACF;AACA,UAAM,SAAS,KAAK,QAAQ,KAAK,aAAa;AAC9C,QAAI,KAAK,UAAU;AACjB,UAAI,OAAO,SAAS,UAAU,OAAO,SAAS,YAAY;AACxD,2BAAmB,KAAK,UAAU,QAAQ,OAAO,IAAI;AAAA,MACvD,OAAO;AAEL,kBAAU,KAAK,UAAU,OAAO,WAAW,OAAO,MAAM,OAAO,IAAI;AAAA,MACrE;AAAA,IACF;AACA,SAAK,KAAK;AAAA,EACZ;AACF;AAIA,IAAI;AACJ,IAAI;AAEJ,SAAS,QAAQ,UAAU;AACzB,MAAI,CAAC,OAAQ;AAEb,MAAI,SAAS,QAAQ,cAAc,IAAK;AACxC,QAAM,WAAW,OAAO,MAAM,0BAA0B;AACxD,QAAM,OAAO,eAAe,QAAQ;AACpC,MAAI,CAAC,MAAM;AACT,aAAS,KAAK;AACd;AAAA,EACF;AAEA,MAAI,YAAY;AAChB,MAAI,KAAK,SAAS,UAAU,KAAK,SAAS,WAAY,aAAY;AAAA,WACzD,KAAK,SAAS,SAAU,aAAY;AAC7C,MAAI,KAAK,KAAK,SAAS,WAAW;AAChC,aAAS,KAAK;AACd;AAAA,EACF;AACA,eAAa,aAAa;AAC1B,kBAAgB,WAAW,MAAM;AAC/B,QAAI;AACJ,QAAI,KAAK,SAAS,QAAQ;AACxB,gBAAU,SAAS,YAAY,KAAK,IAAI;AAAA,IAC1C,WAAW,KAAK,SAAS,YAAY;AACnC,gBAAU,SAAS,gBAAgB,KAAK,IAAI;AAAA,IAC9C,WAAW,KAAK,SAAS,UAAU;AAEjC,gBAAU,OAAO,UAAU,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,kBAAkB;AAAA,IACvF,OAAO;AACL,YAAM,aAAa,OAAO,UAAU,KAAK,IAAI;AAC7C,YAAM,eAAe,SAAS,iBAAiB,KAAK,IAAI;AAExD,gBAAU,CAAC,GAAG,cAAc,GAAG,UAAU;AAAA,IAC3C;AACA,aAAS,KAAK,SAAS,UAAU,KAAK,IAAI;AAAA,EAC5C,GAAG,GAAG;AACR;AAEA,SAAS,UAAU,GAAG;AACpB,MAAI,CAAC,SAAS,QAAS;AACvB,MAAI,EAAE,YAAa;AAGnB,QAAM,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE;AAChD,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AACH,UAAI,YAAa;AACjB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,eAAS,SAAS,CAAC;AACnB;AAAA,IACF,KAAK;AACH,UAAI,YAAa;AACjB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,eAAS,SAAS,EAAE;AACpB;AAAA,IACF,KAAK;AACH,UAAI,YAAa;AACjB,UAAI,SAAS,iBAAiB,GAAG;AAC/B,UAAE,eAAe;AACjB,UAAE,gBAAgB;AAClB,iBAAS,OAAO;AAAA,MAClB;AACA;AAAA,IACF,KAAK;AACH,UAAI,YAAa;AACjB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,eAAS,OAAO;AAChB;AAAA,IACF,KAAK;AACH,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,eAAS,KAAK;AACd;AAAA,IACF;AACE;AAAA,EACJ;AACF;AAGA,SAAS,mBAAmB,UAAU;AACpC,WAAS,iBAAiB,SAAS,MAAM,QAAQ,QAAQ,CAAC;AAC1D,WAAS,iBAAiB,WAAW,SAAS;AAC9C,WAAS,iBAAiB,oBAAoB,MAAM;AAAE,aAAS,QAAQ,YAAY;AAAA,EAAK,CAAC;AACzF,WAAS,iBAAiB,kBAAkB,MAAM;AAAE,WAAO,SAAS,QAAQ;AAAA,EAAW,CAAC;AACxF,WAAS,iBAAiB,WAAW,MAAM;AACzC,QAAI,SAAS,WAAW,SAAS,YAAY,SAAS,aAAa,SAAU,UAAS,KAAK;AAE3F,iBAAa,aAAa;AAC1B,oBAAgB;AAEhB,YAAQ,QAAQ;AAAA,EAClB,CAAC;AACD,WAAS,iBAAiB,YAAY,MAAM;AAE1C,iBAAa,aAAa;AAC1B,oBAAgB,WAAW,MAAM,SAAS,KAAK,GAAG,GAAG;AAAA,EACvD,CAAC;AACH;AAIA,IAAM,aAAa;AAAA,EACjB;AAAA,EAAkB;AAAA,EAClB;AAAA,EAAkB;AAAA,EAClB;AAAA,EAAkB;AAAA,EAClB;AAAA,EAAgB;AAClB;AAIA,SAAS,oBAAoB;AAC3B,QAAM,UAAU,CAAC,GAAG,UAAU,EAAE,iBAAiB,sBAAsB,CAAC;AACxE,WAAS,OAAO,MAAM,uBAAuB;AAC7C,UAAQ,QAAQ,CAAC,QAAQ;AACvB,QAAI,UAAU,OAAO,uBAAuB,MAAM;AAClD,QAAI,UAAU,OAAO,yBAAyB,CAAC,MAAM;AACrD,QAAI,cAAc,UAAU,MAAM;AAChC,eAAS,CAAC;AACV,aAAO,KAAK,sBAAsB,CAAC;AACnC,UAAI,UAAU,OAAO,uBAAuB,MAAM;AAClD,UAAI,UAAU,OAAO,yBAAyB,CAAC,MAAM;AAAA,IACvD;AAAA,EACF,CAAC;AACH;AAKA,IAAI,gCAAgC;AACpC,SAAS,oBAAoB;AAC3B,QAAM,QAAQ,OAAO,yBAAyB,oBAAoB,WAAW,OAAO;AACpF,MAAI,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK;AAC9B,QAAI,CAAC,+BAA+B;AAClC,UAAI,gBAAgB,EAAE,QAAQ,WAAW,QAAQ,yDAAyD,CAAC;AAC3G,sCAAgC;AAAA,IAClC;AACA;AAAA,EACF;AACA,QAAM,WAAW,UAAU,EAAE,iBAAiB,uCAAuC;AACrF,aAAWC,OAAM,UAAU;AACzB,UAAM,WAAWA,IAAG,cAAc,UAAU;AAC5C,QAAI,CAAC,YAAY,SAAS,gBAAiB;AAC3C,aAAS,kBAAkB;AAC3B,WAAO,eAAe,UAAU,SAAS;AAAA,MACvC,IAAI,UAAU;AACZ,cAAM,WAAW,MAAM,IAAI,KAAK,QAAQ;AACxC,cAAM,IAAI,KAAK,UAAU,QAAQ;AACjC,YAAI,aAAa,YAAY,UAAU;AACrC,cAAI;AACF,kBAAM,MAAM,KAAK,MAAM,QAAQ;AAC/B,uBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,GAAG,EAAG,QAAO,KAAK,GAAG,IAAI;AACjE,6BAAiB,uBAAuB;AAAA,UAC1C,QAAQ;AAAA,UAAuD;AAAA,QACjE;AAAA,MACF;AAAA,MACA,MAAM;AAAE,eAAO,MAAM,IAAI,KAAK,QAAQ;AAAA,MAAG;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;AAIA,eAAsB,mBAAmB;AACvC,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,UAAU,OAAO,MAAM,wBAAwB,CAAC;AACtD,WAAS,OAAO,MAAM,uBAAuB;AAC7C,MAAI,gBAAgB,EAAE,QAAQ,QAAQ,CAAC;AAEvC,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBpB,WAAS,KAAK,YAAY,KAAK;AAC/B,WAAS,KAAK;AACd,QAAM,OAAO,YAAY;AACzB,WAAS,QAAQ;AAEjB,MAAI,WAAW;AACf,aAAW,QAAQ,CAAC,OAAO;AACzB,UAAM,WAAW,UAAU,EAAE,cAAc,IAAI,EAAE,qBAAqB;AACtE,QAAI,UAAU;AACZ,yBAAmB,QAAQ;AAC3B;AAAA,IACF;AAAA,EACF,CAAC;AAGD,iBAAe,yBAAyB;AACtC,UAAM,YAAY,OAAO,MAAM,uBAAuB;AACtD,UAAM,aAAa,OAAO,MAAM,wBAAwB,CAAC;AACzD,UAAM,cAAc,CAAC,GAAG,OAAO,QAAQ,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG;AAC9D,UAAM,UAAU,CAAC,GAAG,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG;AAC/C,QAAK,gBAAgB,WAAa,WAAW,WAAY;AACvD,UAAI,gBAAgB,EAAE,QAAQ,WAAW,CAAC;AAC1C,YAAM,OAAO,YAAY;AACzB,eAAS;AACT,wBAAkB;AAAA,IACpB;AACA,aAAS,QAAQ;AAAA,EACnB;AACA,mBAAiB,sBAAsB;AAEvC,oBAAkB;AAClB,oBAAkB;AAClB,kBAAgB,iBAAiB;AACjC,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,gBAAgB,EAAE,UAAU,OAAO,OAAO,QAAQ,MAAM,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AACvF,QAAM,oBAAoB,KAAK,EAAE;AACnC;;;AC5yBA,IAAI,gBAAyC;AAC7C,IAAM,aAAa,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK;AAC/K,IAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM,CAAC;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,eAAe;AAAA;AAAA,EACf,gBAAgB;AAAA;AAClB;AACA,IAAI;AACJ,IAAM,gBAAgB,kBAAkB;AAExC,eAAe,cAAc;AAC3B,eAAa,aAAa;AAC1B,kBAAgB,WAAW,MAAM;AAC/B,QAAI,eAAe,WAAW,MAAM,WAAW,MAAM;AACrD,UAAM,QAAQ,WAAW,QAAQ,WAAW,IAAI;AAChD,eAAW,SAAS,YAAY,QAAQ,KAAK,WAAW,MAAM;AAC9D,eAAW,IAAI,YAAY,WAAW;AAEtC,eAAW,WAAW;AACtB,eAAW,OAAO,CAAC;AACnB,eAAW,OAAO,WAAW;AAC7B,WAAO,KAAK,YAAY,WAAW;AACnC,aAAS;AAAA,EACX,GAAG,GAAG;AACR;AAEA,eAAe,cAAc;AAC3B,eAAa,aAAa;AAC1B,aAAW,SAAS;AACpB,MAAI,eAAe,WAAW,MAAM;AACpC,QAAM,QAAQ,WAAW,QAAQ,WAAW,MAAM;AAClD,aAAW,SAAS,WAAY,QAAS,WAAW,MAAM;AAC1D,aAAW,IAAI,YAAY,WAAW;AACtC,aAAW,WAAW;AACtB,aAAW,OAAO,CAAC;AACnB,SAAO,KAAK,YAAY,WAAW;AACnC,WAAS;AACX;AAEA,eAAe,gBAAgB;AAC7B,aAAW,OAAO,SAAS,cAAc,KAAK;AAC9C,aAAW,KAAK,YAAY;AAC5B,aAAW,KAAK,KAAK;AACrB,aAAW,KAAK,YAAY;AAC5B,YAAU,EAAE,YAAY,WAAW,IAAI;AACvC,aAAW,MAAM,UAAU,EAAE,eAAe,kBAAkB;AAC9D,MAAI,CAAC,WAAW,KAAK;AACnB,eAAW,MAAM,SAAS,cAAc,KAAK;AAC7C,eAAW,IAAI,YAAY;AAC3B,eAAW,IAAI,KAAK;AACpB,cAAU,EAAE,YAAY,WAAW,GAAG;AAAA,EACxC;AACA,aAAW,IAAI,YAAY,WAAW;AACtC,aAAW,IAAI,aAAa;AAC5B,aAAW,IAAI,UAAU;AACzB,MAAI,OAAO,KAAK,aAAa,OAAQ,YAAW,OAAO;AACvD,MAAI,OAAO,KAAK,aAAa,kBAAmB,YAAW,OAAO;AAClE,MAAI,OAAO,KAAK,aAAa,cAAe,YAAW,OAAO;AAE9D,MAAI,WAAW,SAAS,GAAG;AACzB,QAAI,eAAe;AACjB,gBAAU,EAAE,iBAAiB,cAAc,oBAAoB;AAC/D,gBAAU,EAAE,iBAAiB,YAAY,oBAAoB;AAAA,IAC/D;AACA,cAAU,EAAE,iBAAiB,eAAe,oBAAoB;AAChE,cAAU,EAAE,iBAAiB,cAAc,oBAAoB;AAAA,EACjE;AACA,MAAI,CAAC,cAAe,uBAAsB;AAC5C;AAEA,eAAe,cAAc,SAAS,UAAU;AAC9C,MAAI,WAAW,mBAAmB,WAAW,WAAW,KAAK,UAAU,SAAS,cAAc,GAAG;AAC/F,UAAM,OAAO,WAAW,KAAK,cAAc,wBAAwB;AACnE,QAAI,KAAM,MAAK,MAAM,UAAU;AAC/B,eAAW,KAAK,UAAU,IAAI,kBAAkB;AAChD,eAAW,MAAM;AACf,YAAM,cAAc,WAAW,KAAK,cAAc,eAAe;AACjE,UAAI,YAAa,aAAY,UAAU,IAAI,MAAM;AAAA,IACnD,GAAG,GAAG;AAAA,EACR;AACF;AAEA,eAAe,qBAAqB,GAAG;AACrC,MAAI,EAAE,OAAO,WAAW,EAAE,OAAO,QAAQ,KAAM,aAAY,CAAC;AAC9D;AAEA,eAAe,qBAAqB,GAAG;AACrC,MAAI,EAAE,OAAO,WAAW,EAAE,OAAO,QAAQ,KAAM,aAAY,CAAC;AAC9D;AAEA,eAAe,YAAY,GAAG;AAC5B,MAAI,WAAW,eAAe;AAC5B,iBAAa,WAAW,aAAa;AACrC,eAAW,gBAAgB;AAAA,EAC7B;AAEA,aAAW,KAAK,UAAU,OAAO,kBAAkB;AACnD,aAAW,iBAAiB,EAAE;AAE9B,MAAI,EAAE,OAAO,QAAQ,MAAM;AACzB,UAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASrB,QAAI,UAAU;AAAA;AAAA,aAEL,EAAE,OAAO,WAAW;AAAA,UACvB,EAAE,OAAO,QAAQ,WAAW,eAAe,EAAE;AAAA;AAAA;AAAA,QAG/C,EAAE,OAAO,QAAQ,IAAI;AAAA;AAEzB,QAAI,EAAE,OAAO,QAAQ,SAAU,YAAW,0DAA0D,EAAE,OAAO,QAAQ,QAAQ;AAC7H,QAAI,EAAE,OAAO,QAAQ,QAAQ;AAC3B,YAAM,aAAa,EAAE,OAAO,QAAQ;AACpC,UAAI,aAAa;AACjB,UAAI,eAAe,QAAS,cAAa;AAAA,eAChC,eAAe,SAAU,cAAa;AAC/C,UAAI,YAAY;AACd,mBAAW;AAAA;AAAA;AAAA,gDAG6B,UAAU;AAAA;AAAA;AAAA,MAGpD;AAAA,IACF;AAEA,eAAW,KAAK,YAAY;AAC5B,eAAW,KAAK,UAAU,IAAI,cAAc;AAE5C,QAAI,EAAE,UAAU,OAAO,aAAa,EAAG,YAAW,KAAK,UAAU,IAAI,cAAc;AAAA,QAC9E,YAAW,KAAK,UAAU,OAAO,cAAc;AAEpD,QAAI,EAAE,OAAO,QAAQ,UAAU;AAC7B,YAAM,OAAO,WAAW,KAAK,cAAc,wBAAwB;AACnE,YAAM,eAAe,WAAW,KAAK,cAAc,gBAAgB;AACnE,UAAI,QAAQ,cAAc;AACxB,mBAAW,MAAM;AACf,eAAK,UAAU,IAAI,QAAQ;AAC3B,uBAAa,UAAU,IAAI,SAAS;AAAA,QACtC,GAAG,GAAG;AAAA,MACR;AACA,iBAAW,gBAAgB,WAAW,MAAM,cAAc,EAAE,QAAQ,EAAE,OAAO,QAAQ,QAAQ,GAAG,GAAI;AAAA,IACtG;AAAA,EACF;AACF;AAEA,eAAe,YAAY,GAAG;AAC5B,MAAI,WAAW,eAAe;AAC5B,iBAAa,WAAW,aAAa;AACrC,eAAW,gBAAgB;AAAA,EAC7B;AACA,aAAW,KAAK,UAAU,OAAO,gBAAgB,kBAAkB;AACnE,aAAW,iBAAiB;AAC9B;AAqBA,eAAe,cAAc,gBAAgB,MAAM;AACjD,MAAI,cAAe,iBAAgB,cAAc,MAAM,GAAG,EAAE,CAAC;AAC7D,MAAI,kBAAkB,QAAQ;AAC5B,QAAI;AACF,iBAAW,SAAS,UAAU,aAAa,UAAU,UAAU,SAAS,UAAU,UAAU,CAAC,IAAI,UAAU;AAC3G,iBAAW,SAAS,WAAW,OAAO,MAAM,GAAG,EAAE,CAAC;AAClD,iBAAW,OAAO,WAAW;AAAA,IAC/B,SAAS,GAAG;AACV,iBAAW,SAAS;AACpB,UAAI,aAAa,CAAC;AAAA,IACpB;AAAA,EACF,OAAO;AACL,eAAW,SAAS,iBAAiB;AACrC,eAAW,OAAO,WAAW;AAAA,EAC/B;AACA,MAAI,aAAa,EAAE,MAAM,eAAe,QAAQ,WAAW,OAAO,CAAC;AAEnE,MAAI,OAAY,CAAC;AACjB,MAAI;AACF,QAAI,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,0BAA0B,WAAW,MAAM,OAAO;AAC7F,QAAI,CAAC,OAAO,CAAC,IAAI,IAAI;AACnB,iBAAW,SAAS;AACpB,YAAM,MAAM,UAAU,GAAG,OAAO,OAAO,0BAA0B,WAAW,MAAM,OAAO;AAAA,IAC3F;AACA,WAAO,MAAM,IAAI,KAAK;AAAA,EACxB,QAAQ;AAAA,EAAO;AAEf,MAAI;AACF,UAAM,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,4BAA4B,WAAW,MAAM,OAAO;AACjG,QAAI,OAAO,IAAI,GAAI,MAAK,WAAW,MAAM,IAAI,KAAK;AAAA,EACpD,QAAQ;AAAA,EAAO;AAEf,SAAO;AACT;AAEA,eAAe,mBAAmBC,KAAI,MAAM;AAC1C,MAAIA,IAAG,SAAS,WAAW,KAAKA,IAAG,kBAAkB,UAAU,SAAS,WAAW,EAAG;AACtF,MAAIA,IAAG,cAAc,MAAM,EAAG,CAAAA,MAAKA,IAAG,cAAc,MAAM;AAC1D,MAAIA,IAAG,cAAc,KAAK,EAAG,CAAAA,MAAKA,IAAG,cAAc,KAAK;AACxD,MAAIA,IAAG,UAAU,SAAS,WAAW,EAAG;AACxC,MAAIA,IAAG,QAAQ,UAAU;AACvB,IAAAA,MAAKA,IAAG,qBAAqBA,IAAG,cAAcA,IAAG,QAAQ,QAAQ;AACjE,uBAAmBA,KAAI,IAAI;AAC3B;AAAA,EACF;AACA,EAAAA,IAAG,cAAc;AACnB;AAEA,eAAe,QAAQA,KAAI,OAAO;AAChC,MAAI,WAAW,SAAS,GAAG;AACzB,IAAAA,IAAG,QAAQ,MAAM;AAAA,EACnB,WAAW,WAAW,SAAS,GAAG;AAChC,IAAAA,IAAG,QAAQ,OAAO,MAAM;AACxB,QAAI,MAAM,YAAY,MAAM,SAAS,SAAS,EAAG,CAAAA,IAAG,QAAQ,WAAW,MAAM;AAC7E,QAAI,MAAM,UAAU,MAAM,OAAO,SAAS,EAAG,CAAAA,IAAG,QAAQ,SAAS,MAAM;AAAA,EACzE,OAAO;AAAA,EAEP;AACF;AAuDA,eAAsB,WAAW;AAC/B,MAAI;AACJ,MAAI,eAAsB,CAAC;AAC3B,MAAI,WAAW,SAAU;AACzB,MAAI,OAAO,KAAK,IAAI,EAAE,WAAW,EAAG;AACpC,QAAM,WAAW,CAAC,GAAG,oBAAI,IAAS;AAAA,IAChC,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,QAAQ,CAAC;AAAA,IACzD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,IAAI,CAAC;AAAA,IACrD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,cAAc,CAAC;AAAA,IAC/D,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,oBAAoB,CAAC;AAAA,IACrE,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,gCAAgC,CAAC;AAAA;AAAA,EACnF,CAAC,CAAC;AACF,MAAI,SAAS,WAAW,EAAG;AAC3B,MAAI,WAAW,KAAK,WAAW,GAAG;AAChC,WAAO,MAAM,cAAc,OAAO,KAAK,SAAS;AAChD,mBAAe,OAAO,OAAO,KAAK,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAW,EAAE,KAAK,SAAS,CAAC;AAC7F,UAAM,WAAW,OAAO,OAAO,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAW,EAAE,KAAK,SAAS,CAAC;AAChF,eAAW,OAAO,CAAC,GAAG,cAAc,GAAG,QAAQ;AAAA,EACjD;AACA,MAAI,CAAC,WAAW,KAAM,eAAc;AACpC,MAAI,YAAY;AAChB,MAAI,QAAQ;AACZ,QAAM,KAAK,YAAY,IAAI;AAE3B,aAAWC,OAAM,UAAU;AAEzB,QAAI;AACJ,QAAIA,IAAG,GAAI,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAOA,IAAG,MAAMA,IAAG,GAAG,SAAS,EAAE,EAAE,EAAE;AAC/F,QAAI,CAAC,OAAO;AACV,UAAIA,IAAG,QAAQ,SAAU,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,YAAY,EAAE,KAAK,MAAMA,IAAG,QAAQ,SAAS,YAAY,EAAE,KAAK,CAAC;AAAA,UACjI,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,YAAY,EAAE,KAAK,MAAMA,IAAG,YAAY,YAAY,EAAE,KAAK,CAAC;AAAA,IAC/G;AACA,QAAI,OAAO,WAAW,SAAS,GAAG;AAChC,UAAI,CAACA,IAAG,QAAQ,SAAU,CAAAA,IAAG,QAAQ,WAAWA,IAAG;AACnD,yBAAmBA,KAAI,MAAM,SAAS;AACtC;AAAA,IACF,WAAW,OAAO,SAAS,CAAC,WAAW,WAAY,WAAW,WAAW,MAAO;AAC9E,yBAAmBA,KAAI,MAAM,KAAK;AAAA,IACpC;AAEA,QAAI,OAAO,MAAM,SAAS,GAAG;AAC3B;AACA,cAAQA,KAAI,KAAK;AAAA,IACnB;AAAA,EACF;AACA,aAAW,WAAW;AACtB,aAAW,UAAU;AACrB,QAAM,KAAK,YAAY,IAAI;AAC3B,QAAM,YAAY,KAAK,EAAE;AAEzB,MAAI,eAAe,aAAa;AAChC,MAAI,YAAY,EAAE,MAAM,WAAW,MAAM,QAAQ,WAAW,QAAQ,UAAU,SAAS,QAAQ,WAAW,OAAO,MAAM,WAAW,KAAK,QAAQ,UAAU,aAAa,QAAQ,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC;AAE3M;AAGA,eAAe,mBAAmBA,KAAI;AACpC,MAAI,CAAC,WAAW,QAAQ,WAAW,KAAK,WAAW,EAAG;AAItD,QAAM,iBAAiBA,IAAG,YAAY,YACjCA,IAAG,YAAY,QACfA,IAAG,UAAU,SAAS,MAAM,KAC3BA,IAAG,YAAY,WAAWA,IAAG,eAAe,YAAY,WAAWA,IAAG,eAAe,UAAU,SAAS,YAAY,KAAKA,IAAG,QAAQ,WAAW;AACrJ,MAAI,CAAC,eAAgB;AAErB,MAAI;AACJ,MAAIA,IAAG,GAAI,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAOA,IAAG,MAAMA,IAAG,GAAG,SAAS,EAAE,EAAE,EAAE;AAC/F,MAAI,CAAC,OAAO;AACV,QAAIA,IAAG,QAAQ,SAAU,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,YAAY,EAAE,KAAK,MAAMA,IAAG,QAAQ,SAAS,YAAY,EAAE,KAAK,CAAC;AAAA,QACjI,SAAQ,WAAW,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,YAAY,EAAE,KAAK,MAAMA,IAAG,YAAY,YAAY,EAAE,KAAK,CAAC;AAAA,EAC/G;AAEA,MAAIA,IAAG,eAAeA,IAAG,YAAY,SAAS,KAAK,OAAO,WAAW,SAAS,GAAG;AAC/E,QAAI,CAACA,IAAG,QAAQ,SAAU,CAAAA,IAAG,QAAQ,WAAWA,IAAG;AACnD,uBAAmBA,KAAI,MAAM,SAAS;AAAA,EACxC;AAEA,MAAI,OAAO,MAAM,SAAS,EAAG,SAAQA,KAAI,KAAK;AAChD;AAGA,SAAS,wBAAwB;AAC/B,MAAI,cAAe,eAAc,WAAW;AAE5C,kBAAgB,IAAI,iBAAiB,CAAC,cAAc;AAElD,eAAW,YAAY,WAAW;AAChC,UAAI,SAAS,SAAS,aAAa;AACjC,mBAAW,QAAQ,SAAS,YAAY;AACtC,cAAI,KAAK,aAAa,KAAK,cAAc;AAEvC,+BAAmB,IAAI;AAGvB,kBAAM,WAAW;AAAA,cACf,GAAG,MAAM,KAAU,KAAK,iBAAiB,QAAQ,CAAC;AAAA,cAClD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,IAAI,CAAC;AAAA,cACrD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,IAAI,CAAC;AAAA,cACrD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,IAAI,CAAC;AAAA,cACrD,GAAG,MAAM,KAAU,UAAU,EAAE,iBAAiB,OAAO,CAAC;AAAA,cACxD,GAAG,MAAM,KAAU,KAAK,iBAAiB,cAAc,CAAC;AAAA,cACxD,GAAG,MAAM,KAAU,KAAK,iBAAiB,oBAAoB,CAAC;AAAA,cAC9D,GAAG,MAAM,KAAU,KAAK,iBAAiB,gCAAgC,CAAC;AAAA,YAC5E;AAGA,gBAAI,KAAK,YACP,KAAK,QAAQ,QAAQ,KAClB,KAAK,QAAQ,IAAI,KACjB,KAAK,QAAQ,IAAI,KACjB,KAAK,QAAQ,IAAI,KACjB,KAAK,QAAQ,cAAc,KAC3B,KAAK,QAAQ,OAAO,KACpB,KAAK,QAAQ,oBAAoB,KACjC,KAAK,QAAQ,gCAAgC,IAC/C;AACD,uBAAS,KAAK,IAAI;AAAA,YACpB;AAGA,qBAAS,QAAQ,CAACA,QAAO,mBAAmBA,GAAE,CAAC;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,aAAa,UAAU;AAC7B,MAAI,YAAY;AACd,kBAAc,QAAQ,YAAY;AAAA,MAChC,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEO,SAAS,0BAA0B;AACxC,MAAI,eAAe;AACjB,kBAAc,WAAW;AACzB,oBAAgB;AAAA,EAClB;AACF;;;ACvbA,IAAM,kBAAkB,MAAM;AAC5B,MAAI,uBAAuB;AAC3B,QAAM,YAAY,oBAAI,IAA+B;AAErD,QAAM,MAAM,MAAM,KAAK,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC;AAElF,WAAS,gBAAgBC,QAAmB,UAAmB,aAAsC;AACnG,UAAM,OAAOA,OAAM,UAAU,SAAS,KAAK,aAAa,SAAS,gBAAgB;AACjF,UAAM,OAAOA,OAAM,UAAU,SAAS,KAAK,YAAY,SAAS,gBAAgB;AAChF,UAAM,UAAU,UAAU,EAAE,cAAc,eAAe;AACzD,QAAI,QAAS,SAAQ,OAAO;AAC5B,UAAM,cAAc,SAAS,cAAc,KAAK;AAChD,gBAAY,KAAK;AACjB,gBAAY,MAAM,MAAM,GAAG,IAAI;AAC/B,gBAAY,MAAM,OAAO,GAAG,IAAI;AAChC,UAAM,kBAAkB,SAAS,cAAc,IAAI;AACnD,oBAAgB,YAAY;AAC5B,gBAAY,OAAO,eAAe;AAClC,gBAAY,QAAQ,CAAC,UAAU;AAC7B,YAAM,mBAAmB,SAAS,cAAc,GAAG;AACnD,uBAAiB,YAAY,MAAM;AACnC,uBAAiB,iBAAiB,SAAS,MAAM,MAAM,KAAK,CAAC;AAC7D,sBAAgB,OAAO,gBAAgB;AAAA,IACzC,CAAC;AACD,cAAU,EAAE,YAAY,WAAW;AACnC,UAAM,YAAY,YAAY,cAAc;AAC5C,UAAM,aAAa,YAAY,eAAe;AAC9C,UAAM,cAAc,OAAO;AAC3B,UAAM,eAAe,OAAO;AAC5B,QAAK,cAAc,OAAQ,UAAW,aAAY,MAAM,OAAO,GAAG,cAAc,SAAS;AACzF,QAAK,eAAe,OAAQ,WAAY,aAAY,MAAM,MAAM,GAAG,eAAe,UAAU;AAAA,EAC9F;AAEA,WAASC,yBAAwB,uBAA+B,WAAmB,eAA2B,UAAU,OAAe;AACrI,QAAI,eAAe,UAAU,IAAI,qBAAqB;AACtD,QAAI,CAAC,cAAc;AACjB,qBAAe,CAAC;AAChB,gBAAU,IAAI,uBAAuB,YAAY;AAAA,IACnD;AACA,UAAM,UAAU;AAAA,MACd,IAAI,GAAG,qBAAqB,IAAI,IAAI,CAAC;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA;AAAA,IAEF;AACA,iBAAa,KAAK,OAAO;AACzB,WAAO,QAAQ;AAAA,EACjB;AAEA,WAASC,yBAAwB,IAAkB;AACjD,cAAU,QAAQ,CAAC,GAAG,MAAM;AAC1B,UAAI,QAAQ;AACZ,QAAE,QAAQ,CAAC,GAAG,OAAO;AACnB,YAAI,EAAE,OAAO,IAAI;AAAE,kBAAQ;AAAA,QAAI;AAAA,MACjC,CAAC;AACD,UAAI,SAAS,EAAG,GAAE,OAAO,OAAO,CAAC;AAAA,IACnC,CAAC;AAAA,EACH;AAEA,SAAO,0BAA0BD;AACjC,SAAO,0BAA0BC;AAEjC,iBAAeC,+BAA6C;AAC1D,QAAI,qBAAsB;AAC1B,QAAI,iBAAiB;AACrB,cAAU,EAAE,iBAAiB,SAAS,CAAC,MAAa;AAClD,YAAM,aAAa;AACnB,UAAI,CAAC,WAAW,UAAW;AAC3B,YAAM,UAAU,UAAU,EAAE,cAAc,eAAe;AACzD,UAAI,QAAS,SAAQ,OAAO;AAC5B,gBAAU,QAAQ,CAAC,GAAG,MAAM;AAC1B,cAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,OAAO;AAC7C,cAAM,SAAS,WAAW;AAC1B,YAAI,CAAC,OAAQ;AACb,cAAM,UAAU,OAAO,QAAQ,CAAC;AAChC,YAAI,MAAM,SAAS,KAAK,SAAS;AAC/B,0BAAgB,YAAY,SAAS,KAAK;AAC1C,qBAAW,eAAe;AAAA,QAC5B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,cAAU,EAAE,iBAAiB,eAAe,CAAC,MAAa;AACxD,YAAM,aAAa;AACnB,YAAM,UAAU,UAAU,EAAE,cAAc,eAAe;AACzD,UAAI,QAAS,SAAQ,OAAO;AAC5B,gBAAU,QAAQ,CAAC,GAAG,MAAM;AAC1B,cAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO;AAC9C,cAAM,SAAS,WAAW;AAC1B,YAAI,CAAC,OAAQ;AACb,cAAM,UAAU,OAAO,QAAQ,CAAC;AAChC,YAAI,MAAM,SAAS,KAAK,SAAS;AAC/B,0BAAgB,YAAY,SAAS,KAAK;AAC1C,qBAAW,eAAe;AAAA,QAC5B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,2BAAuB;AAAA,EACzB;AACA,SAAO,CAACF,0BAAyBC,0BAAyBC,4BAA2B;AACvF;AAEA,IAAM,sBAAsB,gBAAgB;AAC5C,IAAM,0BAA0B,oBAAoB,CAAC;AACrD,IAAM,0BAA0B,oBAAoB,CAAC;AACrD,IAAM,8BAA8B,oBAAoB,CAAC;AAEzD,IAAI,2BAAkE;AAE/D,IAAM,kBAAkB,CAAC,gBAA8B;AAC5D,MAAI,0BAA0B;AAC5B,QAAI,yBAAyB;AAC7B,kBAAc,wBAAwB;AACtC,+BAA2B;AAAA,EAC7B,OAAO;AACL,UAAM,YAAY,UAAU,EAAE,cAAc,WAAW;AACvD,QAAI,EAAE,qBAAqB,aAAc;AACzC,UAAM,SAAS,MAAM;AACnB,UAAIC,QAAO,SAAS,eAAe,aAAa,GAAG,MAAM,YAAY;AACrE,UAAI,CAACA,OAAM;AAET,cAAM,cAAc,UAAU,cAAc,QAAQ,QAAQ;AAC5D,QAAAA,QAAO,aAAa,UAAU,SAAS,UAAU,KAAK,aAAa,UAAU,SAAS,QAAQ;AAAA,MAChG;AACA,aAAOA;AAAA,IACT;AACA,QAAI,wBAAwB;AAC5B,QAAI,CAAC,OAAO,EAAG,WAAU,MAAM;AAC/B,+BAA2B,YAAY,MAAM;AAC3C,UAAI,CAAC,OAAO,EAAG,WAAU,MAAM;AAAA,IACjC,GAAG,GAAG;AAAA,EACR;AACF;AACA,OAAO,kBAAkB;AAEzB,IAAM,iBAAiB,CAAC,OAAe,UAAwB;AAC7D,QAAM,MAAM,SAAS,eAAe,GAAG,KAAK,IAAI,KAAK,EAAE;AACvD,SAAO,eAAe;AACtB,MAAI,IAAK,KAAI,MAAM;AACrB;AAEA,IAAM,YAAY,YAAY;AAC5B,QAAM,UAAU,IAAI,QAAQ;AAC5B,QAAM,OAAO,KAAK,UAAU,EAAE,SAAS,IAAI,iBAAiB,MAAM,CAAC;AACnE,UAAQ,IAAI,gBAAgB,kBAAkB;AAC9C,QAAM,MAAM,uBAAuB,GAAG,GAAG,QAAQ,QAAQ,EAAE,KAAK;AAChE,QAAMC,MAAK,UAAU,EAAE,cAAc,aAAa,GAAG,iBAAiB;AAEtE,MAAI;AACJ,MAAI;AACJ,QAAM,MAAM,MAAM,uBAAuB,EAAE,QAAQ,QAAQ,SAAS,KAAK,CAAC;AAC1E,MAAI,KAAK,IAAI;AACX,WAAO,MAAM,IAAI,KAAK;AACtB,QAAI,qBAAqB,IAAI;AAC7B,QAAIA,IAAI,CAAAA,IAAG,aAAa;AAAA;AAAA,EAAyB,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,EAChF;AACA,QAAM,MAAMC,WAAU,+CAA+C,EAAE,QAAQ,OAAO,QAAQ,CAAC;AAC/F,MAAI,KAAK,IAAI;AACX,WAAO,MAAM,IAAI,KAAK;AACtB,QAAI,gBAAgB,IAAI;AACxB,QAAID,IAAI,CAAAA,IAAG,aAAa;AAAA;AAAA,EAAoB,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,EAC3E;AACF;AAEA,eAAsB,kBAAkB;AACtC,aAAW,OAAO,CAAC,WAAW,WAAW,WAAW,OAAO,GAAG;AAC5D,4BAAwB,IAAI,GAAG,aAAa,qBAAqB,SAAS;AAC1E,4BAAwB,IAAI,GAAG,aAAa,4BAA4B,MAAM,UAAU,UAAU,UAAU,SAAS,cAAc,IAAI,GAAG,4BAA4B,EAAE,KAAK,CAAC;AAC9K,4BAAwB,IAAI,GAAG,aAAa,oBAAoB,MAAM,gBAAgB,IAAI,GAAG,WAAW,CAAC;AACzG,4BAAwB,IAAI,GAAG,aAAa,wBAAwB,eAAe;AACnF,4BAAwB,IAAI,GAAG,aAAa,oBAAoB,cAAc;AAC9E,4BAAwB,IAAI,GAAG,cAAc,uBAAuB,MAAM,eAAe,KAAK,kBAAkB,GAAG,IAAI;AACvH,4BAAwB,IAAI,GAAG,cAAc,uBAAuB,MAAM,eAAe,KAAK,kBAAkB,GAAG,IAAI;AACvH,4BAAwB,IAAI,GAAG,cAAc,iBAAiB,MAAM,eAAe,KAAK,kBAAkB,GAAG,IAAI;AAAA,EACnH;AAEA,aAAW,OAAO,CAAC,WAAW,WAAW,WAAW,QAAQ,GAAG;AAC7D,4BAAwB,IAAI,GAAG,yBAAyB,sCAAsC,MAAM;AAClG,eAAS,cAAc,kBAAkB,GAAG,sBAAsB,GAAG,MAAM;AAC3E,eAAS,eAAe,aAAa,GAAG,MAAM;AAAA,IAChD,CAAC;AACD,4BAAwB,IAAI,GAAG,yBAAyB,yCAAyC,MAAM;AACrG,eAAS,cAAc,kBAAkB,GAAG,sBAAsB,GAAG,MAAM;AAC3E,eAAS,eAAe,aAAa,GAAG,MAAM;AAAA,IAChD,CAAC;AAAA,EACH;AACA,8BAA4B;AAC9B;;;ACrMO,SAAS,iBAAiB;AAC/B,QAAM,aAAa,MAAM,KAAkB,UAAU,EAAE,iBAAiB,mBAAmB,CAAC;AAC5F,QAAM,SAAkC,CAAC;AACzC,aAAW,QAAQ,CAACE,QAAO;AACzB,UAAM,UAAUA,IAAG,cAA+B,+BAA+B;AACjF,UAAM,OAAO,mBAAmB,cAAc,QAAQ,UAAU,KAAK,IAAI;AACzE,QAAI,CAAC,KAAM;AACX,UAAM,WAAW,MAAM,KAAgBA,IAAG,UAAU;AACpD,UAAM,OAAO,SAAS,OAAO,CAAC,MAAM,aAAa,eAAe,EAAE,MAAM,YAAY,OAAO;AAC3F,QAAI,OAAO,IAAI,MAAM,OAAW,QAAO,IAAI,IAAI,KAAK,SAAS;AAAA,EAC/D,CAAC;AACD,SAAO;AACT;AAEA,eAAsB,gBAAgB;AACpC,QAAM,MAAM,UAAU,EAAE,eAAe,kBAAkB;AACzD,MAAI,CAAC,IAAK;AACV,QAAM,uBAAuB,IAAI,qBAAqB,CAAC,YAAY;AACjE,QAAI,QAAQ,CAAC,EAAE,qBAAqB,GAAG;AAAA,IAAa;AACpD,QAAI,QAAQ,CAAC,EAAE,oBAAoB,EAAG,KAAI,MAAM;AAAA,EAClD,CAAC;AACD,uBAAqB,QAAQ,GAAG;AAClC;AAEA,OAAO,iBAAiB;;;ACtBjB,IAAM,eAAe,YAAY,IAAI;AAC5C,IAAI,mBAAmB;AAEvB,eAAe,gBAAkC;AAC/C,QAAM,OAAO,OAAO,cAAc,OAAO,WAAW,8BAA8B,EAAE;AACpF,QAAM,gBAAiC,CAAC;AACxC,QAAM,MAAM,KAAK,MAAM,OAAO,KAAK,OAAO,CAAC;AAC3C,QAAM,YAAY;AAAA,IAChB,0BAA0B,OAAO,SAAS,OAAO;AAAA,IACjD,0BAA0B,GAAG;AAAA,EAC/B;AACA,aAAWC,QAAO,WAAW;AAC3B,UAAM,MAAM,IAAI,MAAM;AACtB,UAAM,UAAU,IAAI,QAAc,CAAC,SAAS,WAAW;AACrD,UAAI,SAAS,MAAM,QAAQ;AAC3B,UAAI,UAAU,MAAM,OAAO,IAAI,MAAM,4BAA4BA,IAAG,EAAE,CAAC;AAAA,IACzE,CAAC;AACD,QAAI,MAAMA;AACV,kBAAc,KAAK,OAAO;AAAA,EAC5B;AACA,MAAI;AACF,UAAM,QAAQ,IAAI,aAAa;AAC/B,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,UAAM,kBAAkB,GAAG,EAAE;AAC7B,WAAO;AAAA,EACT;AACF;AAEA,SAAS,SAAS,UAA6B;AAC7C,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,MAAM,SAAS,CAAC;AACpB,QAAI,QAAQ,OAAW,OAAM;AAC7B,QAAI,QAAQ,KAAM,OAAM;AACxB,cAAU;AACV,QAAI,OAAO,QAAQ,SAAU,WAAU,KAAK,UAAU,GAAG,EAAE,QAAQ,SAAS,EAAE;AAAA,QACzE,WAAU;AAAA,EACjB;AACA,SAAO;AACT;AAEA,SAAS,aAAmB;AAC1B,MAAI,OAAO,gBAAgB;AACzB,WAAO,iBAAiB;AACxB,UAAM,WAAW;AACjB,UAAM,QAAkB,CAAC;AAEzB,aAAS,IAAI,KAAK,IAAI,GAAG,OAAO,cAAc,SAAS,QAAQ,GAAG,IAAI,OAAO,cAAc,QAAQ,KAAK;AACtG,YAAM,WAAW,OAAO,cAAc,CAAC;AACvC,UAAI,QAAQ;AACZ,UAAI,SAAS,SAAS,QAAS,SAAQ;AAAA,eAC9B,SAAS,SAAS,QAAS,SAAQ;AAC5C,YAAM,OAAO,6CAA6C,KAAK,KAAK,SAAS,EAAE,WAAW,SAAS,SAAS,GAAG,CAAC;AAChH,YAAM,KAAK,IAAI;AAAA,IACjB;AACA,UAAM,cAAc,SAAS,eAAe,WAAW;AACvD,QAAI,YAAa,aAAY,YAAY,MAAM,KAAK,EAAE;AAAA,EACxD;AACA,MAAI,iBAAkB,YAAW,YAAY,GAAG;AAClD;AAEA,eAAsB,eAAe;AACnC,QAAM,SAAS,SAAS,eAAe,QAAQ;AAC/C,MAAI,OAAQ,QAAO,OAAO;AAC1B,MAAI,cAAc;AAClB,QAAM,IAAI,KAAK,MAAM,YAAY,IAAI,IAAI,YAAY;AACrD,MAAI,eAAe,CAAC;AACpB,QAAM,iBAAiB,CAAC;AACxB,UAAQ,GAAG,OAAO,GAAG,QAAQ,EAAE,SAAS,cAAc,CAAC,GAAG,CAAC;AAC3D,qBAAmB;AACrB;AAEA,eAAe,eAAe;AAC5B,QAAM,OAAO,OAAO,cAAc,OAAO,WAAW,8BAA8B,EAAE;AACpF,MAAI,gBAAgB,EAAE,OAAO,OAAO,SAAS,QAAQ,CAAC;AACtD,QAAM,MAAM,KAAK,MAAM,OAAO,KAAK,OAAO,CAAC;AAC3C,QAAM,SAAS;AAAA,yDACwC,OAAO,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA;AAK/E,WAAS,KAAK,mBAAmB,aAAa,MAAM;AACpD,QAAM,KAAK,MAAM,cAAc;AAC/B,MAAI,CAAC,IAAI;AACP,iBAAa;AACb;AAAA,EACF;AACA,QAAM,QAAQ,yGAAyG,OAAO,SAAS,OAAO,qCAAqC,GAAG,iCAAiC,OAAO,aAAa,SAAS;AACpP,QAAM,WAAW,SAAS,eAAe,QAAQ;AACjD,MAAI,SAAU,UAAS,mBAAmB,cAAc,KAAK;AAE7D,qBAAmB;AACnB,aAAW;AAEX,QAAMC,WAAU,GAAG,OAAO,GAAG,OAAO,EACjC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EACxB,KAAK,CAAC,SAAS;AACd,UAAM,QAAQ,KAAK,QAAQ,SAAS,EAAE;AACtC,UAAM,YAAY,MAAM,MAAM,eAAe;AAC7C,UAAM,WAAW,YAAY,UAAU,CAAC,IAAI;AAC5C,QAAI,UAAW,KAAI,WAAW,EAAE,SAAS,SAAS,CAAC;AAAA,QAC9C,KAAI,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,UAAM,SAAS,SAAS,eAAe,MAAM;AAC7C,QAAI,OAAQ,QAAO,YAAY;AAAA,EACjC,CAAC,EACA,MAAM,CAAC,QAAQ,MAAM,YAAY,GAAG,EAAE,CAAC;AAE1C,MAAI,cAAc;AAElB,QAAM,gBAAgB,YAAY,MAAM;AACtC,UAAM,gBAAgB,CAAC,CAAC,SAAS,eAAe,QAAQ;AACxD,QAAI,eAAe;AACjB,UAAI,iBAAiB,EAAE,SAAS,MAAM,SAAS,KAAK,MAAM,YAAY,IAAI,IAAI,YAAY,EAAE,CAAC;AAAA,IAC/F,OAAO;AACL,UAAI,iBAAiB,EAAE,SAAS,OAAO,SAAS,KAAK,MAAM,YAAY,IAAI,IAAI,YAAY,EAAE,CAAC;AAC9F,oBAAc,aAAa;AAAA,IAC7B;AAAA,EACF,GAAG,IAAI;AACT;AAEA,OAAO,SAAS;;;AC5HT,SAAS,kBAAkB;AAChC,MAAI,cAAc;AAClB,QAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,SAAO,KAAK;AACZ,SAAO,YAAY;AACnB,SAAO,cAAc;AACrB,SAAO,QAAQ;AACf,WAAS,KAAK,YAAY,MAAM;AAClC;;;ACeA,OAAO,MAAM;AACb,OAAO,UAAU;AAEjB,IAAM,kBAAsC,CAAC;AAC7C,IAAI,YAAY;AAChB,IAAI,cAAc;AAElB,eAAe,cAAc;AAE3B,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,KAAK,YAAY,IAAI;AACzB,SAAO,MAAM;AACX,QAAI,KAAK,KAAK,MAAO;AACnB,UAAI,uBAAuB,KAAK,EAAE;AAAA,IACpC;AACA,QAAI,KAAK,KAAK,KAAO;AACnB,UAAI,qBAAqB;AACzB;AAAA,IACF;AACA,QAAI,OAAO,QAAQ,OAAO,KAAK,OAAO,IAAI,EAAE,SAAS,GAAG;AACtD,kBAAa,OAAO,KAAK,eAAe,WAAY,+BAA+B,OAAO,OAAO;AACjG,UAAI,WAAW;AACb,YAAI,eAAe,KAAK,MAAM,KAAK,EAAE,CAAC;AACtC,cAAM,eAAe,KAAK,EAAE;AAC5B;AAAA,MACF;AAAA,IACF;AACA,UAAM,MAAM,GAAG;AACf,SAAK,YAAY,IAAI;AAAA,EACvB;AACF;AAEA,eAAe,cAAc;AAC3B,MAAI,aAAa;AACjB,0BAAwB;AACxB,YAAU;AACZ;AAEA,eAAe,gBAAgB;AAC7B,MAAI,YAAY,OAAO,KAAK,OAAO;AACnC,MAAI,OAAO,KAAK,SAAS,SAAS,GAAG;AACnC,WAAO,UAAU,OAAO,KAAK;AAC7B,WAAO,MAAM,GAAG,OAAO,OAAO;AAAA,EAChC;AACA,MAAI,OAAO,EAAE,KAAK,OAAO,IAAI,CAAC;AAChC;AAEA,eAAsB,cAAc;AAClC,MAAI,YAAa;AACjB,gBAAc;AACd,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,cAAc,KAAK,MAAM,KAAK,YAAY,CAAC;AAC/C,QAAM,cAAc,KAAK,YAAY;AACrC,MAAI,QAAQ;AACZ,MAAI,OAAO,YAAa,OAAM,OAAO,YAAY;AAIjD,kBAAgB,KAAK,WAAW,CAAC;AACjC,kBAAgB,KAAK,cAAc,CAAC;AACpC,kBAAgB,KAAK,kBAAkB,CAAC;AACxC,kBAAgB,KAAK,gBAAgB,CAAC;AACtC,kBAAgB,KAAK,aAAa,CAAC;AACnC,kBAAgB,KAAK,QAAQ,QAAQ,eAAe,CAAC,CAAC;AACtD,kBAAgB,KAAK,QAAQ,QAAQ,aAAa,CAAC,CAAC;AACpD,kBAAgB,KAAK,QAAQ,QAAQ,gBAAgB,CAAC,CAAC;AACvD,kBAAgB,KAAK,QAAQ,QAAQ,YAAY,CAAC,CAAC;AACnD,kBAAgB,KAAK,QAAQ,QAAQ,sBAAsB,CAAC,CAAC;AAC7D,kBAAgB,KAAK,QAAQ,QAAQ,cAAc,CAAC,CAAC;AACrD,kBAAgB,KAAK,QAAQ,QAAQ,eAAe,CAAC,CAAC;AAGtD,QAAM,YAAY;AAClB,QAAM,YAAY;AAClB,QAAM,cAAc;AAEpB,mBAAiB,gBAAgB;AAGjC,MAAI,OAAO,eAAgB,OAAM,OAAO,eAAe;AAGvD,kBAAgB,KAAK,QAAQ,QAAQ,eAAe,CAAC,CAAC;AACtD,kBAAgB,KAAK,QAAQ,QAAQ,mBAAmB,CAAC,CAAC;AAC1D,kBAAgB,KAAK,QAAQ,QAAQ,mBAAmB,CAAC,CAAC;AAC1D,kBAAgB,KAAK,QAAQ,QAAQ,iBAAiB,CAAC,CAAC;AACxD,kBAAgB,KAAK,QAAQ,QAAQ,kBAAkB,CAAC,CAAC;AACzD,kBAAgB,KAAK,QAAQ,QAAQ,aAAa,CAAC,CAAC;AACpD,kBAAgB,KAAK,QAAQ,QAAQ,SAAS,CAAC,CAAC;AAChD,kBAAgB,KAAK,QAAQ,QAAQ,YAAY,CAAC,CAAC;AACnD,kBAAgB,KAAK,QAAQ,QAAQ,YAAY,CAAC,CAAC;AACnD,kBAAgB,KAAK,QAAQ,QAAQ,gBAAgB,CAAC,CAAC;AAEvD,MAAI,OAAO,KAAK,eAAe,SAAU,iBAAgB;AAEzD,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,eAAe,KAAK,MAAM,OAAQ,KAAK,MAAM,GAAO,CAAC;AAEzD,eAAa;AAEb,QAAM,QAAQ,IAAI,eAAe;AACjC,QAAM,KAAK,YAAY,IAAI;AAC3B,MAAI,gBAAgB,KAAK,MAAM,OAAQ,KAAK,MAAM,GAAO,CAAC;AAC1D,cAAY;AACd;AAEA,WAAW,WAAW;AACtB,UAAU,MAAM,IAAI,SAAS,CAAC;AAE9B,OAAO,cAAc;;;AChId,SAAS,iBAAiB,yBAAkC,uBAAgC,YAAgD;AACjJ,QAAM,UAAU,CAAC;AACjB,QAAM,SAAS,CAAC;AAChB,YAAU,EAAE,iBAAiB,oCAAoC,EAAE,QAAQ,CAAC,MAAM;AAChF,QAAI,EAAE,aAAa,kBAAmB;AACtC,QAAI,EAAE,KAAK,WAAW,SAAS,KAAK,CAAC,EAAE,QAAS,SAAQ,KAAK,EAAE,KAAK,UAAU,CAAC,CAAC;AAChF,QAAI,EAAE,KAAK,WAAW,SAAS,KAAK,EAAE,QAAS,QAAO,KAAK,EAAE,KAAK,UAAU,CAAC,CAAC;AAAA,EAChF,CAAC;AACD,gBAAc;AACd,MAAI,qBAAqB,EAAE,SAAS,OAAO,CAAC;AAC5C,SAAO,CAAC,KAAK,UAAU,OAAO,GAAG,KAAK,UAAU,MAAM,GAAG,UAAU;AACrE;AAEO,SAAS,iBAAiB,OAAgB,yBAAkC,YAAqB,YAAyD;AAC/J,QAAM,UAAU,CAAC;AACjB,YAAU,EAAE,iBAAiB,oCAAoC,EAAE,QAAQ,CAAC,MAAM;AAChF,QAAI,EAAE,aAAa,kBAAmB;AACtC,QAAI,EAAE,KAAK,WAAW,SAAS,KAAK,CAAC,EAAE,QAAS,SAAQ,KAAK,EAAE,KAAK,UAAU,CAAC,CAAC;AAAA,EAClF,CAAC;AACD,QAAM,KAAK,SAAS;AACpB,MAAI,qBAAqB,EAAE,QAAQ,CAAC;AACpC,SAAO,CAAC,IAAI,KAAK,UAAU,OAAO,GAAG,YAAY,UAAU;AAC7D;AAEO,SAAS,kBAAkB,QAA8CC,MAAmB;AACjG,SAAO,WAAW;AAClB,SAAO,QAAQ;AACf,SAAO,YAAY;AACnB,QAAM,WAAW,UAAU,EAAE,cAAc,gCAAgC;AAC3E,MAAI,EAAE,oBAAoB,qBAAsB;AAChD,WAAS,QAAQA;AACjB,EAAAC,aAAY,QAAQ;AACpB,MAAI,sBAAsB,EAAE,KAAAD,KAAI,CAAC;AACjC,QAAM,aAAa,UAAU,EAAE,cAAc,2BAA2B;AACxE,MAAI,sBAAsB,YAAa,YAAW,MAAM;AAC1D;AAEO,SAAS,oBAAoB,QAA8CA,MAAmB;AACnG,SAAO,WAAW;AAClB,SAAO,QAAQ;AACf,SAAO,YAAY;AACnB,QAAM,WAAW,UAAU,EAAE,cAAc,gCAAgC;AAC3E,MAAI,EAAE,oBAAoB,qBAAsB;AAChD,WAAS,QAAQA;AACjB,EAAAC,aAAY,QAAQ;AACpB,MAAI,wBAAwB,EAAE,KAAAD,KAAI,CAAC;AACnC,QAAM,eAAe,UAAU,EAAE,cAAc,6BAA6B;AAC5E,MAAI,wBAAwB,YAAa,cAAa,MAAM;AAC9D;AAEO,SAAS,iBAAiB,QAA8CA,MAAmB;AAChG,SAAO,QAAQ;AACf,SAAO,YAAY;AACnB,QAAM,WAAW,UAAU,EAAE,cAAc,gCAAgC;AAC3E,MAAI,EAAE,oBAAoB,qBAAsB;AAChD,WAAS,QAAQA;AACjB,EAAAC,aAAY,QAAQ;AACpB,MAAI,qBAAqB,EAAE,KAAAD,KAAI,CAAC;AAChC,QAAM,YAAY,UAAU,EAAE,cAAc,0BAA0B;AACtE,MAAI,qBAAqB,iBAAkB,WAAU,MAAM;AAC7D;AAEA,OAAO,mBAAmB;AAC1B,OAAO,mBAAmB;AAC1B,OAAO,sBAAsB;AAC7B,OAAO,oBAAoB;AAC3B,OAAO,mBAAmB;;;AChE1B,SAAS,iBAAiB,OAAuD;AAC/E,SAAO,SAAS,OAAO,WAAW,KAAK,CAAC,aAAa,aAAa,YAAY,EAAE,SAAS,MAAM,CAAC,EAAE,IAAI;AACxG;AAEA,SAAS,iBAAiB,SAAkB,OAAuB;AACjE,MAAI,oBAAoB,SAAS,KAAK;AACtC,MAAI,CAAC,iBAAiB,KAAK,EAAG;AAC9B,QAAM,UAAU,MAAM,CAAC;AACvB,UAAQ,cAAc,mEAAmE,GAAG,MAAM;AAClG,QAAM,WAAW,MAAM;AACrB,UAAM,YAAY,QAAQ,cAAc,oBAAoB;AAC5D,QAAI,qBAAqB,kBAAkB;AACzC,UAAI,MAAM,WAAW,GAAG;AACtB,cAAM,KAAK,IAAI,aAAa;AAC5B,WAAG,MAAM,IAAI,OAAO;AACpB,kBAAU,QAAQ,GAAG;AAAA,MACvB,OAAO;AACL,kBAAU,QAAQ;AAAA,MACpB;AACA,gBAAU,cAAc,IAAI,MAAM,QAAQ,CAAC;AAAA,IAC7C;AAAA,EACF;AAEA,MAAI,QAAQ,QAAQ,gBAAgB,GAAG;AACrC,UAAM,WAAW,OAAO;AACxB,WAAO,QAAQ,OAAO,OAA0B,YAA0B;AACxE,YAAM,WAAW,MAAM,SAAS,OAAO,OAAO;AAC9C,UAAI,UAAU,gBAAgB;AAC5B,cAAM,UAAU,MAAM,SAAS,KAAK;AACpC,eAAO,QAAQ;AACf,eAAO,sBAAsB,MAAM,SAAS,CAAC;AAC7C,eAAO,IAAI,SAAS,SAAS;AAAA,UAC3B,QAAQ,SAAS;AAAA,UACjB,YAAY,SAAS;AAAA,UACrB,SAAS,SAAS;AAAA,QACpB,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAAA,EACF,OAAO;AACL,WAAO,sBAAsB,MAAM,SAAS,CAAC;AAAA,EAC/C;AACF;AAEA,OAAO,SAAS,iBAAiB,YAAY,CAAC,MAAM;AAClD,QAAM,SAAS,EAAE,aAAa,EAAE,CAAC;AACjC,QAAM,UAAU,OAAO,QAAQ,uBAAuB;AACtD,MAAI,CAAC,WAAW,OAAO,eAAe,OAAO,YAAY,QAAQ,QAAQ,MAAM,GAAI;AACnF,OAAK,EAAE,cAAc,OAAO,UAAU,KAAK,GAAG;AAC5C,MAAE,gBAAgB;AAClB,MAAE,eAAe;AACjB,MAAE,aAAa,aAAa;AAAA,EAC9B;AACF,CAAC;AAED,OAAO,SAAS,iBAAiB,QAAQ,CAAC,MAAM;AAC9C,QAAM,SAAS,EAAE,aAAa,EAAE,CAAC;AACjC,MAAI,aAAa,GAAG,MAAM;AAC1B,MAAI,CAAC,OAAO,YAAa;AACzB,MAAI,OAAO,YAAY,QAAQ,QAAQ,MAAM,GAAI;AACjD,QAAM,UAAU,OAAO,QAAQ,uBAAuB;AACtD,MAAI,CAAC,QAAS;AACd,OAAK,EAAE,cAAc,OAAO,UAAU,KAAK,GAAG;AAC5C,MAAE,gBAAgB;AAClB,MAAE,eAAe;AACjB,qBAAiB,SAAS,EAAE,aAAa,KAAK;AAAA,EAChD;AACF,CAAC;AAED,OAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,MAAI,cAAc,CAAC;AACnB,QAAM,QAAQ,EAAE,eAAe;AAC/B,MAAI,CAAC,iBAAiB,KAAK,EAAG;AAC9B,QAAM,qBAAqB,CAAC,GAAG,UAAU,EAAE,iBAAiB,uBAAuB,CAAC,EACjF,OAAO,CAACE,QAAO,mBAAmBA,GAAE,CAAC,EACrC,KAAK,CAAC,GAAG,MAAM,OAAO,iBAAiB,CAAC,CAAC,IAAI,OAAO,iBAAiB,CAAC,CAAC,CAAC;AAC3E,MAAI,CAAC,mBAAmB,OAAQ;AAChC,QAAM,sBAAsB,mBAAmB,OAAO,CAACA,QAAOA,IAAG,cAAc,kBAAkB,CAAC,IAAI,CAAC;AACvG,mBAAiB,uBAAuB,mBAAmB,mBAAmB,SAAS,CAAC,GAAG,KAAK;AAClG,CAAC;;;AC7CD,OAAO,UAAU,SAAS,SAAS,OAAqB,MAA+C;AACrG,MAAI,aAAa;AACjB,WAAS,UAAU,GAAG,UAAU,KAAK,QAAQ,UAAW,eAAc,KAAK,OAAO;AAClF,aAAW,OAAO,MAAM;AACtB,UAAM,YAAY,IAAI,GAAG;AACzB,iBAAa,WAAW,QAAQ,IAAI,OAAO,WAAW,GAAG,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC;AAAA,EAC/E;AACA,SAAO;AACT;AAEA,IAAI,cAAwB,CAAC;AAC7B,IAAI,eAAyB,CAAC;AAC9B,IAAI,eAAyB,CAAC;AAC9B,IAAI,eAAyB,CAAC;AAC9B,IAAI,kBAA4B,CAAC;AACjC,IAAI,oBAA8B,CAAC;AAE5B,SAAS,oBAAoB;AAClC,QAAMC,MAAK,UAAU,EAAE,eAAe,eAAe,KAAK,UAAU,EAAE,eAAe,uBAAuB,KAAK,UAAU,EAAE,eAAe,gBAAgB;AAC5J,MAAI,CAACA,IAAI;AACT,EAAAA,IAAG,YAAY;AACjB;AACA,OAAO,oBAAoB;AAE3B,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCzB,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAc1B,eAAsB,eAAe,IAAI;AACvC,MAAI,qBAAqB,EAAE;AAC3B,QAAMA,MAAK,UAAU,EAAE,eAAe,eAAe,KAAK,UAAU,EAAE,eAAe,uBAAuB,KAAK,UAAU,EAAE,eAAe,gBAAgB;AAC5J,MAAI,CAACA,IAAI;AACT,QAAM,MAAM,MAAMC,WAAU,GAAG,OAAO,GAAG,qBAAqB,UAAU,EAAE,CAAC,EAAE;AAC7E,MAAI,CAAC,OAAO,IAAI,WAAW,KAAK;AAC9B,UAAM,sBAAsB,EAAE,WAAW,MAAM,IAAI,SAAS,SAAS,EAAE;AACvE;AAAA,EACF;AACA,QAAM,YAAY,MAAM,IAAI,KAAK;AACjC,MAAI,uBAAuB,SAAS;AACpC,MAAI,CAAC,aAAa,UAAU,WAAW,EAAG;AAC1C,QAAM,OAAY,UAAU,CAAC;AAE7B,QAAM,eAAe,KAAK,SAAS,IAAI,CAAC,MAAoB,kBAAkB,OAAO;AAAA,IACnF,KAAK,kDAAkD,EAAE,MAAM,CAAC,GAAG,GAAG,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,KAAK,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,EAAE,KAAK,EAAE,EAAE;AAAA,IACtJ,MAAM,EAAE,QAAQ;AAAA,IAChB,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ;AAAA,IAC1B,MAAM,EAAE,QAAQ;AAAA,IAChB,OAAQ,IAAI,KAAK,EAAE,KAAK,EAAG,mBAAmB;AAAA,IAC9C,cAAc,EAAE,gBAAgB;AAAA,IAChC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,OAAO,MAAM,QAAQ,CAAC,CAAC,QAAQ;AAAA,IAC9E,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,GAAG,8CAA8C,EAAE,MAAM,CAAC,GAAG,QAAQ,SAAS;AAAA,IAC3G,MAAM,EAAE,QAAQ;AAAA,EAClB,CAAC,CAAC,EAAE,KAAK,EAAE;AACX,QAAMC,OAAM,YAAY,KAAK,GAAG,+CAA+C,KAAK,QAAQ,SAAS;AACrG,QAAM,UAAU,qCAAqC,KAAK,OAAO,+CAA+C,KAAK,WAAW,SAAS;AACzI,QAAM,SAAS,KAAK,SAAS,IAAI,CAAC,MAAoB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAkB,EAAE,GAAG;AACnG,QAAM,YAAY,iBAAiB,OAAO;AAAA,IACxC,MAAMA;AAAA,IACN,MAAM,KAAK,QAAQ;AAAA,IACnB,MAAM,KAAK,MAAM,KAAK,IAAI,KAAK;AAAA,IAC/B,MAAM,KAAK,OAAO,QAAQ;AAAA,IAC1B,OAAO,KAAK,OAAO,SAAS,KAAK;AAAA,IACjC,cAAc,KAAK,gBAAgB;AAAA,IACnC,WAAW,KAAK,WAAW,SAAS,KAAK;AAAA,IACzC;AAAA,IACA,MAAM,KAAK,QAAQ;AAAA,IACnB,OAAO,OAAO,SAAS,IAAI,OAAO,CAAC,IAAI;AAAA,IACvC,UAAU,gBAAgB;AAAA,EAC5B,CAAC;AACD,EAAAF,IAAG,YAAY;AACjB;AACA,OAAO,iBAAiB;AAEjB,SAAS,mBAAmBE,MAAK,MAAM,MAAM,MAAM,SAAS,WAAW;AAC5E,MAAI,sBAAsB,EAAE,KAAAA,MAAK,MAAM,MAAM,MAAM,SAAS,UAAU,CAAC;AACvE,gBAAc,CAACA,IAAG;AAClB,iBAAe,CAAC,IAAI;AACpB,iBAAe,CAAC,IAAI;AACpB,iBAAe,CAAC,QAAQ,EAAE;AAC1B,oBAAkB,CAAC,WAAW,CAAC;AAC/B,sBAAoB,CAAC,aAAa,CAAC;AACnC,QAAM,mBAAmB,UAAU,EAAE,eAAe,sBAAsB;AAC1E,MAAI,iBAAkB,kBAAiB,MAAM;AAC/C;AACA,OAAO,qBAAqB;AAErB,SAAS,sBAAsB,KAAK;AACzC,MAAI,yBAAyB,GAAG;AAChC,QAAM,QAAQ,UAAU,EAAE,eAAe,sBAAsB;AAC/D,MAAI,CAAC,MAAO;AACZ,QAAM,WAAW,MAAM,iBAAiB,IAAI;AAC5C,gBAAc,CAAC;AACf,iBAAe,CAAC;AAChB,iBAAe,CAAC;AAChB,iBAAe,CAAC;AAChB,oBAAkB,CAAC;AACnB,sBAAoB,CAAC;AACrB,aAAW,WAAW,UAAU;AAC9B,UAAM,SAAS,QAAQ,cAAc,qBAAqB,GAAG,aAAa,SAAS,GAAG,MAAM,gFAAgF;AAC5K,QAAI,CAAC,UAAU,OAAO,SAAS,EAAG;AAClC,gBAAY,KAAK,OAAO,CAAC,CAAC;AAC1B,iBAAa,KAAK,OAAO,CAAC,CAAC;AAC3B,iBAAa,KAAK,OAAO,CAAC,CAAC;AAC3B,iBAAa,KAAK,OAAO,CAAC,CAAC;AAC3B,oBAAgB,KAAK,SAAS,OAAO,CAAC,GAAG,EAAE,CAAC;AAC5C,sBAAkB,KAAK,SAAS,OAAO,CAAC,GAAG,EAAE,CAAC;AAAA,EAChD;AACA,QAAM,mBAAmB,UAAU,EAAE,eAAe,sBAAsB;AAC1E,MAAI,iBAAkB,kBAAiB,MAAM;AAC/C;AACA,OAAO,wBAAwB;AAExB,SAAS,mBAAmB,UAAU,WAAW,WAAW,WAAW,KAAK,KAAK,WAAW,YAAY,WAAW;AACxH,MAAI,sBAAsB,EAAE,UAAU,WAAW,WAAW,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC;AACxG,QAAMF,MAAK,UAAU,EAAE,eAAe,uBAAuB,KAAK,UAAU,EAAE,eAAe,gBAAgB;AAC7G,QAAM,cAAcA,KAAI,aAAa;AACrC,SAAO,CAAC,aAAa,cAAc,cAAc,cAAc,iBAAiB,mBAAmB,WAAW,YAAY,WAAW;AACvI;AACA,OAAO,qBAAqB;AAE5B,IAAI,0BAA0B;AAEvB,SAAS,uBAAuB;AACrC,MAAI,wBAAyB;AAC7B,QAAM,WAAW,UAAU,EAAE,cAAc,6BAA6B;AACxE,QAAM,QAAQ,UAAU,EAAE,cAAc,4BAA4B;AACpE,MAAI,CAAC,YAAY,CAAC,MAAO;AACzB,4BAA0B;AAC1B,WAAS,iBAAiB,SAAS,MAAM;AACvC,UAAM,QAAQ,iBAAiB,GAAG,UAAU,OAAO,iBAAiB,CAAC,CAAC,SAAS,MAAM,KAAK,CAAC;AAAA,EAC7F,CAAC;AACD,QAAM,iBAAiB,SAAS,MAAM;AACpC,aAAS,QAAQ,iBAAiB,GAAG,UAAU,OAAO,iBAAiB,CAAC,CAAC,MAAM,MAAM,KAAK,CAAC;AAAA,EAC7F,CAAC;AACH;AAEA,WAAW,oBAAoB;;;AC7N/B,IAAM,UAAkC;AAAA,EACtC,MAAM;AAAA,EACN,wBAAwB;AAAA,EACxB,+BAA+B;AAAA,EAC/B,sBAAsB;AAAA,EACtB,gCAAgC;AAAA,EAChC,mCAAmC;AAAA,EACnC,kCAAkC;AAAA,EAClC,0BAA0B;AAAA,EAC1B,+BAA+B;AAAA,EAC/B,0CAA0C;AAAA,EAC1C,mCAAmC;AACrC;AAEO,SAAS,gBAAgB,QAA0B;AACxD,QAAM,MAAM,OAAO,WAAW,YAAY,QAAQ,QAAQ,OAAO,QAAQ;AACzE,QAAMG,OAAM,QAAQ,GAAa;AACjC,MAAI,mBAAmB,QAAQA,IAAG;AAClC,MAAIA,KAAK,QAAO,KAAKA,MAAK,QAAQ;AACpC;AAEA,OAAO,kBAAkB;;;AChBzB,IAAM,SAAN,MAAa;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,KAAa,OAAe,KAAa,OAAe,OAAe,MAAc;AAC/F,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,SAAS,KAAK,MAAM,KAAK,SAAS,KAAK,QAAQ,KAAK,IAAI;AAC7D,SAAK,QAAQ,KAAK,MAAM,KAAK,SAAS,KAAK,MAAM,KAAK,MAAM;AAC5D,SAAK,WAAW,KAAK,MAAM,OAAQ,KAAK,MAAM,KAAK,MAAM,IAAI;AAC7D,SAAK,QAAQ,QAAQ,KAAK,KAAK;AAAA,YAAe,KAAK,QAAQ;AAAA,SAAa,IAAI,KAAK,MAAO,KAAK,KAAK,EAAE,eAAe,CAAC;AAAA,OAAU,IAAI,KAAK,MAAO,KAAK,GAAG,EAAE,eAAe,CAAC;AAAA,EAC1K;AAAA,EAEA,eAAuB;AACrB,WAAO,KAAK,MAAM,OAAQ,KAAK,MAAM,KAAK,MAAM,IAAI;AAAA,EACtD;AACF;AAEO,IAAM,YAAN,MAAgB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,WAAwB,MAAuB;AACzD,SAAK,MAAM,KAAK,MAAM,KAAK,CAAC,EAAE,KAAK;AACnC,SAAK,MAAM,KAAK,MAAM,KAAK,KAAK,SAAS,CAAC,EAAE,MAAM,GAAG;AACrD,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,UAAM,MAAM,UAAU,sBAAsB;AAC5C,UAAM,QAAQ,IAAI,QAAQ;AAC1B,SAAK,QAAQ,SAAS,KAAK,MAAM,KAAK;AAGtC,QAAI,OAAiB,CAAC;AACtB,aAAS,IAAI,GAAG,KAAK,KAAK,MAAM,KAAK,KAAK,IAAK,MAAK,KAAK,0BAA0B,KAAK,KAAK,iBAAiB;AAC9G,cAAU,YAAY;AACtB,cAAU,YAAY,uBAAuB,KAAK,KAAK,EAAE,CAAC;AAG1D,WAAO,CAAC;AACR,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,IAAI,GAAG,KAAK;AAChD,YAAM,MAAM,KAAK,KAAK,CAAC;AACvB,YAAM,SAAS,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI;AACvF,YAAM,OAAO;AAAA,QACX,gBAAgB,OAAO,KAAK,yBAAyB,OAAO,MAAM,cAAc,OAAO,KAAK,6BAA6B,OAAO,IAAI,oBAAoB,OAAO,QAAQ;AAAA,QACvK,6BAA6B,OAAO,KAAK,KAAK,OAAO,QAAQ;AAAA,QAC7D,8BAA8B,OAAO,KAAK,KAAK,OAAO,KAAK;AAAA,MAC7D,EAAE,KAAK,EAAE;AACT,WAAK,KAAK,OAAO,IAAI,OAAO;AAAA,IAC9B;AACA,SAAK,UAAU,aAAa,oBAAoB,KAAK,KAAK,EAAE,CAAC;AAAA,EAC/D;AACF;;;ACtDA,IAAM,iBAAiB,CAAC,aAAa,OAAO,IAAI;AAChD,IAAM,UAAU,CAAC,QAAQ,MAAM;AAE/B,eAAsB,iBAAiB;AACrC,MAAI,gBAAgB;AACpB,EAAAC,WAAU,GAAG,OAAO,GAAG,YAAY,EAAE,UAAU,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ;AACpE,QAAI,CAAC,IAAK;AACV,UAAM,WAAW,SAAS,eAAe,kBAAkB;AAC3D,UAAM,QAAQ,SAAS,eAAe,eAAe;AACrD,QAAI,CAAC,YAAY,CAAC,MAAO;AACzB,aAAS,YAAY;AACrB,QAAI,KAAK,EAAE,KAAK,CAAC,YAAY;AAC3B,UAAI,OAAO;AACX,UAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ;AACzB,cAAM,YAAY;AAClB;AAAA,MACF;AAGA,UAAI,OAAO;AACX,iBAAW,SAAS,MAAM;AACxB,cAAMC,MAAK,IAAI,KAAK,MAAO,MAAM,SAAS,EAAE,eAAe;AAC3D,cAAM,WAAW,MAAM,WAAY,MAAM,SAAU,QAAQ,CAAC,IAAI;AAChE,cAAM,UAAU,MAAM,QAAQ,KAAK,IAAI;AACvC,gBAAQ,WAAWA,GAAE,YAAY,MAAM,EAAE,YAAY,MAAM,GAAG,YAAY,MAAM,EAAE,YAAY,QAAQ,YAAY,OAAO;AAAA,MAC3H;AACA,cAAQ;AACR,YAAM,YAAY;AAGlB,UAAI,WAAW;AACf,eAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AACzC,cAAM,IAAI,KAAK,CAAC;AAChB,aAAK,EAAE,QAAQ,aAAa,EAAE,QAAQ,UAAU,EAAE,QAAQ,aAAa,EAAE,QAAQ,YAAa,EAAE,OAAO,SAAU;AAC/G,qBAAW;AACX;AAAA,QACF;AAAA,MACF;AACA,UAAI,YAAY,EAAG,QAAO,KAAK,MAAM,QAAQ;AAG7C,YAAM,KAAsB,CAAC;AAC7B,iBAAW,SAAS,MAAM;AACxB,YAAI,MAAM,OAAO,SAAS;AACxB,gBAAM,QAAQ,MAAM;AACpB,gBAAM,WAAW,KAAK,KAAK,CAAC,MAAO,EAAE,OAAO,MAAM,MAAM,EAAE,OAAO,KAAM;AACvE,gBAAM,MAAM,UAAU,aAAa,KAAK,KAAK,SAAS,CAAC,EAAE;AACzD,cAAI,MAAM,QAAQ,KAAM;AACxB,cAAI,eAAe,KAAK,CAAC,SAAS,MAAM,IAAI,YAAY,EAAE,WAAW,IAAI,CAAC,EAAG,OAAM,OAAO;AAAA,mBACjF,QAAQ,KAAK,CAAC,SAAS,MAAM,IAAI,YAAY,EAAE,WAAW,IAAI,CAAC,EAAG,OAAM,OAAO;AAAA,cACnF,OAAM,OAAO;AAClB,cAAI,SAAS,IAAK,IAAG,KAAK,EAAE,OAAO,KAAK,OAAO,MAAM,KAAK,MAAM,MAAM,KAAK,CAAC;AAAA,QAC9E;AAAA,MACF;AACA,UAAI,CAAC,GAAG,OAAQ;AAEhB,UAAI,UAAU,UAAU,EAAE;AAAA,IAC5B,CAAC;AAAA,EACH,CAAC;AACH;AAEA,OAAO,iBAAiB;;;AC9ExB,IAAM,QAAQ,CAAC,UAAU,UAAU,UAAU,QAAQ,SAAS,QAAQ,OAAO;AAuB7E,SAAS,WAAW,MAAc,MAAuB;AAEvD,QAAM,YAAY,KAAK,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,MAAM,CAAC;AACjE,QAAM,WAAW,KAAK;AACtB,QAAM,aAAa,KAAK,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,QAAQ,CAAC;AACpE,QAAM,eAAe,KAAK,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,UAAU,CAAC;AACxE,MAAI,QAAQ,cAAc,QAAQ;AAAA,eAAkB,aAAa,OAAO,OAAO,eAAe,QAAW,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC,CAAC;AAAA,eAAqB,UAAU;AAAA,iBAAoB,YAAY;AAAA;AAC/N,MAAI,OAAO,cAAc,KAAK,KAAK,IAAI;AACvC,aAAW,SAAS,MAAM;AACxB,QAAI,MAAM,SAAS,EAAG;AACtB,UAAM,QAAQ,MAAM,QAAQ,OAAO,OAAO,eAAe,QAAW,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC,IAAI;AAC9H,UAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,KAAK,MAAM,QAAQ,GAAI,EAAE,eAAe,IAAI;AAChF,YAAQ,SAAS,MAAM,IAAI;AAAA,QAAW,MAAM,IAAI;AAAA,QAAW,IAAI;AAAA,iBAAoB,KAAK;AAAA;AACxF,aAAS,YAAY,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,kBAAqB,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA;AACxF,aAAS,eAAe,MAAM,QAAQ;AAAA,SAAY,MAAM,MAAM;AAAA,YAAe,MAAM,SAAS;AAAA,UAAa,MAAM,OAAO;AAAA;AACtH,aAAS,iBAAiB,MAAM,KAAK,QAAQ,CAAC,CAAC;AAC/C,UAAM,OAAO,KAAK,MAAO,MAAM,OAAO,YAAa,GAAG;AACtD,UAAM,QAAQ,OAAO,IAAI;AACzB,UAAM,MAAM,yCAAyC,KAAK,IAAI,IAAI,kBAAkB,IAAI;AACxF,YAAQ,cAAc,KAAK,gBAAgB,GAAG,KAAK,MAAM,IAAI,YAAY,IAAI,YAAY,KAAK;AAAA,EAChG;AACA,UAAQ;AACR,SAAO;AACT;AAEA,eAAsB,eAAe,cAAwB;AAC3D,MAAI,kBAAkB,YAAY;AAClC,EAAAC,WAAU,GAAG,OAAO,GAAG,kBAAkB,aAAa,KAAK,GAAG,CAAC,IAAI,EAAE,UAAU,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ;AACpG,QAAI,CAAC,IAAK;AACV,UAAM,WAAW,SAAS,eAAe,kBAAkB;AAC3D,UAAM,QAAQ,SAAS,eAAe,eAAe;AACrD,QAAI,CAAC,YAAY,CAAC,MAAO;AACzB,aAAS,YAAY;AACrB,QAAI,KAAK,EAAE,KAAK,CAAC,YAAY;AAC3B,YAAM,OAAO;AACb,UAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ;AACzB,cAAM,YAAY;AAClB;AAAA,MACF;AACA,YAAM,YAAY;AAClB,UAAI,aAAa,SAAS,KAAK,EAAG,gBAAe;AACjD,iBAAW,QAAQ,cAAc;AAC/B,cAAM,WAAW,KAAK,OAAO,CAAC,UAAU,MAAM,SAAS,IAAI;AAC3D,YAAI,SAAS,SAAS,EAAG,OAAM,aAAa,WAAW,MAAM,QAAQ;AAAA,MACvE;AAAA,IAqBF,CAAC;AAAA,EACH,CAAC;AACH;AAEA,OAAO,iBAAiB;;;AC7FxB,IAAI,eAA8B;AAClC,IAAI,gBAA+B;AACnC,IAAI;AAEJ,SAAS,gBAAgB,GAAU,SAAkB,UAAyB;AAC5E,QAAM,EAAE,OAAO,IAAI;AACnB,MAAI,EAAE,kBAAkB,kBAAmB;AAC3C,MAAI,QAAS,gBAAe,OAAO,OAAO,KAAK;AAC/C,MAAI,SAAU,iBAAgB,OAAO,OAAO,KAAK;AACjD,QAAM,aAAa,UAAU,EAAE,cAAc,cAAc;AAC3D,MAAI,EAAE,sBAAsB,aAAc;AAC1C,QAAM,YAAY,WAAW,MAAM,YAAY;AAC/C,MAAI,CAAC,UAAW;AAChB,MAAI,gBAAyC;AAC7C,QAAM,WAAW,cAAc,cAAc;AAC7C,MAAI,aAAa,EAAG,iBAAgB,UAAU,EAAE,cAAc,2CAA2C;AAAA,WAChG,aAAa,EAAG,iBAAgB,UAAU,EAAE,cAAc,4CAA4C;AAAA,WACtG,aAAa,EAAG,iBAAgB,UAAU,EAAE,cAAc,yCAAyC;AAAA,WACnG,aAAa,EAAG,iBAAgB,UAAU,EAAE,cAAc,uCAAuC;AAE1G,MAAI,iBAAiB,gBAAgB,eAAe;AAClD,QAAI,gBAAgB,UAAU,EAAE,cAAc,iBAAiB;AAC/D,QAAI,CAAC,eAAe;AAClB,sBAAgB,SAAS,cAAc,KAAK;AAC5C,oBAAc,KAAK;AACnB,gBAAU,EAAE,YAAY,aAAa;AAAA,IACvC;AAEA,UAAM,iBAAiB,cAAc,sBAAsB;AAC3D,UAAM,gBAAgB,KAAK,IAAI,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,aAAa;AAC/I,UAAM,UAAU,cAAc,eAAe;AAC7C,UAAM,UAAU,cAAc,gBAAgB;AAC9C,UAAM,gBAAiB,eAAe,MAAM,OAAO;AACnD,UAAM,iBAAkB,eAAe,OAAO,OAAO;AACrD,UAAM,oBAAoB,gBAAiB,cAAc,eAAe;AACxE,UAAM,oBAAoB,iBAAkB,cAAc,cAAc;AACxE,UAAM,UAAU,KAAK,IAAI,UAAU,cAAc,UAAU,aAAa;AACxE,UAAM,YAAY,eAAe;AACjC,UAAM,YAAY,gBAAgB;AAClC,UAAM,YAAY,oBAAqB,YAAY;AACnD,UAAM,aAAa,oBAAqB,YAAY;AACpD,UAAM,cAAc;AACpB,UAAM,eAAe;AACrB,kBAAc,MAAM,MAAM,GAAG,SAAS;AACtC,kBAAc,MAAM,OAAO,GAAG,UAAU;AACxC,kBAAc,MAAM,QAAQ,GAAG,WAAW;AAC1C,kBAAc,MAAM,SAAS,GAAG,YAAY;AAE5C,QAAI,eAAgB,cAAa,cAAc;AAC/C,qBAAiB,WAAW,MAAM;AAAE,oBAAc,MAAM,UAAU;AAAA,IAAQ,GAAG,GAAI;AACjF,kBAAc,MAAM,UAAU;AAAA,EAChC;AACF;AAEO,SAAS,sBAA4B;AAC1C,QAAM,gBAAgB,UAAU,EAAE,cAAc,iBAAiB;AACjE,MAAI,yBAAyB,YAAa,eAAc,MAAM,UAAU;AACxE,QAAM,aAAa,UAAU,EAAE,cAAc,cAAc;AAC3D,MAAI,sBAAsB,aAAa;AACrC,UAAM,YAAY,WAAW,MAAM,YAAY;AAC/C,QAAI,WAAW;AACb,YAAM,SAAS,UAAU,EAAE,iBAAiB,OAAO;AACnD,aAAO,QAAQ,CAAC,MAAM;AACpB,YAAI,EAAE,aAAa,qBAAqB,EAAE,EAAE,yBAAyB,aAAc;AACnF,cAAM,UAAU,EAAE,cAAc,OAAO;AACvC,cAAM,WAAW,EAAE,cAAc,OAAO;AACxC,aAAK,WAAW,aAAa,CAAC,EAAE,UAAU,SAAS,aAAa,GAAG;AACjE,YAAE,iBAAiB,SAAS,CAAC,QAAQ;AAAE,4BAAgB,KAAK,SAAS,QAAQ;AAAA,UAAG,CAAC;AACjF,YAAE,UAAU,IAAI,aAAa;AAAA,QAC/B;AACA,YAAI,QAAS,gBAAe,OAAO,EAAE,KAAK;AAC1C,YAAI,SAAU,iBAAgB,OAAO,EAAE,KAAK;AAAA,MAC9C,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,gBAAgB,mBAAmB;;;ACxEnC,IAAM,eAAe;AACrB,IAAM,cAAc;AACpB,IAAM,SAAS,oBAAI,QAAgD;AACnE,IAAM,OAAO,oBAAI,QAAiB;AAElC,SAAS,QAAQ,IAAqC;AACpD,MAAI,CAAC,MAAM,OAAO,KAAM,QAAO;AAC/B,QAAM,QAAQ,GAAG,MAAM,GAAG;AAC1B,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,IAAI,SAAS,MAAM,CAAC,GAAG,EAAE;AAC/B,QAAM,IAAI,SAAS,MAAM,CAAC,GAAG,EAAE;AAC/B,SAAQ,IAAI,KAAK,IAAI,IAAK,CAAC,GAAG,CAAC,IAAI;AACrC;AAEA,SAAS,YAAY,OAAyC;AAC5D,QAAM,MAAM,MAAM,cAAc,oBAAoB,KAAK,MAAM,cAAc,OAAO;AACpF,SAAO,eAAe,mBAAmB,MAAM;AACjD;AAEA,SAAS,UAAU,OAAwB;AACzC,QAAM,MAAM,YAAY,KAAK;AAC7B,SAAO,MAAM,OAAO,IAAI,KAAK,IAAI;AACnC;AAEA,SAAS,WAAW,OAAgB,KAAmB;AACrD,QAAM,MAAM,YAAY,KAAK;AAC7B,MAAI,CAAC,IAAK;AACV,QAAM,OAAO,OAAO,IAAI,IAAI,KAAK;AACjC,QAAM,MAAM,IAAI,QAAQ,KAAK,OAAO,IAAI,GAAG,IAAI;AAC/C,QAAM,MAAM,IAAI,QAAQ,KAAK,OAAO,IAAI,GAAG,IAAI;AAC/C,QAAM,QAAQ,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,MAAM,IAAI,IAAI,IAAI,CAAC;AACxE,MAAI,UAAU,OAAO,IAAI,KAAK,EAAG;AACjC,QAAM,iBAAiB,OAAO,EAAE,QAAQ,CAACC,QAAO;AAC9C,QAAI,EAAEA,eAAc,kBAAmB;AACvC,IAAAA,IAAG,QAAQ,OAAO,KAAK;AACvB,UAAM,IAAI,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC;AAC9C,WAAO,eAAe,GAAG,UAAU,EAAE,OAAOA,IAAG,CAAC;AAChD,IAAAA,IAAG,cAAc,CAAC;AAAA,EACpB,CAAC;AACH;AAEA,SAAS,QAAQ,MAAuB;AACtC,QAAM,MAAM,KAAK,cAAc,OAAO;AACtC,SAAO,eAAe,mBAAmB,IAAI,QAAQ;AACvD;AAEA,SAAS,OAAO,MAA2D;AACzE,MAAI,YAA4B,KAAK;AACrC,WAAS,IAAI,GAAG,IAAI,KAAK,WAAW,KAAK;AACvC,UAAM,QAAQ,UAAU,cAAc,gBAAgB;AACtD,UAAM,SAAS,UAAU,cAAc,iBAAiB;AACxD,QAAI,SAAS,OAAQ,QAAO,EAAE,OAAO,OAAO;AAC5C,gBAAY,UAAU;AAAA,EACxB;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAe,QAAgB,oBAAoB,GAAkB;AAClG,QAAM,kBAAkB;AAAA,IACtB,EAAE,OAAO,OAAO,OAAO,IAAI,EAAE;AAAA,IAC7B,EAAE,OAAO,OAAO,OAAO,IAAI,EAAE;AAAA,IAC7B,EAAE,OAAO,OAAO,OAAO,IAAI,EAAE;AAAA,IAC7B,EAAE,OAAO,QAAQ,OAAO,KAAK,EAAE;AAAA,IAC/B,EAAE,OAAO,SAAS,OAAO,KAAK,GAAG;AAAA,IACjC,EAAE,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA;AAAA,IAChC,EAAE,OAAO,OAAO,OAAO,IAAI,EAAE;AAAA,IAC7B,EAAE,OAAO,OAAO,OAAO,IAAI,EAAE;AAAA,IAC7B,EAAE,OAAO,QAAQ,OAAO,IAAI,GAAG;AAAA,IAC/B,EAAE,OAAO,SAAS,OAAO,KAAK,GAAG;AAAA,IACjC,EAAE,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA,EAClC;AACA,QAAM,cAAc,QAAQ;AAC5B,QAAM,UAAU,gBAAgB,OAAO,CAAC,MAAM,SAAU,KAAK,IAAI,KAAK,QAAQ,WAAW,IAAI,KAAK,IAAI,KAAK,QAAQ,WAAW,IAAI,OAAO,IAAK;AAC9I,QAAM,gBAAgB,SAAS,QAAQ;AACvC,QAAM,iBAAiB,QAAQ,QAAQ;AACvC,QAAM,YAAY,KAAK,IAAI,QAAQ,aAAa;AAChD,QAAM,aAAa,KAAK,IAAI,SAAS,cAAc;AACnD,MAAI,aAAa,qBAAqB,cAAc,kBAAmB,QAAO,QAAQ;AACtF,QAAM,SAAS,QAAQ,QAAQ,QAAQ,CAAC;AACxC,SAAO,GAAG,KAAK;AACjB;AAEA,SAAS,OAAO,MAAe,QAAkC;AAC/D,QAAM,KAAK,QAAQ,QAAQ,IAAI,CAAC;AAChC,QAAM,OAAO,OAAO,IAAI;AACxB,MAAI,CAAC,KAAM;AACX,MAAI,IAAI;AACN,UAAM,CAAC,IAAI,EAAE,IAAI;AACjB,SAAK,IAAI,IAAI;AACb,QAAI,WAAW,SAAU,YAAW,KAAK,OAAQ,UAAU,KAAK,MAAM,IAAI,KAAM,EAAE;AAAA,QAC7E,YAAW,KAAK,QAAS,UAAU,KAAK,KAAK,IAAI,KAAM,EAAE;AAAA,EAChE;AACA,QAAM,OAAO,KAAK,cAAc,MAAM;AACtC,MAAI,KAAM,MAAK,YAAY,sBAAsB,UAAU,KAAK,KAAK,GAAG,UAAU,KAAK,MAAM,CAAC;AAC9F,OAAK,OAAO,IAAI;AAClB;AAEA,SAAS,SAAS,MAAe,QAA4BC,QAAqB;AAChF,MAAI,KAAK,IAAI,IAAI,EAAG;AACpB,eAAa,OAAO,IAAI,IAAI,CAAC;AAC7B,SAAO,IAAI,MAAM,WAAW,MAAM,OAAO,MAAM,MAAM,GAAGA,MAAK,CAAC;AAChE;AAEA,SAAS,MAAM,MAAe,QAAkC;AAC9D,MAAI,KAAK,IAAI,IAAI,EAAG;AACpB,eAAa,OAAO,IAAI,IAAI,CAAC;AAC7B,SAAO,MAAM,MAAM;AACrB;AAEA,SAAS,KAAK,MAAe,OAAgB,QAAkC;AAC7E,QAAM,iBAAiB,OAAO,EAAE,QAAQ,CAACD,QAAO;AAC9C,QAAI,EAAEA,eAAc,qBAAqBA,IAAG,UAAU,SAAS,eAAe,EAAG;AACjF,IAAAA,IAAG,UAAU,IAAI,eAAe;AAChC,IAAAA,IAAG,iBAAiB,SAAS,MAAM,SAAS,MAAM,QAAQ,YAAY,CAAC;AACvE,IAAAA,IAAG,iBAAiB,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC;AAAA,EACzD,CAAC;AACH;AAEO,SAAS,sBAA4B;AAC1C,YAAU,EAAE,iBAAiB,cAAc,EAAE,QAAQ,CAAC,SAAS;AAC7D,UAAM,OAAO,OAAO,IAAI;AACxB,QAAI,CAAC,KAAM;AACX,SAAK,MAAM,KAAK,OAAO,OAAO;AAC9B,SAAK,MAAM,KAAK,QAAQ,QAAQ;AAChC,SAAK,iBAAiB,MAAM,EAAE,QAAQ,CAACA,QAAO;AAC5C,UAAIA,IAAI,CAAAA,IAAG,YAAY;AAAA,IACzB,CAAC;AACD,SAAK,iBAAiB,OAAO,EAAE,QAAQ,CAACA,QAAO;AAC7C,UAAI,EAAEA,eAAc,qBAAqBA,IAAG,UAAU,SAAS,eAAe,EAAG;AACjF,MAAAA,IAAG,UAAU,IAAI,eAAe;AAChC,MAAAA,IAAG,iBAAiB,UAAU,MAAM,MAAM,MAAM,OAAO,CAAC;AACxD,MAAAA,IAAG,iBAAiB,SAAS,MAAM,SAAS,MAAM,SAAS,WAAW,CAAC;AAAA,IACzE,CAAC;AAAA,EACH,CAAC;AACH;AAEA,gBAAgB,mBAAmB;;;AC9I5B,SAAS,mBAAmBE,QAA4B;AAC7D,QAAM,SAAUA,OAAc,kBAAkBA,OAAM,aAAa,EAAE,CAAC;AACtE,MAAI,EAAE,kBAAkB,qBAAsB;AAC9C,MAAI,CAAC,OAAO,QAAQ,yDAAyD,EAAG;AAChF,MAAI,EAAEA,OAAM,WAAWA,OAAM,SAAU;AACvC,QAAM,SAASA,OAAM,QAAQ;AAC7B,QAAM,UAAUA,OAAM,QAAQ;AAC9B,MAAI,CAAC,UAAU,CAAC,QAAS;AACzB,MAAI,EAAE,eAAe,IAAI;AACzB,MAAI,EAAE,aAAa,IAAI;AACvB,MAAI,OAAO,OAAO;AAElB,WAAS,8BAA8B,MAAc,OAAwB;AAC3E,QAAI,mBAAmB,aAAc,QAAO;AAG5C,UAAM,SAAS,KAAK,UAAU,GAAG,cAAc;AAC/C,QAAI,cAAc,OAAO,YAAY,IAAI;AACzC,QAAI,gBAAgB,GAAI,QAAO;AAC/B,QAAI,mBAAmB,OAAO,YAAY,KAAK;AAC/C,WAAO,qBAAqB,MAAM,mBAAmB,aAAa;AAChE,oBAAc,OAAO,YAAY,MAAM,cAAc,CAAC;AACtD,yBAAmB,OAAO,YAAY,OAAO,mBAAmB,CAAC;AAAA,IACnE;AAGA,UAAM,QAAQ,KAAK,UAAU,cAAc;AAC3C,QAAI,aAAa,MAAM,QAAQ,KAAK;AACpC,QAAI,eAAe,GAAI,QAAO;AAC9B,QAAI,iBAAiB,MAAM,QAAQ,IAAI;AACvC,WAAO,mBAAmB,MAAM,aAAa,gBAAgB;AAC3D,mBAAa,MAAM,QAAQ,OAAO,aAAa,CAAC;AAChD,uBAAiB,MAAM,QAAQ,MAAM,iBAAiB,CAAC;AAAA,IACzD;AACA,QAAI,gBAAgB,MAAM,eAAe,GAAI,QAAO;AAGpD,UAAM,eAAe,KAAK,UAAU,cAAc,GAAG,iBAAiB,UAAU;AAChF,UAAM,YAAY,aAAa,YAAY,GAAG;AAC9C,qBAAiB,cAAc;AAC/B,mBAAe,iBAAiB;AAChC,WAAO,kBAAkB,gBAAgB,YAAY;AACrD,WAAO;AAAA,EACT;AAEA,WAAS,oBAA6B;AACpC,QAAI,mBAAmB,aAAc,QAAO;AAC5C,UAAM,aAAa,GAAG,OAAO,KAAK,kBAAkB;AAAA;AAEpD,WAAO,CAAC,WAAW,SAAS,KAAK,iBAAiB,CAAC,CAAC,KAAK,iBAAiB,EAAG;AAE7E,WAAO,CAAC,WAAW,SAAS,KAAK,YAAY,CAAC,KAAK,eAAe,KAAK,OAAQ;AAC/E,WAAO,kBAAkB,gBAAgB,YAAY;AACrD,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,8BAA8B,KAAK,GAAG,KAAK,CAAC,8BAA8B,KAAK,GAAG,EAAG,mBAAkB;AAC5G,EAAAA,OAAM,eAAe;AAErB,MAAI,iBAAiB;AACrB,MAAI,QAAQ,OAAO,KAAK;AAExB,MAAI,iBAAiB,KAAK,KAAK,iBAAiB,CAAC,MAAM,KAAK;AAC1D,qBAAiB;AACjB,YAAQ,OAAO,KAAK;AAAA,EACtB,WAAW,mBAAmB,KAAK,KAAK,iBAAiB,CAAC,MAAM,KAAK;AACnE,WAAO,eAAe,kBAAkB,KAAK,eAAe,CAAC,MAAM,IAAK,iBAAgB;AACxF,QAAI,mBAAmB,aAAc;AACrC,WAAO,GAAG,KAAK,MAAM,GAAG,cAAc,CAAC,IAAI,KAAK,MAAM,gBAAgB,YAAY,CAAC,QAAQ,KAAK,MAAM,YAAY,CAAC;AACnH,sBAAkB;AAClB,oBAAgB;AAAA,EAClB;AACA,QAAM,MAAM,KAAK,MAAM,eAAe,CAAC,EAAE,QAAQ,cAAc,IAAI;AACnE,MAAI,SAAc,WAAW,KAAK,MAAM,eAAe,GAAG,eAAe,IAAI,GAAG,CAAC;AACjF,MAAI,OAAO,MAAM,MAAM,EAAG;AAC1B,YAAU,SAAS,QAAQ,CAAC;AAC5B,WAAS,WAAW,OAAO,YAAY,EAAE,CAAC;AAC1C,MAAI,OAAO,MAAM,EAAE,WAAW,EAAG,WAAU;AAC3C,MAAI,mBAAmB,OAAO,WAAW,GAAG;AAC1C,WAAO,KAAK,MAAM,GAAG,iBAAiB,CAAC,IAAI,KAAK,MAAM,gBAAgB,YAAY,IAAI,KAAK,MAAM,eAAe,CAAC;AACjH;AACA;AAAA,EACF,OAAO;AACL,WAAO,KAAK,MAAM,GAAG,eAAe,CAAC,IAAI,SAAS,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC;AAAA,EACzF;AACA,SAAO,MAAM;AACb,SAAO,QAAQ;AACf,SAAO,iBAAiB;AACxB,SAAO,eAAe;AACtB,EAAAC,aAAY,MAAM;AACpB;AAEA,iBAAiB,WAAW,CAACD,WAAU,mBAAmBA,MAAK,CAAC;;;CC6G/D,SAASE,WAAUC,OAAMC,YAAW;AACrC,GAAC,SAAS,SAAS;AACf,QAAG,OAAO,WAAW,cAAc,OAAO,KAAK;AAC3C,aAAO,CAAC,QAAQ,GAAG,OAAO;AAAA,IAC9B,WAAW,UAAU,CAAC,OAAO,GAAG,WAAW;AACvC,cAAQ,MAAM;AAAA,IAClB;AAAA,EACJ,GACC,SAASC,IAAG;AACT;AAEA,QAAI,eAAe,CAAC,GAChB,aAAa,aAAa,UAAU,SAAS,UAAU,gBAAgB,iBACvE,QAAQ,UAAU,KAAK,KAAK,QAAQ,aAAa,cAAc,UAC/D,cAAc,SAAS,mBACvB,MAAM,KAAK,UAAU,UAAU,QAAQ,KAAK,KAAK,eAAe,YAChE,QAAQ,cAAc,gBAAgB,aAAa,SAAS,aAAa;AAK7E,kBAAc,WAAY;AACtB,aAAO;AAAA;AAAA,QAEH,QAAQ;AAAA,UACJ,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,UACX,uBAAuB;AAAA,UACvB,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,oBAAoB;AAAA,UACpB,kBAAkB;AAAA,UAClB,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB,eAAe;AAAA,UACf,eAAe;AAAA,UACf,oBAAoB;AAAA,UACpB,iBAAiB;AAAA,UACjB,uBAAuB;AAAA,UACvB,qBAAqB;AAAA,UACrB,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,oBAAoB;AAAA,QACxB;AAAA;AAAA,QAEA,MAAM;AAAA,UACF,WAAW;AAAA,UACX,oBAAoB;AAAA,UACpB,oBAAoB;AAAA,UACpB,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,cAAc;AAAA,UACd,WAAW;AAAA,UACX,gBAAgBD;AAAA,UAChB,gBAAgBA;AAAA,UAChB,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB,eAAeA;AAAA,UACf,eAAeA;AAAA,UACf,gBAAgBA;AAAA,UAChB,gBAAgBA;AAAA,UAChB,eAAe,IAAI,SAAS,yEAAyE;AAAA,QACzG;AAAA;AAAA,QAEA,KAAK;AAAA,UACD,UAAU;AAAA,UACV,aAAa;AAAA,UACb,iBAAiB;AAAA,YAAC;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA,YAC1D;AAAA,YAAW;AAAA,YAAW;AAAA,UAAS;AAAA,UACnC,WAAWA;AAAA,UACX,WAAWA;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,eAAeA;AAAA,UACf,eAAeA;AAAA,UACf,gBAAgB;AAAA,UAChB,UAAUA;AAAA,UACV,eAAe,IAAI,SAAS,6EAA6E;AAAA,QAC7G;AAAA;AAAA,QAEA,UAAU;AAAA,UACN,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,cAAc;AAAA,UACd,UAAU,CAAC;AAAA,UACX,eAAe,IAAI,SAAS,6DAA6D;AAAA,UACzF,qBAAqB,EAAE,KAAK,EAAE,MAAM,QAAQ,KAAK,QAAQ,KAAK,MAAM,EAAE;AAAA,QAC1E;AAAA;AAAA,QAEA,UAAU;AAAA,UACN,YAAY;AAAA,UACZ,gBAAgBA;AAAA,UAChB,gBAAgB;AAAA,UAChB,eAAeA;AAAA,UACf,eAAeA;AAAA,UACf,gBAAgB;AAAA,UAChB,eAAe,IAAI,SAAS,+BAA+B;AAAA,QAC/D;AAAA;AAAA,QAEA,QAAQ;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA;AAAA,UACb,kBAAkB;AAAA,UAClB,aAAa,CAAC,WAAW,WAAW,SAAS;AAAA,UAC7C,MAAMA;AAAA;AAAA,UACN,eAAe,IAAI,SAAS,iCAAiC;AAAA,UAC7D,qBAAqB,EAAE,QAAQ,EAAC,GAAG,SAAS,GAAG,eAAe,GAAG,SAAQ,EAAE;AAAA,QAC/E;AAAA;AAAA,QAEA,KAAK;AAAA,UACD,QAAQ;AAAA,UACR,aAAa;AAAA,YAAC;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA,YACtD;AAAA,YAAW;AAAA,YAAW;AAAA,UAAS;AAAA,UACnC,aAAa;AAAA,UACb,aAAa;AAAA,UACb,eAAe,IAAI,SAAS,0EAA0E;AAAA,QAC1G;AAAA;AAAA,QAEA,KAAK;AAAA,UACD,KAAK;AAAA,UACL,cAAc;AAAA,UACd,cAAc;AAAA,UACd,cAAc;AAAA,UACd,kBAAkB;AAAA,UAClB,kBAAkB;AAAA,UAClB,aAAa;AAAA,UACb,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,QAAQA;AAAA,UACR,aAAa;AAAA,UACb,eAAeA;AAAA,UACf,eAAeA;AAAA,UACf,eAAe,IAAI,SAAS,6BAA6B;AAAA,UACzD,2BAA2B;AAAA,UAC3B,qBAAqB,EAAE,QAAQ;AAAA,YAAE,IAAI;AAAA,YAAkB,KAAK;AAAA,YACxD,IAAI;AAAA,YAAkB,IAAI;AAAA,YAAgB,IAAI;AAAA,YAC9C,IAAI;AAAA,YAAgB,IAAI;AAAA,UAAe,EAAE;AAAA,QACjD;AAAA,MACJ;AAAA,IACJ;AAGA,oBAAgB;AA4BhB,kBAAc,WAAuD;AACjE,UAAI,OAAO;AACX,cAAQ,WAAY;AAChB,aAAK,KAAK,MAAM,MAAM,SAAS;AAAA,MACnC;AACA,UAAI,UAAU,SAAS,GAAG;AACtB,YAAI,UAAU,CAAC,GAAG;AACd,gBAAM,YAAYC,GAAE,OAAO,IAAI,UAAU,CAAC,EAAE,GAAG,UAAU,UAAU,SAAS,CAAC,CAAC;AAC9E,gBAAM,SAAS,UAAU,CAAC,EAAE;AAAA,QAChC,OAAO;AACH,gBAAM,YAAY,UAAU,UAAU,SAAS,CAAC;AAAA,QACpD;AACA,YAAI,UAAU,SAAS,GAAG;AACtB,iBAAO,MAAM,UAAU,MAAM,KAAK,WAAW,GAAG,EAAE;AAClD,eAAK,QAAQ,MAAM,SAAS;AAC5B,UAAAA,GAAE,OAAO,MAAMA,IAAG,IAAI;AAAA,QAC1B;AAAA,MACJ,OAAO;AACH,cAAM,YAAY,UAAU,CAAC;AAAA,MACjC;AACA,YAAM,UAAU,MAAM;AACtB,aAAO;AAAA,IACX;AAQA,IAAAA,GAAE,gBAAgB,WAAW,YAAY;AAAA,MACrC,KAAK;AAAA,MACL,QAAQ;AAAA,MAER,MAAM,SAAUC,SAAQ,QAAQ;AAC5B,aAAK,SAASA;AACd,aAAK,SAAS;AAAA,MAClB;AAAA,MAEA,QAAQ,SAAU,UAAU,SAAS,SAAS;AAC1C,YAAIC,QAAO,MACP,SAAS,UACT,OAAOC,QAAO,WAAW,YAAY;AACzC,eAAO,KAAK,OAAO,QAAQ,KAAK,KAAK,WAAY;AAC7C,cAAI;AACJ,UAAAA,SAAQ,UAAU,CAAC;AACnB,sBAAY,UAAU,CAAC;AACvB,kBAAQD,MAAK,OAAO,KAAKC,MAAK;AAC9B,cAAI,OAAO;AACP,mBAAO,MAAM,CAAC;AACd,YAAAA,SAAQ,MAAM,CAAC;AAAA,UACnB,OAAO;AACH,mBAAO;AAAA,UACX;AACA,uBAAa,OAAOA,MAAK;AACzB,cAAI,eAAeJ,YAAW;AAC1B,mBAAO;AAAA,UACX;AACA,cAAI,aAAa,WAAW,QAAQ,SAAS,GAAG;AAC5C,qBAAS,QAAQ,SAAS;AAC1B,gBAAI,OAAO,KAAK;AACZ,qBAAO,QAAQ,SAAS,EAAE,IAAI,UAAU,KAAK;AAAA,YACjD,OAAO;AACH,qBAAO,QAAQ,SAAS,EAAE,UAAU,KAAK;AAAA,YAC7C;AAAA,UACJ;AACA,cAAI,SAAS,UAAU,GAAG;AACtB,gBAAI,QAAQ,IAAI,iBAAiB,GAAG;AAChC,2BAAa,QAAQ,IAAI,iBAAiB,EAAE,UAAU;AAAA,YAC1D,OAAO;AACH,2BAAa;AAAA,gBAAa;AAAA,gBAAY;AAAA,gBAClC,QAAQ,IAAI,uBAAuB;AAAA,gBACnC,QAAQ,IAAI,qBAAqB;AAAA,gBACjC,QAAQ,IAAI,mBAAmB;AAAA,cAAC;AAAA,YACxC;AAAA,UACJ;AACA,iBAAO;AAAA,QACX,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAGD,IAAAC,GAAE,WAAW,SAASC,SAAQ,QAAQ;AAClC,aAAO,IAAI,SAASA,SAAQ,MAAM;AAAA,IACtC;AAEA,cAAU,SAAU,KAAK,KAAK,KAAK;AAC/B,UAAI,MAAM,KAAK;AACX,eAAO;AAAA,MACX;AACA,UAAI,MAAM,KAAK;AACX,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAEA,eAAW,SAAU,QAAQ,GAAG;AAC5B,UAAI;AACJ,UAAI,MAAM,GAAG;AACT,aAAKH,MAAK,MAAM,OAAO,SAAS,CAAC;AACjC,eAAO,OAAO,SAAS,IAAI,OAAO,EAAE,KAAK,OAAO,KAAG,CAAC,IAAI,OAAO,EAAE,KAAK;AAAA,MAC1E,OAAO;AACH,YAAI,OAAO,SAAS,GAAI;AACpB,gBAAM,OAAO,SAAS,IAAI,KAAK;AAC/B,iBAAO,KAAK,KAAK,OAAOA,MAAK,MAAM,EAAE,CAAC,IAAI,OAAOA,MAAK,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAG,CAAC;AAAA,QAC3F,OAAO;AACH,gBAAM,OAAO,SAAS,IAAI,KAAK;AAC/B,iBAAO,KAAK,KAAK,OAAOA,MAAK,MAAM,EAAE,CAAC,IAAI,OAAOA,MAAK,MAAM,EAAE,IAAI,CAAC,KAAK,IAAK,OAAO,KAAG,CAAC;AAAA,QAE5F;AAAA,MACJ;AAAA,IACJ;AAEA,qBAAiB,SAAU,KAAK;AAC5B,UAAI;AACJ,cAAQ,KAAK;AAAA,QACT,KAAK;AACD,gBAAMC;AACN;AAAA,QACJ,KAAK;AACD,gBAAM;AACN;AAAA,QACJ,KAAK;AACD,gBAAM;AACN;AAAA,QACJ,KAAK;AACD,gBAAM;AACN;AAAA,QACJ;AACI,eAAK,WAAW,GAAG;AACnB,cAAI,OAAO,IAAI;AACX,kBAAM;AAAA,UACV;AAAA,MACR;AACA,aAAO;AAAA,IACX;AAEA,sBAAkB,SAAU,MAAM;AAC9B,UAAI,GAAG,SAAS,CAAC;AACjB,WAAK,IAAI,KAAK,QAAQ,OAAM;AACxB,eAAO,CAAC,IAAI,eAAe,KAAK,CAAC,CAAC;AAAA,MACtC;AACA,aAAO;AAAA,IACX;AAEA,aAAS,SAAU,MAAM,QAAQ;AAC7B,UAAI,GAAG,IAAI,SAAS,CAAC;AACrB,WAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,IAAI,KAAK;AACvC,YAAI,KAAK,CAAC,MAAM,QAAQ;AACpB,iBAAO,KAAK,KAAK,CAAC,CAAC;AAAA,QACvB;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAEA,eAAW,SAAU,KAAK;AACtB,aAAO,CAAC,MAAM,WAAW,GAAG,CAAC,KAAK,SAAS,GAAG;AAAA,IAClD;AAEA,mBAAe,SAAU,KAAK,MAAM,WAAW,UAAU,QAAQ;AAC7D,UAAI,GAAG;AACP,aAAO,SAAS,QAAQ,WAAW,GAAG,EAAE,SAAS,IAAI,IAAI,QAAQ,IAAI,GAAG,MAAM,EAAE;AAChF,WAAK,IAAIC,GAAE,QAAQ,KAAK,GAAG,KAAK,IAAI,IAAI,SAAS;AACjD,UAAI,IAAI,IAAI,QAAQ;AAChB,YAAI,CAAC,IAAI;AAAA,MACb;AACA,WAAK,IAAI,IAAI,WAAW,IAAI,GAAG,KAAK,WAAW;AAC3C,YAAI,OAAO,GAAG,GAAG,QAAQ;AAAA,MAC7B;AACA,aAAO,IAAI,KAAK,EAAE;AAAA,IACtB;AAIA,UAAM,SAAU,KAAK,KAAK,YAAY;AAClC,UAAI;AACJ,WAAK,IAAI,IAAI,QAAQ,OAAO;AACxB,YAAI,cAAc,IAAI,CAAC,MAAM,KAAM;AACnC,YAAI,IAAI,CAAC,MAAM,KAAK;AAChB,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAGA,UAAM,SAAU,MAAM;AAClB,UAAI,QAAQ,GAAG;AACf,WAAK,IAAI,KAAK,QAAQ,OAAM;AACxB,iBAAS,OAAO,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,IAAI;AAAA,MACrD;AACA,aAAO;AAAA,IACX;AAEA,kBAAc,SAAU,KAAK;AACzB,aAAOA,GAAE,QAAQ,GAAG,IAAI,MAAM,CAAC,GAAG;AAAA,IACtC;AAGA,aAAS,SAAS,KAAK;AACnB,UAAI,KAAK;AACT,UAAIH,UAAS,kBAAkB;AAC3B,YAAI;AACA,UAAAA,UAAS,iBAAiB,EAAE,UAAU;AACtC;AAAA,QACJ,SAAS,GAAG;AAER,mBAAS;AAAA,QACb;AAAA,MACJ;AACA,YAAMA,UAAS,cAAc,OAAO;AACpC,UAAI,OAAO;AACX,MAAAA,UAAS,qBAAqB,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG;AACxD,UAAI,QAAQ;AACR,QAAAA,UAAS,YAAYA,UAAS,YAAY,SAAS,CAAC,EAAE,UAAU;AAAA,MACpE,OAAO;AACH,YAAK,OAAOA,UAAS,KAAK,MAAM,oBAAoB,WAA8B,cAAc,WAAW,IAAI;AAAA,MACnH;AAAA,IACJ;AAGA,IAAAG,GAAE,GAAG,aAAa,SAAU,OAAO,QAAQ,aAAa,UAAU;AAC9D,UAAI,QAAQ;AACZ,UAAI,gBAAgB,SAAS,KAAK,KAAK,cAAc,IAAI;AACrD,eAAO;AAAA,MACX;AAEA,UAAIA,GAAE,GAAG,UAAU,WAAW,OAAO;AAEjC,eAAO;AAAA,MAEX,WAAWA,GAAE,GAAG,UAAU,WAAWD,YAAW;AAE5C,YAAIK,MAAKP,UAAS,cAAc,QAAQ;AACxC,YAAI,CAAC,EAAEO,IAAG,cAAcA,IAAG,WAAW,IAAI,IAAI;AAE1C,UAAAJ,GAAE,GAAG,UAAU,SAAS,SAASK,QAAOC,SAAQC,SAAQC,WAAU;AAC9D,mBAAO,IAAI,eAAeH,QAAOC,SAAQC,SAAQC,SAAQ;AAAA,UAC7D;AAAA,QACJ,WAAWX,UAAS,cAAc,CAACA,UAAS,WAAW,GAAG;AAEtD,UAAAA,UAAS,WAAW,IAAI,KAAK,iCAAiC,cAAc;AAC5E,UAAAG,GAAE,GAAG,UAAU,SAAS,SAASK,QAAOC,SAAQC,SAAQC,WAAU;AAC9D,mBAAO,IAAI,YAAYH,QAAOC,SAAQC,OAAM;AAAA,UAChD;AAAA,QACJ,OAAO;AAEH,UAAAP,GAAE,GAAG,UAAU,SAAS;AACxB,iBAAO;AAAA,QACX;AAAA,MACJ;AAEA,UAAI,UAAUD,YAAW;AACrB,gBAAQC,GAAE,IAAI,EAAE,WAAW;AAAA,MAC/B;AACA,UAAI,WAAWD,YAAW;AACtB,iBAASC,GAAE,IAAI,EAAE,YAAY;AAAA,MACjC;AAEA,eAASA,GAAE,GAAG,UAAU,OAAO,OAAO,QAAQ,MAAM,QAAQ;AAE5D,iBAAWA,GAAE,IAAI,EAAE,KAAK,eAAe;AACvC,UAAI,UAAU;AACV,iBAAS,eAAe,MAAM;AAAA,MAClC;AACA,aAAO;AAAA,IACX;AAEA,IAAAA,GAAE,GAAG,YAAY,WAAY;AACzB,UAAI,SAAS,KAAK,KAAK,cAAc;AACrC,UAAI,QAAQ;AACR,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AAEA,IAAAA,GAAE,gBAAgB,WAAW,YAAY;AAAA,MACrC,MAAM,SAAU,KAAK;AACjB,YAAI,KAAK,OAAO,YAAY,CAAC;AAC7B,aAAK,OAAO,KAAK;AACb,cAAI,IAAI,eAAe,GAAG,KAAK,OAAO,QAAQ,YAAY,IAAI,QAAQ,GAAG,IAAI,IAAI;AAC7E,oBAAQ,IAAI,MAAM,GAAG;AACrB,kBAAM,CAAC,IAAI,MAAM,CAAC,EAAE,WAAW,IAAI,YAAY,WAAW,MAAM,CAAC,CAAC;AAClE,kBAAM,CAAC,IAAI,MAAM,CAAC,EAAE,WAAW,IAAI,WAAW,WAAW,MAAM,CAAC,CAAC;AACjE,kBAAM,CAAC,IAAI,IAAI,GAAG;AAClB,sBAAU,KAAK,KAAK;AAAA,UACxB;AAAA,QACJ;AACA,aAAK,MAAM;AACX,aAAK,YAAY,aAAa;AAAA,MAClC;AAAA,MAEA,KAAK,SAAU,OAAO;AAClB,YAAI,YAAY,KAAK,WACjB,GAAG,OAAO;AACd,aAAK,SAAS,KAAK,IAAI,KAAK,OAAOD,YAAW;AAC1C,iBAAO;AAAA,QACX;AACA,YAAI,WAAW;AACX,eAAK,IAAI,UAAU,QAAQ,OAAM;AAC7B,oBAAQ,UAAU,CAAC;AACnB,gBAAI,MAAM,CAAC,KAAK,SAAS,MAAM,CAAC,KAAK,OAAO;AACxC,qBAAO,MAAM,CAAC;AAAA,YAClB;AAAA,UACJ;AAAA,QACJ;AACA,eAAOA;AAAA,MACX;AAAA,IACJ,CAAC;AAGD,IAAAC,GAAE,YAAY,SAAS,KAAK;AACxB,aAAO,IAAI,SAAS,GAAG;AAAA,IAC3B;AAEA,mBAAe,YAAY;AAAA,MACvB,MAAM,SAAUI,KAAI,SAAS;AACzB,YAAI,MAAMJ,GAAEI,GAAE;AACd,aAAK,MAAM;AACX,aAAK,UAAU;AACf,aAAK,eAAe;AACpB,aAAK,eAAe;AACpB,aAAK,KAAKA;AACV,aAAK,SAAS,CAAC;AACf,aAAK,UAAU;AACf,aAAK,OAAO;AACZ,aAAK,kBAAkB,CAAC,QAAQ,IAAI,iBAAiB;AACrD,aAAK,mBAAmB,CAAC,QAAQ,IAAI,kBAAkB;AAAA,MAC3D;AAAA,MAEA,mBAAmB,SAAU,IAAI;AAC7B,aAAK,OAAO,KAAK,EAAE;AACnB,YAAI,KAAK,MAAM;AACX,eAAK,cAAc;AAAA,QACvB;AAAA,MACJ;AAAA,MAEA,gBAAgB,SAAU,QAAQ;AAC9B,YAAI,UAAUJ,GAAE,OAAO,MAAM;AAC7B,aAAK,SAAS;AACd,aAAK,UAAU;AACf,gBAAQ,WAAWA,GAAE,MAAM,KAAK,YAAY,IAAI,CAAC;AACjD,gBAAQ,WAAWA,GAAE,MAAM,KAAK,YAAY,IAAI,CAAC;AACjD,gBAAQ,MAAMA,GAAE,MAAM,KAAK,YAAY,IAAI,CAAC;AAAA,MAChD;AAAA,MAEA,OAAO,SAAU,eAAe;AAC5B,aAAK,SAAS,CAAC;AACf,YAAI,KAAK,WAAW,eAAe;AAC/B,eAAK,QAAQ,OAAO;AACpB,eAAK,UAAUD;AAAA,QACnB;AAAA,MACJ;AAAA,MAEA,YAAY,SAAU,GAAG;AACrB,YAAI,aAAaC,GAAE,MAAM,gBAAgB;AACzC,mBAAW,gBAAgB;AAC3B,mBAAW,aAAa,KAAK;AAC7B,aAAK,IAAI,QAAQ,UAAU;AAAA,MAC/B;AAAA,MAEA,YAAY,SAAU,GAAG;AACrB,QAAAA,GAAEH,UAAS,IAAI,EAAE,OAAO,eAAe;AACvC,QAAAG,GAAEH,UAAS,IAAI,EAAE,KAAK,iBAAiBG,GAAE,MAAM,KAAK,WAAW,IAAI,CAAC;AACpE,aAAK,OAAO;AACZ,aAAK,eAAe,EAAE;AACtB,aAAK,eAAe,EAAE;AACtB,aAAK,YAAY,EAAE;AACnB,YAAI,CAAC,KAAK,WAAW,KAAK,iBAAiB;AACvC,eAAK,UAAU,IAAI,QAAQ,KAAK,OAAO;AACvC,eAAK,QAAQ,eAAe,EAAE,OAAO,EAAE,KAAK;AAAA,QAChD;AACA,aAAK,cAAc;AAAA,MACvB;AAAA,MAEA,YAAY,WAAY;AACpB,QAAAA,GAAEH,UAAS,IAAI,EAAE,OAAO,eAAe;AACvC,YAAI,SAAS,KAAK,QACb,UAAU,OAAO,QACjB,eAAe,OACf,IAAI;AACT,aAAK,OAAO;AACZ,aAAK,YAAY;AAEjB,YAAI,KAAK,SAAS;AACd,eAAK,QAAQ,OAAO;AACpB,eAAK,UAAU;AAAA,QACnB;AAEA,aAAK,IAAI,GAAG,IAAI,SAAS,KAAK;AAC1B,eAAK,OAAO,CAAC;AACb,cAAI,GAAG,qBAAqB,GAAG;AAC3B,2BAAe;AAAA,UACnB;AAAA,QACJ;AAEA,YAAI,cAAc;AACd,eAAK,OAAO,OAAO;AAAA,QACvB;AAAA,MACJ;AAAA,MAEA,WAAW,SAAU,GAAG;AACpB,aAAK,eAAe,EAAE;AACtB,aAAK,eAAe,EAAE;AACtB,aAAK,YAAY,EAAE;AACnB,YAAI,KAAK,SAAS;AACd,eAAK,QAAQ,eAAe,EAAE,OAAO,EAAE,KAAK;AAAA,QAChD;AACA,aAAK,cAAc;AAAA,MACvB;AAAA,MAEA,eAAe,WAAY;AACvB,YAAI,SAAS,KAAK,QACb,UAAU,OAAO,QACjB,eAAe,OACf,SAAS,KAAK,QAAQ,OAAO,GAC7B,SAAS,KAAK,eAAe,OAAO,MACpC,SAAS,KAAK,eAAe,OAAO,KACpC,aAAa,IAAI,GAAG,QAAQ;AACjC,YAAI,CAAC,KAAK,MAAM;AACZ;AAAA,QACJ;AACA,aAAK,IAAI,GAAG,IAAI,SAAS,KAAK;AAC1B,eAAK,OAAO,CAAC;AACb,mBAAS,GAAG,mBAAmB,KAAK,WAAW,QAAQ,MAAM;AAC7D,cAAI,QAAQ;AACR,2BAAe;AAAA,UACnB;AAAA,QACJ;AACA,YAAI,cAAc;AACd,wBAAcG,GAAE,MAAM,uBAAuB;AAC7C,sBAAY,aAAa,KAAK;AAC9B,eAAK,IAAI,QAAQ,WAAW;AAC5B,cAAI,KAAK,SAAS;AACd,0BAAc;AACd,iBAAK,IAAI,GAAG,IAAI,SAAS,KAAK;AAC1B,mBAAK,OAAO,CAAC;AACb,6BAAe,GAAG,wBAAwB;AAAA,YAC9C;AACA,iBAAK,QAAQ,WAAW,WAAW;AAAA,UACvC;AACA,cAAI,CAAC,KAAK,kBAAkB;AACxB,iBAAK,OAAO,OAAO;AAAA,UACvB;AAAA,QACJ;AACA,YAAI,WAAW,MAAM;AACjB,eAAK,WAAW;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ,CAAC;AAGD,cAAU,YAAY;AAAA,MAClB,WAAW;AAAA,MAKX,MAAM,SAAU,SAAS;AACrB,YAAI,mBAAmB,QAAQ,IAAI,oBAAoB,YAAY,GAC/D,eAAe,KAAK,WACpB;AACJ,aAAK,YAAY,QAAQ,IAAI,kBAAkB,KAAKH,UAAS;AAC7D,aAAK,iBAAiB,QAAQ,IAAI,kBAAkB,EAAE;AACtD,aAAK,iBAAiB,QAAQ,IAAI,kBAAkB,EAAE;AAEtD,QAAAG,GAAE,aAAa,EAAE,OAAO;AACxB,QAAAA,GAAE,aAAa,EAAE,OAAO;AACxB,aAAK,UAAUA,GAAE,UAAU;AAAA,UACvB,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,SAAS;AAAA,QACb,CAAC;AACD,aAAK,UAAUA,GAAE,UAAU;AAAA,UACvB,IAAI;AAAA,UACJ,SAAS;AAAA,QACb,CAAC,EAAE,SAAS,KAAK,SAAS;AAE1B,iBAAS,KAAK,QAAQ,OAAO;AAC7B,aAAK,aAAa,OAAO;AACzB,aAAK,YAAY,OAAO;AACxB,aAAK,SAAS;AACd,QAAAA,GAAE,MAAM,EAAE,OAAO,uBAAuB;AACxC,QAAAA,GAAE,MAAM,EAAE,KAAK,yBAAyBA,GAAE,MAAM,KAAK,kBAAkB,IAAI,CAAC;AAC5E,aAAK,iBAAiB;AAAA,MAC1B;AAAA,MAEA,kBAAkB,WAAY;AAC1B,aAAK,YAAYA,GAAE,MAAM,EAAE,UAAU;AACrC,aAAK,aAAaA,GAAE,MAAM,EAAE,WAAW;AACvC,aAAK,cAAc,KAAK,aAAaA,GAAE,MAAM,EAAE,MAAM;AACrD,aAAK,eAAe;AAAA,MACxB;AAAA,MAEA,SAAS,SAAU,SAAS;AACxB,aAAK,QAAQ,KAAK,OAAO,EAAE,SAAS,KAAK,SAAS;AAClD,aAAK,QAAQ,KAAK,QAAQ,MAAM,IAAI;AACpC,aAAK,SAAS,KAAK,QAAQ,OAAO;AAClC,aAAK,QAAQ,OAAO;AAAA,MACxB;AAAA,MAEA,YAAY,SAAU,SAAS;AAC3B,YAAI,CAAC,SAAS;AACV,eAAK,QAAQ,IAAI,cAAc,QAAQ;AACvC,eAAK,SAAS;AACd;AAAA,QACJ;AACA,aAAK,QAAQ,OAAO;AACpB,aAAK,QAAQ,KAAK,OAAO,EACpB,IAAI;AAAA,UACD,SAAS,KAAK;AAAA,UACd,UAAU,KAAK;AAAA,UACf,cAAc;AAAA,QAClB,CAAC;AACL,YAAI,KAAK,QAAQ;AACb,eAAK,SAAS;AACd,eAAK,eAAe;AAAA,QACxB;AAAA,MACJ;AAAA,MAEA,gBAAgB,SAAU,GAAG,GAAG;AAC5B,YAAI,MAAMD,YAAW;AACjB,cAAI,KAAK,WAAWA,YAAW;AAC3B;AAAA,UACJ;AACA,cAAI,KAAK,SAAS,KAAK;AACvB,cAAI,KAAK,SAAS,KAAK;AAAA,QAE3B,OAAO;AACH,eAAK,SAAS,IAAI,IAAI,KAAK;AAC3B,eAAK,SAAS,IAAI,IAAI,KAAK;AAAA,QAC/B;AACA,YAAI,CAAC,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,QAAQ;AAC5C;AAAA,QACJ;AAEA,aAAK,KAAK,SAAS,KAAK;AACxB,aAAK,KAAK;AAEV,YAAI,IAAI,KAAK,WAAW;AACpB,cAAI,KAAK;AAAA,QACb;AACA,YAAI,IAAI,KAAK,YAAY;AACrB,cAAI,KAAK;AAAA,QACb,WAAW,IAAI,KAAK,QAAQ,KAAK,aAAa;AAC1C,cAAI,KAAK,cAAc,KAAK;AAAA,QAChC;AAEA,aAAK,QAAQ,IAAI;AAAA,UACb,QAAQ;AAAA,UACR,OAAO;AAAA,QACX,CAAC;AAAA,MACL;AAAA,MAEA,QAAQ,WAAY;AAChB,aAAK,QAAQ,OAAO;AACpB,aAAK,QAAQ,OAAO;AACpB,aAAK,UAAU,KAAK,UAAUA;AAC9B,QAAAC,GAAE,MAAM,EAAE,OAAO,uBAAuB;AAAA,MAC5C;AAAA,IACJ,CAAC;AAED,iBAAa,WAAW;AACpB,aAAO,aAAa;AAAA,IACxB;AAEA,IAAAA,GAAE,UAAU;AAEZ,cAAU,CAAC;AACX,IAAAA,GAAE,GAAG,YAAY,SAAU,YAAY,aAAa;AAChD,aAAO,KAAK,KAAK,WAAY;AACzB,YAAI,UAAU,IAAIA,GAAE,GAAG,UAAU,QAAQ,MAAM,WAAW,GACrD,QAAQA,GAAE,IAAI,GACd,QAAQ;AACb,iBAAS,WAAY;AACjB,cAAI,QAAQ,OAAO,QAAQ,KAAK,UAAU,IAAI;AAC9C,cAAI,eAAe,UAAU,eAAeD,YAAW;AACnD,mBAAO,KAAK,aAAa,QAAQ,IAAI,oBAAoB,CAAC;AAC1D,gBAAI,SAASA,cAAa,SAAS,MAAM;AACrC,qBAAO,MAAM,KAAK;AAAA,YACtB;AACA,qBAAS,KAAK,QAAQ,6BAA6B,EAAE,EAAE,MAAM,GAAG;AAAA,UACpE,OAAO;AACH,qBAAS;AAAA,UACb;AAEA,kBAAQ,QAAQ,IAAI,OAAO,MAAM,SAAS,OAAO,SAAS,QAAQ,IAAI,uBAAuB,IAAI,QAAQ,IAAI,OAAO;AACpH,cAAI,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAClC,gBAAI,CAAC,QAAQ,IAAI,WAAW,KAAK,CAACC,GAAE,KAAK,MAAM,cAAc,GAAG;AAE5D,oBAAMH,UAAS,cAAc,MAAM;AACnC,kBAAI,YAAY;AAChB,oBAAM,KAAK,GAAG;AACd,uBAASG,GAAE,GAAG,EAAE,YAAY,KAAKA,GAAE,GAAG,EAAE,OAAO;AAC/C,cAAAA,GAAE,GAAG,EAAE,OAAO;AACd,oBAAM;AAAA,YACV;AAAA,UACJ,OAAO;AACH,qBAAS,QAAQ,IAAI,QAAQ;AAAA,UACjC;AAEA,cAAI,CAAC,QAAQ,IAAI,oBAAoB,GAAG;AACpC,uBAAWA,GAAE,KAAK,MAAM,eAAe;AACvC,gBAAI,CAAC,UAAU;AACX,yBAAW,IAAI,aAAa,MAAM,OAAO;AACzC,cAAAA,GAAE,KAAK,MAAM,iBAAiB,QAAQ;AAAA,YAC1C,WAAW,CAAC,QAAQ,IAAI,WAAW,GAAG;AAClC,uBAAS,MAAM;AAAA,YACnB;AAAA,UACJ,OAAO;AACH,uBAAW;AAAA,UACf;AAEA,cAAI,QAAQ,IAAI,WAAW,KAAK,CAACA,GAAE,KAAK,MAAM,cAAc,GAAG;AAC3D,gBAAI,CAACA,GAAE,KAAK,MAAM,gBAAgB,GAAG;AACjC,oBAAM,oFAAoF;AAC1F,cAAAA,GAAE,KAAK,MAAM,kBAAkB,IAAI;AAAA,YACvC;AACA;AAAA,UACJ;AAEA,eAAK,IAAIA,GAAE,GAAG,UAAU,QAAQ,IAAI,MAAM,CAAC,EAAE,MAAM,QAAQ,SAAS,OAAO,MAAM;AAEjF,aAAG,OAAO;AAEV,cAAI,UAAU;AACV,qBAAS,kBAAkB,EAAE;AAAA,UACjC;AAAA,QACJ;AACA,YAAKA,GAAE,IAAI,EAAE,KAAK,KAAK,CAAC,QAAQ,IAAI,oBAAoB,KAAKA,GAAE,IAAI,EAAE,GAAG,SAAS,KAAM,CAACA,GAAE,IAAI,EAAE,QAAQ,MAAM,EAAE,QAAQ;AACpH,cAAI,CAAC,QAAQ,IAAI,WAAW,KAAKA,GAAE,KAAK,MAAM,cAAc,GAAG;AAE3D,iBAAK,IAAI,QAAQ,QAAQ,GAAG,KAAK;AAC7B,kBAAI,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,MAAM;AAC3B,wBAAQ,OAAO,IAAI,GAAG,CAAC;AAAA,cAC3B;AAAA,YACJ;AAAA,UACJ;AACA,kBAAQ,KAAK,CAAC,MAAM,MAAM,CAAC;AAC3B,UAAAA,GAAE,KAAK,MAAM,gBAAgB,IAAI;AAAA,QACrC,OAAO;AACH,iBAAO,KAAK,IAAI;AAAA,QACpB;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,IAAAA,GAAE,GAAG,UAAU,WAAW,YAAY;AAGtC,IAAAA,GAAE,4BAA4B,WAAY;AACtC,UAAII,KAAI,GAAG;AACX,UAAI,OAAO,CAAC;AACZ,WAAK,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;AAC1C,QAAAA,MAAK,QAAQ,CAAC,EAAE,CAAC;AACjB,YAAIJ,GAAEI,GAAE,EAAE,GAAG,UAAU,KAAK,CAACJ,GAAEI,GAAE,EAAE,QAAQ,EAAE,GAAG,SAAS,GAAG;AACxD,kBAAQ,CAAC,EAAE,CAAC,EAAE,KAAKA,GAAE;AACrB,UAAAJ,GAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,GAAG,gBAAgB,KAAK;AAC3C,eAAK,KAAK,CAAC;AAAA,QACf,WAAW,CAACA,GAAEI,GAAE,EAAE,QAAQ,MAAM,EAAE,UAAU,CAACJ,GAAE,KAAKI,KAAI,cAAc,GAAG;AAKrE,UAAAJ,GAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,GAAG,gBAAgB,KAAK;AAC3C,eAAK,KAAK,CAAC;AAAA,QACf;AAAA,MACJ;AACA,WAAK,IAAI,KAAK,QAAQ,GAAG,KAAK;AAC1B,gBAAQ,OAAO,KAAK,IAAI,CAAC,GAAG,CAAC;AAAA,MACjC;AAAA,IACJ;AAMA,IAAAA,GAAE,GAAG,UAAU,UAAU,YAAY;AAAA,MACjC,MAAM,SAAU,KAAK,aAAa;AAC9B,YAAI,iBAAiB,UAAU,MAAM;AACrC,aAAK,cAAc,cAAc,eAAe,CAAC;AACjD,aAAK,MAAM;AACX,aAAK,cAAc,CAAC;AACpB,mBAAWA,GAAE,GAAG,UAAU;AAC1B,eAAO,SAAS;AAChB,aAAK,mBAAmB,YAAY,qBAAqB,YAAY,oBAAoB,KAAK;AAE9F,wBAAgB,KAAK,cAAc,MAAM;AACzC,YAAI,kBAAkB,cAAc;AAChC,4BAAkB,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,QAC5D,OAAO;AACH,4BAAkB,SAAS,aAAa;AAAA,QAC5C;AACA,aAAK,gBAAgBA,GAAE,OAAO,CAAC,GAAG,MAAM,iBAAiB,WAAW;AAAA,MACxE;AAAA,MAGA,eAAe,SAAU,KAAK;AAC1B,YAAI,SAAS,KAAK,kBACd,KAAK,GAAG,OAAO;AACnB,YAAI,WAAW,SAAS,WAAWD,YAAW;AAC1C,iBAAO;AAAA,QACX;AACA,YAAI,KAAK,YAAY,eAAe,GAAG,GAAG;AACtC,gBAAM,KAAK,YAAY;AAAA,QAC3B,OAAO;AACH,gBAAM,KAAK,IAAI,aAAa,SAAS,GAAG;AACxC,cAAI,QAAQA,cAAa,QAAQ,MAAM;AACnC,kBAAM;AAAA,UACV,WAAW,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK;AACjC,kBAAM,IAAI,OAAO,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,GAAG;AAC7C,iBAAK,IAAI,IAAI,QAAQ,OAAM;AACvB,kBAAI,CAAC,IAAI,eAAe,IAAI,CAAC,EAAE,QAAQ,kBAAkB,EAAE,CAAC;AAAA,YAChE;AAAA,UACJ,WAAW,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK;AACjC,oBAAQ,IAAI,OAAO,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,GAAG;AAC/C,kBAAM,CAAC;AACP,iBAAK,IAAI,MAAM,QAAQ,OAAM;AACzB,uBAAS,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC;AAC9B,kBAAI,OAAO,CAAC,EAAE,QAAQ,kBAAkB,EAAE,CAAC,IAAI,eAAe,OAAO,CAAC,EAAE,QAAQ,kBAAkB,EAAE,CAAC;AAAA,YACzG;AAAA,UACJ,OAAO;AACH,kBAAM,eAAe,GAAG;AAAA,UAC5B;AACA,eAAK,YAAY,MAAM;AAAA,QAC3B;AACA,eAAO;AAAA,MACX;AAAA,MAEA,KAAK,SAAU,KAAK,YAAY;AAC5B,YAAI,YAAY,KAAK,cAAc,GAAG,GAClC;AACJ,YAAI,cAAc,cAAc;AAC5B,iBAAO;AAAA,QACX;AACA,gBAAQ,SAAS,KAAK,cAAc,GAAG,OAAOA,aAAY,aAAa;AAAA,MAC3E;AAAA,IACJ,CAAC;AAGD,IAAAC,GAAE,GAAG,UAAU,QAAQ,YAAY;AAAA,MAC/B,UAAU;AAAA,MAEV,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,aAAK,KAAKA;AACV,aAAK,MAAMJ,GAAEI,GAAE;AACf,aAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,QAAQ;AACb,aAAK,SAAS;AACd,aAAK,gBAAgBL;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA,MAKA,YAAY,WAAY;AACpB,YAAI,cAAc,CAAC,KAAK,QAAQ,IAAI,oBAAoB;AACxD,YAAI,EAAE,KAAK,SAAS,KAAK,IAAI,WAAW,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,IAAI,WAAW,GAAG,WAAW,IAAI;AAC3G,eAAK,WAAW;AAAA,QACpB,OAAO;AACH,eAAK,cAAc,KAAK,OAAO;AAC/B,eAAK,eAAe,KAAK,OAAO;AAAA,QACpC;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAKA,QAAQ,WAAY;AAChB,YAAI,KAAK,UAAU;AACf,eAAK,GAAG,YAAY;AACpB,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,SAAU,GAAG,GAAG;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA,MAKA,oBAAoB,SAAUK,KAAI,GAAG,GAAG;AACpC,YAAI,gBAAgB,KAAK,eACrB,mBAAmB,CAAC,KAAK,QAAQ,IAAI,kBAAkB,GACvD;AACJ,YAAI,IAAI,KAAK,eAAe,IAAI,KAAK,gBAAgB,IAAI,KAAK,IAAI,GAAG;AACjE,iBAAO;AAAA,QACX;AACA,oBAAY,KAAK,UAAUA,KAAI,GAAG,CAAC;AACnC,YAAI,kBAAkB,WAAW;AAC7B,cAAI,kBAAkBL,cAAa,kBAAkB;AACjD,iBAAK,gBAAgB;AAAA,UACzB;AACA,eAAK,gBAAgB;AACrB,cAAI,cAAcA,cAAa,kBAAkB;AAC7C,iBAAK,gBAAgB;AAAA,UACzB;AACA,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AAAA;AAAA;AAAA;AAAA,MAKA,sBAAsB,WAAY;AAC9B,YAAI,KAAK,kBAAkBA,YAAW;AAClC,eAAK,gBAAgB;AACrB,eAAK,gBAAgBA;AACrB,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AAAA,MAEA,iBAAiB,WAAY;AACzB,aAAK,gBAAgB,IAAI;AAAA,MAC7B;AAAA,MAEA,iBAAiB,WAAY;AACzB,aAAK,gBAAgB,KAAK;AAAA,MAC9B;AAAA,MAEA,iBAAiB,SAAU,WAAY;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA,MAKxC,yBAAyB,WAAY;AACjC,YAAI,UAAU,KAAK,SACf,SAAS,IACT,UAAU,CAAC,GACX,QAAQ,SAAS,WAAW,QAAQ,MAAM,GAC1C,YAAY,eAAe,WAAW,IACtC,WAAWE,SAAQ,UAAU;AACjC,YAAI,KAAK,kBAAkBF,YAAW;AAClC,iBAAO;AAAA,QACX;AACA,iBAAS,KAAK,uBAAuB;AACrC,oBAAY,QAAQ,IAAI,kBAAkB;AAC1C,YAAI,WAAW;AACX,iBAAO,UAAU,MAAM,SAAS,MAAM;AAAA,QAC1C;AACA,YAAI,QAAQ,IAAI,mBAAmB,GAAG;AAClC,oBAAU,+BAA+B,QAAQ,IAAI,mBAAmB,IAAI;AAAA,QAChF;AACA,kBAAU,KAAK,QAAQ,IAAI,eAAe;AAC1C,YAAI,CAAC,SAAS;AACV,iBAAO;AAAA,QACX;AACA,YAAI,CAACC,GAAE,QAAQ,OAAO,GAAG;AACrB,oBAAU,CAAC,OAAO;AAAA,QACtB;AACA,YAAI,CAACA,GAAE,QAAQ,MAAM,GAAG;AACpB,mBAAS,CAAC,MAAM;AAAA,QACpB;AACA,qBAAa,KAAK,QAAQ,IAAI,wBAAwB;AACtD,wBAAgB,KAAK,QAAQ,IAAI,2BAA2B;AAC5D,YAAI,cAAc,eAAe;AAE7B,sBAAY,CAAC;AACb,eAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,iBAAK,OAAO,CAAC,EAAE,aAAa;AAC5B,iBAAK,IAAIA,GAAE,QAAQ,IAAI,UAAU,MAAM,IAAI;AACvC,wBAAU,CAAC,IAAI,OAAO,CAAC;AAAA,YAC3B;AAAA,UACJ;AACA,mBAAS;AAAA,QACb;AACA,oBAAY,QAAQ;AACpB,mBAAW,OAAO;AAClB,aAAK,IAAI,GAAG,IAAI,WAAW,KAAK;AAC5B,UAAAC,UAAS,QAAQ,CAAC;AAClB,cAAI,OAAOA,YAAW,UAAU;AAC5B,YAAAA,UAAS,IAAI,SAASA,OAAM;AAAA,UAChC;AACA,mBAASA,QAAO,UAAU;AAC1B,eAAK,IAAI,GAAG,IAAI,UAAU,KAAK;AAC3B,gBAAI,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,QAAQ,IAAI,iBAAiB,GAAG;AACtD,cAAAD,GAAE,OAAO,OAAO,CAAC,GAAG;AAAA,gBAChB,QAAQ,QAAQ,IAAI,eAAe;AAAA,gBACnC,QAAQ,QAAQ,IAAI,eAAe;AAAA,cACvC,CAAC;AACD,qBAAOC,QAAO,OAAO,OAAO,CAAC,GAAG,QAAQ,IAAI,qBAAqB,GAAG,OAAO;AAC3E,sBAAQ,KAAK,iBAAiB,SAAS,OAAO,OAAO,QAAQ;AAAA,YACjE;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,QAAQ,QAAQ;AAChB,iBAAO,SAAS,QAAQ,KAAK,IAAI;AAAA,QACrC;AACA,eAAO;AAAA,MACX;AAAA,MAEA,wBAAwB,WAAY;AAAA,MAAC;AAAA,MAErC,oBAAoB,SAAU,OAAO,SAAS;AAC1C,YAAI,iBAAiB,QAAQ,IAAI,gBAAgB,GAC7C,UAAU,QAAQ,IAAI,kBAAkB,GACxC,OAAO,MAAM,QAAQ;AACzB,YAAI,gBAAgB;AAChB,iBAAO;AAAA,QACX;AACA,YAAI,SAAS;AAET,kBAAQ,qCAAqC,KAAK,KAAK,KAAK,8CAA8C,KAAK,KAAK;AACpH,cAAI,OAAO;AACP,qBAAS,CAAC;AACV,mBAAO,MAAM,WAAW,IAAI,KAAK;AACjC,iBAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACpB,qBAAO,CAAC,IAAI,QAAQH,MAAK,MAAM,SAAS,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,OAAO,GAAG,GAAG,GAAG;AAAA,YACvF;AACA,mBAAO,SAAS,OAAO,KAAK,GAAG,IAAI;AAAA,UACvC;AAAA,QAEJ;AACA,eAAO;AAAA,MACX;AAAA,IAEJ,CAAC;AAED,wBAAoB;AAAA,MAChB,iBAAiB,SAAU,WAAW;AAClC,YAAI,gBAAgB,KAAK,eACrB,SAAS,KAAK,QACd,WAAW,KAAK,aAAa,aAAa,GAC1C;AAEJ,YAAI,UAAU;AACV,sBAAY,KAAK,aAAa,eAAe,SAAS;AACtD,cAAIE,GAAE,QAAQ,SAAS,KAAKA,GAAE,QAAQ,QAAQ,GAAG;AAC7C,mBAAO,kBAAkB,UAAU,SAAS;AAC5C,iBAAK,aAAa,aAAa,IAAIA,GAAE,IAAI,WAAW,SAAU,UAAU;AACpE,qBAAO,SAAS;AAAA,YACpB,CAAC;AAAA,UACL,OAAO;AACH,mBAAO,iBAAiB,UAAU,SAAS;AAC3C,iBAAK,aAAa,aAAa,IAAI,UAAU;AAAA,UACjD;AAAA,QACJ;AAAA,MACJ;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,SAAS,KAAK,QACd,SAAS,KAAK,QACd,eAAe,KAAK,cACpB,QAAQ,KAAK,GAAG;AAEpB,YAAI,CAAC,KAAK,IAAI,OAAO,OAAO,KAAK,IAAI,GAAG;AACpC;AAAA,QACJ;AACA,aAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,mBAAS,KAAK,aAAa,CAAC;AAC5B,cAAI,QAAQ;AACR,gBAAIA,GAAE,QAAQ,MAAM,GAAG;AACnB,oBAAM,CAAC;AACP,mBAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,uBAAO,CAAC,EAAE,OAAO;AACjB,oBAAI,KAAK,OAAO,CAAC,EAAE,EAAE;AAAA,cACzB;AACA,2BAAa,CAAC,IAAI;AAAA,YACtB,OAAO;AACH,qBAAO,OAAO;AACd,2BAAa,CAAC,IAAI,OAAO;AAAA,YAC7B;AAAA,UACJ,OAAO;AAEH,yBAAa,CAAC,IAAI;AAAA,UACtB;AAAA,QACJ;AACA,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ;AAKA,IAAAA,GAAE,GAAG,UAAU,OAAO,OAAO,YAAYA,GAAE,GAAG,UAAU,OAAO;AAAA,MAC3D,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,aAAK,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAC9D,aAAK,WAAW,CAAC;AACjB,aAAK,YAAY,CAAC;AAClB,aAAK,UAAU,CAAC;AAChB,aAAK,UAAU,CAAC;AAChB,aAAK,UAAU,CAAC;AAChB,aAAK,mBAAmB;AACxB,aAAK,cAAc;AACnB,aAAK,WAAW;AAAA,MACpB;AAAA,MAEA,WAAW,SAAUA,KAAI,GAAG,GAAG;AAC3B,YAAI,GACA,YAAY,KAAK;AACrB,aAAK,IAAI,UAAU,QAAQ,OAAM;AAC7B,cAAI,UAAU,CAAC,MAAM,QAAQ,KAAK,UAAU,CAAC,EAAE,CAAC,KAAK,KAAK,UAAU,CAAC,EAAE,CAAC,GAAG;AACvE,mBAAO,UAAU,CAAC,EAAE,CAAC;AAAA,UACzB;AAAA,QACJ;AACA,eAAOL;AAAA,MACX;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK;AACzB,eAAO;AAAA,UACH,QAAQ,KAAK,QAAQ,aAAa,MAAM;AAAA,UACxC,GAAG,KAAK,QAAQ,aAAa;AAAA,UAC7B,GAAG,KAAK,QAAQ,aAAa;AAAA,UAC7B,OAAO,KAAK,QAAQ,IAAI,WAAW;AAAA,UACnC,WAAW,KAAK,QAAQ,IAAI,WAAW;AAAA,UACvC,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,iBAAiB,WAAY;AACzB,YAAI,gBAAgB,KAAK,eACrB,SAAS,KAAK,QACd,SAAS,KAAK,SAAS,aAAa,GACpC,UAAU,KAAK,SACf,aAAa,QAAQ,IAAI,YAAY,GACrC,qBAAqB,QAAQ,IAAI,oBAAoB,GACrD,qBAAqB,QAAQ,IAAI,oBAAoB,GACrD,eAAe;AAEnB,YAAI,CAAC,QAAQ;AACT;AAAA,QACJ;AACA,YAAI,cAAc,oBAAoB;AAClC,0BAAgB,OAAO;AAAA,YAAW,OAAO,CAAC;AAAA,YAAG,OAAO,CAAC;AAAA,YACjD;AAAA,YAAYA;AAAA,YAAW;AAAA,UAAkB;AAC7C,eAAK,kBAAkB,cAAc;AACrC,iBAAO,iBAAiB,KAAK,aAAa,aAAa;AAAA,QAC3D;AACA,YAAI,oBAAoB;AACpB,0BAAgB,OAAO;AAAA,YAAS,OAAO,CAAC;AAAA,YAAG,KAAK;AAAA,YAAW,OAAO,CAAC;AAAA,YAC/D,KAAK,YAAY,KAAK;AAAA,YAAc;AAAA,UAAkB;AAC1D,eAAK,kBAAkB,cAAc;AACrC,iBAAO,iBAAiB,KAAK,aAAa,aAAa;AAAA,QAC3D;AAAA,MACJ;AAAA,MAEA,iBAAiB,WAAY;AACzB,YAAI,SAAS,KAAK;AAClB,YAAI,KAAK,iBAAiB;AACtB,iBAAO,cAAc,KAAK,eAAe;AACzC,eAAK,kBAAkB;AAAA,QAC3B;AACA,YAAI,KAAK,iBAAiB;AACtB,iBAAO,cAAc,KAAK,eAAe;AACzC,eAAK,kBAAkB;AAAA,QAC3B;AAAA,MACJ;AAAA,MAEA,YAAY,WAAY;AACpB,YAAI,SAAS,KAAK,QACd,WAAW,OAAO,QAClB,UAAU,KAAK,SACf,UAAU,KAAK,SACf,UAAU,KAAK,SACf,GAAG,KAAK,OAAO,SAAS;AAC5B,aAAK,IAAI,GAAG,IAAI,UAAU,KAAK;AAC3B,gBAAM,OAAO,CAAC;AACd,kBAAQ,OAAO,OAAO,CAAC,MAAO;AAC9B,oBAAU,OAAO,OAAO,CAAC,MAAO,YAAY,OAAO,CAAC,aAAa;AACjE,eAAK,SAAS,OAAO,CAAC,EAAE,MAAM,GAAG;AACjC,cAAI,SAAS,GAAG,WAAW,GAAG;AAC1B,oBAAQ,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;AAC1B,oBAAQ,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;AAC1B,oBAAQ,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;AAAA,UAC9B,WAAW,SAAS;AAChB,oBAAQ,KAAK,IAAI,CAAC,CAAC;AACnB,oBAAQ,KAAK,IAAI,CAAC,CAAC;AACnB,oBAAQ,KAAK,IAAI,CAAC,CAAC;AAAA,UACvB,OAAO;AACH,oBAAQ,KAAK,CAAC;AACd,gBAAI,OAAO,CAAC,MAAM,QAAQ,OAAO,CAAC,MAAM,QAAQ;AAC5C,sBAAQ,KAAK,IAAI;AAAA,YACrB,OAAO;AACH,sBAAQ,KAAK,OAAO,GAAG,CAAC;AACxB,sBAAQ,KAAK,OAAO,GAAG,CAAC;AAAA,YAC5B;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,KAAK,QAAQ,IAAI,SAAS,GAAG;AAC7B,oBAAU,KAAK,QAAQ,IAAI,SAAS;AAAA,QACxC;AAEA,aAAK,OAAO,KAAK,UAAUD,MAAK,IAAI,MAAMA,OAAM,OAAO;AACvD,aAAK,OAAO,KAAK,UAAUA,MAAK,IAAI,MAAMA,OAAM,OAAO;AAEvD,aAAK,OAAOA,MAAK,IAAI,MAAMA,OAAM,OAAO;AACxC,aAAK,OAAOA,MAAK,IAAI,MAAMA,OAAM,OAAO;AAExC,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,UAAU;AAAA,MAEnB;AAAA,MAEA,qBAAqB,WAAY;AAC7B,YAAI,UAAU,KAAK,SACf,iBAAiB,QAAQ,IAAI,gBAAgB,GAC7C,iBAAiB,QAAQ,IAAI,gBAAgB;AAEjD,YAAI,mBAAmBC,YAAW;AAC9B,cAAI,iBAAiB,KAAK,MAAM;AAC5B,iBAAK,OAAO;AAAA,UAChB;AACA,cAAI,iBAAiB,KAAK,MAAM;AAC5B,iBAAK,OAAO;AAAA,UAChB;AAAA,QACJ;AACA,YAAI,QAAQ,IAAI,eAAe,MAAMA,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,KAAK,OAAO;AAC3H,eAAK,OAAO,QAAQ,IAAI,eAAe;AAAA,QAC3C;AACA,YAAI,QAAQ,IAAI,eAAe,MAAMA,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,KAAK,OAAO;AAC3H,eAAK,OAAO,QAAQ,IAAI,eAAe;AAAA,QAC3C;AACA,YAAI,QAAQ,IAAI,gBAAgB,MAAMA,eAAc,QAAQ,IAAI,iBAAiB,KAAK,QAAQ,IAAI,gBAAgB,IAAI,KAAK,OAAO;AAC9H,eAAK,OAAO,QAAQ,IAAI,gBAAgB;AAAA,QAC5C;AACA,YAAI,QAAQ,IAAI,gBAAgB,MAAMA,eAAc,QAAQ,IAAI,iBAAiB,KAAK,QAAQ,IAAI,gBAAgB,IAAI,KAAK,OAAO;AAC9H,eAAK,OAAO,QAAQ,IAAI,gBAAgB;AAAA,QAC5C;AAAA,MAEJ;AAAA,MAEA,iBAAiB,SAAU,YAAY,WAAW,cAAc,aAAa,QAAQ;AACjF,YAAI,iBAAiB,KAAK,QAAQ,IAAI,gBAAgB,GAClD,iBAAiB,KAAK,QAAQ,IAAI,gBAAgB,GAClD,OAAO,YAAYD,MAAK,MAAM,eAAgB,iBAAiB,iBAAiB,KAAK,QAAQ,OAAQ,GACrG,SAASA,MAAK,MAAO,gBAAgB,iBAAiB,kBAAmB,MAAM;AACnF,aAAK,OAAO,SAAS,YAAY,MAAM,aAAa,QAAQC,YAAW,KAAK,QAAQ,IAAI,kBAAkB,CAAC,EAAE,OAAO;AAAA,MACxH;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,UAAU,KAAK,SACf,SAAS,KAAK,QACd,cAAc,KAAK,aACnB,eAAe,KAAK,cACpB,WAAW,KAAK,UAChB,aAAa,QAAQ,IAAI,YAAY,GACrC,YAAY,KAAK,WACjB,QAAQ,QAAQ,UAChB,WAAW,YACX,QAAQ,MAAM,OAAO,GAAG,GAAG,OAAO,MAAM,UACxC,MAAM,MAAM,WAAW,YAAY,YAAY,MAC/C,YAAY,gBAAgB,OAAO,SAAS,SAAS;AAEzD,YAAI,CAAC,KAAK,OAAO,OAAO,KAAK,IAAI,GAAG;AAChC;AAAA,QACJ;AAEA,aAAK,WAAW;AAChB,aAAK,oBAAoB;AAEzB,kBAAU,KAAK;AACf,kBAAU,KAAK;AAEf,YAAI,CAAC,KAAK,QAAQ,UAAU,KAAK,QAAQ,SAAS,GAAG;AAEjD;AAAA,QACJ;AAEA,oBAAY,aAAa;AAEzB,iBAAS,KAAK,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,KAAK;AAC5D,iBAAS,KAAK,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,KAAK;AAC5D,mBAAW,KAAK,QAAQ,SAAS;AAEjC,YAAI,eAAe,cAAe,aAAa,KAAM,eAAgB,aAAa,IAAK;AACnF,uBAAa;AAAA,QACjB;AACA,YAAI,YAAY;AAEZ,2BAAiB,QAAQ,IAAI,oBAAoB,KAAM,CAAC,QAAQ,IAAI,oBAAoB;AACxF,cAAI,kBAAkB,QAAQ,IAAI,cAAc,KAAM,QAAQ,IAAI,WAAW,KAAK,QAAQ,QAAQ,MAAM,KAAK,MAAO;AAChH,4BAAgBD,MAAK,KAAK,UAAU;AAAA,UACxC;AACA,cAAI,kBAAkB,QAAQ,IAAI,cAAc,KAAM,QAAQ,IAAI,WAAW,KAAK,QAAQ,QAAQ,MAAM,KAAK,MAAO;AAChH,4BAAgBA,MAAK,KAAK,UAAU;AACpC,yBAAaA,MAAK,KAAK,UAAU;AAAA,UACrC;AACA,cAAI,mBACG,QAAQ,IAAI,cAAc,KAAK,QAAQ,IAAI,cAAc,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,QAAQ,CAAC,MAAM,KAAK,OAAQ;AAC3H,0BAAcA,MAAK,KAAK,UAAU;AAClC,2BAAeA,MAAK,KAAK,UAAU;AAAA,UACvC;AACA,cAAI,kBAAkB,QAAQ,IAAI,WAAW,MACxC,QAAQ,IAAI,cAAc,KAAK,QAAQ,IAAI,cAAc,MACrD,QAAQ,QAAQ,MAAM,KAAK,QAAQ,QAAQ,QAAQ,MAAM,KAAK,QAAQ;AAC3E,2BAAeA,MAAK,KAAK,UAAU;AAAA,UACvC;AAAA,QACJ;AAGA;AAEA,YAAI,QAAQ,IAAI,gBAAgB,MAAMC,cAAa,CAAC,QAAQ,IAAI,iBAAiB,GAAG;AAChF,eAAK,gBAAgB,YAAY,WAAW,cAAc,aAAa,MAAM;AAAA,QACjF;AAEA,eAAO,CAAC;AACR,gBAAQ,CAAC,IAAI;AACb,eAAO,OAAO;AACd,oBAAY,QAAQ;AACpB,aAAK,IAAI,GAAG,IAAI,WAAW,KAAK;AAC5B,cAAI,QAAQ,CAAC;AACb,kBAAQ,QAAQ,IAAI,CAAC;AACrB,cAAI,QAAQ,CAAC;AACb,iBAAO,aAAaD,MAAK,OAAO,IAAI,KAAK,SAAS,cAAc,OAAO;AACvE,qBAAW,IAAI,YAAY,IAAI,aAAaA,MAAK,OAAO,QAAQ,KAAK,SAAS,cAAc,OAAO,IAAI;AACvG,iBAAO,QAAS,WAAW,QAAQ;AACnC,oBAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;AAClC,iBAAO;AACP,cAAI,MAAM,MAAM;AACZ,gBAAI,GAAG;AACH,kBAAI,QAAQ,IAAI,CAAC,MAAM,MAAM;AACzB,uBAAO,CAAC;AACR,sBAAM,KAAK,IAAI;AAAA,cACnB;AACA,uBAAS,KAAK,IAAI;AAAA,YACtB;AAAA,UACJ,OAAO;AACH,gBAAI,IAAI,KAAK,MAAM;AACf,kBAAI,KAAK;AAAA,YACb;AACA,gBAAI,IAAI,KAAK,MAAM;AACf,kBAAI,KAAK;AAAA,YACb;AACA,gBAAI,CAAC,KAAK,QAAQ;AAEd,mBAAK,KAAK,CAAC,MAAM,YAAY,YAAY,CAAC;AAAA,YAC9C;AACA,qBAAS,CAAC,MAAM,YAAYA,MAAK,MAAM,eAAgB,iBAAiB,IAAI,KAAK,QAAQ,OAAQ,CAAC;AAClG,iBAAK,KAAK,MAAM;AAChB,qBAAS,KAAK,MAAM;AAAA,UACxB;AAAA,QACJ;AAEA,qBAAa,CAAC;AACd,qBAAa,CAAC;AACd,eAAO,MAAM;AACb,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,iBAAO,MAAM,CAAC;AACd,cAAI,KAAK,QAAQ;AACb,gBAAI,QAAQ,IAAI,WAAW,GAAG;AAC1B,mBAAK,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC,GAAI,YAAY,YAAa,CAAC;AAChE,yBAAW,KAAK,KAAK,MAAM,CAAC,CAAC;AAC7B,mBAAK,IAAI;AAAA,YACb;AAGA,gBAAI,KAAK,SAAS,GAAG;AAEjB,mBAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAAA,YACrC;AACA,uBAAW,KAAK,IAAI;AAAA,UACxB;AAAA,QACJ;AAGA,eAAO,WAAW;AAClB,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,iBAAO;AAAA,YAAU,WAAW,CAAC;AAAA,YACzB,QAAQ,IAAI,WAAW;AAAA,YAAG,QAAQ,IAAI,WAAW;AAAA,UAAC,EAAE,OAAO;AAAA,QACnE;AAEA,YAAI,QAAQ,IAAI,gBAAgB,MAAMC,cAAa,QAAQ,IAAI,iBAAiB,GAAG;AAC/E,eAAK,gBAAgB,YAAY,WAAW,cAAc,aAAa,MAAM;AAAA,QACjF;AAEA,eAAO,WAAW;AAClB,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,iBAAO;AAAA,YAAU,WAAW,CAAC;AAAA,YAAG,QAAQ,IAAI,WAAW;AAAA,YAAGA;AAAA,YACtD,QAAQ,IAAI,WAAW;AAAA,UAAC,EAAE,OAAO;AAAA,QACzC;AAEA,YAAI,cAAc,QAAQ,IAAI,YAAY,GAAG;AACzC,uBAAa,QAAQ,IAAI,YAAY;AACrC,cAAI,WAAW,QAAQA,YAAW;AAC9B,yBAAa,IAAI,SAAS,UAAU;AAAA,UACxC;AACA,eAAK,IAAI,GAAG,IAAI,WAAW,KAAK;AAC5B,oBAAQ,WAAW,IAAI,QAAQ,CAAC,CAAC;AACjC,gBAAI,OAAO;AACP,qBAAO;AAAA,gBAAW,aAAaD,MAAK,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,cAAc,OAAO;AAAA,gBACvF,YAAYA,MAAK,MAAM,eAAgB,iBAAiB,QAAQ,CAAC,IAAI,KAAK,QAAQ,OAAQ;AAAA,gBAC1F;AAAA,gBAAYC;AAAA,gBACZ;AAAA,cAAK,EAAE,OAAO;AAAA,YACtB;AAAA,UACJ;AAAA,QAEJ;AACA,YAAI,cAAc,QAAQ,IAAI,WAAW,KAAK,QAAQ,QAAQ,MAAM,MAAM;AACtE,iBAAO;AAAA,YAAW,aAAaD,MAAK,OAAO,QAAQ,QAAQ,SAAS,CAAC,IAAI,KAAK,SAAS,cAAc,OAAO;AAAA,YACxG,YAAYA,MAAK,MAAM,eAAgB,iBAAiB,QAAQ,QAAQ,IAAI,KAAK,QAAQ,OAAQ;AAAA,YACjG;AAAA,YAAYC;AAAA,YACZ,QAAQ,IAAI,WAAW;AAAA,UAAC,EAAE,OAAO;AAAA,QACzC;AACA,YAAI,KAAK,SAAS,KAAK,SAAS;AAC5B,cAAI,cAAc,QAAQ,IAAI,cAAc,GAAG;AAC3C,gBAAI,QAAQC,GAAE,QAAQ,KAAK,SAAS,OAAO,CAAC;AAC5C,mBAAO;AAAA,cAAW,aAAaF,MAAK,OAAO,IAAI,KAAK,SAAS,cAAc,OAAO;AAAA,cAC9E,YAAYA,MAAK,MAAM,eAAgB,iBAAiB,KAAK,UAAU,KAAK,QAAQ,OAAQ;AAAA,cAC5F;AAAA,cAAYC;AAAA,cACZ,QAAQ,IAAI,cAAc;AAAA,YAAC,EAAE,OAAO;AAAA,UAC5C;AACA,cAAI,cAAc,QAAQ,IAAI,cAAc,GAAG;AAC3C,gBAAI,QAAQC,GAAE,QAAQ,KAAK,SAAS,OAAO,CAAC;AAC5C,mBAAO;AAAA,cAAW,aAAaF,MAAK,OAAO,IAAI,KAAK,SAAS,cAAc,OAAO;AAAA,cAC9E,YAAYA,MAAK,MAAM,eAAgB,iBAAiB,KAAK,UAAU,KAAK,QAAQ,OAAQ;AAAA,cAC5F;AAAA,cAAYC;AAAA,cACZ,QAAQ,IAAI,cAAc;AAAA,YAAC,EAAE,OAAO;AAAA,UAC5C;AAAA,QACJ;AAEA,aAAK,cAAc,OAAO,eAAe;AACzC,aAAK,YAAY;AACjB,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ,CAAC;AAKD,IAAAC,GAAE,GAAG,UAAU,MAAM,MAAM,YAAYA,GAAE,GAAG,UAAU,OAAO,mBAAmB;AAAA,MAC5E,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,YAAI,WAAW,SAAS,QAAQ,IAAI,UAAU,GAAG,EAAE,GAC/C,aAAa,SAAS,QAAQ,IAAI,YAAY,GAAG,EAAE,GACnD,gBAAgB,QAAQ,IAAI,eAAe,GAC3C,gBAAgB,QAAQ,IAAI,eAAe,GAC3C,iBAAiB,QAAQ,IAAI,gBAAgB,GAC7C,WAAW,UACX,WAAW,WACX,eAAe,UAAU,UAAU,aACnC,WAAW,GAAG,MAAM,OAAO,UAAU,aAAa,KAAK,KAAK,SAAS,SACrE,SAAS,OAAO,GAAG,MAAM,OAAO,KAAK,SAAS,UAAU;AAC5D,YAAI,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAG7D,aAAK,IAAI,GAAG,OAAO,OAAO,QAAQ,IAAI,MAAM,KAAK;AAC7C,gBAAM,OAAO,CAAC;AACd,0BAAgB,OAAO,QAAS,YAAY,IAAI,QAAQ,GAAG,IAAI;AAC/D,cAAI,iBAAiBJ,GAAE,QAAQ,GAAG,GAAG;AACjC,sBAAU;AACV,gBAAI,eAAe;AACf,oBAAM,OAAO,CAAC,IAAI,gBAAgB,IAAI,MAAM,GAAG,CAAC;AAAA,YACpD;AACA,kBAAM,OAAO,KAAK,IAAI;AACtB,uBAAWF,MAAK,IAAI,MAAMA,OAAM,GAAG;AACnC,uBAAWA,MAAK,IAAI,MAAMA,OAAM,GAAG;AACnC,gBAAI,WAAW,UAAU;AACrB,yBAAW;AAAA,YACf;AACA,gBAAI,WAAW,UAAU;AACrB,yBAAW;AAAA,YACf;AAAA,UACJ;AAAA,QACJ;AAEA,aAAK,UAAU;AACf,aAAK,eAAe,CAAC;AACrB,aAAK,WAAW;AAChB,aAAK,aAAa;AAClB,aAAK,gBAAgB,WAAW;AAChC,aAAK,QAAQ,QAAS,OAAO,SAAS,YAAc,OAAO,SAAS,KAAK;AAEzE,aAAK,WAAW;AAEhB,YAAI,gBAAgB;AAChB,oBAAU,kBAAkBC,aAAY,YAAY;AACpD,oBAAU,kBAAkBA,aAAY,WAAW;AAAA,QACvD;AAEA,oBAAY,CAAC;AACb,sBAAc,UAAU,CAAC,IAAI;AAC7B,YAAI,cAAc,CAAC;AACnB,YAAI,iBAAiB,CAAC;AACtB,aAAK,IAAI,GAAG,OAAO,OAAO,QAAQ,IAAI,MAAM,KAAK;AAC7C,cAAI,SAAS;AACT,oBAAQ,OAAO,CAAC;AAChB,mBAAO,CAAC,IAAI,QAAQ,CAAC;AACrB,wBAAY,CAAC,IAAI;AACjB,wBAAY,CAAC,IAAI,eAAe,CAAC,IAAI;AACrC,iBAAK,IAAI,GAAG,OAAO,MAAM,QAAQ,IAAI,MAAM,KAAK;AAC5C,oBAAM,MAAM,CAAC,IAAI,iBAAiB,QAAQ,MAAM,CAAC,GAAG,SAAS,OAAO,IAAI,MAAM,CAAC;AAC/E,kBAAI,QAAQ,MAAM;AACd,oBAAI,MAAM,GAAG;AACT,8BAAY,CAAC,KAAK;AAAA,gBACtB;AACA,oBAAI,WAAW,KAAK,WAAW,GAAG;AAC9B,sBAAI,MAAM,GAAG;AACT,mCAAe,CAAC,KAAKD,MAAK,IAAI,GAAG;AAAA,kBACrC,OAAO;AACH,gCAAY,CAAC,KAAK;AAAA,kBACtB;AAAA,gBACJ,OAAO;AACH,8BAAY,CAAC,KAAKA,MAAK,IAAI,OAAO,MAAM,IAAI,WAAW,SAAS;AAAA,gBACpE;AACA,0BAAU,KAAK,GAAG;AAAA,cACtB;AAAA,YACJ;AAAA,UACJ,OAAO;AACH,kBAAM,iBAAiB,QAAQ,OAAO,CAAC,GAAG,SAAS,OAAO,IAAI,OAAO,CAAC;AACtE,kBAAM,OAAO,CAAC,IAAI,eAAe,GAAG;AACpC,gBAAI,QAAQ,MAAM;AACd,wBAAU,KAAK,GAAG;AAAA,YACtB;AAAA,UACJ;AAAA,QACJ;AACA,aAAK,MAAM,MAAMA,MAAK,IAAI,MAAMA,OAAM,SAAS;AAC/C,aAAK,MAAM,MAAMA,MAAK,IAAI,MAAMA,OAAM,SAAS;AAC/C,aAAK,WAAW,WAAW,UAAUA,MAAK,IAAI,MAAMA,OAAM,WAAW,IAAI;AACzE,aAAK,WAAW,WAAW,UAAUA,MAAK,IAAI,MAAMA,OAAM,SAAS,IAAI;AAEvE,YAAI,QAAQ,IAAI,eAAe,MAAMC,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,MAAM;AACrH,gBAAM,QAAQ,IAAI,eAAe;AAAA,QACrC;AACA,YAAI,QAAQ,IAAI,eAAe,MAAMA,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,MAAM;AACrH,gBAAM,QAAQ,IAAI,eAAe;AAAA,QACrC;AAEA,aAAK,WAAW,WAAW,QAAQ,IAAI,YAAY,IAAI;AACvD,YAAI,OAAO,KAAK,OAAO,KAAK,UAAU;AAClC,wBAAc;AAAA,QAClB,WAAW,YAAY,OAAO;AAC1B,wBAAc;AAAA,QAClB,WAAW,MAAM,GAAG;AAChB,wBAAc;AAAA,QAClB,OAAO;AACH,wBAAc;AAAA,QAClB;AACA,aAAK,cAAc;AAEnB,gBAAQ,UAAWD,MAAK,IAAI,MAAMA,OAAM,WAAW,IAAIA,MAAK,IAAI,MAAMA,OAAM,cAAc,IAAK,MAAM;AAIrG,aAAK,iBAAkB,YAAY,MAAM,IAAK,KAAK,eAAe,IAAI,KAAK,eAAe;AAE1F,YAAI,MAAM,aAAa;AACnB,qBAAY,WAAW,OAAO,IAAK,WAAW;AAC9C,qBAAW,WAAW,eAAe,QAAQ,KAAK;AAClD,cAAI,YAAYA,MAAK,KAAK,OAAO,GAAG;AAChC,iBAAK,kBAAkB;AACvB,sBAAUA,MAAK,KAAK,OAAO;AAAA,UAC/B;AAAA,QACJ,OAAO;AACH,oBAAU,KAAK;AAAA,QACnB;AACA,aAAK,UAAU;AAEf,YAAIE,GAAE,QAAQ,QAAQ,IAAI,UAAU,CAAC,GAAG;AACpC,eAAK,kBAAkB,QAAQ,IAAI,UAAU;AAC7C,eAAK,kBAAkB;AAAA,QAC3B,OAAO;AACH,eAAK,kBAAkB;AACvB,eAAK,kBAAkB,QAAQ,IAAI,UAAU;AAC7C,cAAI,KAAK,mBAAmB,KAAK,gBAAgB,QAAQD,YAAW;AAChE,iBAAK,kBAAkB,IAAI,SAAS,KAAK,eAAe;AAAA,UAC5D;AAAA,QACJ;AAEA,aAAK,QAAQ;AAAA,MACjB;AAAA,MAEA,WAAW,SAAUK,KAAI,GAAG,GAAG;AAC3B,YAAI,SAASN,MAAK,MAAM,IAAI,KAAK,aAAa;AAC9C,eAAQ,SAAS,KAAK,UAAU,KAAK,OAAO,SAAUC,aAAY;AAAA,MACtE;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK,eACrB,SAAS,YAAY,KAAK,OAAO,aAAa,CAAC,GAC/C,SAAS,CAAC,GACV,OAAO;AACX,aAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,kBAAQ,OAAO,CAAC;AAChB,iBAAO,KAAK;AAAA,YACR,QAAQ,UAAU;AAAA,YAClB;AAAA,YACA,OAAO,KAAK,UAAU,GAAG,OAAO,aAAa;AAAA,YAC7C,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL;AACA,eAAO;AAAA,MACX;AAAA,MAEA,WAAW,SAAU,UAAU,OAAO,UAAU;AAC5C,YAAI,kBAAkB,KAAK,iBACvB,kBAAkB,KAAK,iBACvB,UAAU,KAAK,SACf,OAAO;AACX,YAAI,KAAK,SAAS;AACd,kBAAQ,QAAQ,IAAI,iBAAiB;AAAA,QACzC,OAAO;AACH,kBAAS,QAAQ,IAAK,QAAQ,IAAI,aAAa,IAAI,QAAQ,IAAI,UAAU;AAAA,QAC7E;AACA,YAAI,UAAU,KAAK,QAAQ,IAAI,WAAW,MAAMA,YAAW;AACvD,kBAAQ,QAAQ,IAAI,WAAW;AAAA,QACnC;AACA,YAAI,oBAAoB,WAAW,gBAAgB,IAAI,KAAK,IAAI;AAC5D,kBAAQ;AAAA,QACZ,WAAW,mBAAmB,gBAAgB,SAAS,UAAU;AAC7D,kBAAQ,gBAAgB,QAAQ;AAAA,QACpC;AACA,eAAOC,GAAE,QAAQ,KAAK,IAAI,MAAM,WAAW,MAAM,MAAM,IAAI;AAAA,MAC/D;AAAA;AAAA;AAAA;AAAA,MAKA,cAAc,SAAU,UAAU,WAAW;AACzC,YAAI,OAAO,KAAK,OAAO,QAAQ,GAC3B,UAAU,KAAK,SACf,cAAc,KAAK,aACnB,SAAS,CAAC,GACV,QAAQ,KAAK,OACb,UAAU,KAAK,SACf,SAAS,KAAK,QACd,IAAI,WAAW,KAAK,eACpB,iBAAiB,KAAK,gBACtB,UAAU,KAAK,SACf,GAAG,QAAQ,OAAO,QAAQ,YAAY,GAAG,UAAU,KAAK,YAAY;AAExE,eAAOA,GAAE,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACrC,mBAAW,KAAK;AAChB,cAAM,KAAK,CAAC;AACZ,iBAAS,IAAI,MAAM,IAAI;AACvB,iBAAS,IAAI,aAAa,MAAM,IAAI;AAEpC,YAAI,QAAQ;AACR,cAAI,QAAQ,IAAI,WAAW,GAAG;AAC1B,oBAAQ,YAAY,QAAQ,IAAI,WAAW,IAAI,KAAK,mBAAmB,QAAQ,IAAI,WAAW,GAAG,OAAO;AACxG,gBAAK,UAAU,IAAK,UAAU,IAAI;AAClC,mBAAO,OAAO,SAAS,GAAG,GAAG,KAAK,WAAW,GAAG,GAAG,OAAO,KAAK;AAAA,UACnE,OAAO;AACH,mBAAOD;AAAA,UACX;AAAA,QACJ;AACA,qBAAa;AACb,aAAK,IAAI,GAAG,IAAI,UAAU,KAAK;AAC3B,gBAAM,KAAK,CAAC;AAEZ,cAAI,WAAW,QAAQ,aAAa;AAChC,gBAAI,CAAC,UAAU,YAAY;AACvB;AAAA,YACJ;AACA,yBAAa;AAAA,UACjB;AAEA,cAAI,QAAQ,GAAG;AACX,qBAASD,MAAK,MAAM,kBAAmBA,MAAK,IAAI,MAAM,WAAW,IAAI,MAAO,IAAI;AAAA,UACpF,OAAO;AACH,qBAAS;AAAA,UACb;AACA,cAAI,MAAM,eAAgB,QAAQ,eAAe,YAAY,GAAI;AAC7D,gBAAI;AACJ,0BAAc;AAAA,UAClB,OAAO;AACH,gBAAI,UAAU;AACd,uBAAW;AAAA,UACf;AACA,kBAAQ,KAAK,UAAU,GAAG,KAAK,QAAQ;AACvC,cAAI,WAAW;AACX,oBAAQ,KAAK,mBAAmB,OAAO,OAAO;AAAA,UAClD;AACA,iBAAO,KAAK,OAAO,SAAS,GAAG,GAAG,KAAK,WAAW,GAAG,SAAS,GAAG,OAAO,KAAK,CAAC;AAAA,QAClF;AACA,YAAI,OAAO,WAAW,GAAG;AACrB,iBAAO,OAAO,CAAC;AAAA,QACnB;AACA,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAKD,IAAAE,GAAE,GAAG,UAAU,WAAW,WAAW,YAAYA,GAAE,GAAG,UAAU,OAAO,mBAAmB;AAAA,MACtF,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,YAAI,WAAW,SAAS,QAAQ,IAAI,UAAU,GAAG,EAAE,GAC/C,aAAa,SAAS,QAAQ,IAAI,YAAY,GAAG,EAAE;AACvD,iBAAS,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAElE,aAAK,eAAe,CAAC;AACrB,aAAK,WAAW;AAChB,aAAK,aAAa;AAClB,aAAK,gBAAgB,WAAW;AAChC,aAAK,SAASJ,GAAE,IAAI,QAAQ,MAAM;AAClC,aAAK,QAAQ,QAAS,OAAO,SAAS,YAAc,OAAO,SAAS,KAAK;AAEzE,YAAIA,GAAE,QAAQ,QAAQ,IAAI,UAAU,CAAC,GAAG;AACpC,eAAK,kBAAkB,QAAQ,IAAI,UAAU;AAC7C,eAAK,kBAAkB;AAAA,QAC3B,OAAO;AACH,eAAK,kBAAkB;AACvB,eAAK,kBAAkB,QAAQ,IAAI,UAAU;AAC7C,cAAI,KAAK,mBAAmB,KAAK,gBAAgB,QAAQD,YAAW;AAChE,iBAAK,kBAAkB,IAAI,SAAS,KAAK,eAAe;AAAA,UAC5D;AAAA,QACJ;AACA,aAAK,WAAW;AAAA,MACpB;AAAA,MAEA,WAAW,SAAUK,KAAI,GAAG,GAAG;AAC3B,eAAON,MAAK,MAAM,IAAI,KAAK,aAAa;AAAA,MAC5C;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK;AACzB,eAAO;AAAA,UACH,QAAQ,KAAK,OAAO,aAAa,MAAMC;AAAA,UACvC,OAAO,KAAK,OAAO,aAAa;AAAA,UAChC,OAAO,KAAK,UAAU,KAAK,OAAO,aAAa,GAAG,aAAa;AAAA,UAC/D,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,WAAW,SAAU,OAAO,UAAU;AAClC,YAAI,SAAS,KAAK,QACd,UAAU,KAAK,SACf,kBAAkB,KAAK,iBACvB,kBAAkB,KAAK,iBACvB,OAAO;AAEX,YAAI,oBAAoB,WAAW,gBAAgB,IAAI,KAAK,IAAI;AAC5D,kBAAQ;AAAA,QACZ,WAAW,mBAAmB,gBAAgB,SAAS,UAAU;AAC7D,kBAAQ,gBAAgB,QAAQ;AAAA,QACpC,WAAW,OAAO,QAAQ,IAAI,GAAG;AAC7B,kBAAQ,QAAQ,IAAI,aAAa;AAAA,QACrC,WAAW,OAAO,QAAQ,IAAI,GAAG;AAC7B,kBAAQ,QAAQ,IAAI,aAAa;AAAA,QACrC,OAAO;AACH,kBAAQ,QAAQ,IAAI,cAAc;AAAA,QACtC;AACA,eAAO;AAAA,MACX;AAAA,MAEA,cAAc,SAAU,UAAU,WAAW;AACzC,YAAI,SAAS,KAAK,QACd,UAAU,KAAK,SACf,SAAS,KAAK,QACd,cAAc,QAAQ,YACtB,GAAG,GAAG;AAEV,uBAAe,OAAO;AACtB,qBAAaD,MAAK,MAAM,eAAe,CAAC;AAExC,YAAI,WAAW,KAAK;AACpB,YAAI,OAAO,QAAQ,IAAI,GAAG;AACtB,cAAI;AACJ,mBAAS,aAAa;AAAA,QAC1B,WAAW,OAAO,QAAQ,IAAI,GAAG;AAC7B,cAAI;AACJ,mBAAS,aAAa;AAAA,QAC1B,OAAO;AACH,cAAI,aAAa;AACjB,mBAAS;AAAA,QACb;AACA,gBAAQ,KAAK,UAAU,OAAO,QAAQ,GAAG,QAAQ;AACjD,YAAI,UAAU,MAAM;AAChB;AAAA,QACJ;AACA,YAAI,WAAW;AACX,kBAAQ,KAAK,mBAAmB,OAAO,OAAO;AAAA,QAClD;AACA,eAAO,OAAO,SAAS,GAAG,GAAG,KAAK,WAAW,GAAG,SAAS,GAAG,OAAO,KAAK;AAAA,MAC5E;AAAA,IACJ,CAAC;AAKD,IAAAE,GAAE,GAAG,UAAU,WAAW,WAAW,YAAYA,GAAE,GAAG,UAAU,OAAO,mBAAmB;AAAA,MACtF,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,iBAAS,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAElE,aAAK,eAAe,CAAC;AACrB,aAAK,SAAS,SAASJ,GAAE,IAAI,QAAQ,MAAM;AAC3C,aAAK,MAAMF,MAAK,IAAI,MAAMA,OAAM,MAAM;AACtC,aAAK,MAAMA,MAAK,IAAI,MAAMA,OAAM,MAAM;AACtC,aAAK,QAAQ,KAAK,MAAM,KAAK;AAC7B,aAAK,QAAQ,QAAQ,QAAQ,IAAI,OAAO,MAAM,SAAS,OAAO,SAAS,IAAI,KAAK;AAChF,aAAK,WAAWA,MAAK,MAAM,QAAQ,OAAO,MAAM;AAChD,aAAK,YAAY,QAAQ,OAAO;AAChC,YAAI,QAAQ,IAAI,eAAe,MAAMC,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,KAAK,MAAM;AAC1H,eAAK,MAAM,QAAQ,IAAI,eAAe;AAAA,QAC1C;AACA,YAAI,QAAQ,IAAI,eAAe,MAAMA,eAAc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,IAAI,eAAe,IAAI,KAAK,MAAM;AAC1H,eAAK,MAAM,QAAQ,IAAI,eAAe;AAAA,QAC1C;AACA,aAAK,WAAW;AAChB,YAAI,KAAK,QAAQ;AACb,eAAK,aAAa,QAAQ,IAAI,YAAY,MAAM,SAASD,MAAK,MAAM,KAAK,eAAe,GAAG,IAAI,QAAQ,IAAI,YAAY;AAAA,QAC3H;AAAA,MACJ;AAAA,MAEA,WAAW,SAAUM,KAAI,GAAG,GAAG;AAC3B,eAAON,MAAK,MAAM,IAAI,KAAK,SAAS;AAAA,MACxC;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK;AACzB,eAAO;AAAA,UACH,QAAQ,KAAK,OAAO,aAAa,MAAMC;AAAA,UACvC,OAAO,KAAK,OAAO,aAAa;AAAA,UAChC,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,cAAc,SAAU,UAAU,WAAW;AACzC,YAAI,SAAS,KAAK,QACd,UAAU,KAAK,SACf,MAAM,KAAK,KACX,MAAM,KAAK,KACX,QAAQ,KAAK,OACb,WAAW,KAAK,UAChB,SAAS,KAAK,QACd,eAAe,KAAK,cACpB,aAAa,KAAK,YAClB,UAAU,eAAe,YACzB,MAAM,KAAK,OAAO;AAEtB,cAAM,QAAQ,OAAO,QAAQ,GAAG,KAAK,GAAG;AACxC,YAAI,WAAW;AACf,eAAOD,MAAK,MAAM,UAAU,YAAY,MAAM,OAAO,MAAM;AAC3D,gBAAS,QAAQ,IAAI,gBAAgB,KAAK,MAAM,QAAQ,IAAI,gBAAgB,IAAK,QAAQ,IAAI,gBAAgB,IAAI,QAAQ,IAAI,WAAW;AACxI,YAAI,WAAW;AACX,kBAAQ,KAAK,mBAAmB,OAAO,OAAO;AAAA,QAClD;AACA,eAAO,OAAO,SAAS,GAAG,MAAM,GAAG,OAAO,YAAY,KAAK;AAAA,MAC/D;AAAA,IACJ,CAAC;AAKD,IAAAE,GAAE,GAAG,UAAU,SAAS,SAAS,YAAYA,GAAE,GAAG,UAAU,OAAO;AAAA,MAC/D,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,YAAI,KAAK,KAAK;AACd,eAAO,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAGhE,aAAK,SAAS,SAAS,gBAAgB,MAAM;AAE7C,eAAO,OAAO,MAAM;AACpB,aAAK,CAAC,IAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC;AAC7C,aAAK,CAAC,IAAI,OAAO,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC;AAC/C,cAAMN,MAAK,IAAI,MAAMA,OAAM,MAAM;AACjC,cAAMA,MAAK,IAAI,MAAMA,OAAM,MAAM;AACjC,YAAI,QAAQ,IAAI,MAAM,MAAMC,YAAW;AACnC,gBAAM,MAAM,IAAI,MAAM;AAAA,QAC1B,OAAO;AACH,gBAAM,QAAQ,IAAI,MAAM;AAAA,QAC5B;AACA,aAAK,MAAM;AACX,aAAK,MAAM;AACX,aAAK,QAAQ,MAAM;AACnB,aAAK,SAAS,CAAC;AACf,aAAK,cAAc,CAAC;AACpB,aAAK,aAAa,CAAC;AACnB,aAAK,QAAQ,QAAQ,QAAQ,IAAI,OAAO,MAAM,SAAS,UAAU;AACjE,aAAK,SAAS,KAAK,IAAI,WAAW,OAAO,QAAQ,QAAQ,IAAI,WAAW,CAAC;AACzE,YAAI,CAAC,OAAO,QAAQ;AAChB,eAAK,WAAW;AAAA,QACpB;AACA,aAAK,WAAW;AAAA,MACpB;AAAA,MAEA,WAAW,SAAUK,KAAI,GAAG,GAAG;AAC3B,YAAI,UAAU,KAAK,OAAO,WAAWA,KAAI,GAAG,CAAC;AAC7C,eAAQ,YAAYL,cAAa,KAAK,OAAO,OAAO,MAAMA,aAAa,KAAK,OAAO,OAAO,IAAIA;AAAA,MAClG;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK;AACzB,eAAO;AAAA,UACH,UAAU,cAAc,OAAO,GAAG,CAAC;AAAA,UACnC,OAAO,KAAK,OAAO,cAAc,OAAO,CAAC,CAAC;AAAA,UAC1C,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,iBAAiB,SAAU,WAAW;AAClC,YAAI,gBAAgB,KAAK,eACrB,UAAU,KAAK,YAAY,aAAa,GACxC;AACJ,eAAO,KAAK,OAAO,OAAO;AAC1B,gBAAQ,cAAc,OAAO,GAAG,CAAC,GAAG;AAAA,UAChC,KAAK;AACD,oBAAQ,KAAK,YAAY,cAAc,OAAO,CAAC,GAAG,SAAS;AAC3D;AAAA,UACJ,KAAK;AACD,oBAAQ,KAAK,kBAAkB,SAAS;AACxC;AAAA,UACJ,KAAK;AACD,oBAAQ,KAAK,aAAa,SAAS;AACnC;AAAA,QACR;AACA,aAAK,YAAY,aAAa,IAAI,MAAM;AACxC,aAAK,OAAO,MAAM,EAAE,IAAI;AACxB,aAAK,OAAO,iBAAiB,SAAS,KAAK;AAAA,MAC/C;AAAA,MAEA,aAAa,SAAU,IAAI,WAAW;AAClC,YAAI,WAAW,KAAK,OAAO,EAAE,GACzB,aAAaD,MAAK,MAAM,KAAK,gBAAgB,WAAW,KAAK,OAAO,KAAK,MAAM,GAC/E,QAAQ,KAAK,QAAQ,IAAI,aAAa,EAAE,KAAK,CAAC;AAClD,YAAI,WAAW;AACX,kBAAQ,KAAK,mBAAmB,OAAO,KAAK,OAAO;AAAA,QACvD;AACA,eAAO,KAAK,OAAO,SAAS,GAAG,GAAG,aAAa,GAAG,KAAK,eAAe,GAAG,OAAO,KAAK;AAAA,MACzF;AAAA,MAEA,mBAAmB,SAAU,WAAW;AACpC,YAAI,UAAU,KAAK,OAAO,CAAC,GACvB,YAAYA,MAAK,MAAM,KAAK,gBAAgB,UAAU,KAAK,OAAO,KAAK,MAAM,GAC7E,QAAQ,KAAK,QAAQ,IAAI,kBAAkB;AAC/C,YAAI,WAAW;AACX,kBAAQ,KAAK,mBAAmB,OAAO,KAAK,OAAO;AAAA,QACvD;AACA,eAAO,KAAK,OAAO;AAAA,UAAS;AAAA,UAAGA,MAAK,MAAM,KAAK,eAAe,GAAG;AAAA,UAAG,YAAY;AAAA,UAC5EA,MAAK,MAAM,KAAK,eAAe,GAAG,IAAI;AAAA,UAAG;AAAA,UAAO;AAAA,QAAK;AAAA,MAC7D;AAAA,MAEA,cAAc,SAAU,WAAW;AAC/B,YAAI,YAAY,KAAK,OAAO,CAAC,GACzB,IAAIA,MAAK,MAAM,KAAK,gBAAgB,YAAY,KAAK,OAAO,KAAK,SAAU,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAE,GAC/G,YAAYA,MAAK,MAAM,KAAK,eAAe,GAAI,GAC/C,eAAe,KAAK,eAAgB,YAAY,GAChD,QAAQ,KAAK,QAAQ,IAAI,aAAa;AAC1C,YAAI,WAAW;AACX,kBAAQ,KAAK,mBAAmB,OAAO,KAAK,OAAO;AAAA,QACvD;AACA,eAAO,KAAK,OAAO,SAAS,GAAG,WAAW,KAAK,QAAQ,IAAI,aAAa,IAAI,GAAG,eAAe,GAAG,OAAO,KAAK;AAAA,MACjH;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,OAAO,KAAK,OAAO,QACnB,SAAS,KAAK,QACd,GAAG;AACP,YAAI,CAAC,OAAO,OAAO,OAAO,KAAK,IAAI,GAAG;AAClC;AAAA,QACJ;AACA,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,kBAAQ,KAAK,YAAY,CAAC,EAAE,OAAO;AACnC,eAAK,OAAO,MAAM,EAAE,IAAI,MAAM;AAC9B,eAAK,YAAY,MAAM,CAAC,IAAI,MAAM;AAAA,QACtC;AACA,YAAI,KAAK,OAAO,CAAC,MAAM,MAAM;AACzB,kBAAQ,KAAK,kBAAkB,EAAE,OAAO;AACxC,eAAK,OAAO,MAAM,EAAE,IAAI;AACxB,eAAK,YAAY,KAAK,MAAM;AAAA,QAChC;AACA,YAAI,KAAK,OAAO,CAAC,MAAM,MAAM;AACzB,kBAAQ,KAAK,aAAa,EAAE,OAAO;AACnC,eAAK,OAAO,MAAM,EAAE,IAAI;AACxB,eAAK,YAAY,KAAK,MAAM;AAAA,QAChC;AACA,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ,CAAC;AAKD,IAAAE,GAAE,GAAG,UAAU,MAAM,MAAM,YAAYA,GAAE,GAAG,UAAU,OAAO;AAAA,MACzD,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,YAAI,QAAQ,GAAG;AAEf,YAAI,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAE7D,aAAK,SAAS,CAAC;AACf,aAAK,cAAc,CAAC;AACpB,aAAK,SAAS,SAASJ,GAAE,IAAI,QAAQ,MAAM;AAE3C,YAAI,QAAQ,IAAI,OAAO,MAAM,QAAQ;AACjC,eAAK,QAAQ,KAAK;AAAA,QACtB;AAEA,YAAI,OAAO,SAAS,GAAG;AACnB,eAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,qBAAS,OAAO,CAAC;AAAA,UACrB;AAAA,QACJ;AACA,aAAK,QAAQ;AACb,aAAK,WAAW;AAChB,aAAK,SAASF,MAAK,MAAMA,MAAK,IAAI,KAAK,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,MAC9E;AAAA,MAEA,WAAW,SAAUM,KAAI,GAAG,GAAG;AAC3B,YAAI,UAAU,KAAK,OAAO,WAAWA,KAAI,GAAG,CAAC;AAC7C,eAAQ,YAAYL,cAAa,KAAK,OAAO,OAAO,MAAMA,aAAa,KAAK,OAAO,OAAO,IAAIA;AAAA,MAClG;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,gBAAgB,KAAK;AACzB,eAAO;AAAA,UACH,QAAQ,KAAK,OAAO,aAAa,MAAMA;AAAA,UACvC,OAAO,KAAK,OAAO,aAAa;AAAA,UAChC,SAAS,KAAK,OAAO,aAAa,IAAI,KAAK,QAAQ;AAAA,UACnD,OAAO,KAAK,QAAQ,IAAI,aAAa,EAAE,gBAAgB,KAAK,QAAQ,IAAI,aAAa,EAAE,MAAM;AAAA,UAC7F,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,iBAAiB,SAAU,WAAW;AAClC,YAAI,gBAAgB,KAAK,eACpB,WAAW,KAAK,YAAY,eAAe,SAAS,GACpD,UAAU,KAAK,YAAY,aAAa;AAC7C,eAAO,KAAK,OAAO,OAAO;AAC1B,aAAK,OAAO,iBAAiB,SAAS,QAAQ;AAC9C,aAAK,YAAY,aAAa,IAAI,SAAS;AAC3C,aAAK,OAAO,SAAS,EAAE,IAAI;AAAA,MAC/B;AAAA,MAEA,aAAa,SAAU,UAAU,WAAW;AACxC,YAAI,SAAS,KAAK,QACd,UAAU,KAAK,SACf,SAAS,KAAK,QACd,cAAc,QAAQ,IAAI,aAAa,GACvC,SAAS,QAAQ,IAAI,QAAQ,GAC7B,SAAS,IAAID,MAAK,IAClB,SAAS,KAAK,QACd,QAAQ,KAAK,OACb,OAAO,SAAU,IAAEA,MAAK,MAAK,SAAO,OAAO,GAC3C,OAAO,KAAK,GAAG,MAAM;AAEzB,eAAO,OAAO;AACd,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,kBAAQ;AACR,gBAAM;AACN,cAAI,QAAQ,GAAG;AACX,kBAAM,OAAQ,UAAU,OAAO,CAAC,IAAI;AAAA,UACxC;AACA,cAAI,aAAa,GAAG;AAChB,oBAAQ,QAAQ,IAAI,aAAa,EAAE,IAAI,QAAQ,IAAI,aAAa,EAAE,MAAM;AACxE,gBAAI,WAAW;AACX,sBAAQ,KAAK,mBAAmB,OAAO,OAAO;AAAA,YAClD;AAEA,mBAAO,OAAO,aAAa,QAAQ,QAAQ,SAAS,aAAa,OAAO,KAAKC,YAAW,KAAK;AAAA,UACjG;AACA,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,SAAS,KAAK,QACd,SAAS,KAAK,QACd,UAAU,KAAK,SACf,SAAS,KAAK,QACd,cAAc,QAAQ,IAAI,aAAa,GACvC,aAAa,QAAQ,IAAI,YAAY,GACrC,OAAO;AAEX,YAAI,CAAC,IAAI,OAAO,OAAO,KAAK,IAAI,GAAG;AAC/B;AAAA,QACJ;AACA,YAAI,aAAa;AACb,iBAAO;AAAA,YAAW;AAAA,YAAQ;AAAA,YAAQD,MAAK,MAAM,SAAU,cAAc,CAAE;AAAA,YACnE,QAAQ,IAAI,aAAa;AAAA,YAAGC;AAAA,YAAW;AAAA,UAAW,EAAE,OAAO;AAAA,QACnE;AACA,aAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,cAAI,OAAO,CAAC,GAAG;AACX,oBAAQ,KAAK,YAAY,CAAC,EAAE,OAAO;AACnC,iBAAK,YAAY,CAAC,IAAI,MAAM;AAC5B,iBAAK,OAAO,MAAM,EAAE,IAAI;AAAA,UAC5B;AAAA,QACJ;AACA,YAAI,YAAY;AACZ,iBAAO;AAAA,YAAW;AAAA,YAAQ;AAAA,YAAQ,SAAS;AAAA,YAAY,QAAQ,IAAI,YAAY;AAAA,YAC3E,QAAQ,IAAI,YAAY;AAAA,YAAG;AAAA,UAAC,EAAE,OAAO;AAAA,QAC7C;AACA,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ,CAAC;AAKD,IAAAC,GAAE,GAAG,UAAU,MAAM,MAAM,YAAYA,GAAE,GAAG,UAAU,OAAO;AAAA,MACzD,MAAM;AAAA,MAEN,MAAM,SAAUI,KAAI,QAAQ,SAAS,OAAO,QAAQ;AAChD,YAAI,OAAO,KAAK,KAAK,MAAMA,KAAI,QAAQ,SAAS,OAAO,MAAM;AAC7D,aAAK,SAASJ,GAAE,IAAI,QAAQ,MAAM;AAClC,aAAK,QAAQ,QAAQ,IAAI,OAAO,MAAM,SAAS,UAAU;AACzD,aAAK,WAAW;AAChB,YAAI,CAAC,KAAK,OAAO,QAAQ;AACrB,eAAK,WAAW;AAAA,QACpB;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,WAAY;AACnB,eAAO;AAAA,MACX;AAAA,MAEA,wBAAwB,WAAY;AAChC,YAAI,SAAS;AAAA,UACT,EAAE,OAAO,MAAM,OAAO,KAAK,UAAU,CAAC,EAAE;AAAA,UACxC,EAAE,OAAO,OAAO,OAAO,KAAK,UAAU,CAAC,EAAE;AAAA,UACzC,EAAE,OAAO,MAAM,OAAO,KAAK,UAAU,CAAC,EAAE;AAAA,QAC5C;AACA,YAAI,KAAK,aAAaD,YAAW;AAC7B,iBAAO,KAAK,EAAE,OAAO,MAAM,OAAO,KAAK,SAAQ,CAAC;AAAA,QACpD;AACA,YAAI,KAAK,aAAaA,YAAW;AAC7B,iBAAO,KAAK,EAAE,OAAO,MAAM,OAAO,KAAK,SAAQ,CAAC;AAAA,QACpD;AACA,YAAI,KAAK,aAAaA,YAAW;AAC7B,iBAAO,KAAK,EAAE,OAAO,MAAM,OAAO,KAAK,SAAQ,CAAC;AAAA,QACpD;AACA,YAAI,KAAK,aAAaA,YAAW;AAC7B,iBAAO,KAAK,EAAE,OAAO,MAAM,OAAO,KAAK,SAAQ,CAAC;AAAA,QACpD;AACA,eAAO;AAAA,MACX;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,SAAS,KAAK,QACd,SAAS,KAAK,QACd,OAAO,OAAO,QACd,UAAU,KAAK,SACf,cAAc,KAAK,aACnB,eAAe,KAAK,cACpB,WAAW,QAAQ,IAAI,eAAe,MAAMA,aAAYD,MAAK,IAAI,MAAMA,OAAM,MAAM,IAAI,QAAQ,IAAI,eAAe,GAClH,WAAW,QAAQ,IAAI,eAAe,MAAMC,aAAYD,MAAK,IAAI,MAAMA,OAAM,MAAM,IAAI,QAAQ,IAAI,eAAe,GAClH,aAAa,GACb,UAAU,UAAU,KAAK,IAAI,IAAI,IAAI,UAAU,UAAU,GACzD,MAAM;AAEV,YAAI,CAAC,IAAI,OAAO,OAAO,KAAK,IAAI,GAAG;AAC/B;AAAA,QACJ;AAEA,YAAI,QAAQ,IAAI,KAAK,GAAG;AACpB,cAAI,QAAQ,IAAI,cAAc,KAAK,OAAO,SAAS,GAAG;AAClD,uBAAW,OAAO,CAAC;AACnB,uBAAW,OAAO,CAAC;AACnB,iBAAK,OAAO,CAAC;AACb,iBAAK,OAAO,CAAC;AACb,iBAAK,OAAO,CAAC;AACb,uBAAW,OAAO,CAAC;AACnB,uBAAW,OAAO,CAAC;AAAA,UACvB,OAAO;AACH,uBAAW,OAAO,CAAC;AACnB,iBAAK,OAAO,CAAC;AACb,iBAAK,OAAO,CAAC;AACb,iBAAK,OAAO,CAAC;AACb,uBAAW,OAAO,CAAC;AAAA,UACvB;AAAA,QACJ,OAAO;AACH,iBAAO,KAAK,SAAU,GAAG,GAAG;AAAE,mBAAO,IAAI;AAAA,UAAG,CAAC;AAC7C,eAAK,SAAS,QAAQ,CAAC;AACvB,eAAK,SAAS,QAAQ,CAAC;AACvB,eAAK,SAAS,QAAQ,CAAC;AACvB,gBAAM,KAAK;AACX,cAAI,QAAQ,IAAI,cAAc,GAAG;AAC7B,uBAAW,WAAWC;AACtB,iBAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,kBAAI,aAAaA,cAAa,OAAO,CAAC,IAAI,KAAM,MAAM,QAAQ,IAAI,YAAY,GAAI;AAC9E,2BAAW,OAAO,CAAC;AAAA,cACvB;AACA,kBAAI,OAAO,CAAC,IAAI,KAAM,MAAM,QAAQ,IAAI,YAAY,GAAI;AACpD,2BAAW,OAAO,CAAC;AAAA,cACvB;AAAA,YACJ;AACA,uBAAW,OAAO,CAAC;AACnB,uBAAW,OAAO,OAAO,CAAC;AAAA,UAC9B,OAAO;AACH,uBAAW,OAAO,CAAC;AACnB,uBAAW,OAAO,OAAO,CAAC;AAAA,UAC9B;AAAA,QACJ;AACA,aAAK,YAAY,CAAC,IAAI,IAAI,EAAE;AAC5B,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,WAAW;AAEhB,mBAAW,eAAe,WAAW,WAAW;AAChD,YAAI,QAAQ,IAAI,cAAc,GAAG;AAC7B,uBAAaD,MAAK,KAAK,QAAQ,IAAI,YAAY,CAAC;AAChD,yBAAe,IAAIA,MAAK,KAAK,QAAQ,IAAI,YAAY,CAAC;AACtD,qBAAW,eAAe,WAAW,WAAW;AAChD,cAAI,WAAW,UAAU;AACrB,mBAAO;AAAA,eAAY,WAAW,YAAY,WAAW;AAAA,cACjD,eAAe;AAAA,cACf,QAAQ,IAAI,YAAY;AAAA,cACxB,QAAQ,IAAI,kBAAkB;AAAA,cAC9B,QAAQ,IAAI,kBAAkB;AAAA,YAAC,EAAE,OAAO;AAAA,UAChD;AACA,cAAI,WAAW,UAAU;AACrB,mBAAO;AAAA,eAAY,WAAW,YAAY,WAAW;AAAA,cACjD,eAAe;AAAA,cACf,QAAQ,IAAI,YAAY;AAAA,cACxB,QAAQ,IAAI,kBAAkB;AAAA,cAC9B,QAAQ,IAAI,kBAAkB;AAAA,YAAC,EAAE,OAAO;AAAA,UAChD;AAAA,QACJ;AAGA,eAAO;AAAA,UACHA,MAAK,OAAO,KAAK,YAAY,WAAW,UAAU;AAAA,UAClDA,MAAK,MAAM,eAAe,GAAG;AAAA,UAC7BA,MAAK,OAAO,KAAK,MAAM,QAAQ;AAAA,UAC/BA,MAAK,MAAM,eAAe,GAAG;AAAA,UAC7B,QAAQ,IAAI,cAAc;AAAA,UAC1B,QAAQ,IAAI,cAAc;AAAA,QAAC,EAAE,OAAO;AAExC,eAAO;AAAA,UACHA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACxDA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3BA,MAAK,OAAO,KAAK,YAAY,WAAW,UAAU;AAAA,UAClDA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3B,QAAQ,IAAI,WAAW;AAAA,QAAC,EAAE,OAAO;AACrC,eAAO;AAAA,UACHA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACxDA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3BA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACxDA,MAAK,MAAM,eAAe,eAAe,CAAC;AAAA,UAC1C,QAAQ,IAAI,cAAc;AAAA,QAAC,EAAE,OAAO;AAExC,eAAO;AAAA,UAASA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACpEA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3BA,MAAK,OAAO,KAAK,YAAY,WAAW,UAAU;AAAA,UAClDA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3B,QAAQ,IAAI,WAAW;AAAA,QAAC,EAAE,OAAO;AACrC,eAAO;AAAA,UACHA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACxDA,MAAK,MAAM,eAAe,CAAC;AAAA,UAC3BA,MAAK,OAAO,WAAW,YAAY,WAAW,UAAU;AAAA,UACxDA,MAAK,MAAM,eAAe,eAAe,CAAC;AAAA,UAC1C,QAAQ,IAAI,cAAc;AAAA,QAAC,EAAE,OAAO;AAExC,eAAO;AAAA,UACHA,MAAK,OAAO,KAAK,YAAY,WAAW,UAAU;AAAA,UAClDA,MAAK,MAAM,eAAe,GAAG;AAAA,UAC7BA,MAAK,OAAO,KAAK,YAAY,WAAW,UAAU;AAAA,UAClDA,MAAK,MAAM,eAAe,GAAG;AAAA,UAC7B,QAAQ,IAAI,aAAa;AAAA,QAAC,EAAE,OAAO;AACvC,YAAI,QAAQ,IAAI,QAAQ,GAAG;AACvB,iBAAOA,MAAK,KAAK,QAAQ,IAAI,YAAY,CAAC;AAC1C,iBAAO;AAAA,YACHA,MAAK,OAAO,QAAQ,IAAI,QAAQ,IAAI,YAAY,WAAW,UAAU;AAAA,YACrEA,MAAK,MAAO,eAAe,IAAK,IAAI;AAAA,YACpCA,MAAK,OAAO,QAAQ,IAAI,QAAQ,IAAI,YAAY,WAAW,UAAU;AAAA,YACrEA,MAAK,MAAO,eAAe,IAAK,IAAI;AAAA,YACpC,QAAQ,IAAI,aAAa;AAAA,UAAC,EAAE,OAAO;AACvC,iBAAO;AAAA,YACHA,MAAK,OAAO,QAAQ,IAAI,QAAQ,IAAI,YAAY,WAAW,aAAa,IAAI;AAAA,YAC5EA,MAAK,MAAM,eAAe,CAAC;AAAA,YAC3BA,MAAK,OAAO,QAAQ,IAAI,QAAQ,IAAI,YAAY,WAAW,aAAa,IAAI;AAAA,YAC5EA,MAAK,MAAM,eAAe,CAAC;AAAA,YAC3B,QAAQ,IAAI,aAAa;AAAA,UAAC,EAAE,OAAO;AAAA,QAC3C;AACA,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ,CAAC;AAKD,aAAS,YAAY;AAAA,MACjB,MAAM,SAAU,QAAQ,IAAI,MAAM,MAAM;AACpC,aAAK,SAAS;AACd,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,OAAO;AAAA,MAChB;AAAA,MACA,QAAQ,WAAY;AAChB,aAAK,OAAO,YAAY,IAAI;AAC5B,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAED,mBAAe,YAAY;AAAA,MACvB,UAAU;AAAA,MAEV,MAAM,SAAU,OAAO,QAAQ,QAAQ;AACnC,YAAI,CAAC,OAAO;AACR;AAAA,QACJ;AACA,aAAK,QAAQ;AACb,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,cAAc;AACnB,YAAI,OAAO,CAAC,GAAG;AACX,mBAAS,OAAO,CAAC;AAAA,QACrB;AACA,QAAAE,GAAE,KAAK,QAAQ,gBAAgB,IAAI;AAAA,MACvC;AAAA,MAEA,UAAU,SAAU,IAAI,IAAI,IAAI,IAAI,WAAW,WAAW;AACtD,eAAO,KAAK,UAAU,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,WAAW,SAAS;AAAA,MACpE;AAAA,MAEA,WAAW,SAAU,MAAM,WAAW,WAAW,WAAW;AACxD,eAAO,KAAK,UAAU,SAAS,CAAC,MAAM,WAAW,WAAW,SAAS,CAAC;AAAA,MAC1E;AAAA,MAEA,YAAY,SAAU,GAAG,GAAG,QAAQ,WAAW,WAAW,WAAW;AACjE,eAAO,KAAK,UAAU,UAAU,CAAC,GAAG,GAAG,QAAQ,WAAW,WAAW,SAAS,CAAC;AAAA,MACnF;AAAA,MAEA,cAAc,SAAU,GAAG,GAAG,QAAQ,YAAY,UAAU,WAAW,WAAW;AAC9E,eAAO,KAAK,UAAU,YAAY,CAAC,GAAG,GAAG,QAAQ,YAAY,UAAU,WAAW,SAAS,CAAC;AAAA,MAChG;AAAA,MAEA,UAAU,SAAU,GAAG,GAAG,OAAO,QAAQ,WAAW,WAAW;AAC3D,eAAO,KAAK,UAAU,QAAQ,CAAC,GAAG,GAAG,OAAO,QAAQ,WAAW,SAAS,CAAC;AAAA,MAC7E;AAAA,MAEA,YAAY,WAAY;AACpB,eAAO,KAAK;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA,MAKA,gBAAgB,WAAY;AACxB,eAAO,KAAK;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA,MAKA,OAAO,WAAY;AACf,cAAM,uBAAuB;AAAA,MACjC;AAAA,MAEA,SAAS,SAAUI,KAAI,QAAQ;AAC3B,QAAAJ,GAAE,MAAM,EAAE,KAAKI,GAAE;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA,MAKA,qBAAqB,SAAU,OAAO,QAAQ,QAAQ;AAElD,YAAI;AACJ,gBAAQ,KAAK,SAAS,KAAK,MAAM;AACjC,YAAI,OAAO;AACP,eAAK,cAAc,MAAM,CAAC;AAAA,QAC9B,OAAO;AACH,eAAK,cAAcJ,GAAE,MAAM,EAAE,OAAO;AAAA,QACxC;AACA,gBAAQ,KAAK,SAAS,KAAK,KAAK;AAChC,YAAI,OAAO;AACP,eAAK,aAAa,MAAM,CAAC;AAAA,QAC7B,OAAO;AACH,eAAK,aAAaA,GAAE,MAAM,EAAE,MAAM;AAAA,QACtC;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,SAAU,WAAW,WAAW;AACvC,YAAI,KAAK;AACT,kBAAU,QAAQ,EAAE;AACpB,eAAO,IAAI,OAAO,MAAM,IAAI,WAAW,SAAS;AAAA,MACpD;AAAA;AAAA;AAAA;AAAA,MAKA,aAAa,SAAU,OAAO;AAC1B,cAAM,6BAA6B;AAAA,MACvC;AAAA;AAAA;AAAA;AAAA,MAKA,kBAAkB,SAAU,SAAS,OAAO;AACxC,cAAM,kCAAkC;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA,MAKA,kBAAkB,SAAU,SAAS,OAAO;AACxC,cAAM,kCAAkC;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA,MAKA,eAAe,SAAU,SAAS;AAC9B,cAAM,+BAA+B;AAAA,MACzC;AAAA;AAAA;AAAA;AAAA,MAKA,YAAY,SAAUI,KAAI,GAAG,GAAG;AAC5B,cAAM,4BAA4B;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA,MAKA,QAAQ,WAAY;AAChB,cAAM,wBAAwB;AAAA,MAClC;AAAA,IACJ,CAAC;AAED,qBAAiB,YAAY,cAAc;AAAA,MACvC,MAAM,SAAU,OAAO,QAAQ,QAAQ,UAAU;AAC7C,uBAAe,OAAO,KAAK,KAAK,MAAM,OAAO,QAAQ,MAAM;AAC3D,aAAK,SAASP,UAAS,cAAc,QAAQ;AAC7C,YAAI,OAAO,CAAC,GAAG;AACX,mBAAS,OAAO,CAAC;AAAA,QACrB;AACA,QAAAG,GAAE,KAAK,QAAQ,gBAAgB,IAAI;AACnC,QAAAA,GAAE,KAAK,MAAM,EAAE,IAAI,EAAE,SAAS,gBAAgB,OAAc,QAAgB,eAAe,MAAM,CAAC;AAClG,aAAK,QAAQ,KAAK,QAAQ,MAAM;AAChC,aAAK,oBAAoB,OAAO,QAAQ,KAAK,MAAM;AACnD,aAAK,OAAO,QAAQ,KAAK;AACzB,aAAK,OAAO,SAAS,KAAK;AAC1B,aAAK,WAAW;AAChB,aAAK,SAAS,CAAC;AACf,aAAK,WAAW,CAAC;AACjB,aAAK,uBAAuBD;AAC5B,QAAAC,GAAE,KAAK,MAAM,EAAE,IAAI,EAAC,OAAO,KAAK,YAAY,QAAQ,KAAK,YAAW,CAAC;AAAA,MACzE;AAAA,MAEA,aAAa,SAAU,WAAW,WAAW,WAAW;AACpD,YAAI,UAAU,KAAK,OAAO,WAAW,IAAI;AACzC,YAAI,cAAcD,YAAW;AACzB,kBAAQ,cAAc;AAAA,QAC1B;AACA,gBAAQ,YAAY,cAAcA,aAAY,IAAI;AAClD,YAAI,cAAcA,YAAW;AACzB,kBAAQ,YAAY;AAAA,QACxB;AACA,eAAO;AAAA,MACX;AAAA,MAEA,OAAO,WAAY;AACf,YAAI,UAAU,KAAK,YAAY;AAC/B,gBAAQ,UAAU,GAAG,GAAG,KAAK,YAAY,KAAK,WAAW;AACzD,aAAK,SAAS,CAAC;AACf,aAAK,WAAW,CAAC;AACjB,aAAK,uBAAuBA;AAAA,MAChC;AAAA,MAEA,YAAY,SAAU,SAAS,MAAM,WAAW,WAAW,WAAW;AAClE,YAAI,UAAU,KAAK,YAAY,WAAW,WAAW,SAAS,GAC1D,GAAG;AACP,gBAAQ,UAAU;AAClB,gBAAQ,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG;AACjD,aAAK,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,MAAM,KAAK;AAC3C,kBAAQ,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG;AAAA,QACrD;AACA,YAAI,cAAcA,YAAW;AACzB,kBAAQ,OAAO;AAAA,QACnB;AACA,YAAI,cAAcA,YAAW;AACzB,kBAAQ,KAAK;AAAA,QACjB;AACA,YAAI,KAAK,YAAYA,cAAa,KAAK,YAAYA,cAC/C,QAAQ,cAAc,KAAK,SAAS,KAAK,OAAO,GAAG;AACnD,eAAK,uBAAuB;AAAA,QAChC;AAAA,MACJ;AAAA,MAEA,aAAa,SAAU,SAAS,GAAG,GAAG,QAAQ,WAAW,WAAW,WAAW;AAC3E,YAAI,UAAU,KAAK,YAAY,WAAW,WAAW,SAAS;AAC9D,gBAAQ,UAAU;AAClB,gBAAQ,IAAI,GAAG,GAAG,QAAQ,GAAG,IAAID,MAAK,IAAI,KAAK;AAC/C,YAAI,KAAK,YAAYC,cAAa,KAAK,YAAYA,cAC/C,QAAQ,cAAc,KAAK,SAAS,KAAK,OAAO,GAAG;AACnD,eAAK,uBAAuB;AAAA,QAChC;AACA,YAAI,cAAcA,YAAW;AACzB,kBAAQ,OAAO;AAAA,QACnB;AACA,YAAI,cAAcA,YAAW;AACzB,kBAAQ,KAAK;AAAA,QACjB;AAAA,MACJ;AAAA,MAEA,eAAe,SAAU,SAAS,GAAG,GAAG,QAAQ,YAAY,UAAU,WAAW,WAAW;AACxF,YAAI,UAAU,KAAK,YAAY,WAAW,SAAS;AACnD,gBAAQ,UAAU;AAClB,gBAAQ,OAAO,GAAG,CAAC;AACnB,gBAAQ,IAAI,GAAG,GAAG,QAAQ,YAAY,UAAU,KAAK;AACrD,gBAAQ,OAAO,GAAG,CAAC;AACnB,gBAAQ,UAAU;AAClB,YAAI,cAAcA,YAAW;AACzB,kBAAQ,OAAO;AAAA,QACnB;AACA,YAAI,WAAW;AACX,kBAAQ,KAAK;AAAA,QACjB;AACA,YAAI,KAAK,YAAYA,cAAa,KAAK,YAAYA,cAC/C,QAAQ,cAAc,KAAK,SAAS,KAAK,OAAO,GAAG;AACnD,eAAK,uBAAuB;AAAA,QAChC;AAAA,MACJ;AAAA,MAEA,WAAW,SAAU,SAAS,GAAG,GAAG,OAAO,QAAQ,WAAW,WAAW;AACrE,eAAO,KAAK,WAAW,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,SAAS;AAAA,MACpI;AAAA,MAEA,aAAa,SAAU,OAAO;AAC1B,aAAK,OAAO,MAAM,EAAE,IAAI;AACxB,aAAK,SAAS,KAAK,MAAM,EAAE;AAC3B,aAAK,cAAc,MAAM;AACzB,eAAO,MAAM;AAAA,MACjB;AAAA,MAEA,kBAAkB,SAAU,SAAS,OAAO;AACxC,YAAI,WAAW,KAAK,UAChB;AACJ,aAAK,OAAO,MAAM,EAAE,IAAI;AACxB,aAAK,IAAI,SAAS,QAAQ,OAAM;AAC5B,cAAI,SAAS,CAAC,KAAK,SAAS;AACxB,qBAAS,CAAC,IAAI,MAAM;AAAA,UACxB;AAAA,QACJ;AACA,eAAO,KAAK,OAAO,OAAO;AAAA,MAC9B;AAAA,MAEA,mBAAmB,SAAU,UAAU,QAAQ;AAC3C,YAAI,WAAW,KAAK,UAChB,WAAW,CAAC,GACZ,KAAK,GAAG;AAEZ,aAAK,IAAI,SAAS,QAAQ,OAAM;AAC5B,mBAAS,SAAS,CAAC,CAAC,IAAI;AAAA,QAC5B;AACA,aAAK,IAAI,SAAS,QAAQ,OAAM;AAC5B,gBAAM,SAAS,CAAC;AAChB,cAAI,SAAS,GAAG,GAAG;AACf,qBAAS,OAAO,GAAG,CAAC;AACpB,mBAAO,KAAK,OAAO,GAAG;AACtB,oBAAQ;AAAA,UACZ;AAAA,QACJ;AACA,aAAK,IAAI,OAAO,QAAQ,OAAM;AAC1B,mBAAS,OAAO,OAAO,GAAG,OAAO,CAAC,EAAE,EAAE;AACtC,eAAK,OAAO,OAAO,CAAC,EAAE,EAAE,IAAI,OAAO,CAAC;AAAA,QACxC;AAAA,MAEJ;AAAA,MAEA,kBAAkB,SAAU,SAAS,OAAO;AACxC,YAAI,WAAW,KAAK,UAChB;AACJ,aAAK,IAAI,SAAS,QAAQ,OAAM;AAC5B,cAAI,SAAS,CAAC,MAAM,SAAS;AACzB,qBAAS,OAAO,IAAI,GAAG,GAAG,MAAM,EAAE;AAClC,iBAAK,OAAO,MAAM,EAAE,IAAI;AACxB;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MAEA,eAAe,SAAU,SAAS;AAC9B,YAAI,WAAW,KAAK,UAChB;AACJ,aAAK,IAAI,SAAS,QAAQ,OAAM;AAC5B,cAAI,SAAS,CAAC,MAAM,SAAS;AACzB,qBAAS,OAAO,GAAG,CAAC;AACpB;AAAA,UACJ;AAAA,QACJ;AACA,eAAO,KAAK,OAAO,OAAO;AAAA,MAC9B;AAAA,MAEA,YAAY,SAAUK,KAAI,GAAG,GAAG;AAC5B,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,OAAO;AACZ,eAAO,KAAK;AAAA,MAChB;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,WAAW,KAAK,UAChB,SAAS,KAAK,QACdK,cAAa,SAAS,QACtB,UAAU,KAAK,YAAY,GAC3B,SAAS,OAAO;AACpB,gBAAQ,UAAU,GAAG,GAAG,KAAK,YAAY,KAAK,WAAW;AACzD,aAAK,IAAI,GAAG,IAAIA,aAAY,KAAK;AAC7B,oBAAU,SAAS,CAAC;AACpB,kBAAQ,OAAO,OAAO;AACtB,eAAK,UAAU,MAAM,IAAI,EAAE,MAAM,MAAM,MAAM,IAAI;AAAA,QACrD;AACA,YAAI,CAAC,KAAK,UAAU;AAEhB,eAAK,SAAS,CAAC;AACf,eAAK,WAAW,CAAC;AAAA,QACrB;AAAA,MACJ;AAAA,IAEJ,CAAC;AAED,kBAAc,YAAY,cAAc;AAAA,MACpC,MAAM,SAAU,OAAO,QAAQ,QAAQ;AACnC,YAAI;AACJ,oBAAY,OAAO,KAAK,KAAK,MAAM,OAAO,QAAQ,MAAM;AACxD,YAAI,OAAO,CAAC,GAAG;AACX,mBAAS,OAAO,CAAC;AAAA,QACrB;AACA,QAAAT,GAAE,KAAK,QAAQ,gBAAgB,IAAI;AACnC,aAAK,SAASH,UAAS,cAAc,MAAM;AAC3C,QAAAG,GAAE,KAAK,MAAM,EAAE,IAAI,EAAE,SAAS,gBAAgB,UAAU,YAAY,UAAU,UAAU,OAAc,QAAgB,QAAQ,OAAO,SAAS,OAAO,eAAe,MAAK,CAAC;AAC1K,aAAK,QAAQ,KAAK,QAAQ,MAAM;AAChC,aAAK,oBAAoB,OAAO,QAAQ,KAAK,MAAM;AACnD,aAAK,OAAO,QAAQ,KAAK;AACzB,aAAK,OAAO,SAAS,KAAK;AAC1B,kBAAU,2CAA2C,KAAK,aAAa,MAAM,KAAK,cAAc,mDACtC,KAAK,aAAa,eAAe,KAAK,cAAc;AAC9G,aAAK,OAAO,mBAAmB,aAAa,OAAO;AACnD,aAAK,QAAQA,GAAE,KAAK,MAAM,EAAE,SAAS,EAAE,CAAC;AACxC,aAAK,WAAW;AAChB,aAAK,YAAY;AAAA,MACrB;AAAA,MAEA,YAAY,SAAU,SAAS,MAAM,WAAW,WAAW,WAAW;AAClE,YAAI,QAAQ,CAAC,GACT,SAAS,QAAQ,MAAM,QAAQ,KAAK,MAAM;AAC9C,aAAK,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,MAAM,KAAK;AAC3C,gBAAM,CAAC,IAAI,KAAM,KAAK,CAAC,EAAE,CAAC,IAAK,MAAO,KAAK,CAAC,EAAE,CAAC;AAAA,QACnD;AACA,kBAAU,MAAM,OAAO,GAAG,CAAC;AAC3B,oBAAY,cAAcD,aAAY,IAAI;AAC1C,iBAAS,cAAcA,aAAY,sBAAsB,oBAAoB,YAAY,sBAAsB,YAAY;AAC3H,eAAO,cAAcA,aAAY,oBAAoB,iBAAiB,YAAY;AAClF,iBAAS,MAAM,CAAC,MAAM,MAAM,MAAM,SAAS,CAAC,IAAI,OAAO;AACvD,cAAM,2CAA2C,KAAK,aAAa,MAAM,KAAK,cAAc,oBACrE,UAAU,OAC5B,SACA,OACD,uDAAuD,KAAK,cAAc,cAAc,KAAK,aAAa,0CAC5F,UAAU,QAAQ,MAAM,KAAK,IAAI,IAAI,MAAM,SAAS;AAEtE,eAAO;AAAA,MACX;AAAA,MAEA,aAAa,SAAU,SAAS,GAAG,GAAG,QAAQ,WAAW,WAAW,WAAW;AAC3E,YAAI,QAAQ,MAAM;AAClB,aAAK;AACL,aAAK;AACL,iBAAS,cAAcA,aAAY,sBAAsB,oBAAoB,YAAY,sBAAsB,YAAY;AAC3H,eAAO,cAAcA,aAAY,oBAAoB,iBAAiB,YAAY;AAClF,cAAM,0BACiB,UAAU,OAC7B,SACA,OACA,mCAAmC,IAAI,cAAc,IAAI,eAAgB,SAAS,IAAK,gBAAiB,SAAS,IAAK;AAC1H,eAAO;AAAA,MAEX;AAAA,MAEA,eAAe,SAAU,SAAS,GAAG,GAAG,QAAQ,YAAY,UAAU,WAAW,WAAW;AACxF,YAAI,OAAO,QAAQ,QAAQ,MAAM,MAAM,QAAQ,MAAM;AACrD,YAAI,eAAe,UAAU;AACzB,iBAAO;AAAA,QACX;AACA,YAAK,WAAW,eAAiB,IAAID,MAAK,IAAK;AAC3C,uBAAa;AACb,qBAAY,IAAIA,MAAK;AAAA,QACzB;AAEA,iBAAS,IAAIA,MAAK,MAAMA,MAAK,IAAI,UAAU,IAAI,MAAM;AACrD,iBAAS,IAAIA,MAAK,MAAMA,MAAK,IAAI,UAAU,IAAI,MAAM;AACrD,eAAO,IAAIA,MAAK,MAAMA,MAAK,IAAI,QAAQ,IAAI,MAAM;AACjD,eAAO,IAAIA,MAAK,MAAMA,MAAK,IAAI,QAAQ,IAAI,MAAM;AAEjD,YAAI,WAAW,QAAQ,WAAW,MAAM;AACpC,cAAK,WAAW,aAAcA,MAAK,IAAI;AAEnC,mBAAO;AAAA,UACX;AAEA,mBAAS,OAAO,IAAI;AACpB,mBAAS,OAAO;AAAA,QACpB;AAEA,YAAI,WAAW,QAAQ,WAAW,QAAS,WAAW,aAAcA,MAAK,IAAI;AACzE,iBAAO;AAAA,QACX;AAEA,gBAAQ,CAAC,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,QAAQ,QAAQ,MAAM,IAAI;AACnF,iBAAS,cAAcC,aAAY,sBAAsB,sCAAsC,YAAY;AAC3G,eAAO,cAAcA,aAAY,oBAAoB,iBAAiB,YAAY;AAClF,cAAM,2CAA2C,KAAK,aAAa,MAAM,KAAK,cAAc,oBACrE,UAAU,OAC5B,SACA,OACD,uDAAuD,KAAK,cAAc,cAAc,KAAK,aAAa,0CAC5F,IAAI,MAAM,IAAI,SAAS,MAAM,KAAK,IAAI,IAAI;AAE5D,eAAO;AAAA,MACX;AAAA,MAEA,WAAW,SAAU,SAAS,GAAG,GAAG,OAAO,QAAQ,WAAW,WAAW;AACrE,eAAO,KAAK,WAAW,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,SAAS;AAAA,MACpI;AAAA,MAEA,OAAO,WAAY;AACf,aAAK,MAAM,YAAY;AAAA,MAC3B;AAAA,MAEA,aAAa,SAAU,OAAO;AAC1B,YAAI,MAAM,KAAK,UAAU,MAAM,IAAI,EAAE,MAAM,MAAM,MAAM,IAAI;AAC3D,YAAI,KAAK,UAAU;AACf,eAAK,MAAM,mBAAmB,aAAa,GAAG;AAAA,QAClD,OAAO;AACH,eAAK,aAAa;AAAA,QACtB;AACA,aAAK,cAAc,MAAM;AACzB,eAAO,MAAM;AAAA,MACjB;AAAA,MAEA,kBAAkB,SAAU,SAAS,OAAO;AACxC,YAAI,WAAWC,GAAE,cAAc,OAAO,GAClC,MAAM,KAAK,UAAU,MAAM,IAAI,EAAE,MAAM,MAAM,MAAM,IAAI;AAC3D,iBAAS,CAAC,EAAE,YAAY;AAAA,MAC5B;AAAA,MAEA,mBAAmB,SAAU,UAAU,QAAQ;AAE3C,YAAI,WAAWA,GAAE,cAAc,SAAS,CAAC,CAAC,GACtC,UAAU,IACV,OAAO,OAAO,QACd;AACJ,aAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACvB,qBAAW,KAAK,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,MAAM,OAAO,CAAC,EAAE,IAAI;AAAA,QACxE;AACA,iBAAS,CAAC,EAAE,YAAY;AACxB,aAAK,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAClC,UAAAA,GAAE,cAAc,SAAS,CAAC,CAAC,EAAE,OAAO;AAAA,QACxC;AAAA,MACJ;AAAA,MAEA,kBAAkB,SAAU,SAAS,OAAO;AACxC,YAAI,WAAWA,GAAE,cAAc,OAAO,GACjC,MAAM,KAAK,UAAU,MAAM,IAAI,EAAE,MAAM,MAAM,MAAM,IAAI;AAC5D,iBAAS,CAAC,EAAE,mBAAmB,YAAY,GAAG;AAAA,MAClD;AAAA,MAEA,eAAe,SAAU,SAAS;AAC9B,YAAI,WAAWA,GAAE,cAAc,OAAO;AACtC,aAAK,MAAM,YAAY,SAAS,CAAC,CAAC;AAAA,MACtC;AAAA,MAEA,YAAY,SAAUI,KAAI,GAAG,GAAG;AAC5B,YAAI,UAAUA,IAAG,GAAG,OAAO,CAAC;AAC5B,eAAO;AAAA,MACX;AAAA,MAEA,QAAQ,WAAY;AAChB,YAAI,CAAC,KAAK,UAAU;AAEhB,eAAK,MAAM,YAAY,KAAK;AAC5B,eAAK,WAAW;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EAEL,CAAC;AAAE,GAAE,UAAU,IAAI;;;ACh/FnB,IAAI,cAAqD;AACzD,IAAM,YAA+C,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE;AAEzE,eAAe,eAAe,KAAa,MAA6B;AACtE,QAAM,SAAS;AACf,QAAM,gBAAgB,EAAE,UAAU;AAAA,IAChC,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,EACZ,CAAC;AACD,QAAM,sBAAsB,EAAE,MAAM,OAAO,QAAQ,SAAS,UAAU,OAAO,YAAY,OAAO,eAAe,GAAG,eAAe,KAAK,UAAU,UAAU;AAC1J,QAAM,qBAAqB,EAAE,MAAM,OAAO,QAAQ,SAAS,UAAU,OAAO,YAAY,OAAO,eAAe,GAAG,eAAe,KAAK,UAAU,eAAe,WAAW,KAAK;AAC9K,MAAI,UAAU,KAAK,SAAS,OAAQ,WAAU,KAAK,MAAM;AACzD,YAAU,KAAK,KAAK,IAAI;AACxB,MAAI,UAAU,IAAI,SAAS,OAAQ,WAAU,IAAI,MAAM;AACvD,YAAU,IAAI,KAAK,GAAG;AACtB,IAAE,WAAW,EAAE,UAAU,UAAU,MAAM,mBAAmB;AAC5D,IAAE,WAAW,EAAE,UAAU,UAAU,KAAK,kBAAkB;AAC5D;AAEA,eAAe,YAA2B;AACxC,QAAM,QAAQ,SAAS,eAAe,KAAK;AAC3C,QAAM,WAAW,SAAS,eAAe,WAAW;AACpD,MAAI,CAAC,SAAS,CAAC,SAAU;AACzB,MAAI;AACF,UAAM,MAAM,MAAMM,WAAU,GAAG,OAAO,GAAG,UAAU;AACnD,QAAI,CAAC,OAAO,CAAC,IAAI,IAAI;AACnB,oBAAc,WAAW;AACzB,YAAM,MAAM,UAAU;AACtB;AAAA,IACF;AACA,UAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,QAAI,CAAC,MAAM;AACT,oBAAc,WAAW;AACzB,YAAM,MAAM,UAAU;AACtB;AAAA,IACF;AACA,UAAM,WAAW,SAAS,cAAc,OAAO;AAC/C,QAAI,CAAC,SAAU;AACf,QAAI,MAAM,EAAE,MAAM,CAAC,EAAE;AACrB,QAAI,MAAM,QAAQ,IAAI,KAAK,KAAK,UAAU,EAAG,OAAM,KAAK,CAAC;AACzD,QAAI,OAAO,wDAAwD,IAAI,QAAQ,SAAS;AACxF,eAAW,QAAQ,OAAO,QAAQ,IAAI,IAAI,EAAG,SAAQ,4CAA4C,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC;AAC3H,aAAS,YAAY;AACrB,QAAI,IAAI,SAAS,IAAI,MAAM,WAAW,EAAG,gBAAe,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;AAClF,UAAM,MAAM,UAAU;AAAA,EACxB,SAAS,GAAG;AACV,UAAM,aAAa,CAAC;AACpB,kBAAc,WAAW;AACzB,UAAM,MAAM,UAAU;AAAA,EACxB;AACF;AAEA,eAAsB,WAA0B;AAC9C,QAAM,QAAQ,SAAS,eAAe,KAAK;AAC3C,MAAI,CAAC,MAAO;AACZ,QAAM,MAAM,UAAU;AACtB,MAAI,YAAa,eAAc,WAAW;AAC1C,QAAM,WAAW,OAAO,MAAM,eAAe;AAC7C,MAAI,mBAAmB,QAAQ;AAC/B,gBAAc,YAAY,WAAW,QAAQ;AAC7C,YAAU;AACZ;AAEA,OAAO,WAAW;AAElB,eAAsB,aAA4B;AAChD,gBAAc,WAAW;AACzB,QAAM,QAAQ,SAAS,eAAe,KAAK;AAC3C,MAAI,MAAO,OAAM,MAAM,UAAU;AACnC;AAEA,OAAO,aAAa;", + "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] } diff --git a/ui/globals.d.ts b/ui/globals.d.ts index 9def89c66..bbb03c3a2 100644 --- a/ui/globals.d.ts +++ b/ui/globals.d.ts @@ -23,6 +23,7 @@ declare global { // state objects api: string; // ui/startup.ts subpath: string; // ui/startup.ts + initStartup?: () => void; // ui/startup.ts opts: Record; // ui/ui.ts localization?: Record; // ui/ui.ts titles?: Record; // ui/ui.ts diff --git a/ui/loader.ts b/ui/loader.ts index c20b241bc..21c254828 100644 --- a/ui/loader.ts +++ b/ui/loader.ts @@ -112,6 +112,16 @@ async function createSplash() { .catch((err) => error(`getMOTD: ${err}`)); log('loadGradioUi'); + + const splashMonitor = setInterval(() => { + const splashVisible = !!document.getElementById('splash'); + if (splashVisible) { + log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) }); + } else { + log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) }); + clearInterval(splashMonitor); + } + }, 2500); } window.onload = createSplash; diff --git a/ui/script.ts b/ui/script.ts index c262c0857..1df7e355f 100644 --- a/ui/script.ts +++ b/ui/script.ts @@ -139,6 +139,7 @@ const ignoreElementsSet = new Set(ignoreElements); const ignoreClasses = ['wrap']; let mutationTimer: ReturnType | undefined; +let mutationTS: number | undefined; let validMutations = []; async function mutationCallback(mutations) { @@ -152,9 +153,12 @@ async function mutationCallback(mutations) { } if (validMutations.length < 1) return; - if (mutationTimer) clearTimeout(mutationTimer); + if (mutationTimer) clearTimeout(mutationTimer); // bounce mutationTimer = setTimeout(async () => { + const ts = Date.now() - mutationTS; + if (!executedOnLoaded && (ts > 1000)) log('onUiLoaded delayed', { ts, prompts: anyPromptExists() }); if (!executedOnLoaded && anyPromptExists()) { // execute once + log('onUiLoaded', ts); executedOnLoaded = true; executeCallbacks(uiLoadedCallbacks); } @@ -174,6 +178,7 @@ async function mutationCallback(mutations) { document.addEventListener('DOMContentLoaded', () => { log('DOMContentLoaded'); + mutationTS = Date.now(); gradioObserver = new MutationObserver(mutationCallback); gradioObserver.observe(gradioApp(), { childList: true, subtree: true, attributes: false }); }); diff --git a/ui/startup.ts b/ui/startup.ts index 2e79a64a8..65d506c2f 100644 --- a/ui/startup.ts +++ b/ui/startup.ts @@ -27,20 +27,24 @@ window.api = '/sdapi/v1'; window.subpath = ''; const startupPromises: Promise[] = []; -let ok = false; +let optsReady = false; +let initialized = false; async function waitForOpts() { // make sure all of the ui is ready and options are loaded const t0 = performance.now(); let t1 = performance.now(); while (true) { - if (t1 - t0 > 120000) { + if (t1 - t0 > 15000) { + log('waitForOpts delayed', t1 - t0); + } + if (t1 - t0 > 60000) { log('waitForOpts timeout'); break; } if (window.opts && Object.keys(window.opts).length > 0) { - ok = window.opts.theme_type === 'Modern' ? 'uiux_separator_appearance' in window.opts : true; - if (ok) { + optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true; + if (optsReady) { log('waitForOpts', Math.round(t1 - t0)); timer('waitForOpts', t1 - t0); break; @@ -66,7 +70,9 @@ async function updateSubpath() { log('API', { url: window.api }); } -async function initStartup() { +export async function initStartup() { + if (initialized) return; + initialized = true; const t0 = performance.now(); log('initGradio', Math.round(t0 - appStartTime)); timer('initGradio', t0 - appStartTime); @@ -126,6 +132,8 @@ async function initStartup() { onUiLoaded(initStartup); onUiReady(() => log('uiReady')); +window.initStartup = initStartup; + // onAfterUiUpdate(() => log('evt onAfterUiUpdate')); // onUiLoaded(() => log('evt onUiLoaded')); // onOptionsChanged(() => log('evt onOptionsChanged')); From d23faa1f32e2900e2bcc2c0aadd288c4a6fa7d16 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 9 Sep 2026 19:22:38 +0200 Subject: [PATCH 170/270] dlss batch processing and setup logging Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 4 +-- extensions-builtin/sdnext-modernui | 2 +- scripts/dlss/controller_cli.py | 6 ++-- scripts/dlss/controller_srv.py | 14 ++++----- scripts/dlss/framegen.py | 15 ++++------ scripts/dlss/render.py | 46 ++++++++++++++++-------------- scripts/dlss/supersample.py | 4 +-- scripts/dlss_ext.py | 37 ++++++++++++++++++------ ui/js/login.js | 3 ++ 9 files changed, 76 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c18adf53..adbe101e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,8 +48,8 @@ Plus inevitable bug-fixes... - **DLSS** - add DLSS support for: *NeuralRender, SuperSample and FrameGen* dlls 5 caused quite a stir, but combined with generative ai it becomes a nice tool - - available via *extras -> dlss* as part of generate workflow or as a standalone *processing* workflow - *todo*: video support will be added in the future + - available as part of image/video generate workflows via *extras -> dlss* + or as a standalone *processing* workflow - *note*: requires nvidia rtx gpu, windows platform and compatible gpu drivers but...it can be used from wsl2: unpack required package on windows host and you can access it from the wsl2 environment - *install*: requires [DLSS 5 Visual Enhancer](https://github.com/Merserk/dlss5-visual-enhancer/releases/tag/v7.0) diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index b3e6c8f75..dbef993e1 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit b3e6c8f75cf65b19a3c3309c2fb6a69336471625 +Subproject commit dbef993e1a95cfd39a99c4ccbef8d1e0322500be diff --git a/scripts/dlss/controller_cli.py b/scripts/dlss/controller_cli.py index f50a97696..368c664a7 100644 --- a/scripts/dlss/controller_cli.py +++ b/scripts/dlss/controller_cli.py @@ -164,7 +164,7 @@ class DLSSController: log.trace(f'DLSS controller start: result={response.get("result")}') return True - def _send(self, request: dict, timeout: float = 60.0): + def _send(self, request: dict, timeout: float = 300.0): process = self.process if process is None or process.stdin is None or process.stdout is None: return None @@ -208,7 +208,7 @@ class DLSSController: log.trace(f'DLSS controller stray output: {raw!r}') continue # skip any non-JSON noise emitted before the JSON response line - def call(self, pkg_path: str, command: str, kwargs: dict, timeout: float = 60.0) -> dict: + def call(self, pkg_path: str, command: str, kwargs: dict, timeout: float = 600.0) -> dict: with self.lock: if not self.ensure_installed(pkg_path): return { 'status': 'error', 'result': None, 'error': { 'code': 'not_installed', 'message': 'controller is not installed' } } @@ -217,7 +217,7 @@ class DLSSController: encoded_kwargs = { key: _encode_value(value) for key, value in kwargs.items() } request = { 'request_id': str(uuid.uuid4()), 'command': command, 'args': [], 'kwargs': encoded_kwargs } if debug: - log.trace(f'DLSS controller request: command={command}') + log.trace(f'DLSS controller request: command={command} timeout={timeout}') response = self._send(request, timeout=timeout) if response is None: return { 'status': 'error', 'result': None, 'error': { 'code': 'not_ready', 'message': 'controller is not responding' } } diff --git a/scripts/dlss/controller_srv.py b/scripts/dlss/controller_srv.py index 44117c248..fc920030c 100644 --- a/scripts/dlss/controller_srv.py +++ b/scripts/dlss/controller_srv.py @@ -113,7 +113,7 @@ def _dispatch_command(command: str, request_id: str, args: tuple[Any, ...], kwar if command == "render": images = kwargs.get("images") if images is None: - raise StandaloneError("invalid_arguments", "Missing required 'images' argument for render command.") + raise StandaloneError("invalid_arguments", "NeuralRender: missing required images") options = _coerce_options(kwargs.get("options"), default=RenderOptions(), option_type=RenderOptions) result = DLSSNeuralRenderer()(np.asarray(images), options) return _response(request_id, status="ok", result=result, diagnostics={"shape": list(result.shape)}) @@ -121,7 +121,7 @@ def _dispatch_command(command: str, request_id: str, args: tuple[Any, ...], kwar if command == "upscale": images = kwargs.get("images") if images is None: - raise StandaloneError("invalid_arguments", "Missing required 'images' argument for upscale command.") + raise StandaloneError("invalid_arguments", "SuperSample: missing required images") options = _coerce_options(kwargs.get("options"), default=UpscaleOptions(), option_type=UpscaleOptions) result = DLSSSuperSample()(np.asarray(images), options) return _response(request_id, status="ok", result=result, diagnostics={"shape": list(result.shape)}) @@ -129,16 +129,16 @@ def _dispatch_command(command: str, request_id: str, args: tuple[Any, ...], kwar if command == "framegen": frames = kwargs.get("frames") if frames is None: - raise StandaloneError("invalid_arguments", "Missing required 'frames' argument for framegen command.") + raise StandaloneError("invalid_arguments", "FrameGen: missing required frames") source_fps = kwargs.get("source_fps") target_fps = kwargs.get("target_fps") if source_fps is None or target_fps is None: - raise StandaloneError("invalid_arguments", "framegen requires both 'source_fps' and 'target_fps'.") + raise StandaloneError("invalid_arguments", "FrameGen: missing source/target FPS") options = _coerce_options(kwargs.get("options"), default=InterpolationOptions(), option_type=InterpolationOptions) result = DLSSFrameGen()(np.asarray(frames), source_fps, target_fps, options) return _response(request_id, status="ok", result=result, diagnostics={"shape": list(result.shape)}) - raise StandaloneError("invalid_arguments", f"Unsupported controller command: {command!r}") + raise StandaloneError("invalid_arguments", f"Controller: unsupported command: {command!r}") def _controller_worker(request_queue: mp.Queue, response_queue: mp.Queue, busy: Any, current_request_id: Any, current_command: Any) -> None: @@ -279,7 +279,7 @@ class ControllerClient: return {"request_id": "shutdown", "status": "ok", "result": {"shutdown": True}, "error": None, "diagnostics": {}} response = self._send_and_wait("shutdown") if self.process.is_alive(): - self.process.join(timeout=5.0) + self.process.join(timeout=10.0) return response def close(self) -> None: @@ -289,7 +289,7 @@ class ControllerClient: pass if self.process is not None and self.process.is_alive(): self.process.terminate() - self.process.join(timeout=5.0) + self.process.join(timeout=10.0) def __enter__(self) -> "ControllerClient": return self.start() diff --git a/scripts/dlss/framegen.py b/scripts/dlss/framegen.py index 4dda189b0..dfb07ac4d 100644 --- a/scripts/dlss/framegen.py +++ b/scripts/dlss/framegen.py @@ -83,7 +83,7 @@ class DLSSFrameGen: options.validate() batch, _, height, width = validate_nchw(frames, name="frames") if width < 64 or height < 64: - raise StandaloneError("invalid_dimensions", "Frame interpolation requires frames at least 64x64 pixels.") + raise StandaloneError("invalid_dimensions", "FrameGen: invalid resolution") source_rate = resolve_target_rate(source_fps) target_rate = resolve_target_rate(target_fps) own_controller = controller or JobController() @@ -93,9 +93,7 @@ class DLSSFrameGen: capabilities = probe_frame_interpolation_capabilities(options.ai_gpu_uuid) log.debug(f'DLSSFrameGen: capabilities={capabilities}') if not capabilities.available: - raise StandaloneError( - "feature_unavailable", - "DLSS Frame Generation is unavailable. " + capabilities.detail, + raise StandaloneError("feature_unavailable", "FrameGen: unavailable. " + capabilities.detail, ) plan = choose_interpolation_plan( source_rate, @@ -115,10 +113,7 @@ class DLSSFrameGen: expected = output_frame_count(Fraction(batch, 1) / source_rate, target_rate) if len(result) != expected: log.error(f'DLSSFrameGen: result length={len(result)} expected={expected}') - raise StandaloneError( - "invalid_native_output", - f"Interpolation produced {len(result)} frames; expected {expected}.", - ) + raise StandaloneError("invalid_native_output", f"FrameGen: interpolation produced {len(result)} frames; expected {expected}.") output = np.stack([rgba_to_rgb_nchw(item.rgba)[0] for item in result], axis=0) log.debug(f'DLSSFrameGen: output={output.shape}') self.diagnostics = { @@ -134,7 +129,7 @@ class DLSSFrameGen: raise except Exception as exc: log.error(f'DLSSFrameGen: unexpected exception {exc}') - raise StandaloneError("processing_failed", f"DLSS frame interpolation failed: {exc}") from exc + raise StandaloneError("processing_failed", f"FrameGen: failed: {exc}") from exc self.last_report = { "input_shape": tuple(frames.shape), "output_shape": tuple(output.shape), @@ -182,7 +177,7 @@ class DLSSFrameGen: candidates: list[_TimedFrame] = [] for source in source_frames: if controller.cancel.is_set(): - raise StandaloneError("cancelled", "Frame interpolation was cancelled.") + raise StandaloneError("cancelled", "FrameGen: cancelled") items = [source] for stage in stages: next_items: list[_TimedFrame] = [] diff --git a/scripts/dlss/render.py b/scripts/dlss/render.py index 4e34b6e65..faa548a02 100644 --- a/scripts/dlss/render.py +++ b/scripts/dlss/render.py @@ -77,9 +77,10 @@ class DLSSNeuralRenderer: log.info('DLSSNeuralRenderer: call') options = options or RenderOptions() options.validate() - batch, _, height, width = validate_nchw(images, name="images") + batch, _channels, height, width = validate_nchw(images, name="images") + log.debug(f'DLSSNeuralRenderer: input={images.shape}') if width < 64 or height < 64: - raise StandaloneError("invalid_dimensions", "DLSS Neural Rendering requires images at least 64x64 pixels.") + raise StandaloneError("invalid_dimensions", "NeuralRender: invalid resolution") output_width, output_height = resolve_output_size(width, height, options.upscaling_factor) own_controller = controller or JobController() log.debug(f'DLSSNeuralRenderer: controller={own_controller}') @@ -93,37 +94,38 @@ class DLSSNeuralRenderer: factor, mode = resolve_upscaling_mode(options.upscaling_factor) native_settings = resolve_native_settings(options.source_options()) session_diagnostics: list[dict[str, Any]] = [] + session = DLSSFrameSession( + input_width=width, + input_height=height, + output_width=output_width, + output_height=output_height, + frame_count=batch, + warmup_frames=options.warmup_frames, + factor=factor, + mode=mode, + native_settings=native_settings, + gpu=gpu, + runtime_bundle=prepared.runtime_bundle, + controller=active_controller, + ) + log.debug(f'DLSSNeuralRenderer: session={session}') for index in range(batch): if active_controller.cancel.is_set(): - raise StandaloneError("cancelled", "Neural rendering was cancelled.") + raise StandaloneError("cancelled", "NeuralRender: cancelled.") try: - session = DLSSFrameSession( - input_width=width, - input_height=height, - output_width=output_width, - output_height=output_height, - frame_count=1, - warmup_frames=options.warmup_frames, - factor=factor, - mode=mode, - native_settings=native_settings, - gpu=gpu, - runtime_bundle=prepared.runtime_bundle, - controller=active_controller, - ) - log.debug(f'DLSSNeuralRenderer: session={session}') rgb = nchw_image_to_hwc(images, index, name="images") rgba = rgb_to_rgba(rgb) render_input = resize_fit(rgba, session.render_width, session.render_height) motion = np.zeros((session.render_height, session.render_width, 2), dtype=np.float16) + log.debug(f'DLSSNeuralRenderer: index={index} processes={render_input.shape}') processed, _ = session.process( - index=0, + index=index, rgba=render_input, motion=motion, reset=True, pts=0, ) - log.debug(f'DLSSNeuralRenderer: processed={processed.shape}') + log.debug(f'DLSSNeuralRenderer: index={index} processed={processed.shape}') outputs.append(rgba_to_rgb_nchw(processed)[0]) session_diagnostics.append({ "render_width": session.render_width, @@ -134,12 +136,12 @@ class DLSSNeuralRenderer: }) for l in session.worker_logs or []: log.debug(f'DLSSNeuralRenderer worker: {l}') - session.close() except Exception as e: log.error(f'DLSSNeuralRenderer: exception {e}') if session is not None and not session.closed: session.abort() raise + session.close() self.diagnostics = { "gpu": dict(gpu), "runtime_bundle": prepared.runtime_bundle, @@ -149,7 +151,7 @@ class DLSSNeuralRenderer: raise except Exception as exc: log.error(f'DLSSNeuralRenderer: unexpected exception {exc}') - raise StandaloneError("processing_failed", f"DLSS Neural Rendering failed: {exc}") from exc + raise StandaloneError("processing_failed", f"NeuralRender failed: {exc}") from exc result = np.ascontiguousarray(np.stack(outputs, axis=0)) self.last_report = { "input_shape": tuple(images.shape), diff --git a/scripts/dlss/supersample.py b/scripts/dlss/supersample.py index cf874ed29..6feac58a6 100644 --- a/scripts/dlss/supersample.py +++ b/scripts/dlss/supersample.py @@ -86,7 +86,7 @@ class DLSSSuperSample: log.debug(f'DLSSSuperSample: session={session}') for index in range(batch): if active_controller.cancel.is_set(): - raise StandaloneError("cancelled", "Upscale was cancelled.") + raise StandaloneError("cancelled", "SuperSample: cancelled.") frame = nchw_image_to_hwc(images, index, name="images") worker_input = srgb_to_worker(frame) worker_output = session.process_frame(worker_input) @@ -104,7 +104,7 @@ class DLSSSuperSample: raise except Exception as exc: log.error(f'DLSSSuperSample: unexpected exception {exc}') - raise StandaloneError("processing_failed", f"RTX Video upscaling failed: {exc}") from exc + raise StandaloneError("processing_failed", f"SuperSample: failed: {exc}") from exc result = np.ascontiguousarray(np.stack(outputs, axis=0)) self.last_report = { "input_shape": tuple(images.shape), diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index 3df979471..b34707396 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -8,7 +8,7 @@ from scripts.dlss import controller_cli as c debug = os.environ.get('SD_DLSS_DEBUG', None) is not None -FPS_CHOICES = ['23.976', '24', '25', '29.97', '30', '50', '59.94', '60', '90', '119.88', '120', '144', '165', '180', '240', '360', '480'] +FPS_CHOICES = ['23.976', '25', '29.97', '30', '50', '59.94', '60', '90', '119.88', '120', '144', '165', '180', '240', '360', '480'] def create_ui(parent): @@ -158,7 +158,15 @@ def supersample(pkg_path, images, ss_vsr_quality, ss_size_mode, ss_scale_factor, 'height': int(ss_height), 'aspect_lock': False, } - response = c.controller.call(pkg_path, 'upscale', { 'images': c.images_to_nchw(images), 'options': options }) + frames = c.images_to_nchw(images) + if debug: + log.trace(f'DLSS: method=SuperSample input={frames.shape} options={options}') + response = c.controller.call( + pkg_path, + 'upscale', + { 'images': frames, 'options': options }, + timeout=300.0, + ) if response.get('status') != 'ok': error = response.get('error') or {} log.error(f'DLSS: {error.get("message")}') @@ -184,7 +192,15 @@ def neuralrender(pkg_path, images, nr_style, nr_intensity, nr_local_tone, nr_loc 'automatic_mask': bool(nr_automatic_mask), 'dlss_model_preset': nr_model_preset, } - response = c.controller.call(pkg_path, 'render', { 'images': c.images_to_nchw(images), 'options': options }) + frames = c.images_to_nchw(images) + if debug: + log.trace(f'DLSS: method=NeuralRender input={frames.shape} options={options}') + response = c.controller.call( + pkg_path, + 'render', + { 'images': frames, 'options': options }, + timeout=600.0, + ) if response.get('status') != 'ok': error = response.get('error') or {} log.error(f'DLSS: {error.get("message")}') @@ -202,10 +218,13 @@ def framegen(pkg_path, images, fg_source_fps, fg_target_fps, fg_engine): log.warning('DLSS: FrameGen requires at least two frames, skipping') return None options = { 'ai_gpu_uuid': 'auto', 'engine': fg_engine } + frames = c.images_to_nchw(images) + if debug: + log.trace(f'DLSS: method=FrameGen input={frames.shape} options={options}') response = c.controller.call( pkg_path, 'framegen', - { 'frames': c.images_to_nchw(images), 'source_fps': fg_source_fps, 'target_fps': fg_target_fps, 'options': options }, - timeout=120.0, + { 'frames': frames, 'source_fps': fg_source_fps, 'target_fps': fg_target_fps, 'options': options }, + timeout=300.0, ) if response.get('status') != 'ok': error = response.get('error') or {} @@ -249,8 +268,8 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe ss_width = int(ss_width) ss_height = int(ss_height) ss_scale_factor = float(ss_scale_factor) - fg_source_fps = float(fg_source_fps) - fg_target_fps = float(fg_target_fps) + fg_source_fps = str(fg_source_fps) + fg_target_fps = str(fg_target_fps) images = [] originals = [] @@ -300,13 +319,15 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe current_images = output t.ts('framegen', t0) - log.debug(f'DLSS: images={len(images)} {t.summary(min_time=0)}') + log.debug(f'DLSS: frames={len(images)} {t.summary(min_time=0)}') pp.images = images pp.originals = originals return pp class DLSSScript(scripts_manager.Script): + video_capable = scripts_manager.AlwaysVisible + def title(self): return 'nVidia DLSS' diff --git a/ui/js/login.js b/ui/js/login.js index 02fb71fc3..0ff90ce39 100644 --- a/ui/js/login.js +++ b/ui/js/login.js @@ -34,6 +34,9 @@ function forceLogin() { document.body.appendChild(form); const status = form.querySelector('#loginStatus'); + if (!status) { + console.error('forceLogin', 'loginStatus element not found'); + } form.addEventListener('submit', (event) => { event.preventDefault(); From df163f3f350bad674913b6faeec534eb1697a8ae Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 09:03:07 +0200 Subject: [PATCH 171/270] fix prompt enhance api with vision Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 33 +++++++++++++++--------------- cli/api-enhance.py | 3 ++- modules/api/helpers.py | 1 + modules/api/models.py | 8 ++++---- modules/api/process.py | 3 ++- scripts/prompt_enhance/options.py | 8 ++++++++ scripts/prompt_enhance/template.py | 7 ++++--- scripts/prompt_enhance_ext.py | 7 +++---- ui/startup.ts | 6 +++--- 9 files changed, 44 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index adbe101e5..a78ec0779 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-09-09 +## Update for 2026-09-10 -### Highlights for 2026-09-09 +### Highlights for 2026-09-10 *What's New*? Well, code-wise, this is a big one... First, a-lot-of-optimizations: @@ -23,7 +23,7 @@ Plus inevitable bug-fixes... [Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) -### Details for 2026-09-09 +### Details for 2026-09-10 - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) @@ -109,24 +109,25 @@ Plus inevitable bug-fixes... - new articles: *Attention, Modular-Pipelines* - updated: *LoRA, MiniMax* - **Fixes** - - prompt: unnecessary secondary prompt if same - - ui: js fetch exception handling + - api: prompt enhance with vision + - compile: keep model compiled state - detailer: handling of stop/skip/pause - - rife: cleanup dead code, thanks @Anai-Guo + - log: ansi color handling + - lora: cleanup tags + - lucida: handle requirements - lumina-dimoo: attention-kwargs, thanks @Anai-Guo - network: improve type/version lookup - - lora: cleanup tags - - xyz grid: apply bool values - - vdm scheduler: fix steps, thanks @zjn20030811 - - openvino: optimize recompile checks and lora loading - - log: ansi color handling - - compile: keep model compiled state - - prompt: cache checks when cfg changes - - lucida: handle requirements - - vae: fetch scale factor from the model - - todo: remove dead code, thanks @Anai-Guo - offline: honor offline mode for more models, thanks @ryanmeador + - openvino: optimize recompile checks and lora loading - prompt enhance: cloud models use correct system prompt + - prompt: cache checks when cfg changes + - prompt: unnecessary secondary prompt if same + - rife: cleanup dead code, thanks @Anai-Guo + - todo: remove dead code, thanks @Anai-Guo + - ui: js fetch exception handling + - vae: fetch scale factor from the model + - vdm scheduler: fix steps, thanks @zjn20030811 + - xyz grid: apply bool values ## Update for 2026-08-26 diff --git a/cli/api-enhance.py b/cli/api-enhance.py index 0acb7d1ab..f84201375 100755 --- a/cli/api-enhance.py +++ b/cli/api-enhance.py @@ -59,6 +59,7 @@ def enhance(args): # pylint: disable=redefined-outer-name options['model'] = str(args.model) if args.image: options['image'] = encode(args.image) + options['use_vision'] = True response = post('/sdapi/v1/prompt-enhance', options) return response @@ -72,6 +73,6 @@ if __name__ == "__main__": parser.add_argument('--image', type=str, default=None, required=False, help='optional input image') parser.add_argument('--nsfw', type=bool, action=argparse.BooleanOptionalAction, required=False, help='nsfw allowed') args = parser.parse_args() - log.info(f'api-upscale: {args}') + log.info(f'api-enhance: {args}') result = enhance(args) log.info(result) diff --git a/modules/api/helpers.py b/modules/api/helpers.py index f5087e5e8..f3db5de09 100644 --- a/modules/api/helpers.py +++ b/modules/api/helpers.py @@ -46,6 +46,7 @@ def decode_base64_to_image(encoding, quiet=False): decoded = base64.b64decode(encoding) data = io.BytesIO(decoded) image = Image.open(data) + image = image.convert('RGB') return image except Exception as e: log.warning(f'API cannot decode image: {e}') diff --git a/modules/api/models.py b/modules/api/models.py index eeb36e9ae..fb44567a1 100644 --- a/modules/api/models.py +++ b/modules/api/models.py @@ -366,11 +366,11 @@ class ReqPromptEnhance(BaseModel): repetition_penalty: Optional[float] = Field(title="Repetition penalty", default=None, description="Penalizes repeated tokens to reduce repetition (1.0=no penalty)") top_k: Optional[int] = Field(title="Top K", default=None, description="Limits token selection to the K most likely candidates") top_p: Optional[float] = Field(title="Top P", default=None, description="Nucleus sampling threshold (0-1)") - thinking: bool = Field(title="Thinking", default=False, description="Enable thinking/reasoning mode") - keep_thinking: bool = Field(title="Keep thinking", default=False, description="Keep thinking tokens in output") - use_vision: bool = Field(title="Use vision", default=True, description="Use vision if model supports it") + thinking: Optional[bool] = Field(title="Thinking", default=False, description="Enable thinking/reasoning mode") + keep_thinking: Optional[bool] = Field(title="Keep thinking", default=False, description="Keep thinking tokens in output") + use_vision: Optional[bool] = Field(title="Use vision", default=True, description="Use vision if model supports it") prefill: Optional[str] = Field(title="Prefill", default=None, description="Text to prefill the model response with") - keep_prefill: bool = Field(title="Keep prefill", default=False, description="Keep prefill text in the output") + keep_prefill: Optional[bool] = Field(title="Keep prefill", default=False, description="Keep prefill text in the output") custom_args: Optional[str] = Field(title="Custom args", default=None, description="Custom arguments for the model") process_words: Optional[str] = Field(title="Banned words", default=None, description="List of words to process") semantic_threshold: Optional[float] = Field(title="Semantic threshold", default=None, description="Semantic similarity threshold for processed words") diff --git a/modules/api/process.py b/modules/api/process.py index 19b712ad6..c25da7cca 100644 --- a/modules/api/process.py +++ b/modules/api/process.py @@ -226,6 +226,7 @@ class APIProcess: if len(instance) == 0: raise HTTPException(status_code=500, detail="Prompt enhancement script not found") instance = instance[0] + decoded = decode_base64_to_image(req.image) if req.image else None prompt = instance.enhance( model=model, prompt=req.prompt, @@ -244,7 +245,7 @@ class APIProcess: use_vision=req.use_vision, prefill=req.prefill or '', keep_prefill=req.keep_prefill, - image=decode_base64_to_image(req.image) if req.image else None, + image=decoded, seed=seed, nsfw=req.nsfw, custom_args=req.custom_args, diff --git a/scripts/prompt_enhance/options.py b/scripts/prompt_enhance/options.py index 4f7bef4b2..785b2af80 100644 --- a/scripts/prompt_enhance/options.py +++ b/scripts/prompt_enhance/options.py @@ -144,6 +144,12 @@ class Options: Keep the result faithful to the original prompt and the intended image. Do not add unrelated concepts, non-visual commentary, or fluff. ''') + t2i_noprompt: str = textwrap.dedent('''\ + You are an expert AI image prompt engineer. + Create an original, imaginative and visually rich prompt for image generation. + Be Creative! + Use concrete, image-generation language and avoid unrelated fluff or commentary. + ''') i2i_prompt: str = textwrap.dedent('''\ You are an expert AI image prompt engineer. You will receive an image and a user prompt for editing or refinement. @@ -159,6 +165,7 @@ class Options: Base the prompt on what is present in the image, its style, and its atmosphere. Use concrete, image-generation language and avoid unrelated fluff or commentary. ''') + t2v_prompt: str = textwrap.dedent('''\ You are an expert AI video prompt engineer. You will receive a user prompt for video generation. @@ -185,6 +192,7 @@ class Options: Specify subject and camera movement, scene transitions, and temporal dynamics. Use concrete, video-generation language and avoid unrelated fluff or commentary. ''') + nsfw_ok: str = textwrap.dedent('''\ NSFW, nudity and explicit content and language are allowed. ''') diff --git a/scripts/prompt_enhance/template.py b/scripts/prompt_enhance/template.py index b59154f53..e800cd834 100644 --- a/scripts/prompt_enhance/template.py +++ b/scripts/prompt_enhance/template.py @@ -85,15 +85,16 @@ def set_template( has_image = image is not None and isinstance(image, Image.Image) is_video = module == 'video' - debug_log(f'Prompt enhance template: module={module} prompt={has_prompt} image={has_image} video={is_video} model="{model}" nsfw={nsfw} processor={has_processor}') + debug_log(f'Prompt enhance template: module={module} prompt={has_prompt} image={has_image} video={is_video} model="{model}" nsfw={nsfw} processor={has_processor} cloud={is_cloud_model(model)}') + """ if has_image: if is_cloud_model(model): pass - elif options.processor is None: + elif not has_processor: log.error('Prompt enhance: image not supported by model') return prompt if prompt is not None else '' # Return original text part if image cannot be processed - + """ if has_image: chat_template = get_image_template(system, prompt, options, nsfw, has_prompt, has_processor, is_video, image) else: diff --git a/scripts/prompt_enhance_ext.py b/scripts/prompt_enhance_ext.py index 9c11545d5..1386f38bc 100644 --- a/scripts/prompt_enhance_ext.py +++ b/scripts/prompt_enhance_ext.py @@ -325,11 +325,8 @@ class PromptEnhanceScript(scripts_manager.Script): # Strip symbols from model name if present model = get_model_repo_from_display(model) if model else self.options.default prompt = prompt or (self.prompt.value if self.prompt else "") # Check if self.prompt is None - image = None if use_vision and is_vision_model(model): # handle vision toggle image = image or self.image - if image is None: - use_vision = False prefix = prefix or '' suffix = suffix or '' min_tokens = min_tokens or self.options.min_tokens @@ -363,7 +360,9 @@ class PromptEnhanceScript(scripts_manager.Script): # Only process images if vision is enabled and model supports it if use_vision and is_vision_model(model): current_image = self.get_image(image) - debug_log(f'Prompt enhance: image={current_image}') + if current_image is None: + use_vision = False + debug_log(f'Prompt enhance: image={current_image} use_vision={use_vision}') # Check if vision was requested but no image is available if use_vision and is_vision_model(model) and current_image is None: diff --git a/ui/startup.ts b/ui/startup.ts index 65d506c2f..3fb1e7f32 100644 --- a/ui/startup.ts +++ b/ui/startup.ts @@ -35,9 +35,6 @@ async function waitForOpts() { const t0 = performance.now(); let t1 = performance.now(); while (true) { - if (t1 - t0 > 15000) { - log('waitForOpts delayed', t1 - t0); - } if (t1 - t0 > 60000) { log('waitForOpts timeout'); break; @@ -50,6 +47,9 @@ async function waitForOpts() { break; } } + if (t1 - t0 > 15000) { + log('waitForOpts delayed', Math.round(t1 - t0)); + } await sleep(100); t1 = performance.now(); } From b0c21c5448eaf04548b20c8cd1795623eb61de7f Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 10:50:52 +0200 Subject: [PATCH 172/270] dlss xyz grid Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/image/grid.py | 1 + modules/processing.py | 3 +- scripts/dlss_ext.py | 97 +++++++++++++++++++++++++++--------- scripts/xyz/xyz_grid_draw.py | 2 + scripts/xyz_grid_on.py | 2 + ui/dist/sdnext.mjs | 6 +-- ui/dist/sdnext.mjs.map | 4 +- ui/gallery.ts | 1 + 9 files changed, 87 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a78ec0779..019c22a42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ Plus inevitable bug-fixes... dlls 5 caused quite a stir, but combined with generative ai it becomes a nice tool - available as part of image/video generate workflows via *extras -> dlss* or as a standalone *processing* workflow + or via xyz grid - *note*: requires nvidia rtx gpu, windows platform and compatible gpu drivers but...it can be used from wsl2: unpack required package on windows host and you can access it from the wsl2 environment - *install*: requires [DLSS 5 Visual Enhancer](https://github.com/Merserk/dlss5-visual-enhancer/releases/tag/v7.0) diff --git a/modules/image/grid.py b/modules/image/grid.py index 455d1c8d1..e387270a0 100644 --- a/modules/image/grid.py +++ b/modules/image/grid.py @@ -80,6 +80,7 @@ def image_grid(imgs: list, batch_size=1, rows: int | None = None, cols: int | No for i, img in enumerate(params.imgs): if img is not None: grid.paste(img, box=(i % params.cols * w, i // params.cols * h)) + grid.is_grid = True # flag image as grid return grid except Exception as e: log.error(f'Grid: images={imgs} {e}') diff --git a/modules/processing.py b/modules/processing.py index e6b3b195f..ad407b004 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -352,7 +352,7 @@ def process_samples(p: StableDiffusionProcessing, samples): method = p.color_correction_method if p.color_correction_method is not None else getattr(shared.opts, 'color_correction_method', 'histogram') image = apply_color_correction(p.color_corrections[i], image, method=method) - if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner): + if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner) and not getattr(p, 'is_grid', False): pp = scripts_manager.PostprocessImageArgs(image) p.scripts.postprocess_image(p, pp) if pp.image is not None: @@ -364,6 +364,7 @@ def process_samples(p: StableDiffusionProcessing, samples): image = pp.image[-1] else: image = pp.image + grading_params = processing_grading.GradingParams( brightness=getattr(p, 'grading_brightness', 0.0), contrast=getattr(p, 'grading_contrast', 0.0), diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index b34707396..73d3513a6 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -7,8 +7,12 @@ from modules import shared, devices, processing, timer, errors, scripts_manager, from scripts.dlss import controller_cli as c +registered = False debug = os.environ.get('SD_DLSS_DEBUG', None) is not None FPS_CHOICES = ['23.976', '25', '29.97', '30', '50', '59.94', '60', '90', '119.88', '120', '144', '165', '180', '240', '360', '480'] +NR_STYLES = ['None', 'Default', 'Natural', 'Cinematic'] +NR_MODELS = ['None','Default', 'J', 'K', 'L', 'M'] +NR_PRESETS = ['Default', 'Preset #1', 'Preset #2', 'Preset #3'] def create_ui(parent): @@ -25,24 +29,25 @@ def create_ui(parent): with gr.Accordion('DLSS NeuralRender', open=False, elem_id='dlss_nn'): with gr.Row(): nr_enabled = gr.Checkbox(label='NR enable', value=False, elem_id='dlss_nr_enabled') - nr_append = gr.Checkbox(label='Append result', value=True, elem_id='dlss_nr_append') + nr_append = gr.Checkbox(label='NR append result', value=True, elem_id='dlss_nr_append') + with gr.Row(): + nr_style = gr.Dropdown(label='NR style', choices=NR_STYLES, value='Default', elem_id='dlss_nr_style') + nr_preset = gr.Dropdown(label='NR preset', choices=NR_PRESETS, value='Default', elem_id='dlss_nr_preset') + nr_model_preset = gr.Dropdown(label='NR model', choices=NR_MODELS, value='Default', elem_id='dlss_nr_model_preset') with gr.Row(): - nr_style = gr.Dropdown(label='NR style', choices=['Default', 'Natural', 'Cinematic'], value='Default', elem_id='dlss_nr_style') nr_intensity = gr.Slider(label='NR intensity', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_intensity') - nr_upscaling_factor = gr.Dropdown(label='NR upscaling factor', choices=["1.0", "1.5", "1.724", "2.0", "3.0"], value="1.0", elem_id='dlss_nr_upscaling_factor') - with gr.Row(): - nr_preset = gr.Dropdown(label='NR preset', choices=['Default', 'Preset #1', 'Preset #2', 'Preset #3'], value='Default', elem_id='dlss_nr_preset') - nr_model_preset = gr.Dropdown(label='NR model', choices=['Default', 'J', 'K', 'L', 'M'], value='Default', elem_id='dlss_nr_model_preset') - with gr.Row(): nr_local_tone = gr.Slider(label='NR tone strength', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_local_tone') + with gr.Row(): nr_local_structure = gr.Slider(label='NR local structure', minimum=0.0, maximum=2.0, step=0.05, value=1.0, elem_id='dlss_nr_local_structure') nr_skin_structure = gr.Slider(label='NR skin structure', minimum=-1.0, maximum=2.0, step=0.05, value=-1.0, elem_id='dlss_nr_skin_structure') - nr_automatic_mask = gr.Checkbox(label='Automatic mask', value=False, elem_id='dlss_nr_automatic_mask') + with gr.Row(): + nr_upscaling_factor = gr.Dropdown(label='NR upscaling factor', choices=["1.0", "1.5", "1.724", "2.0", "3.0"], value="1.0", elem_id='dlss_nr_upscaling_factor') + nr_automatic_mask = gr.Checkbox(label='NR automatic mask', value=False, elem_id='dlss_nr_automatic_mask') with gr.Accordion('DLSS SuperSample', open=False, elem_id='dlss_ss'): with gr.Row(): - ss_enabled = gr.Checkbox(label='SR enable', value=False, elem_id='dlss_ss_enabled') - ss_append = gr.Checkbox(label='Append result', value=True, elem_id='dlss_ss_append') + ss_enabled = gr.Checkbox(label='SS enable', value=False, elem_id='dlss_ss_enabled') + ss_append = gr.Checkbox(label='SS append result', value=True, elem_id='dlss_ss_append') with gr.Row(): ss_vsr_quality = gr.Dropdown(label='SS VSR quality', choices=["1: Low", "2: Medium", "3: High", "4: Ultra"], value="4: Ultra", type='value', elem_id='dlss_ss_vsr_quality') with gr.Row(): @@ -252,24 +257,30 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe if debug: log.trace(f'DLSS: path="{pkg_path}" args={args} kwargs={kwargs}') + update = 'none' if hasattr(pp, 'images') and pp.images is not None and len(pp.images) > 0: + update = 'images' inputs = pp.images elif hasattr(pp, 'image') and pp.image is not None: + update = 'image' inputs = [pp.image] else: return None # cast to appropriate types - nr_intensity = float(nr_intensity) - nr_local_tone = float(nr_local_tone) - nr_local_structure = float(nr_local_structure) - nr_skin_structure = float(nr_skin_structure) - nr_upscaling_factor = float(nr_upscaling_factor) - ss_width = int(ss_width) - ss_height = int(ss_height) - ss_scale_factor = float(ss_scale_factor) - fg_source_fps = str(fg_source_fps) - fg_target_fps = str(fg_target_fps) + nr_style = str(getattr(p, 'nr_style', nr_style)) + nr_preset = str(getattr(p, 'nr_preset', nr_preset)) + nr_model_preset = str(getattr(p, 'nr_model_preset', nr_model_preset)) + nr_intensity = float(getattr(p, 'nr_intensity', nr_intensity)) + nr_local_tone = float(getattr(p, 'nr_local_tone', nr_local_tone)) + nr_local_structure = float(getattr(p, 'nr_local_structure', nr_local_structure)) + nr_skin_structure = float(getattr(p, 'nr_skin_structure', nr_skin_structure)) + nr_upscaling_factor = float(getattr(p, 'nr_upscaling_factor', nr_upscaling_factor)) + ss_width = int(getattr(p, 'ss_width', ss_width)) + ss_height = int(getattr(p, 'ss_height', ss_height)) + ss_scale_factor = float(getattr(p, 'ss_scale_factor', ss_scale_factor)) + fg_source_fps = str(getattr(p, 'fg_source_fps', fg_source_fps)) + fg_target_fps = str(getattr(p, 'fg_target_fps', fg_target_fps)) images = [] originals = [] @@ -291,6 +302,8 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe current_images = output t.ts('supersample', t0) + if nr_style == 'None' or nr_model_preset == 'None': + nr_enabled = False if nr_enabled: t0 = time.time() if p: @@ -320,13 +333,19 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe t.ts('framegen', t0) log.debug(f'DLSS: frames={len(images)} {t.summary(min_time=0)}') - pp.images = images + if update == 'images': + pp.images = images + elif update == 'image' and len(images) > 0: + pp.image = images[-1] pp.originals = originals return pp class DLSSScript(scripts_manager.Script): - video_capable = scripts_manager.AlwaysVisible + def __init__(self): + super().__init__() + self.video_capable = scripts_manager.AlwaysVisible + self.register() def title(self): return 'nVidia DLSS' @@ -339,11 +358,41 @@ class DLSSScript(scripts_manager.Script): def ui(self, _is_img2img): return create_ui(self.parent) + def register(self): # register xyz grid elements + global registered # pylint: disable=global-statement + if registered: + return + registered = True + def apply_field(field): + def fun(p, x, xs): # pylint: disable=unused-argument + setattr(p, field, x) + self.run(p) + return fun + + import sys + xyz_classes = [v for k, v in sys.modules.items() if 'xyz_grid_classes' in k] + if xyz_classes and len(xyz_classes) > 0: + xyz_classes = xyz_classes[0] + options = [ + xyz_classes.AxisOption("[DLSS] NR style", str, apply_field("nr_style"), choices=lambda: NR_STYLES), + xyz_classes.AxisOption("[DLSS] NR preset", str, apply_field("nr_preset"), choices=lambda: NR_PRESETS), + xyz_classes.AxisOption("[DLSS] NR model", str, apply_field("nr_model_preset"), choices=lambda: NR_MODELS), + xyz_classes.AxisOption("[DLSS] NR intensity", float, apply_field("nr_intensity")), + xyz_classes.AxisOption("[DLSS] NR local tone", float, apply_field("nr_local_tone")), + xyz_classes.AxisOption("[DLSS] NR local structure", float, apply_field("nr_local_structure")), + xyz_classes.AxisOption("[DLSS] NR skin structure", float, apply_field("nr_skin_structure")), + ] + for option in options: + if option not in xyz_classes.axis_options: + xyz_classes.axis_options.append(option) + def postprocess_image(self, p: processing.StableDiffusionProcessing, pp: scripts_manager.PostprocessImageArgs, *args, **kwargs): - # postprocess_image is intended to modify single image in-place so not suited for dlss - pass + if p.xyz: + pp = dlss(p, pp, *args, **kwargs) def postprocess(self, p: processing.StableDiffusionProcessing, pp: processing.Processed, *args, **kwargs): # pylint: disable=arguments-differ,unused-argument + if p.xyz: # do not postprocessing when running in xyz mode + return _pp = dlss(p, pp, *args, **kwargs) # postprocess triggers after initial images have already been saved if _pp is not None and hasattr(_pp, 'images') and _pp.images is not None: diff --git a/scripts/xyz/xyz_grid_draw.py b/scripts/xyz/xyz_grid_draw.py index 10477fc7c..2f6271bbc 100644 --- a/scripts/xyz/xyz_grid_draw.py +++ b/scripts/xyz/xyz_grid_draw.py @@ -117,6 +117,7 @@ def draw_xyz_grid(p, xs, ys, zs, x_labels, y_labels, z_labels, cell, draw_legend continue if (not no_grid or include_sub_grids) and images.check_grid_size(to_process): grid = images.image_grid(to_process, rows=len(ys)) + p.is_grid = True if draw_legend: grid = images.draw_grid_annotations(grid, w, h, x_texts, y_texts, margin_size, title=z_texts[i]) processed_result.images.insert(i, grid) @@ -124,6 +125,7 @@ def draw_xyz_grid(p, xs, ys, zs, x_labels, y_labels, z_labels, cell, draw_legend processed_result.all_seeds.insert(i, processed_result.all_seeds[idx0]) processed_result.infotexts.insert(i, processed_result.infotexts[idx0]) if len(zs) > 1 and not no_grid and images.check_grid_size(processed_result.images[:len(zs)]): # create grid-of-grids + p.is_grid = True grid = images.image_grid(processed_result.images[:len(zs)], rows=1) processed_result.images.insert(0, grid) processed_result.all_prompts.insert(0, processed_result.all_prompts[0]) diff --git a/scripts/xyz_grid_on.py b/scripts/xyz_grid_on.py index 7fef27dc8..b6e09ff30 100644 --- a/scripts/xyz_grid_on.py +++ b/scripts/xyz_grid_on.py @@ -387,6 +387,7 @@ class XYZGridScript(scripts_manager.Script): pc.extra_generation_params["Fixed Y Values"] = ", ".join([str(y) for y in ys]) info = processing.create_infotext(pc, pc.all_prompts, pc.all_seeds, pc.all_subseeds, grid=f'{len(xs)}x{len(ys)}') grid_infotext.append(info) + if ix == 0 and iy == 0 and iz == 0 and len(zs) > 1: # create main grid info text pc.extra_generation_params = copy(pc.extra_generation_params) if z_opt.label != 'Nothing': @@ -396,6 +397,7 @@ class XYZGridScript(scripts_manager.Script): pc.extra_generation_params["Fixed Z Values"] = ", ".join([str(z) for z in zs]) info = processing.create_infotext(pc, pc.all_prompts, pc.all_seeds, pc.all_subseeds, grid=f'{len(zs)}x{len(xs)}x{len(ys)}') grid_infotext.insert(0, info) + t1 = time.time() return processed, t1-t0 diff --git a/ui/dist/sdnext.mjs b/ui/dist/sdnext.mjs index 2f470d032..5762e52f3 100644 --- a/ui/dist/sdnext.mjs +++ b/ui/dist/sdnext.mjs @@ -16144,9 +16144,6 @@ async function waitForOpts() { const t0 = performance.now(); let t1 = performance.now(); while (true) { - if (t1 - t0 > 15e3) { - log("waitForOpts delayed", t1 - t0); - } if (t1 - t0 > 6e4) { log("waitForOpts timeout"); break; @@ -16159,6 +16156,9 @@ async function waitForOpts() { break; } } + if (t1 - t0 > 15e3) { + log("waitForOpts delayed", Math.round(t1 - t0)); + } await sleep(100); t1 = performance.now(); } diff --git a/ui/dist/sdnext.mjs.map b/ui/dist/sdnext.mjs.map index 00c7b538f..09dadd45d 100644 --- a/ui/dist/sdnext.mjs.map +++ b/ui/dist/sdnext.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist/jquery.js", "../js/iframeResizer.js", "../../node_modules/.pnpm/exifr@7.1.3/node_modules/exifr/dist/full.umd.js", "../../node_modules/.pnpm/wheel@1.0.0/node_modules/wheel/index.js", "../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js", "../../node_modules/.pnpm/amator@1.1.0/node_modules/amator/index.js", "../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/index.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/kinetic.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeTextSelectionInterceptor.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/transform.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeSvgController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeDomController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/index.js", "../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist-module/wrappers/jquery.node-module-wrapper.js", "../vendor.ts", "../logger.ts", "../authWrap.ts", "../timers.ts", "../script.ts", "../changelog.ts", "../control.ts", "../extraNetworks.ts", "../generationParams.ts", "../imageParams.ts", "../notification.ts", "../progressBar.ts", "../dynamicUI.ts", "../ui.ts", "../inputAccordion.ts", "../indexdb.ts", "../logMonitor.ts", "../settings.ts", "../monitor.ts", "../promptChecker.ts", "../js/sha256.ts", "../gallery.ts", "../imageViewer.ts", "../autocomplete_xn.ts", "../autocomplete.ts", "../setHints.ts", "../contextMenus.ts", "../uiConfig.ts", "../loader.ts", "../legacy.ts", "../startup.ts", "../extensions.ts", "../dragDrop.ts", "../civitai.ts", "../guidance.ts", "../timesheet.ts", "../history.ts", "../storage.ts", "../aspectRatioOverlay.ts", "../resolutionLock.ts", "../editAttention.ts", "../../node_modules/.pnpm/jquery-sparkline@2.4.0/node_modules/jquery-sparkline/jquery.sparkline.js", "../gpu.ts"], - "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 2500);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', t1 - t0);\n }\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], - "mappings": "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", + "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 2500);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], + "mappings": "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", "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] } diff --git a/ui/gallery.ts b/ui/gallery.ts index 5c588a897..67d3b9eb9 100644 --- a/ui/gallery.ts +++ b/ui/gallery.ts @@ -325,6 +325,7 @@ class SimpleProgressBar { } update(loaded, max) { + // log('galleryUpdate', { loaded, max }); this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`; this.#text.textContent = `${loaded}/${max}`; if (!this.#visible) { From 799f10f49d1f279ae573fb7d6e653426bf8a4876 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 12:29:46 +0200 Subject: [PATCH 173/270] fix list vs str Signed-off-by: Vladimir Mandic --- modules/shared_defaults.py | 6 +++--- modules/ui_extra_networks.py | 2 ++ modules/ui_guidance.py | 3 +++ modules/ui_settings.py | 5 +++-- ui/dist/sdnext.mjs | 2 +- ui/dist/sdnext.mjs.map | 4 ++-- ui/extraNetworks.ts | 2 +- 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/modules/shared_defaults.py b/modules/shared_defaults.py index e9b0d980f..b15077190 100644 --- a/modules/shared_defaults.py +++ b/modules/shared_defaults.py @@ -46,13 +46,13 @@ def get_default_modes(cmd_opts, mem_stat): if devices.backend == "zluda": default_sdp_options = ['Math'] - default_cross_attention = ['Dynamic attention'] + default_cross_attention = 'Dynamic attention' elif devices.backend == "rocm": agent = devices.get_hip_agent() if agent.gfx_version < 0x1100: - default_cross_attention = ['Dynamic attention'] # only RDNA2 and older GPUs needs this + default_cross_attention = 'Dynamic attention' # only RDNA2 and older GPUs needs this elif devices.backend in {"cpu", "mps"}: - default_cross_attention = ['Dynamic attention'] + default_cross_attention = 'Dynamic attention' if devices.get_optimal_device_name() != "cpu": os.environ.setdefault('SDNQ_USE_OPENVINO_MM', '0') diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index 45ac9d01b..09f1f3356 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -27,6 +27,8 @@ refresh_time = 0 extra_pages = shared.extra_networks debug = log.trace if os.environ.get('SD_EN_DEBUG', None) is not None else lambda *args, **kwargs: None debug('Trace: EN') + +card_empty = '
    ' card_full = '''
    diff --git a/modules/ui_guidance.py b/modules/ui_guidance.py index 820080cf1..5aa41e794 100644 --- a/modules/ui_guidance.py +++ b/modules/ui_guidance.py @@ -110,7 +110,10 @@ def create_guidance_inputs(tab): standard_args = args_base + args_legacy def update_stored(component, name): + if component is None or name is None: + return _stored_args[name] = component + for component in modular_args: label = getattr(component, 'label', None) value = getattr(component, 'value', None) diff --git a/modules/ui_settings.py b/modules/ui_settings.py index af3874d93..d8033642f 100644 --- a/modules/ui_settings.py +++ b/modules/ui_settings.py @@ -258,8 +258,9 @@ def create_ui(disabled_tabs=None): item for item in shared.opts.data_labels.items() if item[1].section is not None and item[1].section[0] == section_id ] # find all items in this section - hidden = (section_id is None) or ('hidden' in section_id.lower()) or ('hidden' in section_text.lower()) or ('legacy' in section_id.lower()) or ('legacy' in section_text.lower()) - # log.trace(f'Settings: section="{section_id}" title="{section_text}" items={len(items)} hidden={hidden}') + hidden = (section_id is None) or ('hidden' in section_id.lower()) or ('hidden' in section_text.lower()) + for (key, _item) in items: + log.trace(f'Settings: id={section_id} text={section_text} key={key} hidden={hidden}') if hidden: for (key, _item) in items: hidden_list.append(key) diff --git a/ui/dist/sdnext.mjs b/ui/dist/sdnext.mjs index 5762e52f3..3b59a672a 100644 --- a/ui/dist/sdnext.mjs +++ b/ui/dist/sdnext.mjs @@ -10408,7 +10408,7 @@ function readCardTags(el2, tags) { textarea.value = new_prompt; updateInput(textarea); }; - if (tags.length === 0) return; + if (!tags || tags.length === 0) return; const cardTags = tags.split("|"); if (!cardTags || cardTags.length === 0) return; const tagsEl = el2.getElementsByClassName("tags")[0]; diff --git a/ui/dist/sdnext.mjs.map b/ui/dist/sdnext.mjs.map index 09dadd45d..c77aa7859 100644 --- a/ui/dist/sdnext.mjs.map +++ b/ui/dist/sdnext.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist/jquery.js", "../js/iframeResizer.js", "../../node_modules/.pnpm/exifr@7.1.3/node_modules/exifr/dist/full.umd.js", "../../node_modules/.pnpm/wheel@1.0.0/node_modules/wheel/index.js", "../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js", "../../node_modules/.pnpm/amator@1.1.0/node_modules/amator/index.js", "../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/index.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/kinetic.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeTextSelectionInterceptor.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/transform.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeSvgController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeDomController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/index.js", "../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist-module/wrappers/jquery.node-module-wrapper.js", "../vendor.ts", "../logger.ts", "../authWrap.ts", "../timers.ts", "../script.ts", "../changelog.ts", "../control.ts", "../extraNetworks.ts", "../generationParams.ts", "../imageParams.ts", "../notification.ts", "../progressBar.ts", "../dynamicUI.ts", "../ui.ts", "../inputAccordion.ts", "../indexdb.ts", "../logMonitor.ts", "../settings.ts", "../monitor.ts", "../promptChecker.ts", "../js/sha256.ts", "../gallery.ts", "../imageViewer.ts", "../autocomplete_xn.ts", "../autocomplete.ts", "../setHints.ts", "../contextMenus.ts", "../uiConfig.ts", "../loader.ts", "../legacy.ts", "../startup.ts", "../extensions.ts", "../dragDrop.ts", "../civitai.ts", "../guidance.ts", "../timesheet.ts", "../history.ts", "../storage.ts", "../aspectRatioOverlay.ts", "../resolutionLock.ts", "../editAttention.ts", "../../node_modules/.pnpm/jquery-sparkline@2.4.0/node_modules/jquery-sparkline/jquery.sparkline.js", "../gpu.ts"], - "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 2500);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], - "mappings": "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", + "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 2500);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], + "mappings": "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", "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] } diff --git a/ui/extraNetworks.ts b/ui/extraNetworks.ts index 36958c925..8f03ad0e5 100644 --- a/ui/extraNetworks.ts +++ b/ui/extraNetworks.ts @@ -103,7 +103,7 @@ function readCardTags(el, tags) { updateInput(textarea); }; - if (tags.length === 0) return; + if (!tags || tags.length === 0) return; const cardTags = tags.split('|'); if (!cardTags || cardTags.length === 0) return; const tagsEl = el.getElementsByClassName('tags')[0]; From d655d9788fffc4dd56cb440e1141cc40c16d7f09 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 12:49:06 +0200 Subject: [PATCH 174/270] fix lint Signed-off-by: Vladimir Mandic --- scripts/dlss_ext.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index 73d3513a6..f7a4d7580 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -392,7 +392,7 @@ class DLSSScript(scripts_manager.Script): def postprocess(self, p: processing.StableDiffusionProcessing, pp: processing.Processed, *args, **kwargs): # pylint: disable=arguments-differ,unused-argument if p.xyz: # do not postprocessing when running in xyz mode - return + return pp _pp = dlss(p, pp, *args, **kwargs) # postprocess triggers after initial images have already been saved if _pp is not None and hasattr(_pp, 'images') and _pp.images is not None: From 1ad3a0cf28f69cd8c4f83afd2722b4557b4faf3e Mon Sep 17 00:00:00 2001 From: resonantsky Date: Thu, 10 Sep 2026 13:16:39 +0200 Subject: [PATCH 175/270] Add MIOpen logging support --- scripts/rocm/rocm_log.py | 143 +++++++++++++++++++++++++++++++++++++++ scripts/rocm/rocm_mgr.py | 29 +++++++- 2 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 scripts/rocm/rocm_log.py diff --git a/scripts/rocm/rocm_log.py b/scripts/rocm/rocm_log.py new file mode 100644 index 000000000..ba830bea2 --- /dev/null +++ b/scripts/rocm/rocm_log.py @@ -0,0 +1,143 @@ +"""Capture and report native MIOpen convolution selections.""" + +import atexit +import os +import re +import sys +import threading +import time + +from modules.logger import log + + +_ALGORITHM_PATTERN = re.compile(r"FW Chosen Algorithm:\s*([^,\s]+)") +_CHOSEN_PATTERN = re.compile(r"FW Chosen Algorithm:\s*([^,\s]+)\s*,\s*[^,]*,\s*([0-9.eE+-]+)") +_MIOPEN_PREFIX = "MIOpen(HIP):" +_logging_capture = None + + +def _forward_stderr(fd, line): + data = line if line.endswith(b"\n") else line + b"\n" + while data: + written = os.write(fd, data) + data = data[written:] + + +def _process_line(line, saved_stderr): + text = line.decode(errors="replace").rstrip("\r\n") + if not text.lstrip().startswith(_MIOPEN_PREFIX): + _forward_stderr(saved_stderr, line) + return + match = _CHOSEN_PATTERN.search(text) + if match: + log.info(f'MIOpen: algorithm={match.group(1)} time="{float(match.group(2)):.3f}ms"') + + +class MIOpenLogRedirect: + """Redirect native MIOpen diagnostics into structured informational logs.""" + + def __enter__(self): + self.read_fd, write_fd = os.pipe() + self.saved_stderr = os.dup(2) + self.saved_python_stderr = sys.stderr + self.safe_stderr = os.fdopen(os.dup(self.saved_stderr), "w", encoding=getattr(sys.stderr, "encoding", None) or "utf-8", buffering=1) + os.dup2(write_fd, 2) + os.close(write_fd) + sys.stderr = self.safe_stderr + + def read_output(): + pending = b"" + while True: + chunk = os.read(self.read_fd, 4096) + if not chunk: + break + pending += chunk + while b"\n" in pending: + line, pending = pending.split(b"\n", 1) + _process_line(line + b"\n", self.saved_stderr) + if pending: + _process_line(pending, self.saved_stderr) + + self.reader = threading.Thread(target=read_output, daemon=True) + self.reader.start() + return self + + def __exit__(self, _exc_type, _exc_value, _traceback): + os.dup2(self.saved_stderr, 2) + sys.stderr = self.saved_python_stderr + self.safe_stderr.close() + self.reader.join() + os.close(self.saved_stderr) + os.close(self.read_fd) + return False + + +def start_miopen_logging(): + """Start filtering native MIOpen diagnostics without changing the environment.""" + global _logging_capture # pylint: disable=global-statement + if _logging_capture is None: + _logging_capture = MIOpenLogRedirect() + _logging_capture.__enter__() + + +def stop_miopen_logging(): + """Stop filtering native MIOpen diagnostics and restore stderr.""" + global _logging_capture # pylint: disable=global-statement + if _logging_capture is not None: + _logging_capture.__exit__(None, None, None) + _logging_capture = None + +atexit.register(stop_miopen_logging) + + +class MIOpenLogCapture: + """Capture one native MIOpen operation and log its selected algorithm and time.""" + + def __init__(self, operation: str = "convolution", repeats: int = 1): + self.operation = operation + self.repeats = max(1, repeats) + self.lines: list[str] = [] + self.elapsed_ms = 0.0 + self.algorithms: list[str] = [] + + def __enter__(self): + self.read_fd, write_fd = os.pipe() + self.saved_stderr = os.dup(2) + self.saved_python_stderr = sys.stderr + self.safe_stderr = os.fdopen(os.dup(self.saved_stderr), "w", encoding=getattr(sys.stderr, "encoding", None) or "utf-8", buffering=1) + os.dup2(write_fd, 2) + os.close(write_fd) + sys.stderr = self.safe_stderr + self.lines = [] + self.start = time.perf_counter() + + def read_output(): + chunks = [] + while True: + chunk = os.read(self.read_fd, 4096) + if not chunk: + break + chunks.append(chunk) + self.lines.extend(b"".join(chunks).decode(errors="replace").splitlines()) + + self.reader = threading.Thread(target=read_output, daemon=True) + self.reader.start() + return self + + def __exit__(self, _exc_type, _exc_value, _traceback): + self.elapsed_ms = (time.perf_counter() - self.start) * 1000 / self.repeats + os.dup2(self.saved_stderr, 2) + sys.stderr = self.saved_python_stderr + self.safe_stderr.close() + os.close(self.saved_stderr) + self.reader.join(timeout=2) + os.close(self.read_fd) + self.algorithms = [match.group(1) for line in self.lines if (match := _ALGORITHM_PATTERN.search(line))] + algorithm = self.algorithms[-1] if self.algorithms else "not emitted" + log.info(f'MIOpen: operation={self.operation} algorithm={algorithm} time="{self.elapsed_ms:.3f}ms"') + return False + + +def capture_miopen(operation: str = "convolution", repeats: int = 1): + """Return a side-effect-free context manager for one MIOpen operation.""" + return MIOpenLogCapture(operation=operation, repeats=repeats) diff --git a/scripts/rocm/rocm_mgr.py b/scripts/rocm/rocm_mgr.py index feb7e925b..3168ddb78 100644 --- a/scripts/rocm/rocm_mgr.py +++ b/scripts/rocm/rocm_mgr.py @@ -11,6 +11,7 @@ from modules.shared import opts from scripts.rocm.rocm_vars import ROCM_ENV_VARS # pylint: disable=no-name-in-module from scripts.rocm import rocm_profiles # pylint: disable=no-name-in-module +from scripts.rocm import rocm_log # pylint: disable=no-name-in-module CONFIG = Path(os.path.abspath(os.path.join('data', 'rocm.json'))) @@ -275,6 +276,16 @@ def apply_env(config: Optional[Dict[str, str]] = None) -> None: os.environ[var] = "0" +def start_miopen_logging() -> None: + """Start explicit MIOpen diagnostic capture for a scoped operation.""" + rocm_log.start_miopen_logging() + + +def stop_miopen_logging() -> None: + """Stop explicit MIOpen diagnostic capture and restore stderr.""" + rocm_log.stop_miopen_logging() + + def apply_all(names: list, values: list) -> None: config = load_config().copy() arch = config.get(_ARCH_KEY, "") @@ -520,9 +531,21 @@ def info() -> dict: } -# Apply saved config to os.environ at import time (only when ROCm is present) -if installer.torch_info.get('type', None) == 'rocm' and CONFIG.exists(): +def _is_rocm_runtime() -> bool: + if installer.torch_info.get('type', None) == 'rocm': + return True try: - apply_env() + import torch # pylint: disable=import-outside-toplevel + return bool(getattr(torch.version, 'hip', None)) + except Exception: + return False + + +# Apply saved config to os.environ at import time (only when ROCm is present). +if _is_rocm_runtime(): + try: + if CONFIG.exists(): + apply_env() + rocm_log.start_miopen_logging() except Exception as _e: log.debug(f"[rocm_mgr] Warning: failed to apply env at import: {_e}") From ba01d4fbf4ed8902ba8f6d8f107069084ddb03d8 Mon Sep 17 00:00:00 2001 From: resonantsky Date: Thu, 10 Sep 2026 13:47:46 +0200 Subject: [PATCH 176/270] Fix MIOpen logger attribute initialization --- scripts/rocm/rocm_log.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/rocm/rocm_log.py b/scripts/rocm/rocm_log.py index ba830bea2..61957b761 100644 --- a/scripts/rocm/rocm_log.py +++ b/scripts/rocm/rocm_log.py @@ -30,12 +30,19 @@ def _process_line(line, saved_stderr): return match = _CHOSEN_PATTERN.search(text) if match: - log.info(f'MIOpen: algorithm={match.group(1)} time="{float(match.group(2)):.3f}ms"') + log.info(f'MIOpen algorithm={match.group(1)} time={float(match.group(2)):.3f}ms') class MIOpenLogRedirect: """Redirect native MIOpen diagnostics into structured informational logs.""" + def __init__(self): + self.read_fd = -1 + self.saved_stderr = -1 + self.saved_python_stderr = sys.stderr + self.safe_stderr = None + self.reader = None + def __enter__(self): self.read_fd, write_fd = os.pipe() self.saved_stderr = os.dup(2) @@ -99,6 +106,12 @@ class MIOpenLogCapture: self.lines: list[str] = [] self.elapsed_ms = 0.0 self.algorithms: list[str] = [] + self.read_fd = -1 + self.saved_stderr = -1 + self.saved_python_stderr = sys.stderr + self.safe_stderr = None + self.start = 0.0 + self.reader = None def __enter__(self): self.read_fd, write_fd = os.pipe() From f7bd883140f85d0ce058434dd0f1034db959e368 Mon Sep 17 00:00:00 2001 From: resonantsky Date: Thu, 10 Sep 2026 16:07:14 +0200 Subject: [PATCH 177/270] Time display identical to others in console. --- scripts/rocm/rocm_log.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/rocm/rocm_log.py b/scripts/rocm/rocm_log.py index 61957b761..f3560a8f1 100644 --- a/scripts/rocm/rocm_log.py +++ b/scripts/rocm/rocm_log.py @@ -147,7 +147,7 @@ class MIOpenLogCapture: os.close(self.read_fd) self.algorithms = [match.group(1) for line in self.lines if (match := _ALGORITHM_PATTERN.search(line))] algorithm = self.algorithms[-1] if self.algorithms else "not emitted" - log.info(f'MIOpen: operation={self.operation} algorithm={algorithm} time="{self.elapsed_ms:.3f}ms"') + log.info(f'MIOpen: operation={self.operation} algorithm={algorithm} time={self.elapsed_ms:.3f}ms') return False From b0aa61ff21c843a0353c3ffa6c0408f26a260032 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 18:33:47 +0200 Subject: [PATCH 178/270] cleanup Signed-off-by: Vladimir Mandic --- modules/ui_settings.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/ui_settings.py b/modules/ui_settings.py index d8033642f..4d793eece 100644 --- a/modules/ui_settings.py +++ b/modules/ui_settings.py @@ -258,9 +258,9 @@ def create_ui(disabled_tabs=None): item for item in shared.opts.data_labels.items() if item[1].section is not None and item[1].section[0] == section_id ] # find all items in this section - hidden = (section_id is None) or ('hidden' in section_id.lower()) or ('hidden' in section_text.lower()) - for (key, _item) in items: - log.trace(f'Settings: id={section_id} text={section_text} key={key} hidden={hidden}') + hidden = (section_id is None) or ('hidden' in section_id.lower()) or ('hidden' in section_text.lower()) or ('legacy' in section_id.lower()) or ('legacy' in section_text.lower()) + # for (key, _item) in items: + # log.trace(f'Settings: id={section_id} text={section_text} key={key} hidden={hidden}') if hidden: for (key, _item) in items: hidden_list.append(key) From 34c6e19e868be7b13e78893c22ea803515801631 Mon Sep 17 00:00:00 2001 From: resonantsky Date: Thu, 10 Sep 2026 18:55:10 +0200 Subject: [PATCH 179/270] corrected float ms --- scripts/rocm/rocm_log.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/rocm/rocm_log.py b/scripts/rocm/rocm_log.py index f3560a8f1..c458abc1e 100644 --- a/scripts/rocm/rocm_log.py +++ b/scripts/rocm/rocm_log.py @@ -30,7 +30,7 @@ def _process_line(line, saved_stderr): return match = _CHOSEN_PATTERN.search(text) if match: - log.info(f'MIOpen algorithm={match.group(1)} time={float(match.group(2)):.3f}ms') + log.info(f'MIOpen: algorithm={match.group(1)} time={float(match.group(2)):.3f}ms') class MIOpenLogRedirect: From ecd39a672d0f9eae44cde14c1a95b6a9f9d12ab0 Mon Sep 17 00:00:00 2001 From: resonantsky Date: Thu, 10 Sep 2026 19:03:06 +0200 Subject: [PATCH 180/270] corrected float ms again --- scripts/rocm/rocm_log.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/rocm/rocm_log.py b/scripts/rocm/rocm_log.py index c458abc1e..596e9b1bf 100644 --- a/scripts/rocm/rocm_log.py +++ b/scripts/rocm/rocm_log.py @@ -30,7 +30,7 @@ def _process_line(line, saved_stderr): return match = _CHOSEN_PATTERN.search(text) if match: - log.info(f'MIOpen: algorithm={match.group(1)} time={float(match.group(2)):.3f}ms') + log.info(f'MIOpen: algorithm={match.group(1)} time={float(match.group(2)):.3f}') class MIOpenLogRedirect: From db5d427b00b5feb87b0cf6ad99d5ed3c0ce9ae37 Mon Sep 17 00:00:00 2001 From: resonantsky Date: Thu, 10 Sep 2026 19:04:57 +0200 Subject: [PATCH 181/270] corrected float ms again again --- scripts/rocm/rocm_log.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/rocm/rocm_log.py b/scripts/rocm/rocm_log.py index 596e9b1bf..8fdd1f177 100644 --- a/scripts/rocm/rocm_log.py +++ b/scripts/rocm/rocm_log.py @@ -147,7 +147,7 @@ class MIOpenLogCapture: os.close(self.read_fd) self.algorithms = [match.group(1) for line in self.lines if (match := _ALGORITHM_PATTERN.search(line))] algorithm = self.algorithms[-1] if self.algorithms else "not emitted" - log.info(f'MIOpen: operation={self.operation} algorithm={algorithm} time={self.elapsed_ms:.3f}ms') + log.info(f'MIOpen: operation={self.operation} algorithm={algorithm} time={self.elapsed_ms:.3f}') return False From 04c7b8b4b4db892d071b06ce1d3bc2c0ddb6cf00 Mon Sep 17 00:00:00 2001 From: resonantsky Date: Thu, 10 Sep 2026 19:45:18 +0200 Subject: [PATCH 182/270] added some linux best practices --- scripts/rocm/rocm_log.py | 140 +++++++++++++++++++++++++-------------- 1 file changed, 91 insertions(+), 49 deletions(-) diff --git a/scripts/rocm/rocm_log.py b/scripts/rocm/rocm_log.py index 8fdd1f177..559b82442 100644 --- a/scripts/rocm/rocm_log.py +++ b/scripts/rocm/rocm_log.py @@ -44,30 +44,48 @@ class MIOpenLogRedirect: self.reader = None def __enter__(self): - self.read_fd, write_fd = os.pipe() - self.saved_stderr = os.dup(2) - self.saved_python_stderr = sys.stderr - self.safe_stderr = os.fdopen(os.dup(self.saved_stderr), "w", encoding=getattr(sys.stderr, "encoding", None) or "utf-8", buffering=1) - os.dup2(write_fd, 2) - os.close(write_fd) - sys.stderr = self.safe_stderr + write_fd = -1 + try: + self.read_fd, write_fd = os.pipe() + self.saved_stderr = os.dup(2) + self.saved_python_stderr = sys.stderr + self.safe_stderr = os.fdopen(os.dup(self.saved_stderr), "w", encoding=getattr(sys.stderr, "encoding", None) or "utf-8", buffering=1) + os.dup2(write_fd, 2) + os.close(write_fd) + write_fd = -1 + sys.stderr = self.safe_stderr - def read_output(): - pending = b"" - while True: - chunk = os.read(self.read_fd, 4096) - if not chunk: - break - pending += chunk - while b"\n" in pending: - line, pending = pending.split(b"\n", 1) - _process_line(line + b"\n", self.saved_stderr) - if pending: - _process_line(pending, self.saved_stderr) + def read_output(): + pending = b"" + while True: + chunk = os.read(self.read_fd, 4096) + if not chunk: + break + pending += chunk + while b"\n" in pending: + line, pending = pending.split(b"\n", 1) + _process_line(line + b"\n", self.saved_stderr) + if pending: + _process_line(pending, self.saved_stderr) - self.reader = threading.Thread(target=read_output, daemon=True) - self.reader.start() - return self + self.reader = threading.Thread(target=read_output, daemon=True) + self.reader.start() + return self + except Exception: + if write_fd >= 0: + os.close(write_fd) + if self.saved_stderr >= 0: + os.dup2(self.saved_stderr, 2) + sys.stderr = self.saved_python_stderr + if self.safe_stderr is not None: + self.safe_stderr.close() + if self.reader is not None: + self.reader.join() + if self.saved_stderr >= 0: + os.close(self.saved_stderr) + if self.read_fd >= 0: + os.close(self.read_fd) + raise def __exit__(self, _exc_type, _exc_value, _traceback): os.dup2(self.saved_stderr, 2) @@ -83,8 +101,12 @@ def start_miopen_logging(): """Start filtering native MIOpen diagnostics without changing the environment.""" global _logging_capture # pylint: disable=global-statement if _logging_capture is None: - _logging_capture = MIOpenLogRedirect() - _logging_capture.__enter__() + try: + _logging_capture = MIOpenLogRedirect() + _logging_capture.__enter__() + except Exception as err: + log.warning(f'MIOpen logging: failed to start: {err}') + _logging_capture = None def stop_miopen_logging(): @@ -114,40 +136,60 @@ class MIOpenLogCapture: self.reader = None def __enter__(self): - self.read_fd, write_fd = os.pipe() - self.saved_stderr = os.dup(2) - self.saved_python_stderr = sys.stderr - self.safe_stderr = os.fdopen(os.dup(self.saved_stderr), "w", encoding=getattr(sys.stderr, "encoding", None) or "utf-8", buffering=1) - os.dup2(write_fd, 2) - os.close(write_fd) - sys.stderr = self.safe_stderr - self.lines = [] - self.start = time.perf_counter() + write_fd = -1 + try: + self.read_fd, write_fd = os.pipe() + self.saved_stderr = os.dup(2) + self.saved_python_stderr = sys.stderr + self.safe_stderr = os.fdopen( + os.dup(self.saved_stderr), + "w", + encoding=getattr(sys.stderr, "encoding", None) or "utf-8", + buffering=1, + ) + os.dup2(write_fd, 2) + os.close(write_fd) + write_fd = -1 + sys.stderr = self.safe_stderr + self.lines = [] + self.start = time.perf_counter() - def read_output(): - chunks = [] - while True: - chunk = os.read(self.read_fd, 4096) - if not chunk: - break - chunks.append(chunk) - self.lines.extend(b"".join(chunks).decode(errors="replace").splitlines()) + def read_output(): + chunks = [] + while True: + chunk = os.read(self.read_fd, 4096) + if not chunk: + break + chunks.append(chunk) + self.lines.extend(b"".join(chunks).decode(errors="replace").splitlines()) - self.reader = threading.Thread(target=read_output, daemon=True) - self.reader.start() - return self + self.reader = threading.Thread(target=read_output, daemon=True) + self.reader.start() + return self + except Exception: + if write_fd >= 0: + os.close(write_fd) + if self.saved_stderr >= 0: + os.dup2(self.saved_stderr, 2) + sys.stderr = self.saved_python_stderr + if self.safe_stderr is not None: + self.safe_stderr.close() + if self.reader is not None: + self.reader.join() + if self.saved_stderr >= 0: + os.close(self.saved_stderr) + if self.read_fd >= 0: + os.close(self.read_fd) + raise def __exit__(self, _exc_type, _exc_value, _traceback): - self.elapsed_ms = (time.perf_counter() - self.start) * 1000 / self.repeats os.dup2(self.saved_stderr, 2) sys.stderr = self.saved_python_stderr self.safe_stderr.close() os.close(self.saved_stderr) - self.reader.join(timeout=2) + + self.reader.join() os.close(self.read_fd) - self.algorithms = [match.group(1) for line in self.lines if (match := _ALGORITHM_PATTERN.search(line))] - algorithm = self.algorithms[-1] if self.algorithms else "not emitted" - log.info(f'MIOpen: operation={self.operation} algorithm={algorithm} time={self.elapsed_ms:.3f}') return False From 9a9c70c6d33c737d889232e75d0b971019987f7f Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 19:59:34 +0200 Subject: [PATCH 183/270] lora debug logging and support minimax-ref2va Signed-off-by: Vladimir Mandic --- modules/lora/lora_convert.py | 15 +++++++++++---- modules/lora/lora_load.py | 29 ++++++++++++++++++++--------- modules/lora/lora_overrides.py | 19 +++++++++++++++++-- modules/lora/networks.py | 2 +- 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/modules/lora/lora_convert.py b/modules/lora/lora_convert.py index 2c5455c00..2e565b183 100644 --- a/modules/lora/lora_convert.py +++ b/modules/lora/lora_convert.py @@ -487,28 +487,35 @@ def assign_network_names_to_compvis_modules(sd_model): sd_model = getattr(shared.sd_model, "pipe", shared.sd_model) # wrapped model compatibility network_layer_mapping = {} if hasattr(sd_model, 'text_encoder') and sd_model.text_encoder is not None: - for name, module in sd_model.text_encoder.named_modules(): + for name, module in sd_model.text_encoder.named_modules() : prefix = "lora_te1_" if hasattr(sd_model, 'text_encoder_2') else "lora_te_" network_name = prefix + name.replace(".", "_") network_layer_mapping[network_name] = module module.network_layer_name = network_name - if hasattr(sd_model, 'text_encoder_2'): + if hasattr(sd_model, 'text_encoder_2') and sd_model.text_encoder_2 is not None: for name, module in sd_model.text_encoder_2.named_modules(): network_name = "lora_te2_" + name.replace(".", "_") network_layer_mapping[network_name] = module module.network_layer_name = network_name - if hasattr(sd_model, 'unet'): + if hasattr(sd_model, 'unet') and sd_model.unet is not None: for name, module in sd_model.unet.named_modules(): network_name = "lora_unet_" + name.replace(".", "_") network_layer_mapping[network_name] = module module.network_layer_name = network_name - if hasattr(sd_model, 'transformer'): + if hasattr(sd_model, 'transformer') and sd_model.transformer is not None: for name, module in sd_model.transformer.named_modules(): network_name = "lora_transformer_" + name.replace(".", "_") network_layer_mapping[network_name] = module if "norm" in network_name and "linear" not in network_name and shared.sd_model_type != "sd3": continue module.network_layer_name = network_name + if hasattr(sd_model, 'transformer_ref') and sd_model.transformer_ref is not None: + for name, module in sd_model.transformer_ref.named_modules(): + network_name = "lora_transformer_" + name.replace(".", "_") + network_layer_mapping[network_name] = module + if "norm" in network_name and "linear" not in network_name and shared.sd_model_type != "sd3": + continue + module.network_layer_name = network_name if hasattr(sd_model, 'llm_adapter') and sd_model.llm_adapter is not None: for name, module in sd_model.llm_adapter.named_modules(): network_name = "lora_llm_adapter_" + name.replace(".", "_") diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index 7b9a0f918..41764b32f 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -56,12 +56,19 @@ def lora_dump(lora, dct): def load_safetensors(name, network_on_disk: network.NetworkOnDisk) -> network.Network | None: if not shared.sd_loaded: return None - sd_model = getattr(shared.sd_model, "pipe", shared.sd_model) + + # cached cached = lora_cache.get(name, None) if cached is not None: + if l.debug: + log.trace(f'LoRA load: name="{name}" fn="{network_on_disk.filename}" cache=True') return cached + + # native dispatch native_module = NATIVE_DISPATCH.get(shared.sd_model_type) + if l.debug: + log.trace(f'LoRA load: name="{name}" fn="{network_on_disk.filename}" native={native_module}') if native_module is not None: import importlib mod = importlib.import_module(native_module) @@ -69,6 +76,10 @@ def load_safetensors(name, network_on_disk: network.NetworkOnDisk) -> network.Ne if net is not None: lora_cache[name] = net return net + + # fallback to standard network loading + if l.debug: + log.trace(f'LoRA load: name="{name}" network_on_disk="{network_on_disk.filename}" safetensors') net = network.Network(name, network_on_disk) net.mtime = os.path.getmtime(network_on_disk.filename) state_dict = sd_models.read_state_dict(network_on_disk.filename, what='network') @@ -96,7 +107,7 @@ def load_safetensors(name, network_on_disk: network.NetworkOnDisk) -> network.Ne emb_dict[vec_name] = weight bundle_embeddings[emb_name] = emb_dict continue - if parts[0] in ["clip_l","clip_g","t5","unet","transformer"]: + if parts[0] in ["clip_l", "clip_g", "t5", "unet", "transformer", "transformer_2"]: network_part = [] while parts and parts[-1] in ["alpha","weight","lora_up","lora_down"]: network_part.insert(0,parts[-1]) @@ -147,7 +158,7 @@ def load_safetensors(name, network_on_disk: network.NetworkOnDisk) -> network.Ne if len(keys_failed_to_match) > 0: log.warning(f'Network load: type=LoRA name="{name}" type={set(network_types)} unmatched={len(keys_failed_to_match)} matched={len(matched_networks)}') if l.debug: - log.debug(f'Network load: type=LoRA name="{name}" unmatched={keys_failed_to_match}') + log.trace(f'Network load: type=LoRA name="{name}" unmatched={keys_failed_to_match}') else: log.debug(f'Network load: type=LoRA name="{name}" type={set(network_types)} keys={len(matched_networks)} dtypes={dtypes} fuse={lora_overrides.fuse_native()}:{shared.opts.lora_fuse_diffusers}') if len(matched_networks) == 0: @@ -172,13 +183,13 @@ def maybe_recompile_model(names, te_multipliers): if not recompile_model: skip_lora_load = True if len(l.loaded_networks) > 0 and l.debug: - log.debug('Model Compile: Skipping LoRa loading') + log.trace('LoRA: recompile required, skip loading') return recompile_model, skip_lora_load else: recompile_model = True shared.compiled_model_state.lora_model = [] if l.debug: - log.debug(f'Model recompile check: task={sd_models.get_diffusers_task(shared.sd_model)} recompile={recompile_model} load={skip_lora_load}') + log.trace(f'LoRA recompile check: task={sd_models.get_diffusers_task(shared.sd_model)} recompile={recompile_model} load={skip_lora_load}') if recompile_model: current_task = sd_models.get_diffusers_task(shared.sd_model) log.debug(f'Compile: task={current_task} force model reload') @@ -285,7 +296,7 @@ def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=Non if network_on_disk is not None: shorthash = getattr(network_on_disk, 'shorthash', '').lower() if l.debug: - log.debug(f'Network load: type=LoRA name="{name}" file="{network_on_disk.filename}" hash="{shorthash}" cached={name in lora_cache}') + log.trace(f'LoRA: name="{name}" fn="{network_on_disk.filename}" hash="{shorthash}" cached={name in lora_cache}') try: lora_scale = te_multipliers[i] if te_multipliers else shared.opts.extra_networks_default_multiplier lora_module = lora_modules[i] if lora_modules and len(lora_modules) > i else None @@ -330,8 +341,8 @@ def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=Non try: t1 = time.time() if l.debug: - log.trace(f'Network load: type=LoRA list={sd_model.get_list_adapters()}') - log.trace(f'Network load: type=LoRA active={sd_model.get_active_adapters()}') + log.trace(f'LoRA: list={sd_model.get_list_adapters()}') + log.trace(f'LoRA: active={sd_model.get_active_adapters()}') sd_model.set_adapters(adapter_names=lora_diffusers.diffuser_loaded, adapter_weights=lora_diffusers.diffuser_scales) sd_model.enable_lora() # set_adapters does not clear the disabled flag left by a prior removal except Exception as e: @@ -359,7 +370,7 @@ def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=Non networks.network_activate() if len(l.loaded_networks) > 0 and l.debug: - log.debug(f'Network load: type=LoRA loaded={[n.name for n in l.loaded_networks]} cache={list(lora_cache)} fuse={lora_overrides.fuse_native()}:{shared.opts.lora_fuse_diffusers}') + log.trace(f'LoRA: loaded={[n.name for n in l.loaded_networks]} cache={list(lora_cache)} fuse={lora_overrides.fuse_native()}:{shared.opts.lora_fuse_diffusers}') if recompile_model: log.info("Network load: type=LoRA model recompile required") diff --git a/modules/lora/lora_overrides.py b/modules/lora/lora_overrides.py index c7141d06f..d50229b10 100644 --- a/modules/lora/lora_overrides.py +++ b/modules/lora/lora_overrides.py @@ -1,4 +1,9 @@ +import os from modules import shared +from modules.logger import log + + +debug_log = log.debug if os.environ.get('SD_LORA_DEBUG', None) is not None else lambda *args, **kwargs: None force_hashes_diffusers = [ # forced always @@ -116,15 +121,22 @@ def disable_fuse(): from modules.lora import lora_common as l from modules.lora import lora_stack if lora_stack.select_possible(len(l.loaded_networks)) or lora_stack.select_engaged(): + debug_log('LoRA: fuse=False reason="active select mode"') return True # select flips per-layer winners against the pristine backup; a dormant select mode leaves fuse alone sd_model = getattr(shared.sd_model, 'pipe', shared.sd_model) if is_quantized(sd_model): + debug_log('LoRA: fuse=False reason="model is quantized"') return True if any(is_quantized(getattr(sd_model, name, None)) for name in fuse_components(sd_model)): + debug_log('LoRA: fuse=False reason="component is quantized"') return True if hasattr(sd_model, '_lora_partial'): + debug_log('LoRA: fuse=False reason="partial lora applied"') return True - return shared.sd_model_type in fuse_ignore + if shared.sd_model_type in fuse_ignore: + debug_log(f'LoRA: fuse=False reason="model type {shared.sd_model_type} in fuse_ignore"') + return True + return False def fuse_native(): @@ -134,4 +146,7 @@ def fuse_native(): the backup, activate and deactivate passes, since backup mode restores from a stored tensor while fuse mode restores by subtracting the delta. """ - return shared.opts.lora_fuse_native and not disable_fuse() + result = shared.opts.lora_fuse_native and not disable_fuse() + force = os.environ.get('SD_LORA_FUSE', None) is not None + debug_log(f'LoRA: native fuse={result} force={force}') + return (result or force) diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 4595bbb00..87dde344f 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -56,7 +56,7 @@ from modules.logger import log, console applied_layers: list[str] = [] refused_writes: int = 0 # deltas the modules would not take on the last activate pass; infotext reports the network as partial native_active: bool = False -default_components = ['text_encoder', 'text_encoder_2', 'text_encoder_3', 'text_encoder_4', 'unet', 'transformer', 'transformer_2', 'llm_adapter'] +default_components = ['text_encoder', 'text_encoder_2', 'text_encoder_3', 'text_encoder_4', 'unet', 'transformer', 'transformer_2', 'transformer_ref', 'llm_adapter'] class ActivationPass: From a4aefdb0935de10d0014e1c70b8552863f078113 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 21:17:45 +0200 Subject: [PATCH 184/270] minimax crop init/last to aspect ratio, update logging, prompt strip on lora parse, video prompt enhance consider image Signed-off-by: Vladimir Mandic --- modules/extra_networks.py | 1 + modules/image/sharpfin.py | 24 +++++++++++++----------- modules/lora/extra_networks_lora.py | 14 +++++++------- modules/lora/lora_load.py | 6 +++--- modules/lora/lora_overrides.py | 2 +- modules/minimax/minimax_video.py | 19 +++++++++++++++---- modules/styles.py | 7 +++++-- modules/video_models/video_minimax.py | 2 +- scripts/prompt_enhance_ext.py | 25 ++++++++++++++++--------- 9 files changed, 62 insertions(+), 38 deletions(-) diff --git a/modules/extra_networks.py b/modules/extra_networks.py index 89acf5a4e..3d57d4d7f 100644 --- a/modules/extra_networks.py +++ b/modules/extra_networks.py @@ -164,6 +164,7 @@ def parse_prompt(prompt: str | None) -> tuple[str, defaultdict[str, list[ExtraNe return "" updated_prompt = re.sub(re_extra_net, found, prompt) + updated_prompt = updated_prompt.strip(', ') return updated_prompt, res diff --git a/modules/image/sharpfin.py b/modules/image/sharpfin.py index d8c8ef4e7..dbb1a7ab5 100644 --- a/modules/image/sharpfin.py +++ b/modules/image/sharpfin.py @@ -7,6 +7,7 @@ and Triton GPU acceleration when available. Non-CUDA devices fall back to PIL/torch.nn.functional automatically. """ +import os import sys import torch from PIL import Image @@ -17,6 +18,7 @@ from modules.image.convert import to_tensor, to_pil _sharpfin_checked = False _sharpfin_ok = False _triton_ok = False +debug = log.trace if os.environ.get('SD_PROCESS_DEBUG', None) is not None else lambda *args, **kwargs: None def check_sharpfin(): @@ -104,7 +106,7 @@ def _scale_pil(scale_fn, tensor, out_res, rk, dev, dt, do_linear, src_h, src_w, return scale_fn(tensor, out_res, resize_kernel=rk, device=dev, dtype=dt, do_srgb_conversion=do_linear, use_sparse=True) except Exception: _triton_ok = False - log.info("Sharpfin: Triton sparse disabled, using dense path") + log.debug("Sharpfin: Triton sparse disabled, using dense path") return scale_fn(tensor, out_res, resize_kernel=rk, device=dev, dtype=dt, do_srgb_conversion=do_linear, use_sparse=False) # Mixed axis: split into two single-axis resizes if h > src_h: # H up, W down @@ -115,7 +117,7 @@ def _scale_pil(scale_fn, tensor, out_res, rk, dev, dt, do_linear, src_h, src_w, return scale_fn(intermediate, (h, w), resize_kernel=rk, device=dev, dtype=dt, do_srgb_conversion=do_linear, use_sparse=True) except Exception: _triton_ok = False - log.info("Sharpfin: Triton sparse disabled, using dense path") + log.debug("Sharpfin: Triton sparse disabled, using dense path") return scale_fn(intermediate, (h, w), resize_kernel=rk, device=dev, dtype=dt, do_srgb_conversion=do_linear, use_sparse=False) # H down, W up use_sparse = _want_sparse(dev, rk, True) @@ -125,7 +127,7 @@ def _scale_pil(scale_fn, tensor, out_res, rk, dev, dt, do_linear, src_h, src_w, return scale_fn(intermediate, (h, w), resize_kernel=rk, device=dev, dtype=dt, do_srgb_conversion=do_linear, use_sparse=False) except Exception: _triton_ok = False - log.info("Sharpfin: Triton sparse disabled, using dense path") + log.debug("Sharpfin: Triton sparse disabled, using dense path") intermediate = scale_fn(tensor, (h, src_w), resize_kernel=rk, device=dev, dtype=dt, do_srgb_conversion=do_linear, use_sparse=False) return scale_fn(intermediate, (h, w), resize_kernel=rk, device=dev, dtype=dt, do_srgb_conversion=do_linear, use_sparse=False) @@ -137,24 +139,24 @@ def resize_pil(image: Image.Image, target_size: tuple[int, int], *, kernel=None, is_mask = image.mode == 'L' if (image.width == w) and (image.height == h): - log.debug(f'Resize image: skip={w}x{h} fn={fn}') + # log.debug(f'Resize image: skip={w}x{h} fn={fn}') return image from modules import devices dev = device if device is not None else devices.device if not allow_sharpfin(dev): - log.debug(f'Resize image: method=PIL source={image.width}x{image.height} target={w}x{h} device={dev} fn={fn}') + debug(f'Resize image: method=PIL source={image.width}x{image.height} target={w}x{h} device={dev} fn={fn}') return image.resize((w, h), resample=Image.Resampling.LANCZOS) rk = get_kernel(kernel) if rk is None: - log.debug(f'Resize image: method=PIL source={image.width}x{image.height} target={w}x{h} kernel=None fn={fn}') + debug(f'Resize image: method=PIL source={image.width}x{image.height} target={w}x{h} kernel=None fn={fn}') return image.resize((w, h), resample=Image.Resampling.LANCZOS) from modules.sharpfin.functional import scale dt = dtype or torch.float16 do_linear = get_linearize(linearize, is_mask=is_mask) - log.debug(f'Resize image: method=sharpfin source={image.width}x{image.height} target={w}x{h} kernel={rk} device={dev} linearize={do_linear} fn={fn}') + debug(f'Resize image: method=sharpfin source={image.width}x{image.height} target={w}x{h} kernel={rk} device={dev} linearize={do_linear} fn={fn}') tensor = to_tensor(image) if tensor.dim() == 3: tensor = tensor.unsqueeze(0) @@ -182,14 +184,14 @@ def resize_tensor(tensor: torch.Tensor, target_size: tuple[int, int], *, kernel= dev = devices.device if not allow_sharpfin(dev): mode = 'bilinear' if (target_size[0] * target_size[1]) > (tensor.shape[-2] * tensor.shape[-1]) else 'area' - log.debug(f'Resize tensor: method=torch mode={mode} shape={tensor.shape} target={target_size} fn={fn}') + debug(f'Resize tensor: method=torch mode={mode} shape={tensor.shape} target={target_size} fn={fn}') inp = tensor if tensor.dim() == 4 else tensor.unsqueeze(0) result = torch.nn.functional.interpolate(inp, size=target_size, mode=mode, antialias=mode != 'area') return result.squeeze(0) if tensor.dim() == 3 else result rk = get_kernel(kernel) if rk is None: mode = 'bilinear' if (target_size[0] * target_size[1]) > (tensor.shape[-2] * tensor.shape[-1]) else 'area' - log.debug(f'Resize tensor: method=torch mode={mode} shape={tensor.shape} target={target_size} kernel=None fn={fn}') + debug(f'Resize tensor: method=torch mode={mode} shape={tensor.shape} target={target_size} kernel=None fn={fn}') inp = tensor if tensor.dim() == 4 else tensor.unsqueeze(0) result = torch.nn.functional.interpolate(inp, size=target_size, mode=mode, antialias=mode != 'area') return result.squeeze(0) if tensor.dim() == 3 else result @@ -206,10 +208,10 @@ def resize_tensor(tensor: torch.Tensor, target_size: tuple[int, int], *, kernel= both_up = (th >= src_h and tw >= src_w) if both_down or both_up: use_sparse = _triton_ok and dev.type == 'cuda' and rk.value == 'magic_kernel_sharp_2021' and both_down - log.debug(f'Resize tensor: method=sharpfin shape={tensor.shape} target={target_size} direction={both_up}:{both_down} kernel={rk} sparse={use_sparse} fn={fn}') + debug(f'Resize tensor: method=sharpfin shape={tensor.shape} target={target_size} direction={both_up}:{both_down} kernel={rk} sparse={use_sparse} fn={fn}') result = scale(tensor, target_size, resize_kernel=rk, device=dev, dtype=dt, do_srgb_conversion=linearize, use_sparse=use_sparse) else: - log.debug(f'Resize tensor: method=sharpfin shape={tensor.shape} target={target_size} direction={both_up}:{both_down} kernel={rk} sparse=False fn={fn}') + debug(f'Resize tensor: method=sharpfin shape={tensor.shape} target={target_size} direction={both_up}:{both_down} kernel={rk} sparse=False fn={fn}') intermediate = scale(tensor, (th, src_w), resize_kernel=rk, device=dev, dtype=dt, do_srgb_conversion=linearize, use_sparse=False) result = scale(intermediate, (th, tw), resize_kernel=rk, device=dev, dtype=dt, do_srgb_conversion=linearize, use_sparse=False) if squeezed: diff --git a/modules/lora/extra_networks_lora.py b/modules/lora/extra_networks_lora.py index e85771e3f..14e99351f 100644 --- a/modules/lora/extra_networks_lora.py +++ b/modules/lora/extra_networks_lora.py @@ -27,7 +27,7 @@ def get_stepwise(param, step, steps): # from https://github.com/cheald/sd-webui- if m[1][-1] <= 1.0: step = step / (max_steps - step_offset) if max_steps > 0 else 1.0 v = np.interp(step, m[1], m[0]) - debug_log(f"Network load: type=LoRA step={step} steps={max_steps} v={v}") + debug_log(f"LoRA: stepwise step={step} steps={max_steps} v={v}") return v else: return m @@ -184,7 +184,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): from modules.lora import lora_sdnq, lora_stack requested = requested + [f'stack={lora_stack.signature()}{lora_sdnq.signature()}'] # settings-only stack or mechanism changes must re-trigger activation if shared.opts.lora_force_reload: - debug_log(f'Network check: type=LoRA requested={requested} status="forced"') + debug_log(f'LoRA check requested={requested} status="forced"') return True, "forced" sd_model = shared.sd_model.pipe if hasattr(shared.sd_model, 'pipe') else shared.sd_model if sd_model is None: @@ -200,15 +200,15 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): if len(requested) != len(loaded): sd_model.loaded_loras.clear() # single-entry cache: any activation invalidates state recorded under other filter keys sd_model.loaded_loras[key] = requested - debug_log(f'Network check: type=LoRA key="{key}" requested={requested} loaded={loaded} status="num changed"') + debug_log(f'LoRA check key="{key}" requested={requested} loaded={loaded} status="num changed"') return True, "num changed" for req, load in zip(requested, loaded, strict=False): if req != load: sd_model.loaded_loras.clear() sd_model.loaded_loras[key] = requested - debug_log(f'Network check: type=LoRA key="{key}" requested={requested} loaded={loaded} status="content changed"') + debug_log(f'LoRA check key="{key}" requested={requested} loaded={loaded} status="content changed"') return True, "content changed" - debug_log(f'Network check: type=LoRA key="{key}" requested={requested} loaded={loaded} status="same"') + debug_log(f'LoRA check key="{key}" requested={requested} loaded={loaded} status="same"') return False, "none" def activate(self, p, params_list, step=0, include=None, exclude=None): # pylint: disable=arguments-differ @@ -236,7 +236,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): if debug: import sys fn = f'{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}' # pylint: disable=protected-access - debug_log(f'Network load: type=LoRA include={include} exclude={exclude} method={load_method} reason="{load_reason}" requested={requested} fn={fn}') + debug_log(f'LoRA load: include={include} exclude={exclude} method={load_method} reason="{load_reason}" requested={requested} fn={fn}') if load_method == 'diffusers': has_changed, reason = self.changed(requested) @@ -267,7 +267,7 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): log.info(f'Network unload: type=LoRA networks={[n.name for n in l.previously_loaded_networks]} mode={networks.effective_mode()}') networks.network_deactivate(include, exclude) networks.network_activate(include, exclude) - debug_log(f'Network change: type=LoRA previous={[n.name for n in l.previously_loaded_networks]} current={[n.name for n in l.loaded_networks]}') + debug_log(f'LoRA change: previous={[n.name for n in l.previously_loaded_networks]} current={[n.name for n in l.loaded_networks]}') if len(include) == 0: l.previously_loaded_networks = l.loaded_networks.copy() shared.state.end(jobid) diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index 41764b32f..6eb0fd5b1 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -62,13 +62,13 @@ def load_safetensors(name, network_on_disk: network.NetworkOnDisk) -> network.Ne cached = lora_cache.get(name, None) if cached is not None: if l.debug: - log.trace(f'LoRA load: name="{name}" fn="{network_on_disk.filename}" cache=True') + log.trace(f'LoRA: load name="{name}" fn="{network_on_disk.filename}" cache=True') return cached # native dispatch native_module = NATIVE_DISPATCH.get(shared.sd_model_type) if l.debug: - log.trace(f'LoRA load: name="{name}" fn="{network_on_disk.filename}" native={native_module}') + log.trace(f'LoRA: load name="{name}" fn="{network_on_disk.filename}" native={native_module}') if native_module is not None: import importlib mod = importlib.import_module(native_module) @@ -79,7 +79,7 @@ def load_safetensors(name, network_on_disk: network.NetworkOnDisk) -> network.Ne # fallback to standard network loading if l.debug: - log.trace(f'LoRA load: name="{name}" network_on_disk="{network_on_disk.filename}" safetensors') + log.trace(f'LoRA: load name="{name}" network_on_disk="{network_on_disk.filename}" safetensors') net = network.Network(name, network_on_disk) net.mtime = os.path.getmtime(network_on_disk.filename) state_dict = sd_models.read_state_dict(network_on_disk.filename, what='network') diff --git a/modules/lora/lora_overrides.py b/modules/lora/lora_overrides.py index d50229b10..cad8b514a 100644 --- a/modules/lora/lora_overrides.py +++ b/modules/lora/lora_overrides.py @@ -3,7 +3,7 @@ from modules import shared from modules.logger import log -debug_log = log.debug if os.environ.get('SD_LORA_DEBUG', None) is not None else lambda *args, **kwargs: None +debug_log = log.trace if os.environ.get('SD_LORA_DEBUG', None) is not None else lambda *args, **kwargs: None force_hashes_diffusers = [ # forced always diff --git a/modules/minimax/minimax_video.py b/modules/minimax/minimax_video.py index 5e4592328..85d86fd73 100644 --- a/modules/minimax/minimax_video.py +++ b/modules/minimax/minimax_video.py @@ -49,23 +49,28 @@ def unwrap_file(entry): return entry -def prepare_inputs(workflow: str | None, init_image: Image.Image | None, last_image: Image.Image | None, reference_media: list | None) -> dict: +def prepare_inputs(workflow: str | None, init_image: Image.Image | None, last_image: Image.Image | None, reference_media: list | None, width: int | None = None, height: int | None = None) -> dict: """The task args a workflow conditions on, resolved before the model load so a rejected request costs nothing.""" t_inputs = time.time() + from modules.image.resize import resize_image from modules.minimax import minimax_references if minimax_references.get_reference_caps(workflow) is not None: entries = [unwrap_file(entry) for entry in (reference_media or [])] references = minimax_references.resolve(workflow, entries, init_image) - log.debug(f'Prepare inputs: workflow={workflow} references={len(references)}') + log.debug(f'Video inputs: workflow={workflow} references={len(references)}') return {'references': references} task_args = {} if init_image is not None: + if width is not None and height is not None: + init_image = resize_image(2, init_image, width, height) # crop to aspect ratio task_args['image'] = init_image if last_image is not None: + if width is not None and height is not None: + last_image = resize_image(2, last_image, width, height) # crop to aspect ratio task_args['last_image'] = last_image if reference_media: log.warning(f'Video: op=reference workflow={workflow} references not supported, ignoring: count={len(reference_media)}') - log.debug(f'Prepare inputs: workflow={workflow} first={init_image} last={last_image}') + log.debug(f'Video inputs: workflow={workflow} first={init_image} last={last_image}') timer.video.ts('inputs', t_inputs) return task_args @@ -111,18 +116,24 @@ def generate(task_id, _ui_state, # resolved off the registry row so a bad reference is rejected before the load, the same as on the api path selected = models_def.find(engine, model) workflow = getattr(selected, 'workflow', None) - task_args = prepare_inputs(workflow, init_image, last_image, reference_media) + task_args = prepare_inputs(workflow, init_image, last_image, reference_media, width=width, height=height) workflow = load_model(model) # override workflow based on loaded model if not workflow: progress.finish_task(task_id) log.error('Video: model not loaded') return None, 'Model not loaded' + init_images = [] # only so they are available for inspection by rest of the processing + if init_image is not None: + init_images.append(init_image) + if last_image is not None: + init_images.append(last_image) p = processing.StableDiffusionProcessingVideo( sd_model=shared.sd_model, video_engine=engine, video_model=model, prompt=prompt, styles=styles, + init_images=init_images, seed=int(seed) if seed is not None else -1, steps=int(steps), width=width, diff --git a/modules/styles.py b/modules/styles.py index 6fdbb672d..f5136f1a5 100644 --- a/modules/styles.py +++ b/modules/styles.py @@ -243,12 +243,15 @@ def apply_styles_to_extra(p, style: Style): 'size', ] reference_style = get_reference_style() - extra = infotext.parse(reference_style) if shared.opts.extra_network_reference_values else {} + reference = infotext.parse(reference_style) if shared.opts.extra_network_reference_values else {} + extra = reference.copy() style_extra = apply_wildcards_to_prompt(style.extra, [style.wildcards], silent=True, p=p) style_extra = ' ' + style_extra.lower() extra.update(infotext.parse(style_extra)) extra.pop('Prompt', None) extra.pop('Negative prompt', None) + has_prompt = (style.prompt is not None) and len(style.prompt) > 2 + has_negative = (style.negative_prompt is not None) and len(style.negative_prompt) > 2 if debug_enabled: log.trace(f'Apply style extra: {extra}') @@ -284,7 +287,7 @@ def apply_styles_to_extra(p, style: Style): if debug_enabled: log.trace(f'Apply style skip: {k}={v}') skipped.append(f'{k}={v}') - log.debug(f'Apply style: name="{style.name}" params={params} settings={settings} unknown={skipped} reference={True if reference_style else False}') + log.debug(f'Apply style: name="{style.name}" prompt={has_prompt} negative={has_negative} params={params} settings={settings} unknown={skipped} reference={reference}') class StyleDatabase: diff --git a/modules/video_models/video_minimax.py b/modules/video_models/video_minimax.py index 0f69af878..658ac1c75 100644 --- a/modules/video_models/video_minimax.py +++ b/modules/video_models/video_minimax.py @@ -25,7 +25,7 @@ def apply_overrides(p, pipe, still: bool = False, audio: bool = True): while frames > max_frames: frames -= pipe.vae_frames_per_chunk if frames != getattr(p, 'frames', None): - log.debug(f'Pipeline: cls={pipe.__class__.__name__} frames={getattr(p, "frames", None)} aligned={frames}') + log.debug(f'Pipeline: cls={pipe.__class__.__name__} frames requested={getattr(p, "frames", None)} aligned={frames}') p.frames = frames p.task_args['num_frames'] = frames p.steps = max(2, p.steps) diff --git a/scripts/prompt_enhance_ext.py b/scripts/prompt_enhance_ext.py index 1386f38bc..dfb4edba6 100644 --- a/scripts/prompt_enhance_ext.py +++ b/scripts/prompt_enhance_ext.py @@ -279,14 +279,16 @@ class PromptEnhanceScript(scripts_manager.Script): def get_image(self, image): current_image = None try: - if image is not None and isinstance(image, gr.Image): + if (image is not None) and isinstance(image, list) and len(image) > 0: + current_image = image[0] + if (image is not None) and isinstance(image, gr.Image): current_image = image.value - elif image is not None and isinstance(image, Image.Image): # if image is already a PIL image + elif (image is not None) and isinstance(image, Image.Image): # if image is already a PIL image current_image = image - if current_image is not None and (current_image.width <= 64 or current_image.height <= 64): + if (current_image is not None) and (current_image.width <= 64 or current_image.height <= 64): current_image = None # Fallback to Kanvas/Control input if no image from Gradio component (e.g., when Kanvas is active) - if current_image is None and ui_control_helpers.input_source is not None: + if (current_image is None) and (ui_control_helpers.input_source is not None): if isinstance(ui_control_helpers.input_source, list) and len(ui_control_helpers.input_source) > 0: current_image = ui_control_helpers.input_source[0] elif isinstance(ui_control_helpers.input_source, Image.Image): @@ -327,6 +329,8 @@ class PromptEnhanceScript(scripts_manager.Script): prompt = prompt or (self.prompt.value if self.prompt else "") # Check if self.prompt is None if use_vision and is_vision_model(model): # handle vision toggle image = image or self.image + else: + image = None prefix = prefix or '' suffix = suffix or '' min_tokens = min_tokens or self.options.min_tokens @@ -338,7 +342,7 @@ class PromptEnhanceScript(scripts_manager.Script): thinking = thinking or self.options.thinking_mode sample = sample if sample is not None else self.options.do_sample nsfw = nsfw if nsfw is not None else True # Default nsfw to True if not provided - debug_log(f'Prompt enhance: model="{model}" model_class="{self.llm.__class__.__name__ if self.llm is not None else "not loaded"}" nsfw={nsfw} thinking={thinking} prefill="{prefill[:30] if prefill else ""}" use_vision={use_vision} image={image is not None}') + debug_log(f'Prompt enhance: model="{model}" model_class="{self.llm.__class__.__name__ if self.llm is not None else "not loaded"}" nsfw={nsfw} thinking={thinking} prefill="{prefill[:30] if prefill else ""}" vision={use_vision} image={image}') while self.busy: time.sleep(0.1) @@ -395,8 +399,10 @@ class PromptEnhanceScript(scripts_manager.Script): self.busy = True if is_cloud_model(model): - has_prompt = prompt_text is not None and len(prompt_text) > 4 + has_prompt = (prompt_text is not None) and (len(prompt_text) > 4) + has_prefill = (prefill_text is not None) and (len(prefill_text) > 4) system = get_system_prompt(system, self.options, nsfw, has_prompt=has_prompt, is_video=self.parent=='video', is_image=current_image is not None) + debug_log(f'Prompt enhance: prompt="{prompt_text}"') if 'gemini' in model: from modules.caption import gemini kwargs = { @@ -407,7 +413,7 @@ class PromptEnhanceScript(scripts_manager.Script): model_name = model.replace('google/', '') response = gemini.predict(prompt_text, current_image, model_name, system, prefill_text, thinking, kwargs) t1 = time.time() - log.info(f'Prompt enhance: model="{model}" nsfw={nsfw} time={t1-t0:.2f} prefill="{prefill_text[:20] if prefill_text else None}" response={len(response)}') + log.info(f'Prompt enhance: model="{model}" nsfw={nsfw} time={t1-t0:.2f} prompt={has_prompt} prefill={has_prefill} image={current_image} thinking={thinking} response={len(response)}') debug_log(f'Prompt enhance: response="{response}"') self.busy = False return response @@ -419,7 +425,7 @@ class PromptEnhanceScript(scripts_manager.Script): model_name = model.replace('xai/', '') response = grok.predict(prompt_text, current_image, model_name, system, prefill_text, thinking, kwargs) t1 = time.time() - log.info(f'Prompt enhance: model="{model}" nsfw={nsfw} time={t1-t0:.2f} prefill="{prefill_text[:20] if prefill_text else None}" response={len(response)}') + log.info(f'Prompt enhance: model="{model}" nsfw={nsfw} time={t1-t0:.2f} prompt={has_prompt} prefill={has_prefill} image={current_image} thinking={thinking} response={len(response)}') debug_log(f'Prompt enhance: response="{response}"') self.busy = False return response @@ -730,10 +736,11 @@ class PromptEnhanceScript(scripts_manager.Script): jobid = shared.state.begin('LLM') p.extra_generation_params['LLM'] = get_model_repo_from_display(llm_model) p.extra_generation_params['Original'] = p.prompt + image = self_image or p.init_images p.prompt = self.enhance( prompt=p.prompt, seed=p.seed, - image=self_image, + image=image, prefix=prompt_prefix, suffix=prompt_suffix, model=llm_model, From b0b0a2eb2269ec80963274117ea64e2a59a2d134 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 21:20:44 +0200 Subject: [PATCH 185/270] update changelog Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 019c22a42..4390e66eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-09-10 +## Update for 2026-09-11 -### Highlights for 2026-09-10 +### Highlights for 2026-09-11 *What's New*? Well, code-wise, this is a big one... First, a-lot-of-optimizations: @@ -23,7 +23,7 @@ Plus inevitable bug-fixes... [Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) -### Details for 2026-09-10 +### Details for 2026-09-11 - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) @@ -115,14 +115,18 @@ Plus inevitable bug-fixes... - detailer: handling of stop/skip/pause - log: ansi color handling - lora: cleanup tags + - lora: support transformer ref models - lucida: handle requirements - lumina-dimoo: attention-kwargs, thanks @Anai-Guo + - minimax: crop image to video aspect ratio - network: improve type/version lookup - offline: honor offline mode for more models, thanks @ryanmeador - openvino: optimize recompile checks and lora loading - prompt enhance: cloud models use correct system prompt + - prompt enhance: use init image for video - prompt: cache checks when cfg changes - prompt: unnecessary secondary prompt if same + - prompt: clean prompt after network parsing - rife: cleanup dead code, thanks @Anai-Guo - todo: remove dead code, thanks @Anai-Guo - ui: js fetch exception handling From 82810b6c4abb6a32884c47d713288e35b6d71ff9 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 21:36:41 +0200 Subject: [PATCH 186/270] update handle git errors Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/update.py | 67 +++++++++++++++++++++++++++++------------------ 2 files changed, 43 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4390e66eb..e74ba6e4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -130,6 +130,7 @@ Plus inevitable bug-fixes... - rife: cleanup dead code, thanks @Anai-Guo - todo: remove dead code, thanks @Anai-Guo - ui: js fetch exception handling + - update: handle git errors gracefully - vae: fetch scale factor from the model - vdm scheduler: fix steps, thanks @zjn20030811 - xyz grid: apply bool values diff --git a/modules/update.py b/modules/update.py index d958f3e7d..92f8693e9 100644 --- a/modules/update.py +++ b/modules/update.py @@ -6,6 +6,7 @@ import installer as i version = SimpleNamespace(**{ 'url': '', 'branch': '', + 'origin': '', 'current': '0000-00-00', 'chash': '0000000', 'latest': '0000-00-00', @@ -14,34 +15,50 @@ version = SimpleNamespace(**{ def get_version(): - # try: - origin = i.git('remote get-url origin') - origin = origin.splitlines()[0] - version.branch = i.git('rev-parse --abbrev-ref HEAD') - version.branch = version.branch.splitlines()[0] - version.url = origin.removesuffix('.git') + '/tree/' + version.branch + try: + origin = i.git('remote get-url origin') + origin = origin.splitlines() + if len(origin) > 0: + version.origin = origin[0] + version.url = version.origin.removesuffix('.git') + '/tree/' + version.branch + else: + version.origin = 'unknown' + i.log.warning('Version: origin URL not found') - ver = i.git('log --pretty=format:"%h %ad" -1 --date=short') - ver = ver.splitlines()[0] - version.chash, version.current = ver.split(' ') + branch = i.git('rev-parse --abbrev-ref HEAD') + branch = branch.splitlines() + if len(branch) > 0: + version.branch = branch[0] + else: + version.branch = 'unknown' + i.log.warning('Version: branch not found') - i.git('fetch') - ver = i.git(f'log origin/{version.branch} --pretty=format:"%h %ad" -1 --date=short') - ver = ver.splitlines()[0] - version.lhash, version.latest = ver.split(' ') + gitlog = i.git('log --pretty=format:"%h %ad" -1 --date=short') + gitlog = gitlog.splitlines() + if len(gitlog) > 0: + version.chash, version.current = gitlog[0].split(' ') - # except Exception as e: - # i.log.error(f'Version check failed: {e}') - i.log.info(f'Version: {vars(version)}') - latest = '
    You\'re up to date!
    ' if version.chash == version.lhash else '
    Update available!
    ' - html = f''' - -
    Current branch: {version.branch}
    -
    Current version: {version.current} hash {version.chash}
    -
    Latest version: {version.latest} hash {version.lhash}
    - {latest} - ''' - return html + i.git('fetch') + ver = i.git(f'log origin/{version.branch} --pretty=format:"%h %ad" -1 --date=short') + ver = ver.splitlines() + if len(ver) > 0 and ' ' in ver[0]: + version.lhash, version.latest = ver[0].split(' ') + + i.log.info(f'Version: {vars(version)}') + latest = '
    You\'re up to date!
    ' if version.chash == version.lhash else '
    Update available!
    ' + html = f''' + +
    Origin: {version.origin}
    +
    Current branch: {version.branch}
    +
    Current version: {version.current} hash {version.chash}
    +
    Latest version: {version.latest} hash {version.lhash}
    + {latest} + ''' + return html + except Exception as e: + i.log.error(f'Version: {e}') + html = f'
    Error while detecting version
    {str(e)}
    ' + return html def apply_update(update_rebase, update_submodules, update_extensions): From 59bb85408e509d5989dab17b224941f56b82fe01 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 22:06:11 +0200 Subject: [PATCH 187/270] dlss change defaults Signed-off-by: Vladimir Mandic --- scripts/dlss_ext.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index f7a4d7580..fc0a96053 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -29,7 +29,7 @@ def create_ui(parent): with gr.Accordion('DLSS NeuralRender', open=False, elem_id='dlss_nn'): with gr.Row(): nr_enabled = gr.Checkbox(label='NR enable', value=False, elem_id='dlss_nr_enabled') - nr_append = gr.Checkbox(label='NR append result', value=True, elem_id='dlss_nr_append') + nr_append = gr.Checkbox(label='NR append result', value=False, elem_id='dlss_nr_append') with gr.Row(): nr_style = gr.Dropdown(label='NR style', choices=NR_STYLES, value='Default', elem_id='dlss_nr_style') nr_preset = gr.Dropdown(label='NR preset', choices=NR_PRESETS, value='Default', elem_id='dlss_nr_preset') @@ -47,7 +47,7 @@ def create_ui(parent): with gr.Accordion('DLSS SuperSample', open=False, elem_id='dlss_ss'): with gr.Row(): ss_enabled = gr.Checkbox(label='SS enable', value=False, elem_id='dlss_ss_enabled') - ss_append = gr.Checkbox(label='SS append result', value=True, elem_id='dlss_ss_append') + ss_append = gr.Checkbox(label='SS append result', value=False, elem_id='dlss_ss_append') with gr.Row(): ss_vsr_quality = gr.Dropdown(label='SS VSR quality', choices=["1: Low", "2: Medium", "3: High", "4: Ultra"], value="4: Ultra", type='value', elem_id='dlss_ss_vsr_quality') with gr.Row(): From 5c7e018fb8597fd87677ac63d16032570ed9a8a7 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 10 Sep 2026 22:40:14 +0200 Subject: [PATCH 188/270] change prompt enhance defaults Signed-off-by: Vladimir Mandic --- scripts/prompt_enhance/options.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/prompt_enhance/options.py b/scripts/prompt_enhance/options.py index 785b2af80..933782fc4 100644 --- a/scripts/prompt_enhance/options.py +++ b/scripts/prompt_enhance/options.py @@ -219,10 +219,10 @@ class Options: max_delim_index: int = 60 min_tokens: int = 0 - max_tokens: int = 256 + max_tokens: int = 512 do_sample: bool = True - temperature: float = 0.6 - repetition_penalty: float = 1.2 + temperature: float = 0.75 + repetition_penalty: float = 1.05 top_k: int = 0 top_p: float = 0.0 thinking_mode: bool = False From fd0a332c77aafed6b8af6811a6dcc1aa312e091f Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 11 Sep 2026 01:05:51 +0200 Subject: [PATCH 189/270] tweaks Signed-off-by: Vladimir Mandic --- modules/gr_hijack.py | 6 +++--- modules/minimax/minimax_ui.py | 2 +- modules/shared.py | 2 +- scripts/dlss_ext.py | 9 +++++++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/modules/gr_hijack.py b/modules/gr_hijack.py index 8b6ac3e08..9b3d3cbee 100644 --- a/modules/gr_hijack.py +++ b/modules/gr_hijack.py @@ -208,13 +208,13 @@ def patch_gradio(): return {"is_generating": False, "data": [], "error": "empty response"} return response except GeneratorExit as e: - log.error(f"Gradio queue: events={len(events)} batch={batch} error: {e}") + log.error(f"Gradio queue: events={len(events)} batch={batch} reason=GeneratorExit {e}") return {"is_generating": False, "data": [None, None, None, None, "cancelled", ""], "error": None} except Exception as e: - log.error(f"Gradio queue: events={len(events)} batch={batch} error: {e}") + log.error(f"Gradio queue: events={len(events)} batch={batch} reason=Exception {e}") raise except BaseException as e: - log.error(f"Gradio queue: events={len(events)} batch={batch} error: {e}") + log.error(f"Gradio queue: events={len(events)} batch={batch} reason=BaseException {e}") raise def wrap_blocks_preprocess_data(self, fn_index: int, inputs: list, state: dict): diff --git a/modules/minimax/minimax_ui.py b/modules/minimax/minimax_ui.py index 56dbf0e65..f25143749 100644 --- a/modules/minimax/minimax_ui.py +++ b/modules/minimax/minimax_ui.py @@ -57,11 +57,11 @@ def create_ui(prompt, _negative, styles, overrides, script_inputs, mp4_fps, mp4_ model_info = next((m for m in models['MiniMax'] if m.name == model_name), None) if model_info is None or model_info.name is None or model_info.name == '' or model_info.name == 'None': return gr.update(value='none'), gr.update(visible=False), gr.update(visible=False) - log.debug(f'Selected: name="{model_info.name}" repo="{model_info.repo}" cls={model_info.repo_cls}') if model_info.workflow == 'fl2va': workflow = 'fl2va' if init_image is not None else 't2va' else: workflow = model_info.workflow + log.debug(f'Video: workflow={workflow} name="{model_info.name}" repo="{model_info.repo}" cls={model_info.repo_cls} image={init_image} selected') return gr.update(value=f'Workflow: {workflow}'), gr.update(visible=workflow != 'ref2va'), gr.update(visible=workflow == 'ref2va') def on_load(model_name: str): diff --git a/modules/shared.py b/modules/shared.py index 246105c8d..9df752130 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -211,7 +211,7 @@ def restart_server(restart=True): demo.server.should_exit = True demo.server.force_exit = True demo.close(verbose=False) - demo.server.close() + # demo.server.close() demo.fns = [] time.sleep(1) sys.tracebacklimit = 100 diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index fc0a96053..6f192c66a 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -281,12 +281,18 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe ss_scale_factor = float(getattr(p, 'ss_scale_factor', ss_scale_factor)) fg_source_fps = str(getattr(p, 'fg_source_fps', fg_source_fps)) fg_target_fps = str(getattr(p, 'fg_target_fps', fg_target_fps)) + if (p is not None) and ('video' in p.ops): # should not add video frames + nr_append = False + ss_append = False images = [] originals = [] current_images = inputs t = timer.Timer() + jobid = shared.state.begin('DLSS') + t_start = time.time() + if ss_enabled: t0 = time.time() if p: @@ -332,6 +338,9 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe current_images = output t.ts('framegen', t0) + shared.state.end(jobid) + timer.process.ts('dlss', t_start) + log.debug(f'DLSS: frames={len(images)} {t.summary(min_time=0)}') if update == 'images': pp.images = images From f12818fc74644a690e24b85b574156f3fdf2b2ad Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 11 Sep 2026 08:59:52 +0200 Subject: [PATCH 190/270] modular handle module with remote-code Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/minimax/minimax_ui.py | 11 +++++++++++ modules/modular_load.py | 9 ++++++--- pipelines/generic_transformer.py | 17 ++++++++++------- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e74ba6e4d..1ef165c55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -119,6 +119,7 @@ Plus inevitable bug-fixes... - lucida: handle requirements - lumina-dimoo: attention-kwargs, thanks @Anai-Guo - minimax: crop image to video aspect ratio + - modular: handle module with remote-code - network: improve type/version lookup - offline: honor offline mode for more models, thanks @ryanmeador - openvino: optimize recompile checks and lora loading diff --git a/modules/minimax/minimax_ui.py b/modules/minimax/minimax_ui.py index f25143749..a101f521a 100644 --- a/modules/minimax/minimax_ui.py +++ b/modules/minimax/minimax_ui.py @@ -24,6 +24,7 @@ def create_ui(prompt, _negative, styles, overrides, script_inputs, mp4_fps, mp4_ with gr.Accordion(open=True, label='Parameters', elem_id='minimax_param_accordion') as _param_accordion: with gr.Row(): width, height = ui_sections.create_resolution_inputs('minimax', default_width=1024, default_height=576, step=32) + btn_detect_image_size = ToolButton(value=ui_symbols.detect, elem_id="minimax_resize_detect_size") with gr.Row(): steps = gr.Slider(minimum=2, maximum=100, step=1, label="MiniMax steps", elem_id='minimax_steps', value=30) frames = gr.Slider(label='MiniMax frames', minimum=22, maximum=362, step=17, value=124, elem_id='minimax_frames') @@ -68,8 +69,18 @@ def create_ui(prompt, _negative, styles, overrides, script_inputs, mp4_fps, mp4_ model_info = next((m for m in models['MiniMax'] if m.name == model_name), None) minimax_video.load_model(model_info.name if model_info is not None else None) + def on_image_size(init_image): + if init_image is not None: + try: + width, height = init_image.size + return gr.update(value=width), gr.update(value=height) + except Exception: + pass + return gr.update(), gr.update() + model.change(fn=on_change, inputs=[model, init_image], outputs=[workflow, input_accordion, reference_accordion], show_progress='hidden') init_image.change(fn=on_change, inputs=[model, init_image], outputs=[workflow, input_accordion, reference_accordion], show_progress='hidden') + btn_detect_image_size.click(fn=on_image_size, inputs=[init_image], outputs=[width, height]) btn_load.click(fn=on_load, inputs=[model], outputs=[]) task_id = gr.Textbox(visible=False, value='') diff --git a/modules/modular_load.py b/modules/modular_load.py index 06245934e..3579b6f72 100644 --- a/modules/modular_load.py +++ b/modules/modular_load.py @@ -59,18 +59,21 @@ def preload_components(pipe, workflow: str | None, load_config: dict | None = No if spec is None or getattr(spec, 'default_creation_method', None) != 'from_pretrained': continue repo = getattr(spec, 'pretrained_model_name_or_path', None) - cls = getattr(spec, 'type_hint', None) + cls = getattr(spec, 'type_hint', None) or {} if not repo or cls is None: continue origin = getattr(cls, '__module__', '') or '' - cls_name = getattr(cls, '__name__', '') or '' # TODO preload: components with remote code resolve to cls none + cls_name = getattr(cls, '__name__', '') or '' subfolder = getattr(spec, 'subfolder', None) or name component = None if origin.startswith('diffusers') and ('Transformer' in cls_name or 'UNet' in cls_name): component = generic.load_transformer(repo, cls_name=cls, load_config=load_config, subfolder=subfolder, trust_remote_code=True) - elif origin.startswith('transformers') and 'text_encoder' in name: + elif origin.startswith('transformers') and ('text_encoder' in name): # shared substitution is on: the map matches class plus a substring of the repo name, so its entries have to run narrow before broad component = generic.load_text_encoder(repo, cls_name=cls, load_config=load_config, subfolder=subfolder) + if 'transformer' in name: + # fallback for component with remote-code as it does not have resolvable cls + component = generic.load_transformer(repo, cls_name=None, load_config=load_config, subfolder=subfolder, trust_remote_code=True) if component is not None: loaded[name] = component return loaded diff --git a/pipelines/generic_transformer.py b/pipelines/generic_transformer.py index 7b1900eaf..801431e15 100644 --- a/pipelines/generic_transformer.py +++ b/pipelines/generic_transformer.py @@ -48,6 +48,9 @@ def load_transformer( modules_to_not_convert = [] if modules_dtype_dict is None: modules_dtype_dict = {} + if cls_name is None: + from diffusers import AutoModel + cls_name = AutoModel offline_args = {'local_files_only': True} if shared.opts.offline_mode else {} jobid = shared.state.begin('Load DiT') try: @@ -75,11 +78,14 @@ def load_transformer( if trust_remote_code: load_args['trust_remote_code'] = True load_kwargs = {**load_args, **quant_args, **offline_args, **kwargs} - return cls_name.from_pretrained( + module = cls_name.from_pretrained( repo_id, cache_dir=shared.opts.hfcache_dir, **load_kwargs, ) + if cls_name.__name__ == 'AutoModel': + log.debug(f'Load model: transformer="{repo_id}" cls={module.__class__.__name__}') + return module local_file = None override_name = None @@ -158,13 +164,11 @@ def load_transformer( **load_kwargs, ) - # 4. default loading from diffusers repo (also the fallback when an - # incompatible override is dropped above) + # 4. default loading from local file (also the fallback when an incompatible override is dropped above) # 5. default loading from diffusers repo (also the fallback when an incompatible override is dropped above) else: transformer = load_from_repo() - # mark the dropdown selection as loaded so the slot's onchange callback - # does not force a redundant full reload for an already-consumed override + # mark the dropdown selection as loaded so the slot's onchange callback, does not force a redundant full reload for an already-consumed override if transformer is not None and override_name is not None and getattr(shared.opts, override_opt, None) == override_name: setattr(sd_unet, tracker_attr, override_name) @@ -192,8 +196,7 @@ def load_transformer( log.debug(f'Load model: transformer="{repo_id}" quant="{quant_type}" size={module_size:.3f} params={param_num:.3f} memory={module_memory}') try: - # quantized models legitimately report the storage dtype (e.g. fp8 comfy_quant - # adopted via SDNQ); the compute dtype lives in the dequantizers, not the params + # quantized models legitimately report the storage dtype (e.g. fp8 comfy_quant adopted via SDNQ); the compute dtype lives in the dequantizers, not the params if getattr(transformer, 'quantization_config', None) is None: actual_dtype = transformer.dtype if isinstance(actual_dtype, torch.dtype) and isinstance(dtype, torch.dtype) and actual_dtype != dtype: From 3f7a494b8165142504c5d837f8ce956f468af389 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 11 Sep 2026 10:12:48 +0200 Subject: [PATCH 191/270] add minimax-8bit Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 2 + modules/sd_offload_utils.py | 3 +- modules/video_models/models_def.py | 24 +++++++++++ pipelines/minimax/minimax_latents.py | 63 +++++++++++++++++----------- 4 files changed, 66 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ef165c55..8b0cd9086 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ Plus inevitable bug-fixes... LLaDA-Image is a 6.5B transformer with massive 16.3B fully-custom MoE text-encoder and optional 1.3B SigVQ conditioning model with support for text-to-image, vq-conditioned text-to-image and image-editing workflows *note* model is extremely quantization sensitive so minimum allowed quant type is `uint8` + - [MiniMax-H3](https://huggingface.co/MiniMaxAI/MiniMax-H3) update with pre-quantized `sdnq-uint8` *pruned* variants - **LoRA** - see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions *note*: lora now has its own settings section in *settings -> lora* @@ -94,6 +95,7 @@ Plus inevitable bug-fixes... - option to skip triton autotune and use default config for all triton kernels in *settings -> compute settings* *note*: this may improve initial generate time, but may also reduce performance on some models + - rocm: update `rocm` script and add detailed `miopen` logging, thanks @resonantsky - new optional transformer hooks in *settings -> compute add-ons* *PAG: Perturbed attention guidance, PAB: Pyramid attention broadcast, FBC: First Block Cache, FC: Faster Cache, LS: Layer Skip, MC: Mag Cache, TS: TaylorSeer* diff --git a/modules/sd_offload_utils.py b/modules/sd_offload_utils.py index eb43dc781..c8266a51e 100644 --- a/modules/sd_offload_utils.py +++ b/modules/sd_offload_utils.py @@ -174,7 +174,8 @@ def report_model_stats(module_name, module): size, _params = get_module_size(module) quant = getattr(module, "quantization_method", None) params = sum(p.numel() for p in module.parameters(recurse=True)) + dtype = next(module.parameters()).dtype if any(module.parameters()) else None logical = get_logical_param_count(module) - log.debug(f'Module: name={module_name} cls={module.__class__.__name__} size={size:.3f} params={params} logical={logical} quant={quant}') + log.debug(f'Module: name={module_name} cls={module.__class__.__name__} size={size:.3f} params={params} logical={logical} quant={quant} dtype={dtype}') except Exception as e: log.error(f'Module stats: name={module_name} {e}') diff --git a/modules/video_models/models_def.py b/modules/video_models/models_def.py index 370f1af82..801adced0 100644 --- a/modules/video_models/models_def.py +++ b/modules/video_models/models_def.py @@ -723,6 +723,30 @@ try: image_hijack=False, vae_hijack=False, vae_remote=False), + Model(name='MiniMax H3 Pruned SDNQ uint8', + url='https://huggingface.co/MiniMaxAI/MiniMax-H3', + repo='OzzyGT/MiniMax_H3_sdnq_8bit_pruned', + repo_cls='MiniMaxH3ModularPipeline', + workflow='fl2va', + base=True, + te_cls=None, + dit_cls=None, + te_hijack=False, + image_hijack=False, + vae_hijack=False, + vae_remote=False), + Model(name='MiniMax H3 Pruned SDNQ uint8 Ref2VA', + url='https://huggingface.co/MiniMaxAI/MiniMax-H3', + repo='OzzyGT/MiniMax_H3_sdnq_8bit_pruned', + repo_cls='MiniMaxH3ModularPipeline', + workflow='ref2va', + base=True, + te_cls=None, + dit_cls=None, + te_hijack=False, + image_hijack=False, + vae_hijack=False, + vae_remote=False), Model(name='MiniMax H3', url='https://huggingface.co/MiniMaxAI/MiniMax-H3', repo='MiniMaxAI/MiniMax-H3', diff --git a/pipelines/minimax/minimax_latents.py b/pipelines/minimax/minimax_latents.py index 576befc37..fe146fa90 100644 --- a/pipelines/minimax/minimax_latents.py +++ b/pipelines/minimax/minimax_latents.py @@ -1,7 +1,14 @@ import diffusers +from modules.logger import log + + +warned = False def unpack_latents(latents, components: diffusers.modular_pipelines.ModularPipeline, state: diffusers.modular_pipelines.BlockState): + global warned # pylint: disable=global-statement + if warned: + return latents from diffusers.modular_pipelines.minimax_h3.modular_pipeline import align_num_frames, video_latent_num_frames from modules import processing_callbacks frames = getattr(processing_callbacks.p, 'frames', 1) @@ -9,29 +16,35 @@ def unpack_latents(latents, components: diffusers.modular_pipelines.ModularPipel height = getattr(processing_callbacks.p, 'height', 1024) if frames <= 0 or width <= 0 or height <= 0: return latents - num_frames = align_num_frames(frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) - num_latent_frames = video_latent_num_frames(num_frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) - latent_height = height // components.vae_spatial_compression_ratio - latent_width = width // components.vae_spatial_compression_ratio - patch_t, patch_h, patch_w = components.patch_size - channels = components.vae_latent_channels - rows = state.latents[state.num_condition_video_rows :] - rows = rows.reshape( - -1, - num_latent_frames // patch_t, - latent_height // patch_h, - latent_width // patch_w, - channels, - patch_t, - patch_h, - patch_w, - ) - rows = rows.permute(0, 4, 1, 5, 2, 6, 3, 7) - latents = rows.reshape( - -1, - channels, - num_latent_frames, - latent_height, - latent_width, - ).contiguous() + try: + num_frames = align_num_frames(frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) + num_latent_frames = video_latent_num_frames(num_frames, components.vae_frames_per_chunk, components.vae_latents_per_chunk) + latent_height = height // components.vae_spatial_compression_ratio + latent_width = width // components.vae_spatial_compression_ratio + patch_t, patch_h, patch_w = components.patch_size + channels = components.vae_latent_channels + rows = state.latents[state.num_condition_video_rows :] + rows = rows.reshape( + -1, + num_latent_frames // patch_t, + latent_height // patch_h, + latent_width // patch_w, + channels, + patch_t, + patch_h, + patch_w, + ) + rows = rows.permute(0, 4, 1, 5, 2, 6, 3, 7) + latents = rows.reshape( + -1, + channels, + num_latent_frames, + latent_height, + latent_width, + ).contiguous() + except Exception as e: + # fails with sliced attention due to shape mismatch as state.latents only contains a subset of the full video latents + if not warned: + warned = True + log.warning(f'Video unpack latents: {e}') return latents From c3fa079aadf3bef7071bf0efbbc501432ce120f4 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 11 Sep 2026 10:24:34 +0200 Subject: [PATCH 192/270] fix dtype inspect Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 3 ++- modules/sd_offload_utils.py | 5 ++++- scripts/dlss_ext.py | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b0cd9086..08b5a96b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,8 @@ ### Highlights for 2026-09-11 *What's New*? Well, code-wise, this is a big one... -First, a-lot-of-optimizations: +First, a-lot-of-optimizations: +- updated core packages - improved **LoRA** performance and quality, especially with quantized models - newly structured **attention** mechanisms - modular pipelines with new **guidance** methods diff --git a/modules/sd_offload_utils.py b/modules/sd_offload_utils.py index c8266a51e..3ff2f4173 100644 --- a/modules/sd_offload_utils.py +++ b/modules/sd_offload_utils.py @@ -174,7 +174,10 @@ def report_model_stats(module_name, module): size, _params = get_module_size(module) quant = getattr(module, "quantization_method", None) params = sum(p.numel() for p in module.parameters(recurse=True)) - dtype = next(module.parameters()).dtype if any(module.parameters()) else None + try: + dtype = next(module.parameters(), torch.tensor([])).dtype + except Exception: + dtype = None logical = get_logical_param_count(module) log.debug(f'Module: name={module_name} cls={module.__class__.__name__} size={size:.3f} params={params} logical={logical} quant={quant} dtype={dtype}') except Exception as e: diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index 6f192c66a..404c81b88 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -105,7 +105,6 @@ def verify(pkg_path): return { 'error': 'package path not found' } if not c.controller.get_python(pkg_path): return { 'error': 'python not found in package path' } - shared.opts.dlss_pkg_path = pkg_path response = c.controller.call(pkg_path, 'verify', { 'gpu_uuid': 'auto', 'options': { 'level': 'deep' } }) if response.get('status') != 'ok': error = response.get('error') or {} @@ -121,6 +120,8 @@ def verify(pkg_path): else: checks['failed'] += 1 log.error(f'DLSS : {check}') + shared.opts.dlss_pkg_path = pkg_path + shared.opts.save() log.debug(f'DLSS: gpu={report.get("gpu", "unknown")} checks={checks}') return report From 7484aee5d40f1db32533dbca6e720be7a61343fb Mon Sep 17 00:00:00 2001 From: resonantsky Date: Fri, 11 Sep 2026 13:50:44 +0200 Subject: [PATCH 193/270] Linux quality fixes --- scripts/rocm/rocm_mgr.py | 19 +++++++++++++++---- scripts/rocm_ext.py | 26 +------------------------- 2 files changed, 16 insertions(+), 29 deletions(-) diff --git a/scripts/rocm/rocm_mgr.py b/scripts/rocm/rocm_mgr.py index 3168ddb78..0a0ec5366 100644 --- a/scripts/rocm/rocm_mgr.py +++ b/scripts/rocm/rocm_mgr.py @@ -344,6 +344,17 @@ def clear_env() -> None: log.info(f'ROCm clear_env: cleared={cleared}') +def _miopen_user_db_path() -> Path: + """Resolve the MIOpen user DB path for the current platform.""" + configured = os.environ.get("MIOPEN_USER_DB_PATH", "") + if configured: + return Path(os.path.expandvars(os.path.expanduser(configured))) + if sys.platform == "win32": + return Path.home() / ".miopen" / "db" + cache_home = os.environ.get("XDG_CACHE_HOME", str(Path.home() / ".cache")) + return Path(cache_home) / "miopen" + + def delete_config() -> None: """Delete the saved config file, clear all vars, and wipe the MIOpen user DB cache.""" import shutil # pylint: disable=import-outside-toplevel @@ -353,8 +364,8 @@ def delete_config() -> None: CONFIG.unlink() log.info(f'ROCm delete_config: deleted {CONFIG}') _cache = None - # Delete the MIOpen user DB (~/.miopen/db) - stale entries can cause solver mismatches - miopen_db = Path(os.path.expanduser('~')) / '.miopen' / 'db' + # Delete the MIOpen user DB - stale entries can cause solver mismatches. + miopen_db = _miopen_user_db_path() if miopen_db.exists(): shutil.rmtree(miopen_db, ignore_errors=True) log.info(f'ROCm delete_config: wiped MIOpen user DB at {miopen_db}') @@ -503,8 +514,8 @@ def info() -> dict: else: sdb["exists"] = False - # --- User DB (~/.miopen/db) --- - user_db_path = Path.home() / ".miopen" / "db" + # --- User DB --- + user_db_path = _miopen_user_db_path() udb = {"path": str(user_db_path), "exists": user_db_path.exists()} if user_db_path.exists(): ufiles = _user_db_summary(user_db_path) diff --git a/scripts/rocm_ext.py b/scripts/rocm_ext.py index 463b186b2..0c4db1892 100644 --- a/scripts/rocm_ext.py +++ b/scripts/rocm_ext.py @@ -47,8 +47,8 @@ class ROCmScript(scripts_manager.Script): section("ROCm / HIP") for k, v in d.get("rocm", {}).items(): row(k, v) - section("User DB (~/.miopen/db)") udb = d.get("user_db", {}) + section("User DB") row("path", udb.get("path", "")) for fname, finfo in udb.get("files", {}).items(): row(fname, finfo) @@ -72,10 +72,6 @@ class ROCmScript(scripts_manager.Script): btn_reset = gr.Button("Defaults", elem_id="rocm_btn_reset", size="sm") btn_clear = gr.Button("Clear Run Vars", elem_id="rocm_btn_clear", size="sm") btn_delete = gr.Button("Delete UserDb", variant="stop", elem_id="rocm_btn_delete", size="sm") - with gr.Row(): - btn_rdna2 = gr.Button("RDNA2 (RX 6000)", elem_id="rocm_btn_rdna2") - btn_rdna3 = gr.Button("RDNA3 (RX 7000)", elem_id="rocm_btn_rdna3") - btn_rdna4 = gr.Button("RDNA4 (RX 9000)", elem_id="rocm_btn_rdna4") _init_gemm = config.get("MIOPEN_GEMM_ENFORCE_BACKEND", "1") _init_arch = config.get(rocm_mgr._ARCH_KEY, "") _init_unavailable = rocm_profiles.UNAVAILABLE.get(_init_arch, set()) if _init_arch else set() @@ -209,30 +205,10 @@ class ROCmScript(scripts_manager.Script): result.append(gr.update(value="")) return result - def profile_fn(arch): - rocm_mgr.apply_profile(arch) - updated = rocm_mgr.load_config() - unavailable = rocm_profiles.UNAVAILABLE.get(arch, set()) - gemm_val = updated.get("MIOPEN_GEMM_ENFORCE_BACKEND", "1") - result = [gr.update(value=_build_style(unavailable, gemm_val == "1"))] - for pname in var_names: - meta = rocm_vars.ROCM_ENV_VARS[pname] - val = updated.get(pname, meta["default"]) - if meta["widget"] == "checkbox": - result.append(gr.update(value=val == "1")) - elif meta["widget"] == "dropdown": - result.append(gr.update(value=rocm_mgr._dropdown_display(val, meta["options"]))) - else: - result.append(gr.update(value=rocm_mgr._expand_venv(val))) - return result - btn_info.click(fn=_info_html, inputs=[], outputs=[info_out], show_progress='hidden') btn_apply.click(fn=apply_fn, inputs=components, outputs=[style_out] + components, show_progress='hidden') btn_reset.click(fn=reset_fn, inputs=[], outputs=[style_out] + components, show_progress='hidden') btn_clear.click(fn=clear_fn, inputs=[], outputs=[style_out] + components, show_progress='hidden') btn_delete.click(fn=delete_fn, inputs=[], outputs=[style_out] + components, show_progress='hidden') - btn_rdna2.click(fn=lambda: profile_fn("RDNA2"), inputs=[], outputs=[style_out] + components, show_progress='hidden') - btn_rdna3.click(fn=lambda: profile_fn("RDNA3"), inputs=[], outputs=[style_out] + components, show_progress='hidden') - btn_rdna4.click(fn=lambda: profile_fn("RDNA4"), inputs=[], outputs=[style_out] + components, show_progress='hidden') return components From 7d6a98bc626c56b3eb4c07eff5d7aeaf8f781c1d Mon Sep 17 00:00:00 2001 From: li-lizhe <147392333@qq.com> Date: Sat, 12 Sep 2026 09:08:48 +0800 Subject: [PATCH 194/270] fix(framepack): use text_mask.device instead of hardcoded cuda get_cu_seqlens creates a cu_seqlens tensor with device="cuda", which crashes on non-CUDA devices (e.g. Ascend NPU raises "Torch not compiled with CUDA enabled"). Create it on the same device as the input text_mask instead, which is device-agnostic. --- modules/framepack/pipeline/hunyuan_video_packed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/framepack/pipeline/hunyuan_video_packed.py b/modules/framepack/pipeline/hunyuan_video_packed.py index a5f171b5c..58ae8918a 100644 --- a/modules/framepack/pipeline/hunyuan_video_packed.py +++ b/modules/framepack/pipeline/hunyuan_video_packed.py @@ -74,7 +74,7 @@ def get_cu_seqlens(text_mask, img_len): text_len = text_mask.sum(dim=1) max_len = text_mask.shape[1] + img_len - cu_seqlens = torch.zeros([2 * batch_size + 1], dtype=torch.int32, device="cuda") + cu_seqlens = torch.zeros([2 * batch_size + 1], dtype=torch.int32, device=text_mask.device) for i in range(batch_size): s = text_len[i] + img_len From f39113c2bc6b2df40e502c52a278c61f986cfc74 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 12 Sep 2026 08:07:19 +0200 Subject: [PATCH 195/270] update changelog/todo Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 7 ++++--- TODO.md | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08b5a96b7..85d5f024d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-09-11 +## Update for 2026-09-12 -### Highlights for 2026-09-11 +### Highlights for 2026-09-12 *What's New*? Well, code-wise, this is a big one... First, a-lot-of-optimizations: @@ -24,7 +24,7 @@ Plus inevitable bug-fixes... [Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) -### Details for 2026-09-11 +### Details for 2026-09-12 - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) @@ -116,6 +116,7 @@ Plus inevitable bug-fixes... - api: prompt enhance with vision - compile: keep model compiled state - detailer: handling of stop/skip/pause + - framepack: correct device assignment, thanks @li-lizhe - log: ansi color handling - lora: cleanup tags - lora: support transformer ref models diff --git a/TODO.md b/TODO.md index e882fa82b..aaf37ebcc 100644 --- a/TODO.md +++ b/TODO.md @@ -29,14 +29,16 @@ ### Roadmap - Automated testing and integrate models repo +- [MiniMax VDN](https://huggingface.co/OpenVDN/vdn-minimax-h3) +- [MiniMax VSA](https://huggingface.co/FastVideo/FastVideo-FastH3-4-step-Preview-v1-VSA-DataFree) - Video upscaling: LTX-Upscaler +- Video upscaling: [MiniMax-Upscaler](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler) - Video capabilities to processing tab, add RIFE, upscaling (once available) - Distraction-free UI mode with prompt-only, chat-based interface - Video models: support finetunes - Incorporate [prompting guides](https://github.com/CalamitousFelicitousness/ai-prompting-guides) - Video models: use Networks/Reference instead of custom - UI Lite vs Expert mode -- Expand custom VAE support - Remove obsolete code: `olive-ai` ### OnHold From bae986e90b276c92d140d32dd22db44fdacfa795 Mon Sep 17 00:00:00 2001 From: Yifan Chen Date: Sat, 12 Sep 2026 00:08:08 -0700 Subject: [PATCH 196/270] address selection filter review feedback --- modules/ui_choices.py | 17 ----------------- modules/ui_common.py | 15 +++++++++++++++ modules/ui_definitions.py | 10 ++++------ modules/ui_sections.py | 15 +++++++-------- test/test-ui-choice-filters.py | 7 ++++++- 5 files changed, 32 insertions(+), 32 deletions(-) delete mode 100644 modules/ui_choices.py diff --git a/modules/ui_choices.py b/modules/ui_choices.py deleted file mode 100644 index f5c59a986..000000000 --- a/modules/ui_choices.py +++ /dev/null @@ -1,17 +0,0 @@ -"""Helpers for filtering display-only UI choice lists.""" - - -def filter_ui_choices(choices: list[str], preferences: list[str] | None = None, selected: str | None = None) -> tuple[list[str], bool]: - """Return choices selected for display without changing the underlying catalog. - - Empty or stale preferences leave the complete list visible. A current value is - always retained so loading a saved workflow cannot silently replace it. - """ - available = list(dict.fromkeys(choices)) - preferred = set(preferences or []) - filtered = [choice for choice in available if choice in preferred] - if not filtered: - return available, False - if selected in available and selected not in filtered: - filtered.append(selected) - return filtered, len(filtered) < len(available) diff --git a/modules/ui_common.py b/modules/ui_common.py index ad2612868..000194773 100644 --- a/modules/ui_common.py +++ b/modules/ui_common.py @@ -18,6 +18,21 @@ debug('Trace: PASTE') warn_once_set = WeakSet() +def filter_ui_choices(choices: list[str], preferences: list[str] | None = None, selected: str | None = None) -> tuple[list[str], bool]: + """Return display choices while preserving the current selection.""" + available = list(dict.fromkeys(choices)) + preferred = set(preferences or []) + filtered = [choice for choice in available if choice in preferred] + if not filtered: + return available, False + if selected in available and selected not in filtered: + filtered.append(selected) + if 'None' in filtered: + filtered.remove('None') + filtered.insert(0, 'None') + return filtered, len(filtered) < len(available) + + def gr_show(visible=True): return {"visible": visible, "__type__": "update"} diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 865e55f8e..ed06e2fac 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -596,6 +596,10 @@ def create_settings(cmd_opts): "quicksetting_sep_images": OptionInfo("

    Quicksettings

    ", "", gr.HTML), "quicksettings_list": OptionInfo(["sd_model_checkpoint"], "Quicksettings list", gr.Dropdown, lambda: {"multiselect":True, "choices": list(options_templates.keys())}), + "selections_sep_ui": OptionInfo("

    Selections

    ", "", gr.HTML), + "show_samplers": OptionInfo([], "Show samplers in user interface", gr.Dropdown, lambda: {"multiselect": True, "choices": [x.name for x in list_samplers()]}, refresh=list_samplers), + "show_upscalers": OptionInfo([], "Show upscalers in user interface", gr.Dropdown, lambda: {"multiselect": True, "choices": list_upscalers()}, refresh=refresh_upscalers), + "server_sep_ui": OptionInfo("

    Startup & Server Options

    ", "", gr.HTML), "autolaunch": OptionInfo(False, "Autolaunch browser upon startup"), "motd": OptionInfo(False, "Show MOTD"), @@ -774,12 +778,6 @@ def create_settings(cmd_opts): "disable_all_extensions": OptionInfo("none", "Disable all extensions", gr.Radio, {"choices": ["none", "user", "all"]}), })) - # --- Sampler Settings --- - options_templates.update(options_section(('sampler', "Sampler Settings"), { - "show_samplers": OptionInfo([], "Show samplers in user interface", gr.CheckboxGroup, lambda: {"choices": [x.name for x in list_samplers()]}, refresh=list_samplers), - "show_upscalers": OptionInfo([], "Show upscalers in user interface", gr.CheckboxGroup, lambda: {"choices": list_upscalers()}, refresh=refresh_upscalers), - })) - # --- Hidden Options --- options_templates.update( options_section( diff --git a/modules/ui_sections.py b/modules/ui_sections.py index 4212ffce7..19ca8c127 100644 --- a/modules/ui_sections.py +++ b/modules/ui_sections.py @@ -2,7 +2,6 @@ import gradio as gr from modules import shared, modelloader, ui_symbols, ui_common, sd_samplers from modules.logger import log from modules.ui_components import ToolButton -from modules.ui_choices import filter_ui_choices from modules.caption import caption @@ -220,7 +219,7 @@ def sampler_choices(choices=None, selected='Default', same_as_primary=False): sd_samplers.set_samplers() choices = [sampler for sampler in sd_samplers.samplers if sampler.name != 'Same as primary'] names = [choice.name if hasattr(choice, 'name') else choice for choice in choices] - visible, filtered = filter_ui_choices(names, shared.opts.show_samplers, selected) + visible, filtered = ui_common.filter_ui_choices(names, shared.opts.show_samplers, selected) if same_as_primary: visible.insert(0, 'Same as primary') value = selected if selected in visible else visible[0] @@ -229,14 +228,14 @@ def sampler_choices(choices=None, selected='Default', same_as_primary=False): def upscaler_choices(choices, selected=None): """Build display-only upscaler choices without changing available upscalers.""" - return filter_ui_choices(choices, shared.opts.show_upscalers, selected) + return ui_common.filter_ui_choices(choices, shared.opts.show_upscalers, selected) def create_filter_indicator(tabname, kind, filtered): if not filtered: return None - indicator = gr.Button(value=f'{kind} list filtered', elem_id=f'{tabname}_{kind.lower()}_filter_indicator', elem_classes=['filter-indicator']) - indicator.click(fn=None, _js="() => openSettingsSection('sampler')", inputs=[], outputs=[], show_progress='hidden') + indicator = ToolButton(value=ui_symbols.info, tooltip=f'{kind} list filtered', elem_id=f'{tabname}_{kind.lower()}_filter_indicator', elem_classes=['filter-indicator']) + indicator.click(fn=None, _js="() => openSettingsSection('ui')", inputs=[], outputs=[], show_progress='hidden') return indicator @@ -247,8 +246,8 @@ def create_sampler_and_steps_selection(choices, tabname, default_steps:int=20): dropdown_choices, default_value, filtered = sampler_choices(choices) with gr.Row(elem_id=f"{tabname}_sampler_row", elem_classes=['flex-break', 'flexbox']): steps = gr.Slider(minimum=1, maximum=100, step=1, label="Steps", elem_id=f"{tabname}_steps", value=default_steps) - create_filter_indicator(tabname, 'Sampler', filtered) sampler_index = gr.Dropdown(label='Sampling method', elem_id=f"{tabname}_sampling", choices=dropdown_choices, value=default_value, type="value") + create_filter_indicator(tabname, 'Sampler', filtered) return steps, sampler_index @@ -372,8 +371,8 @@ def create_hires_inputs(tab): hr_force = gr.Checkbox(label='Force HiRes', value=False, elem_id=f"{tab}_hr_force") with gr.Row(elem_id=f"{tab}_hires_fix_row2"): dropdown_choices, _default_value, filtered = sampler_choices(selected='Same as primary', same_as_primary=True) - create_filter_indicator(tab, 'Sampler', filtered) hr_sampler_index = gr.Dropdown(label='Refine sampler', elem_id=f"{tab}_sampling_alt", choices=dropdown_choices, value='Same as primary', type="value") + create_filter_indicator(tab, 'Sampler', filtered) with gr.Row(elem_id=f"{tab}_hires_row2"): hr_second_pass_steps = gr.Slider(minimum=0, maximum=99, step=1, label='HiRes steps', elem_id=f"{tab}_steps_alt", value=20) denoising_strength = gr.Slider(minimum=0.0, maximum=0.99, step=0.01, label='Strength', value=0.3, elem_id=f"{tab}_denoising_strength") @@ -398,8 +397,8 @@ def create_resize_inputs(tab, images, accordion=True, latent=False, non_zero=Tru available_upscalers = [x for x in available_upscalers if not x.lower().startswith('latent')] available_upscalers, filtered = upscaler_choices(available_upscalers, available_upscalers[0]) resize_mode = gr.Dropdown(label=f"Mode{prefix}" if non_zero else "Resize mode", elem_id=f"{tab}_resize_mode", choices=shared.resize_modes, type="index", value='Fixed') - create_filter_indicator(tab, 'Upscaler', filtered) resize_name = gr.Dropdown(label=f"Method{prefix}" if non_zero else "Resize method", elem_id=f"{tab}_resize_name", choices=available_upscalers, value=available_upscalers[0], visible=True) + create_filter_indicator(tab, 'Upscaler', filtered) resize_context_choices = ["Add with forward", "Remove with forward", "Add with backward", "Remove with backward"] resize_context = gr.Dropdown(label=f"Context{prefix}", elem_id=f"{tab}_resize_context", choices=resize_context_choices, value=resize_context_choices[0], visible=False) diff --git a/test/test-ui-choice-filters.py b/test/test-ui-choice-filters.py index 7bb975a13..fa5600aff 100644 --- a/test/test-ui-choice-filters.py +++ b/test/test-ui-choice-filters.py @@ -5,7 +5,7 @@ import sys import unittest sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1])) -from modules.ui_choices import filter_ui_choices +from modules.ui_common import filter_ui_choices class TestUiChoiceFilters(unittest.TestCase): @@ -32,6 +32,11 @@ class TestUiChoiceFilters(unittest.TestCase): self.assertEqual(visible, ['Euler', 'DPM++ 2M']) self.assertTrue(filtered) + def test_none_remains_the_first_choice(self): + visible, filtered = filter_ui_choices(['Lanczos', 'None', 'Nearest'], ['Lanczos'], selected='None') + self.assertEqual(visible, ['None', 'Lanczos']) + self.assertTrue(filtered) + if __name__ == '__main__': unittest.main() From 07b4cbbd3df5b23f859c5715d64d32fac17c1671 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 12 Sep 2026 13:43:37 +0200 Subject: [PATCH 197/270] ui restyling Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + extensions-builtin/sdnext-kanvas | 2 +- extensions-builtin/sdnext-modernui | 2 +- modules/ui_definitions.py | 2 +- modules/video_models/models_def.py | 12 ++++++++++++ ui/css/base.css | 3 ++- ui/css/sdnext.css | 13 ++++++++++--- ui/dist/sdnext.mjs | 4 ++-- ui/dist/sdnext.mjs.map | 4 ++-- ui/loader.ts | 2 +- ui/monitor.ts | 2 +- wiki | 2 +- 12 files changed, 35 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85d5f024d..e646173b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ And some cool new stuff and models: **Anima 2.9B**, **LLaDa-Image** - And few cloud models: *Google's Gemini, NanoBanana, Veo, Omni* and *X.AI's Grok* +- Some (light) UI restyling Plus inevitable bug-fixes... diff --git a/extensions-builtin/sdnext-kanvas b/extensions-builtin/sdnext-kanvas index b5fb2c580..d81446267 160000 --- a/extensions-builtin/sdnext-kanvas +++ b/extensions-builtin/sdnext-kanvas @@ -1 +1 @@ -Subproject commit b5fb2c580ffbaf0b7bd09a26410e698d04205e2a +Subproject commit d81446267571bddf223a225e25fcec190244a5db diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index dbef993e1..841e7b452 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit dbef993e1a95cfd39a99c4ccbef8d1e0322500be +Subproject commit 841e7b452ddeab94f392da3497a2fcf36d1d3320 diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index f8f71554a..324f11792 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -602,7 +602,7 @@ def create_settings(cmd_opts): "ui_disabled": OptionInfo([], "Disabled UI tabs", gr.Dropdown, { 'visible': False }), "cards_sep_ui": OptionInfo("

    Networks panel

    ", "", gr.HTML), - "extra_networks_card_size": OptionInfo(140, "Network card size (px)", gr.Slider, {"minimum": 20, "maximum": 2000, "step": 1}), + "extra_networks_card_size": OptionInfo(130, "Network card size (px)", gr.Slider, {"minimum": 20, "maximum": 2000, "step": 1}), "extra_networks_card_cover": OptionInfo("sidebar", "Network panel position", gr.Radio, {"choices": ["cover", "inline", "sidebar"]}), "extra_networks_card_square": OptionInfo(True, "Disable variable aspect ratio"), diff --git a/modules/video_models/models_def.py b/modules/video_models/models_def.py index 801adced0..758d56ac2 100644 --- a/modules/video_models/models_def.py +++ b/modules/video_models/models_def.py @@ -771,6 +771,18 @@ try: image_hijack=False, vae_hijack=False, vae_remote=False), + Model(name='MiniMax H3 VDN', + url='https://huggingface.co/OpenVDN/vdn-minimax-h3', + repo='OpenVDN/vdn-minimax-h3', + repo_cls='MiniMaxH3ModularPipeline', + workflow='fl2va', + base=True, + te_cls=None, + dit_cls=None, + te_hijack=False, + image_hijack=False, + vae_hijack=False, + vae_remote=False), ], 'Google Veo': [ Model(name='Google Veo 3.1 T2V', diff --git a/ui/css/base.css b/ui/css/base.css index 3a0e0e9c1..c4e225133 100644 --- a/ui/css/base.css +++ b/ui/css/base.css @@ -1,4 +1,5 @@ @font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf') } +@font-face { font-family: 'Ubuntu'; font-display: swap; font-style: normal; font-weight: 100; src: local('Ubuntu'), url('fonts/ubuntu-nerdfont.ttf') } /* toolbutton */ .gradio-button.tool { max-width: min-content; min-width: min-content !important; align-self: end; font-size: 1.4em; color: var(--body-text-color) !important; } @@ -32,7 +33,7 @@ /* fullpage image viewer */ #lightboxModal { display: none; position: fixed; z-index: 1001; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(20, 20, 20, 0.75); backdrop-filter: blur(6px); - user-select: none; -webkit-user-select: none; flex-direction: row; font-family: 'NotoSans'; } + user-select: none; -webkit-user-select: none; flex-direction: row; font-family: 'Ubuntu'; } .modalControls { display: flex; justify-content: space-evenly; background-color: transparent; position: absolute; width: 99%; z-index: 1; } .modalControls:hover { background-color: #50505050; } .modalControls span { color: white; font-size: 2em; font-weight: bold; cursor: pointer; filter: grayscale(100%); } diff --git a/ui/css/sdnext.css b/ui/css/sdnext.css index 5975c4771..5a3dd4113 100644 --- a/ui/css/sdnext.css +++ b/ui/css/sdnext.css @@ -5,6 +5,13 @@ font-weight: 100; src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf'); } +@font-face { + font-display: swap; + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 100; + src: local('Ubuntu'), url('fonts/ubuntu-nerdfont.ttf'); +} :root { --card-size: 160px; @@ -72,7 +79,7 @@ --sd-tooltip-text-color: var(--sd-input-background-color); --sd-body-font: 'IBM Plex Mono', monospace; --sd-text-font: 'IBM Plex Mono', monospace; - --sd-button-font: 'NotoSans', sans-serif; + --sd-button-font: 'Ubuntu', sans-serif; --sd-image-fit: scale-down; --sd-panel-min-width: 256px; --sd-grid-image-size: 150px; @@ -289,12 +296,12 @@ input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { .gradio-dropdown .token { overflow-x: hidden; padding: var(--spacing-xs) !important; - font-family: 'NotoSans', var(--font); + font-family: 'Ubuntu', var(--font); } .gradio-dropdown .wrap input, .gradio-dropdown input { - font-family: 'NotoSans', var(--font); + font-family: 'Ubuntu', var(--font); } .gradio-html { diff --git a/ui/dist/sdnext.mjs b/ui/dist/sdnext.mjs index 3b59a672a..3a563db85 100644 --- a/ui/dist/sdnext.mjs +++ b/ui/dist/sdnext.mjs @@ -12561,7 +12561,7 @@ var ConnectionMonitorState = class _ConnectionMonitorState { else return; } this.element.dataset.hint = this.toHTML(); - this.element.style.backgroundColor = this.online ? "var(--sd-main-accent-color)" : "var(--color-error)"; + this.element.style.background = this.online ? "var(--sd-main-accent-color)" : "var(--color-error)"; } }; async function updateIndicator(online, data = {}, msg) { @@ -16119,7 +16119,7 @@ async function createSplash() { log("splashVisible", { visible: false, elapsed: Math.round(performance.now() - appStartTime) }); clearInterval(splashMonitor); } - }, 2500); + }, 5e3); } window.onload = createSplash; diff --git a/ui/dist/sdnext.mjs.map b/ui/dist/sdnext.mjs.map index c77aa7859..bd4bf0e49 100644 --- a/ui/dist/sdnext.mjs.map +++ b/ui/dist/sdnext.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist/jquery.js", "../js/iframeResizer.js", "../../node_modules/.pnpm/exifr@7.1.3/node_modules/exifr/dist/full.umd.js", "../../node_modules/.pnpm/wheel@1.0.0/node_modules/wheel/index.js", "../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js", "../../node_modules/.pnpm/amator@1.1.0/node_modules/amator/index.js", "../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/index.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/kinetic.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeTextSelectionInterceptor.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/transform.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeSvgController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeDomController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/index.js", "../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist-module/wrappers/jquery.node-module-wrapper.js", "../vendor.ts", "../logger.ts", "../authWrap.ts", "../timers.ts", "../script.ts", "../changelog.ts", "../control.ts", "../extraNetworks.ts", "../generationParams.ts", "../imageParams.ts", "../notification.ts", "../progressBar.ts", "../dynamicUI.ts", "../ui.ts", "../inputAccordion.ts", "../indexdb.ts", "../logMonitor.ts", "../settings.ts", "../monitor.ts", "../promptChecker.ts", "../js/sha256.ts", "../gallery.ts", "../imageViewer.ts", "../autocomplete_xn.ts", "../autocomplete.ts", "../setHints.ts", "../contextMenus.ts", "../uiConfig.ts", "../loader.ts", "../legacy.ts", "../startup.ts", "../extensions.ts", "../dragDrop.ts", "../civitai.ts", "../guidance.ts", "../timesheet.ts", "../history.ts", "../storage.ts", "../aspectRatioOverlay.ts", "../resolutionLock.ts", "../editAttention.ts", "../../node_modules/.pnpm/jquery-sparkline@2.4.0/node_modules/jquery-sparkline/jquery.sparkline.js", "../gpu.ts"], - "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 2500);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], - "mappings": "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", + "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.background = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 5000);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], + "mappings": "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", "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] } diff --git a/ui/loader.ts b/ui/loader.ts index 21c254828..4e4e7b46b 100644 --- a/ui/loader.ts +++ b/ui/loader.ts @@ -121,7 +121,7 @@ async function createSplash() { log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) }); clearInterval(splashMonitor); } - }, 2500); + }, 5000); } window.onload = createSplash; diff --git a/ui/monitor.ts b/ui/monitor.ts index b289aadb0..06ca70fd4 100644 --- a/ui/monitor.ts +++ b/ui/monitor.ts @@ -65,7 +65,7 @@ export class ConnectionMonitorState { else return; } this.element.dataset.hint = this.toHTML(); - this.element.style.backgroundColor = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)'; + this.element.style.background = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)'; } } diff --git a/wiki b/wiki index 3912bb125..5e3c67042 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 3912bb1255862d4b28211bb603a8faa0d1f36b96 +Subproject commit 5e3c6704294346e7dc4e86802049d63646547437 From 9fd32084def209b42593472ed57602a47e3fea5c Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 12 Sep 2026 20:36:28 +0200 Subject: [PATCH 198/270] metadata fix wildcard info Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/processing_info.py | 5 ----- modules/styles.py | 9 +++++---- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e646173b5..b35f52f5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -123,6 +123,7 @@ Plus inevitable bug-fixes... - lora: support transformer ref models - lucida: handle requirements - lumina-dimoo: attention-kwargs, thanks @Anai-Guo + - metadata: fix wildcard info - minimax: crop image to video aspect ratio - modular: handle module with remote-code - network: improve type/version lookup diff --git a/modules/processing_info.py b/modules/processing_info.py index 719fec0c6..54544ae84 100644 --- a/modules/processing_info.py +++ b/modules/processing_info.py @@ -208,11 +208,6 @@ def create_infotext(p: StableDiffusionProcessing, all_prompts=None, all_seeds=No args['Sampler shift'] = get_opt('schedulers_shift') if get_opt('schedulers_shift') != shared.opts.data_labels.get('schedulers_shift').default else None args['Sampler dynamic shift'] = get_opt('schedulers_dynamic_shift') if get_opt('schedulers_dynamic_shift') != shared.opts.data_labels.get('schedulers_dynamic_shift').default else None - # model specific - if shared.sd_model_type == 'h1': - args['LLM'] = None if shared.opts.model_h1_llama_repo == 'Default' else shared.opts.model_h1_llama_repo - - # args.update(p.extra_generation_params) for k, v in p.extra_generation_params.items(): if isinstance(v, (list, tuple)) and (job_size > index) and (len(v) > 1) and (len(v) == job_size): # likely a per-job param args[k] = v[index] diff --git a/modules/styles.py b/modules/styles.py index f5136f1a5..d432959ea 100644 --- a/modules/styles.py +++ b/modules/styles.py @@ -200,14 +200,15 @@ def apply_wildcards_to_prompt(prompt, all_wildcards, seed=-1, silent=False, p: S except Exception as e: log.error(f'Wildcards: wildcard="{wildcard}" error={e}') t1 = time.time() - prompt, replaced_file, not_found = apply_file_wildcards(prompt, [], [], recursion=0, seed=seed, p=p) + prompt, replaced_files, missing_files = apply_file_wildcards(prompt, [], [], recursion=0, seed=seed, p=p) t2 = time.time() if replaced and not silent: log.debug(f'Apply wildcards: {replaced} path="{shared.opts.wildcards_dir}" type=style time={t1-t0:.2f}') - if (len(replaced_file) > 0 or len(not_found) > 0) and not silent: - log.debug(f'Apply wildcards: found={replaced_file} missing={not_found} path="{shared.opts.wildcards_dir}" type=file seed={seed} time={t2-t2:.2f}') + if (len(replaced_files) > 0 or len(missing_files) > 0) and not silent: + log.debug(f'Apply wildcards: found={replaced_files} missing={missing_files} path="{shared.opts.wildcards_dir}" type=file seed={seed} time={t2-t1:.2f}') if p is not None: - p.extra_generation_params['Wildcards'] = p.extra_generation_params.get('Wildcards', []) + [replaced_file] + wildcards = p.extra_generation_params.get('Wildcards', []) + replaced_files + p.extra_generation_params['Wildcards'] = ', '.join(wildcards) if old_state is not None: random.setstate(old_state) return prompt From b8f60b7237682b41ed21aba2a02ec5865b1840b0 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 12 Sep 2026 21:05:57 +0200 Subject: [PATCH 199/270] update modernui Signed-off-by: Vladimir Mandic --- TODO.md | 1 + extensions-builtin/sdnext-modernui | 2 +- modules/ui_definitions.py | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/TODO.md b/TODO.md index aaf37ebcc..239489ae1 100644 --- a/TODO.md +++ b/TODO.md @@ -31,6 +31,7 @@ - Automated testing and integrate models repo - [MiniMax VDN](https://huggingface.co/OpenVDN/vdn-minimax-h3) - [MiniMax VSA](https://huggingface.co/FastVideo/FastVideo-FastH3-4-step-Preview-v1-VSA-DataFree) +- [MiniMax Nunchaku-Lite](https://huggingface.co/rootonchair/MiniMax-H3-nunchaku-lite-int4) - Video upscaling: LTX-Upscaler - Video upscaling: [MiniMax-Upscaler](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler) - Video capabilities to processing tab, add RIFE, upscaling (once available) diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 841e7b452..fb296c6e1 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 841e7b452ddeab94f392da3497a2fcf36d1d3320 +Subproject commit fb296c6e1ba97f0ad4aa4fa04b8f080ed30b9ec8 diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 324f11792..7ac00e4a1 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -608,7 +608,7 @@ def create_settings(cmd_opts): "other_sep_ui": OptionInfo("

    Other...

    ", "", gr.HTML), "ui_locale": OptionInfo("Auto", "UI locale", gr.Dropdown, lambda: {"choices": theme.list_locales()}), - "font_size": OptionInfo(14, "Font size", gr.Slider, {"minimum": 8, "maximum": 32, "step": 1}), + "font_size": OptionInfo(15, "Font size", gr.Slider, {"minimum": 8, "maximum": 32, "step": 1}), "gpu_monitor": OptionInfo(3000, "GPU monitor interval", gr.Slider, {"minimum": 100, "maximum": 60000, "step": 100}), "aspect_ratios": OptionInfo("1:1, 4:3, 3:2, 16:9, 16:10, 21:9, 2:3, 3:4, 9:16, 10:16, 9:21", "Allowed aspect ratios"), "compact_view": OptionInfo(False, "Compact view"), From e6d5efa97fa4c2e9d278225868b1a3bbbce6b36a Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 07:40:53 +0200 Subject: [PATCH 200/270] autocomplete dont fetch disabled networks Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + extensions-builtin/sdnext-modernui | 2 +- modules/api/validate.py | 38 ++++++++++++++++-------------- ui/autocomplete_xn.ts | 30 ++++++++++++++--------- ui/dist/sdnext.mjs | 26 +++++++++++++------- ui/dist/sdnext.mjs.map | 4 ++-- 6 files changed, 60 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b35f52f5b..c48be70d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -115,6 +115,7 @@ Plus inevitable bug-fixes... - updated: *LoRA, MiniMax* - **Fixes** - api: prompt enhance with vision + - autocomplete: skip disabled networks - compile: keep model compiled state - detailer: handling of stop/skip/pause - framepack: correct device assignment, thanks @li-lizhe diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index fb296c6e1..e95c40585 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit fb296c6e1ba97f0ad4aa4fa04b8f080ed30b9ec8 +Subproject commit e95c40585f8eb2d8ad0238ea7512ddf3e7fdcb23 diff --git a/modules/api/validate.py b/modules/api/validate.py index 3f753cea8..dc0e20293 100644 --- a/modules/api/validate.py +++ b/modules/api/validate.py @@ -7,35 +7,37 @@ request_cost = { "/file": 0, "/internal/progress": 0, "/run/predict": 0, + "/sdapi/v1/control": 5, + "/sdapi/v1/img2img": 5, + "/sdapi/v1/txt2img": 5, + "/sdapi/v1/video": 5, "/sdapi/v1/browser/thumb": 0, "/sdapi/v1/network/thumb": 0, - "/sdapi/v1/txt2img": 5, - "/sdapi/v1/img2img": 5, - "/sdapi/v1/control": 5, - "/sdapi/v1/video": 5, } log_cost = { "/.well-known/appspecific/com.chrome.devtools.json": -1, - "/info": -1, "/file": -1, - "/token": -1, - "/theme.css": -1, - "/sdapi/v1/browser/thumb": -1, - "/sdapi/v1/network/thumb": -1, - "/run/predict": -1, - "/queue/join": -1, + "/info": -1, + "/icon": -1, "/internal/progress": -1, - "/sdapi/v1/version": -1, - "/sdapi/v1/log": -1, - "/sdapi/v1/torch": -1, + "/queue/join": -1, + "/run/predict": -1, + "/theme.css": -1, + "/token": -1, + "/sdapi/v1/checkpoint": -1, + "/sdapi/v1/gpu-smi": -1, "/sdapi/v1/gpu": -1, + "/sdapi/v1/loaded-loras": -1, + "/sdapi/v1/log": -1, "/sdapi/v1/memory": -1, "/sdapi/v1/platform": -1, - "/sdapi/v1/checkpoint": -1, - "/sdapi/v1/loaded-loras": -1, - "/sdapi/v1/gpu-smi": -1, - "/sdapi/v1/status": 60, "/sdapi/v1/progress": 60, + "/sdapi/v1/start": -1, + "/sdapi/v1/status": 60, + "/sdapi/v1/torch": -1, + "/sdapi/v1/version": -1, + "/sdapi/v1/browser/thumb": -1, + "/sdapi/v1/network/thumb": -1, } log_exclude_suffix = ['.css', '.js', '.ico', '.svg'] log_exclude_prefix = ['/assets'] diff --git a/ui/autocomplete_xn.ts b/ui/autocomplete_xn.ts index 2162fb772..1b6c77af4 100644 --- a/ui/autocomplete_xn.ts +++ b/ui/autocomplete_xn.ts @@ -108,19 +108,27 @@ export const xnEngine: XnEngine = { this.lora = new XnIndex(items); } // Embeddings: {loaded: [...], skipped: [...]} - const embData = await this.fetchJson('/embeddings') as Record | null; - if (embData && typeof embData === 'object') { - const loaded = Array.isArray(embData.loaded) ? embData.loaded : []; - this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) }))); + if (window.opts.diffusers_enable_embed) { + const embData = await this.fetchJson('/embeddings') as Record | null; + if (embData && typeof embData === 'object') { + const loaded = Array.isArray(embData.loaded) ? embData.loaded : []; + this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) }))); + } + } else { + this.embed = new XnIndex([]); } // Wildcards: [{name}, ...] - const wcData = await this.fetchJson('/wildcards'); - if (Array.isArray(wcData)) { - this.wildcard = new XnIndex( - wcData - .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string') - .map((w) => ({ name: w.name })), - ); + if (window.opts.wildcards_enabled) { + const wcData = await this.fetchJson('/wildcards'); + if (Array.isArray(wcData)) { + this.wildcard = new XnIndex( + wcData + .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string') + .map((w) => ({ name: w.name })), + ); + } + } else { + this.wildcard = new XnIndex([]); } log('autoComplete', { xnLoaded: true, diff --git a/ui/dist/sdnext.mjs b/ui/dist/sdnext.mjs index 3a563db85..d439a7bd6 100644 --- a/ui/dist/sdnext.mjs +++ b/ui/dist/sdnext.mjs @@ -14759,16 +14759,24 @@ var xnEngine = { } this.lora = new XnIndex(items); } - const embData = await this.fetchJson("/embeddings"); - if (embData && typeof embData === "object") { - const loaded = Array.isArray(embData.loaded) ? embData.loaded : []; - this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) }))); + if (window.opts.diffusers_enable_embed) { + const embData = await this.fetchJson("/embeddings"); + if (embData && typeof embData === "object") { + const loaded = Array.isArray(embData.loaded) ? embData.loaded : []; + this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) }))); + } + } else { + this.embed = new XnIndex([]); } - const wcData = await this.fetchJson("/wildcards"); - if (Array.isArray(wcData)) { - this.wildcard = new XnIndex( - wcData.filter((w) => typeof w === "object" && w && "name" in w && typeof w.name === "string").map((w) => ({ name: w.name })) - ); + if (window.opts.wildcards_enabled) { + const wcData = await this.fetchJson("/wildcards"); + if (Array.isArray(wcData)) { + this.wildcard = new XnIndex( + wcData.filter((w) => typeof w === "object" && w && "name" in w && typeof w.name === "string").map((w) => ({ name: w.name })) + ); + } + } else { + this.wildcard = new XnIndex([]); } log("autoComplete", { xnLoaded: true, diff --git a/ui/dist/sdnext.mjs.map b/ui/dist/sdnext.mjs.map index bd4bf0e49..5cc6d59d2 100644 --- a/ui/dist/sdnext.mjs.map +++ b/ui/dist/sdnext.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist/jquery.js", "../js/iframeResizer.js", "../../node_modules/.pnpm/exifr@7.1.3/node_modules/exifr/dist/full.umd.js", "../../node_modules/.pnpm/wheel@1.0.0/node_modules/wheel/index.js", "../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js", "../../node_modules/.pnpm/amator@1.1.0/node_modules/amator/index.js", "../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/index.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/kinetic.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeTextSelectionInterceptor.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/transform.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeSvgController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeDomController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/index.js", "../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist-module/wrappers/jquery.node-module-wrapper.js", "../vendor.ts", "../logger.ts", "../authWrap.ts", "../timers.ts", "../script.ts", "../changelog.ts", "../control.ts", "../extraNetworks.ts", "../generationParams.ts", "../imageParams.ts", "../notification.ts", "../progressBar.ts", "../dynamicUI.ts", "../ui.ts", "../inputAccordion.ts", "../indexdb.ts", "../logMonitor.ts", "../settings.ts", "../monitor.ts", "../promptChecker.ts", "../js/sha256.ts", "../gallery.ts", "../imageViewer.ts", "../autocomplete_xn.ts", "../autocomplete.ts", "../setHints.ts", "../contextMenus.ts", "../uiConfig.ts", "../loader.ts", "../legacy.ts", "../startup.ts", "../extensions.ts", "../dragDrop.ts", "../civitai.ts", "../guidance.ts", "../timesheet.ts", "../history.ts", "../storage.ts", "../aspectRatioOverlay.ts", "../resolutionLock.ts", "../editAttention.ts", "../../node_modules/.pnpm/jquery-sparkline@2.4.0/node_modules/jquery-sparkline/jquery.sparkline.js", "../gpu.ts"], - "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.background = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n // Wildcards: [{name}, ...]\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 5000);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], - "mappings": "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", + "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.background = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n if (window.opts.diffusers_enable_embed) {\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n } else {\n this.embed = new XnIndex([]);\n }\n // Wildcards: [{name}, ...]\n if (window.opts.wildcards_enabled) {\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n } else {\n this.wildcard = new XnIndex([]);\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 5000);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], + "mappings": "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", "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] } From 9c34c0835e1886bd0aadc69ebe702f36f55120c0 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 08:27:22 +0200 Subject: [PATCH 201/270] update requirements and lint Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 13 ++++++------- package.json | 2 +- pyproject.toml | 5 ++--- requirements.txt | 6 +++--- scripts/autocomplete.py | 4 ++-- scripts/demofusion.py | 6 +++--- scripts/ultimate-upscale.py | 2 +- 7 files changed, 18 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c48be70d4..51fb30869 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-09-12 +## Update for 2026-09-13 -### Highlights for 2026-09-12 +### Highlights for 2026-09-13 *What's New*? Well, code-wise, this is a big one... First, a-lot-of-optimizations: @@ -15,17 +15,15 @@ First, a-lot-of-optimizations: And some cool new stuff and models: - **DLSSv5** integration -- New models: - **Anima 2.9B**, **LLaDa-Image** -- And few cloud models: - *Google's Gemini, NanoBanana, Veo, Omni* and *X.AI's Grok* +- New models: **Anima 2.9B**, **LLaDa-Image** +- And few cloud models: *Google's Gemini, NanoBanana, Veo, Omni* and *X.AI's Grok* - Some (light) UI restyling Plus inevitable bug-fixes... [Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) -### Details for 2026-09-12 +### Details for 2026-09-13 - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) @@ -110,6 +108,7 @@ Plus inevitable bug-fixes... *note*: requires grok api key - remove `/redocs` as `/docs` are primary api docs - rebuild docs site index + - **ui**: ability to filter samplers and upscalers, thanks @emecii - **Wiki/Docs**: - new articles: *Attention, Modular-Pipelines* - updated: *LoRA, MiniMax* diff --git a/package.json b/package.json index 6331b09ea..f8ed01a75 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "dev:kanvas": "cd extensions-builtin/sdnext-kanvas && build --profile development", "dev:core": "build --profile development --config ui/.build.json", "ruff": ". venv/bin/activate && ruff check", - "pylint": ". venv/bin/activate && pylint --disable fixme *.py modules/ pipelines/ scripts/ extensions-builtin/ | grep -v '^*'", + "pylint": ". venv/bin/activate && pylint --disable fixme *.py modules pipelines scripts extensions-builtin", "pyright": ". venv/bin/activate && pyright --threads 4", "ty": ". venv/bin/activate && ty check --force-exclude", "codespell": ". venv/bin/activate && codespell", diff --git a/pyproject.toml b/pyproject.toml index bd050c124..dac6feae9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -113,7 +113,6 @@ main.ignore-paths=[ "modules/flash_attn_triton_amd", "modules/ggml", "modules/hidiffusion", - "modules/hijack/ddpm_edit.py", "modules/intel", "modules/intel/ipex", "modules/framepack/pipeline", @@ -150,7 +149,6 @@ main.ignore-paths=[ "scripts/consistory", "scripts/ctrlx", "scripts/daam", - "scripts/demofusion", "scripts/differential_diffusion.py", "scripts/freescale", "scripts/infiniteyou", @@ -160,17 +158,18 @@ main.ignore-paths=[ "scripts/mod", "scripts/pixelsmith", "scripts/pulid", - "scripts/xadapter", "extensions-builtin/sd-extension-chainner/nodes", "extensions-builtin/sdnq", ] main.ignore-patterns=[ + "/usr/lib/.*", ".*test*.py$", ".*_model.py$", ".*_arch.py$", ".*_model_arch.py*", ".*_model_arch_v2.py$", ".*\\.pyi$", + ".*/site-packages/.*", ] main.ignored-modules="" main.jobs=4 diff --git a/requirements.txt b/requirements.txt index 5d77e7432..daf372d62 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,13 +30,13 @@ peft==0.20.0 httpx==0.28.1 requests==2.34.2 tqdm==4.70.0 -accelerate==1.14.0 +accelerate==1.15.0 einops==0.8.2 -huggingface_hub==1.30.0 +huggingface_hub==1.31.0 hf_xet==1.6.0 pandas==2.3.1 protobuf==7.36.1 -pytorch_lightning==2.6.5 +pytorch_lightning==2.6.6 urllib3==1.26.19 Pillow==12.2.0 timm==1.0.29 diff --git a/scripts/autocomplete.py b/scripts/autocomplete.py index cea4dd92a..8cdc29b19 100644 --- a/scripts/autocomplete.py +++ b/scripts/autocomplete.py @@ -152,13 +152,13 @@ def on_update(selected): class AutocompleteScript(scripts_manager.Script): video_capable = scripts_manager.AlwaysVisible - def show(self, is_img2img): + def show(self, is_img2img): # pylint: disable=unused-argument return scripts_manager.AlwaysVisible def title(self): return "Tag Autocomplete" - def ui(self, is_img2img): + def ui(self, is_img2img): # pylint: disable=unused-argument initial_names = get_all_names() initial_enabled = list(shared.opts.data.get('autocomplete_enabled', [])) diff --git a/scripts/demofusion.py b/scripts/demofusion.py index 534dbd4fa..b0f686ea3 100644 --- a/scripts/demofusion.py +++ b/scripts/demofusion.py @@ -146,7 +146,7 @@ class DemoFusionSDXLPipeline(DiffusionPipeline, FromSingleFileMixin, LoraLoaderM # textual inversion: procecss multi-vector tokens if necessary prompt_embeds_list = [] prompts = [prompt, prompt_2] - for prompt, tokenizer, text_encoder in zip(prompts, tokenizers, text_encoders): + for prompt, tokenizer, text_encoder in zip(prompts, tokenizers, text_encoders): # pylint: disable=redefined-argument-from-local if isinstance(self, TextualInversionLoaderMixin): prompt = self.maybe_convert_prompt(prompt, tokenizer) @@ -207,7 +207,7 @@ class DemoFusionSDXLPipeline(DiffusionPipeline, FromSingleFileMixin, LoraLoaderM uncond_tokens = [negative_prompt, negative_prompt_2] negative_prompt_embeds_list = [] - for negative_prompt, tokenizer, text_encoder in zip(uncond_tokens, tokenizers, text_encoders): + for negative_prompt, tokenizer, text_encoder in zip(uncond_tokens, tokenizers, text_encoders): # pylint: disable=redefined-argument-from-local if isinstance(self, TextualInversionLoaderMixin): negative_prompt = self.maybe_convert_prompt(negative_prompt, tokenizer) @@ -348,7 +348,7 @@ class DemoFusionSDXLPipeline(DiffusionPipeline, FromSingleFileMixin, LoraLoaderM # DemoFusion specific checks if max(height, width) % 1024 != 0: log.error(f'DemoFusion: resolution={width}x{height} long side must be divisible by 1024') - return None + return if num_images_per_prompt != 1: log.warning('DemoFusion: number of images per prompt is not support and will be ignored') diff --git a/scripts/ultimate-upscale.py b/scripts/ultimate-upscale.py index f620945f7..b87eb2f2a 100644 --- a/scripts/ultimate-upscale.py +++ b/scripts/ultimate-upscale.py @@ -409,7 +409,7 @@ class UltimateSDUpscaleScript(scripts_manager.Script): def title(self): return "SD Ultimate Upscale" - def show(self, is_img2img): + def show(self, is_img2img): # pylint: disable=unused-argument return True def ui(self, is_img2img): # pylint: disable=unused-argument From e89f63b7e02d659ba5a26564205a19c701a215a0 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 10:28:22 +0200 Subject: [PATCH 202/270] fix circular imports changing theme back to default Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/shared.py | 2 +- modules/theme.py | 78 ++++++++++++++++++++++------------------------- 3 files changed, 38 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51fb30869..2202cf2a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -135,6 +135,7 @@ Plus inevitable bug-fixes... - prompt: unnecessary secondary prompt if same - prompt: clean prompt after network parsing - rife: cleanup dead code, thanks @Anai-Guo + - theme: fix circular imports changing theme to default - todo: remove dead code, thanks @Anai-Guo - ui: js fetch exception handling - update: handle git errors gracefully diff --git a/modules/shared.py b/modules/shared.py index 9df752130..ca6606d68 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -16,7 +16,7 @@ import modules.memmon import modules.paths as paths from modules.json_helpers import readfile # pylint: disable=W0611 from modules.shared_helpers import listdir, req # pylint: disable=W0611 -from modules import errors, devices, shared_state, cmd_args, theme, history, files_cache # pylint: disable=unused-import +from modules import errors, devices, shared_state, cmd_args, history, files_cache # pylint: disable=unused-import from modules.memstats import memory_stats # pylint: disable=unused-import # main entry point that triggers package imports diff --git a/modules/theme.py b/modules/theme.py index 81907953a..0c7e833e0 100644 --- a/modules/theme.py +++ b/modules/theme.py @@ -1,13 +1,14 @@ import json import os +from types import SimpleNamespace from typing import TYPE_CHECKING, TypedDict import gradio as gr -import modules.extensions -import modules.shared -from modules.json_helpers import writefile from modules.logger import log +from modules.json_helpers import readfile, writefile +from modules.shared_helpers import req + if TYPE_CHECKING: class FontParams(TypedDict): @@ -16,6 +17,15 @@ if TYPE_CHECKING: gradio_theme = gr.themes.Base() +opts = SimpleNamespace(**readfile('config.json')) +if 'theme_type' not in opts.__dict__: + opts.theme_type = 'Modern' +if 'gradio_theme' not in opts.__dict__: + opts.gradio_theme = 'Default' +if 'theme_style' not in opts.__dict__: + opts.theme_style = 'Auto' +if 'ui_locale' not in opts.__dict__: + opts.ui_locale = 'Auto' def list_builtin_themes(): @@ -38,7 +48,7 @@ def refresh_themes(no_update=False): if not no_update: try: log.info('Refreshing UI themes') - r = modules.shared.req('https://huggingface.co/datasets/freddyaboulton/gradio-theme-subdomains/resolve/main/subdomains.json') + r = req('https://huggingface.co/datasets/freddyaboulton/gradio-theme-subdomains/resolve/main/subdomains.json') if r.status_code == 200: res = r.json() writefile(res, themes_file) @@ -54,35 +64,19 @@ def list_locales(): def list_themes(): - extensions = [e.name for e in modules.extensions.extensions if e.enabled] - if 'sd-webui-lobe-theme' in extensions and modules.shared.opts.gradio_theme == 'lobe': - themes = ['lobe'] - modules.shared.opts.data['gradio_theme'] = themes[0] - modules.shared.opts.data['theme_type'] = 'None' - log.info('UI theme: extension="lobe"') - elif 'Cozy-Nest' in extensions and modules.shared.opts.gradio_theme == 'cozy-nest': - themes = ['cozy-nest'] - modules.shared.opts.data['gradio_theme'] = themes[0] - modules.shared.opts.data['theme_type'] = 'None' - log.info('UI theme: extension="cozy-nest"') - elif modules.shared.opts.theme_type == 'None': + if opts.theme_type == 'None': gradio = ["gradio/default", "gradio/base", "gradio/glass", "gradio/monochrome", "gradio/soft"] huggingface = refresh_themes(no_update=True) huggingface = {x['id'] for x in huggingface if x['status'] == 'RUNNING' and 'test' not in x['id'].lower()} huggingface = [f'huggingface/{x}' for x in huggingface] themes = sorted(gradio) + sorted(huggingface, key=str.casefold) - elif modules.shared.opts.theme_type == 'Standard': + elif opts.theme_type == 'Standard': builtin = list_builtin_themes() themes = sorted(builtin) - elif modules.shared.opts.theme_type == 'Modern': - ext = next((e for e in modules.extensions.extensions if e.name == 'sdnext-modernui'), None) - if ext is None: - log.error('UI themes: ModernUI not found') - builtin = list_builtin_themes() - themes = sorted(builtin) - modules.shared.opts.theme_type = 'Standard' - return themes - folder = os.path.join(ext.path, 'themes') + elif opts.theme_type == 'Modern': + # ext = next((e for e in modules.extensions.extensions if e.name == 'sdnext-modernui'), None) + # folder = os.path.join(ext.path, 'themes') + folder = os.path.join('extensions-builtin', 'sdnext-modernui', 'themes') themes = [] if os.path.exists(folder): for f in os.listdir(folder): @@ -92,14 +86,14 @@ def list_themes(): themes.append('modern/Default') themes = sorted(themes) else: - log.error(f'UI themes: type={modules.shared.opts.theme_type} unknown') + log.error(f'UI themes: type={opts.theme_type} unknown') themes = [] return themes def reload_gradio_theme(): global gradio_theme # pylint: disable=global-statement - theme_name = modules.shared.opts.gradio_theme + theme_name = opts.gradio_theme default_font_params: FontParams = { 'font':['Helvetica', 'ui-sans-serif', 'system-ui', 'sans-serif'], 'font_mono':['IBM Plex Mono', 'ui-monospace', 'Consolas', 'monospace'] @@ -107,33 +101,33 @@ def reload_gradio_theme(): gradio_theme = gr.themes.Base(**default_font_params) available_themes = list_themes() if theme_name not in available_themes: - # log.error(f'UI theme invalid: type={modules.shared.opts.theme_type} theme="{theme_name}"') - if modules.shared.opts.theme_type == 'Standard': + # log.error(f'UI theme invalid: type={opts.theme_type} theme="{theme_name}"') + if opts.theme_type == 'Standard': theme_name = 'black-teal' - elif modules.shared.opts.theme_type == 'Modern': + elif opts.theme_type == 'Modern': theme_name = 'Default' - elif modules.shared.opts.theme_type == 'None': + elif opts.theme_type == 'None': theme_name = 'gradio/default' else: - modules.shared.opts.theme_type = 'Standard' + opts.theme_type = 'Standard' theme_name = 'black-teal' - modules.shared.opts.data['gradio_theme'] = theme_name - log.info(f'UI locale: name="{modules.shared.opts.ui_locale}"') + opts.gradio_theme = theme_name + log.info(f'UI locale: name="{opts.ui_locale}"') if theme_name.lower() in ['lobe', 'cozy-nest']: log.info(f'UI theme extension: name="{theme_name}"') return None - elif modules.shared.opts.theme_type == 'Standard': + elif opts.theme_type == 'Standard': gradio_theme = gr.themes.Base(**default_font_params) - log.info(f'UI theme: type={modules.shared.opts.theme_type} name="{theme_name}" available={len(available_themes)}') + log.info(f'UI theme: type={opts.theme_type} name="{theme_name}" available={len(available_themes)}') log.warning('UI theme: please switch to ModernUI for best experience') return 'sdnext.css' - elif modules.shared.opts.theme_type == 'Modern': + elif opts.theme_type == 'Modern': gradio_theme = gr.themes.Base(**default_font_params) - log.info(f'UI theme: type={modules.shared.opts.theme_type} name="{theme_name}" available={len(available_themes)}') + log.info(f'UI theme: type={opts.theme_type} name="{theme_name}" available={len(available_themes)}') return 'base.css' - elif modules.shared.opts.theme_type == 'None': + elif opts.theme_type == 'None': if theme_name.startswith('gradio/'): log.warning('UI theme: using Gradio default theme which is not optimized for SD.Next') if theme_name == "gradio/default": @@ -158,8 +152,8 @@ def reload_gradio_theme(): except Exception as e: log.error(f"UI theme: download error accessing HuggingFace {e}") gradio_theme = gr.themes.Default(**default_font_params) - log.info(f'UI theme: type={modules.shared.opts.theme_type} name="{theme_name}" style={modules.shared.opts.theme_style}') + log.info(f'UI theme: type={opts.theme_type} name="{theme_name}" style={opts.theme_style}') log.warning('UI theme: please switch to ModernUI for best experience') return 'base.css' - log.error(f'UI theme: type={modules.shared.opts.theme_type} unknown') + log.error(f'UI theme: type={opts.theme_type} unknown') return None From 03bc3159ec2aed10d4f9db463d3d019423f39411 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 11:24:08 +0200 Subject: [PATCH 203/270] remove theme code from ext Signed-off-by: Vladimir Mandic --- modules/extensions.py | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/modules/extensions.py b/modules/extensions.py index 7b9c9541d..ab59e307f 100644 --- a/modules/extensions.py +++ b/modules/extensions.py @@ -73,21 +73,10 @@ def temp_disable_extensions(): 'sd-extension-nudenet', 'sd-extension-promptgen', ] - disable_themes = [ - 'sd-webui-lobe-theme', - 'cozy-nest', - 'sdnext-modernui', - ] disabled = [] - if shared.cmd_opts.theme is not None: - theme_name = shared.cmd_opts.theme - else: - theme_name = f'{shared.opts.theme_type.lower()}/{shared.opts.gradio_theme}' - if theme_name == 'lobe': - disable_themes.remove('sd-webui-lobe-theme') - elif theme_name == 'cozy-nest' or theme_name == 'cozy': - disable_themes.remove('cozy-nest') - elif '/' not in theme_name: # set default themes per type + theme_type = shared.cmd_opts.theme if shared.cmd_opts.theme is not None else shared.opts.theme_type + theme_name = f'{theme_type.lower()}/{shared.opts.gradio_theme}' + if '/' not in theme_name: # set default themes per type if theme_name == 'standard' or theme_name == 'default': theme_name = 'standard/black-teal' if theme_name == 'modern': @@ -103,7 +92,6 @@ def temp_disable_extensions(): elif theme_name.lower().startswith('modern'): shared.opts.data['theme_type'] = 'Modern' shared.opts.data['gradio_theme'] = theme_name[7:] - disable_themes.remove('sdnext-modernui') elif theme_name.lower().startswith('huggingface') or theme_name.lower().startswith('gradio') or theme_name.lower().startswith('none'): shared.opts.data['theme_type'] = 'None' shared.opts.data['gradio_theme'] = theme_name @@ -112,9 +100,6 @@ def temp_disable_extensions(): shared.opts.data['theme_type'] = 'Standard' shared.opts.data['gradio_theme'] = 'black-teal' - for ext in disable_themes: - if ext.lower() not in shared.opts.disabled_extensions: - disabled.append(ext) if shared.cmd_opts.safe: for ext in disable_safe: if ext.lower() not in shared.opts.disabled_extensions: From 70beb1ee7c756f05a153850447f6bce62f659749 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 12:49:57 +0200 Subject: [PATCH 204/270] add minimax-nunchaku-lite Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 22 ++++++++++++++-------- data/reference-distilled.json | 15 ++++++++------- data/reference-nunchaku.json | 7 +++++++ extensions-builtin/sdnext-modernui | 2 +- modules/attention/dispatcher.py | 2 +- modules/lora/native_adapter.py | 17 ++++++----------- modules/minimax/minimax_ui.py | 6 ++++-- modules/minimax/minimax_video.py | 6 +++--- modules/modular_load.py | 20 +++++++++++++++----- modules/video_models/models_def.py | 12 ++++++++++++ modules/video_models/video_minimax.py | 9 ++++++++- pipelines/generic_transformer.py | 7 +++---- pipelines/minimax/minimax_nunchaku.py | 20 ++++++++++++++++++++ pipelines/model_minimax.py | 14 ++++++++++++-- 14 files changed, 114 insertions(+), 45 deletions(-) create mode 100644 pipelines/minimax/minimax_nunchaku.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 2202cf2a8..b7ed11f00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,12 +6,12 @@ *What's New*? Well, code-wise, this is a big one... First, a-lot-of-optimizations: -- updated core packages -- improved **LoRA** performance and quality, especially with quantized models -- newly structured **attention** mechanisms -- modular pipelines with new **guidance** methods -- support for different **caching** stacks -- compute updates across the board +- Updated core packages +- Improved **LoRA** performance and quality, especially with quantized models +- Newly structured **attention** mechanisms +- Modular pipelines with new **guidance** methods +- Support for different **caching** stacks +- Compute updates across the board And some cool new stuff and models: - **DLSSv5** integration @@ -32,7 +32,10 @@ Plus inevitable bug-fixes... LLaDA-Image is a 6.5B transformer with massive 16.3B fully-custom MoE text-encoder and optional 1.3B SigVQ conditioning model with support for text-to-image, vq-conditioned text-to-image and image-editing workflows *note* model is extremely quantization sensitive so minimum allowed quant type is `uint8` - - [MiniMax-H3](https://huggingface.co/MiniMaxAI/MiniMax-H3) update with pre-quantized `sdnq-uint8` *pruned* variants + - [MiniMax-H3](https://huggingface.co/MiniMaxAI/MiniMax-H3) updates + new [SDNQ-uint8](https://huggingface.co/OzzyGT/MiniMax_H3_sdnq_8bit_pruned) pre-quantized *pruned* variants + new [Nunchaku-Lite](https://huggingface.co/rootonchair/MiniMax-H3-nunchaku-lite-int4) variant + new [VDN](https://huggingface.co/OpenVDN/vdn-minimax-h3) *video-delta-net* variant - **LoRA** - see [LoRA docs](https://vladmandic.github.io/sdnext-docs/LoRA) for all of the improvements and usage instructions *note*: lora now has its own settings section in *settings -> lora* @@ -108,7 +111,10 @@ Plus inevitable bug-fixes... *note*: requires grok api key - remove `/redocs` as `/docs` are primary api docs - rebuild docs site index - - **ui**: ability to filter samplers and upscalers, thanks @emecii +- **UI** + - some (light) re-styling of the *Default* theme + - add new *Tillerz-CleanDark* theme, thanks @Tillerz + - ability to filter samplers and upscalers, thanks @emecii - **Wiki/Docs**: - new articles: *Attention, Modular-Pipelines* - updated: *LoRA, MiniMax* diff --git a/data/reference-distilled.json b/data/reference-distilled.json index c7d831f5f..9e894dc53 100644 --- a/data/reference-distilled.json +++ b/data/reference-distilled.json @@ -25,6 +25,14 @@ "size": 19.38, "date": "2023 November" }, + "SDXL Flash Mini": { + "path": "SDXL-Flash_Mini.safetensors@https://huggingface.co/sd-community/sdxl-flash-mini/resolve/main/SDXL-Flash_Mini.safetensors?download=true", + "preview": "SDXL-Flash_Mini.jpg", + "desc": "Introducing the new fast model SDXL Flash (Mini), we learned that all fast XL models work fast, but the quality decreases, and we also made a fast model, but it is not as fast as LCM, Turbo, Lightning and Hyper, but the quality is higher.", + "extras": "sampler: DEIS, steps: 40, cfg_scale: 6.0", + "experimental": true, + "date": "2024 May" + }, "Tencent HunyuanDiT 1.1 Distilled": { "path": "Tencent-Hunyuan/HunyuanDiT-v1.1-Diffusers-Distilled", "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", @@ -258,12 +266,5 @@ "extras": "steps: 4, cfg_scale: 1.0", "size": 37.15, "date": "2026 September" - }, - "SDXL Flash Mini": { - "path": "SDXL-Flash_Mini.safetensors@https://huggingface.co/sd-community/sdxl-flash-mini/resolve/main/SDXL-Flash_Mini.safetensors?download=true", - "preview": "SDXL-Flash_Mini.jpg", - "desc": "Introducing the new fast model SDXL Flash (Mini), we learned that all fast XL models work fast, but the quality decreases, and we also made a fast model, but it is not as fast as LCM, Turbo, Lightning and Hyper, but the quality is higher.", - "extras": "sampler: DEIS, steps: 40, cfg_scale: 6.0", - "experimental": true } } diff --git a/data/reference-nunchaku.json b/data/reference-nunchaku.json index 17d49437e..15b129ce9 100644 --- a/data/reference-nunchaku.json +++ b/data/reference-nunchaku.json @@ -295,5 +295,12 @@ "desc": "Nunchaku-Lite quantization using precompiled Kernels", "size": 10.92, "date": "2026 August" + }, + "MiniMaxAI MiniMax-H3 Nunchaku-Lite": { + "path": "rootonchair/MiniMax-H3-nunchaku-lite-int4", + "preview": "OzzyGT/MiniMax_H3_sdnq_dynamic_4bit.jpg", + "desc": "Nunchaku-Lite quantization using precompiled Kernels", + "size": 23.70, + "date": "2026 September" } } diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index e95c40585..a9ed76cd1 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit e95c40585f8eb2d8ad0238ea7512ddf3e7fdcb23 +Subproject commit a9ed76cd116aa666b5bab00e37eddd8edf48b01c diff --git a/modules/attention/dispatcher.py b/modules/attention/dispatcher.py index 94c817949..6a8912347 100644 --- a/modules/attention/dispatcher.py +++ b/modules/attention/dispatcher.py @@ -72,7 +72,7 @@ def get_hf_api_hijack(user_agent = None): # pylint: disable=unused-argument def hijack_kernels(): global orig_get_kernel # pylint: disable=global-statement try: - install('kernels==0.16.0') + install('kernels==0.16.1') import kernels import kernels.utils log.debug(f'Attention dispatcher: kernels={kernels.__version__}') diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index 289dbaf2f..40cd29e97 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -644,21 +644,16 @@ def try_load_lora(name, network_on_disk, lora_scale, *, continue if not shapes_match(sd_module, target_w["lora_down.weight"], target_w["lora_up.weight"]): - log.warning( - f'Network load: type=LoRA name="{name}" arch={arch_name} key={network_key}' - f' lora={target_w["lora_down.weight"].shape[1]}x{target_w["lora_up.weight"].shape[0]}' - f' module={getattr(sd_module, "weight", None).shape if hasattr(sd_module, "weight") else "?"}' - f' shape mismatch' - ) + if l.debug: + _module = f'{getattr(sd_module, "weight", None).shape if hasattr(sd_module, "weight") else "?"}' + log.warning(f'Network load: type=LoRA name="{name}" arch={arch_name} key={network_key} lora={target_w["lora_down.weight"].shape[1]}x{target_w["lora_up.weight"].shape[0]} module={_module} shape mismatch') mismatch += 1 continue if "diff_b" in target_w and not bias_delta_fits(sd_module, target_w["diff_b"]): - log.warning( - f'Network load: type=LoRA name="{name}" arch={arch_name} key={network_key}' - f' bias={tuple(target_w["diff_b"].shape)} module={tuple(sd_module.bias.shape)}' - f' bias shape mismatch' - ) + if l.debug: + _bias = f'bias={tuple(target_w["diff_b"].shape)} module={tuple(sd_module.bias.shape)}' + log.warning(f'Network load: type=LoRA name="{name}" arch={arch_name} key={network_key} {_bias} bias shape mismatch') mismatch += 1 continue diff --git a/modules/minimax/minimax_ui.py b/modules/minimax/minimax_ui.py index a101f521a..d452c7f75 100644 --- a/modules/minimax/minimax_ui.py +++ b/modules/minimax/minimax_ui.py @@ -36,7 +36,8 @@ def create_ui(prompt, _negative, styles, overrides, script_inputs, mp4_fps, mp4_ random_seed = ToolButton(ui_symbols.random, elem_id='minimax_seed_random') random_seed.click(fn=lambda: -1, show_progress='hidden', inputs=[], outputs=[seed]) with gr.Row(): - audio_enable = gr.Checkbox(label='Enable audio', value=True, elem_id="minimax_audio_enable") + enable_audio = gr.Checkbox(label='Enable audio', value=True, elem_id="minimax_audio_enable") + enable_preview = gr.Checkbox(label='Enable preview', value=True, elem_id="minimax_preview_enable") with gr.Accordion(open=False, label="Input media", elem_id='minimax_input_media_accordion', visible=True) as input_accordion: with gr.Row(): init_image = gr.Image(label='Image', elem_id='minimax_init_image', type='pil', image_mode='RGB', width=256, height=256) @@ -97,7 +98,8 @@ def create_ui(prompt, _negative, styles, overrides, script_inputs, mp4_fps, mp4_ mp4_fps, mp4_interpolate, mp4_codec, mp4_ext, mp4_opt, mp4_video, mp4_frames, mp4_sf, mp4_thumb, mp4_scale, mp4_upscaler, - audio_enable, + enable_audio, + enable_preview, overrides, ] video_outputs = [ diff --git a/modules/minimax/minimax_video.py b/modules/minimax/minimax_video.py index 85d86fd73..a95ba1cc4 100644 --- a/modules/minimax/minimax_video.py +++ b/modules/minimax/minimax_video.py @@ -88,7 +88,7 @@ def generate(task_id, _ui_state, mp4_fps, mp4_interpolate, mp4_codec, mp4_ext, mp4_opt, mp4_video, mp4_frames, mp4_sf, mp4_thumb, mp4_scale, mp4_upscaler, - audio_enable, + enable_audio, enable_preview, _overrides, *args, **_kwargs, @@ -144,7 +144,7 @@ def generate(task_id, _ui_state, outpath_samples=paths.resolve_output_path(shared.opts.outdir_samples, shared.opts.outdir_video), ops=['video'], ) - video_minimax.apply_overrides(p, shared.sd_model, still=False, audio=audio_enable) + video_minimax.apply_overrides(p, shared.sd_model, still=False, audio=enable_audio, preview=enable_preview) video_minimax.set_sampler_shift(shared.sd_model, video_shift=video_shift, audio_shift=audio_shift) log.debug(f'Video: engine="{engine}" model="{model}" workflow={workflow} cls={shared.sd_model.__class__.__name__} shift={video_shift}:{audio_shift} kwargs={p.task_args}') processing.fix_seed(p) @@ -168,7 +168,7 @@ def generate(task_id, _ui_state, sd_models.offload_ondemand(shared.sd_model, reason='finish', force=True) # force offload all loaded modules to cpu devices.torch_gc(force=True) # free gpu memory before saving video - audio = getattr(processed, 'audio', None) if audio_enable else None + audio = getattr(processed, 'audio', None) if enable_audio else None if audio is not None: audio = audio[0].float().cpu() if audio.ndim == 3 else audio.float().cpu() aac_sample_rate = getattr(shared.sd_model, 'audio_sampling_rate', 32000) diff --git a/modules/modular_load.py b/modules/modular_load.py index 3579b6f72..97ac13a12 100644 --- a/modules/modular_load.py +++ b/modules/modular_load.py @@ -38,7 +38,7 @@ def is_modular(obj) -> bool: return 'Modular' in cls.__name__ -def preload_components(pipe, workflow: str | None, load_config: dict | None = None) -> dict: +def preload_components(pipe, workflow: str | None, load_config: dict | None = None, loaded: dict | None = None) -> dict: """Load the denoiser and text encoder through the shared loaders rather than the pipeline's own. `load_components` fetches every component into the pipeline's cache directory with no @@ -53,8 +53,10 @@ def preload_components(pipe, workflow: str | None, load_config: dict | None = No """ from pipelines import generic specs = getattr(pipe, '_component_specs', {}) # pylint: disable=protected-access - loaded = {} + loaded = loaded or {} for name in missing_components(pipe, workflow): + if name in loaded: + continue spec = specs.get(name) if spec is None or getattr(spec, 'default_creation_method', None) != 'from_pretrained': continue @@ -71,7 +73,7 @@ def preload_components(pipe, workflow: str | None, load_config: dict | None = No elif origin.startswith('transformers') and ('text_encoder' in name): # shared substitution is on: the map matches class plus a substring of the repo name, so its entries have to run narrow before broad component = generic.load_text_encoder(repo, cls_name=cls, load_config=load_config, subfolder=subfolder) - if 'transformer' in name: + if ('transformer' in name) and (component is None): # fallback for component with remote-code as it does not have resolvable cls component = generic.load_transformer(repo, cls_name=None, load_config=load_config, subfolder=subfolder, trust_remote_code=True) if component is not None: @@ -96,7 +98,15 @@ def missing_components(pipe, workflow: str | None) -> list: return [name for name in names if getattr(pipe, name, None) is None] -def load_modular_pipe(repo_cls, repo: str, workflow: str | None = None, revision: str | None = None, offline_args: dict | None = None, base: bool = False, load_config: dict | None = None): +def load_modular_pipe(repo_cls, + repo: str, + workflow: str | None = None, + revision: str | None = None, + offline_args: dict | None = None, + base: bool = False, + load_config: dict | None = None, + loaded: dict | None = None, + ): if repo_cls is None or isinstance(repo_cls, str): log.error(f'Load modular: repo="{repo}" cls="{repo_cls}" pipeline class not found: diffusers too old') return None @@ -112,7 +122,7 @@ def load_modular_pipe(repo_cls, repo: str, workflow: str | None = None, revision **offline_args, ) # the workflow restricts the component fetch only: passing it to from_pretrained instead would prune the blocks tree to one task and disable runtime dispatch between them - preloaded = preload_components(pipe, workflow, load_config=load_config) + preloaded = preload_components(pipe, workflow, load_config=load_config, loaded=loaded) if preloaded: pipe.update_components(**preloaded) # registered before the rest, which load_components then skips log.debug(f'Load modular: cls={pipe.__class__.__name__} preloaded={list(preloaded)}') diff --git a/modules/video_models/models_def.py b/modules/video_models/models_def.py index 758d56ac2..cbf37b192 100644 --- a/modules/video_models/models_def.py +++ b/modules/video_models/models_def.py @@ -771,6 +771,18 @@ try: image_hijack=False, vae_hijack=False, vae_remote=False), + Model(name='MiniMax H3 Nunchaku-Lite', + url='https://huggingface.co/rootonchair/MiniMax-H3-nunchaku-lite-int4', + repo='rootonchair/MiniMax-H3-nunchaku-lite-int4', + repo_cls='MiniMaxH3ModularPipeline', + workflow='fl2va', + base=True, + te_cls=None, + dit_cls=None, + te_hijack=False, + image_hijack=False, + vae_hijack=False, + vae_remote=False), Model(name='MiniMax H3 VDN', url='https://huggingface.co/OpenVDN/vdn-minimax-h3', repo='OpenVDN/vdn-minimax-h3', diff --git a/modules/video_models/video_minimax.py b/modules/video_models/video_minimax.py index 658ac1c75..f52697689 100644 --- a/modules/video_models/video_minimax.py +++ b/modules/video_models/video_minimax.py @@ -5,7 +5,7 @@ from modules.logger import log MIN_LATENT_FRAMES = 7 # decoder floor: fewer latent frames leave the chunked decode with nothing to emit -def apply_overrides(p, pipe, still: bool = False, audio: bool = True): +def apply_overrides(p, pipe, still: bool = False, audio: bool = True, preview: bool = False): """Per-generation constraints shared by the video tab and the image path: canvas and frame alignment, the bespoke scheduler guard, tiling, and the audio/still toggles.""" if still: @@ -40,6 +40,13 @@ def apply_overrides(p, pipe, still: bool = False, audio: bool = True): p.task_args['output_type'] = 'pil' if still else 'np' p.video_still = still + if preview: + from pipelines.minimax.minimax_latents import unpack_latents + pipe.custom_unpack_latents = unpack_latents # add a helper to unpack the video latents from the block state + else: + if hasattr(pipe, 'custom_unpack_latents'): + del pipe.custom_unpack_latents + def set_still(pipe, enabled: bool = True): """Toggle sub-floor generation for single-frame output. The duration floor is lifted only diff --git a/pipelines/generic_transformer.py b/pipelines/generic_transformer.py index 801431e15..a33b1192c 100644 --- a/pipelines/generic_transformer.py +++ b/pipelines/generic_transformer.py @@ -24,7 +24,6 @@ def load_transformer( override_slot='primary', trust_remote_code=False, **kwargs): - """Load a DiT transformer from the base repo, or from a user-selected single file when the slot's UNET override dropdown is set. @@ -164,19 +163,19 @@ def load_transformer( **load_kwargs, ) - # 4. default loading from local file (also the fallback when an incompatible override is dropped above) # 5. default loading from diffusers repo (also the fallback when an incompatible override is dropped above) + # 4. default loading from diffusers repo (also the fallback when an incompatible override is dropped above) else: transformer = load_from_repo() # mark the dropdown selection as loaded so the slot's onchange callback, does not force a redundant full reload for an already-consumed override - if transformer is not None and override_name is not None and getattr(shared.opts, override_opt, None) == override_name: + if (transformer is not None) and (override_name is not None) and getattr(shared.opts, override_opt, None) == override_name: setattr(sd_unet, tracker_attr, override_name) sd_models.allow_post_quant = False # we already handled it if shared.opts.diffusers_offload_mode != 'none' and transformer is not None: sd_models.move_model(transformer, devices.cpu) - if transformer is not None and not hasattr(transformer, 'quantization_config'): # attach quantization_config + if (transformer is not None) and not hasattr(transformer, 'quantization_config'): # attach quantization_config if hasattr(transformer, 'config') and hasattr(transformer.config, 'quantization_config'): transformer.quantization_config = transformer.config.quantization_config elif (quant_type is not None) and (quant_args.get('quantization_config', None) is not None): diff --git a/pipelines/minimax/minimax_nunchaku.py b/pipelines/minimax/minimax_nunchaku.py new file mode 100644 index 000000000..d72de72f4 --- /dev/null +++ b/pipelines/minimax/minimax_nunchaku.py @@ -0,0 +1,20 @@ +import diffusers +from modules import shared +from modules.logger import log + + +def load_nunchaku(repo_id, load_config=None): + load_config = load_config or {} + + from modules.attention import hijack_kernels + hijack_kernels() + + cls_name = diffusers.MiniMaxH3Transformer3DModel + log.debug(f'Load model: transformer="{repo_id}" subfolder="calibrated-8x20" cls={cls_name.__name__} loader="nunchaku-lite" args={load_config}') + transformer = cls_name.from_pretrained( + repo_id, + subfolder="calibrated-8x20", + cache_dir=shared.opts.hfcache_dir, + **load_config, + ) + return transformer diff --git a/pipelines/model_minimax.py b/pipelines/model_minimax.py index 964f8629a..720d0313c 100644 --- a/pipelines/model_minimax.py +++ b/pipelines/model_minimax.py @@ -15,6 +15,14 @@ def load_minimax(checkpoint_info, diffusers_load_config = None, workflow: str | workflow = (workflow or getattr(checkpoint_info, 'subfolder', None) or 'fl2va').lower() # one repo holds both checkpoint partitions; reference entries select ref2va via the subfolder tag log.debug(f'Load model: type=MiniMaxH3 repo="{repo_id}" workflow={workflow} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype}') + loaded = {} + if 'nunchaku-lite' in repo_id.lower(): + from pipelines.minimax.minimax_nunchaku import load_nunchaku + transformer = load_nunchaku(repo_id, load_config=diffusers_load_config) + if transformer is not None: + loaded['transformer'] = transformer + repo_id = 'OzzyGT/MiniMax_H3_sdnq_dynamic_4bit' # nunchaku repo does not contain non-transformer modules + sd_models.warn_group_offload(min_vram=20) repo_cls = diffusers.MiniMaxH3ModularPipeline pipe = load_modular_pipe( @@ -24,6 +32,7 @@ def load_minimax(checkpoint_info, diffusers_load_config = None, workflow: str | offline_args=offline_args, base=True, load_config=diffusers_load_config, + loaded=loaded, ) if pipe is None: return None @@ -34,8 +43,9 @@ def load_minimax(checkpoint_info, diffusers_load_config = None, workflow: str | pipe.sdnext_supported_min_frames = int(pipe.min_duration * pipe.fps) # fresh pipes report the true floor; still mode gates per instance video_load.loaded_model = None # image-path load invalidates the video tab's name cache - # if hasattr(pipe, 'vae'): - # pipe.vae = pipe.vae.to(torch.float16) # minimax loads vae in float32 + if hasattr(pipe, 'vae'): + import torch + pipe.vae = pipe.vae.to(torch.float16) # minimax loads vae in float32 if hasattr(pipe, 'vae') and hasattr(pipe.vae, 'enable_tiling'): pipe.vae.enable_tiling() From c3a75363b92664660ee7437d4f379cdc5966a534 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 13:08:34 +0200 Subject: [PATCH 205/270] lint Signed-off-by: Vladimir Mandic --- modules/theme.py | 3 ++- requirements.txt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/theme.py b/modules/theme.py index 0c7e833e0..3717714b7 100644 --- a/modules/theme.py +++ b/modules/theme.py @@ -17,7 +17,8 @@ if TYPE_CHECKING: gradio_theme = gr.themes.Base() -opts = SimpleNamespace(**readfile('config.json')) +dct: dict = readfile('config.json') +opts = SimpleNamespace(**dct) if 'theme_type' not in opts.__dict__: opts.theme_type = 'Modern' if 'gradio_theme' not in opts.__dict__: diff --git a/requirements.txt b/requirements.txt index daf372d62..7d5167b82 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,7 +29,7 @@ safetensors==0.8.0 peft==0.20.0 httpx==0.28.1 requests==2.34.2 -tqdm==4.70.0 +tqdm==4.70.1 accelerate==1.15.0 einops==0.8.2 huggingface_hub==1.31.0 From 01e78976219825d2efb3421c38ed0471148ad0b0 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 13:44:53 +0200 Subject: [PATCH 206/270] guard against null config Signed-off-by: Vladimir Mandic --- modules/theme.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/theme.py b/modules/theme.py index 3717714b7..34ff51961 100644 --- a/modules/theme.py +++ b/modules/theme.py @@ -17,7 +17,7 @@ if TYPE_CHECKING: gradio_theme = gr.themes.Base() -dct: dict = readfile('config.json') +dct: dict = readfile('config.json', as_type='dict') opts = SimpleNamespace(**dct) if 'theme_type' not in opts.__dict__: opts.theme_type = 'Modern' From 5ffc71bd3922424880387a364c723122fdf47bf9 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 13:59:24 +0200 Subject: [PATCH 207/270] increase progress timeout Signed-off-by: Vladimir Mandic --- modules/minimax/minimax_video.py | 2 +- ui/dist/sdnext.mjs | 12 +++++++++++- ui/dist/sdnext.mjs.map | 4 ++-- ui/progressBar.ts | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/modules/minimax/minimax_video.py b/modules/minimax/minimax_video.py index a95ba1cc4..2e29bd031 100644 --- a/modules/minimax/minimax_video.py +++ b/modules/minimax/minimax_video.py @@ -146,7 +146,7 @@ def generate(task_id, _ui_state, ) video_minimax.apply_overrides(p, shared.sd_model, still=False, audio=enable_audio, preview=enable_preview) video_minimax.set_sampler_shift(shared.sd_model, video_shift=video_shift, audio_shift=audio_shift) - log.debug(f'Video: engine="{engine}" model="{model}" workflow={workflow} cls={shared.sd_model.__class__.__name__} shift={video_shift}:{audio_shift} kwargs={p.task_args}') + log.debug(f'Video: engine="{engine}" model="{model}" workflow={workflow} cls={shared.sd_model.__class__.__name__} audio={enable_audio} preview={enable_preview} shift={video_shift}:{audio_shift} kwargs={p.task_args}') processing.fix_seed(p) p.ops.append('video') p.scripts = scripts_manager.scripts_video diff --git a/ui/dist/sdnext.mjs b/ui/dist/sdnext.mjs index d439a7bd6..e290d2031 100644 --- a/ui/dist/sdnext.mjs +++ b/ui/dist/sdnext.mjs @@ -10997,7 +10997,7 @@ async function sendNotification() { // ui/progressBar.ts var lastState = {}; var refreshInterval = 1e4; -var progressTimeout = 180; +var progressTimeout = 600; var startTimeout = 5; function setRefreshInterval() { refreshInterval = window.opts.live_preview_refresh_period || 500; @@ -12341,6 +12341,16 @@ function showAllSettings() { elem.style.display = "block"; }); } +function openSettingsSection(sectionId) { + const settingsTab = gradioApp().getElementById("tab_settings"); + const settingsButton = settingsTab ? gradioApp().querySelector(`button[aria-controls="${settingsTab.id}"]`) : null; + settingsButton?.click(); + const section = gradioApp().getElementById(`settings_section_tab_${sectionId}`); + const sectionButton = section ? gradioApp().querySelector(`button[aria-controls="${section.id}"]`) : null; + sectionButton?.click(); + section?.scrollIntoView({ behavior: "smooth", block: "start" }); +} +window.openSettingsSection = openSettingsSection; function markIfModified(setting_name, value) { if (!opts_metadata[setting_name]) return; const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`); diff --git a/ui/dist/sdnext.mjs.map b/ui/dist/sdnext.mjs.map index 5cc6d59d2..c9f9d3ee6 100644 --- a/ui/dist/sdnext.mjs.map +++ b/ui/dist/sdnext.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist/jquery.js", "../js/iframeResizer.js", "../../node_modules/.pnpm/exifr@7.1.3/node_modules/exifr/dist/full.umd.js", "../../node_modules/.pnpm/wheel@1.0.0/node_modules/wheel/index.js", "../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js", "../../node_modules/.pnpm/amator@1.1.0/node_modules/amator/index.js", "../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/index.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/kinetic.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeTextSelectionInterceptor.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/transform.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeSvgController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeDomController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/index.js", "../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist-module/wrappers/jquery.node-module-wrapper.js", "../vendor.ts", "../logger.ts", "../authWrap.ts", "../timers.ts", "../script.ts", "../changelog.ts", "../control.ts", "../extraNetworks.ts", "../generationParams.ts", "../imageParams.ts", "../notification.ts", "../progressBar.ts", "../dynamicUI.ts", "../ui.ts", "../inputAccordion.ts", "../indexdb.ts", "../logMonitor.ts", "../settings.ts", "../monitor.ts", "../promptChecker.ts", "../js/sha256.ts", "../gallery.ts", "../imageViewer.ts", "../autocomplete_xn.ts", "../autocomplete.ts", "../setHints.ts", "../contextMenus.ts", "../uiConfig.ts", "../loader.ts", "../legacy.ts", "../startup.ts", "../extensions.ts", "../dragDrop.ts", "../civitai.ts", "../guidance.ts", "../timesheet.ts", "../history.ts", "../storage.ts", "../aspectRatioOverlay.ts", "../resolutionLock.ts", "../editAttention.ts", "../../node_modules/.pnpm/jquery-sparkline@2.4.0/node_modules/jquery-sparkline/jquery.sparkline.js", "../gpu.ts"], - "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.background = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n if (window.opts.diffusers_enable_embed) {\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n } else {\n this.embed = new XnIndex([]);\n }\n // Wildcards: [{name}, ...]\n if (window.opts.wildcards_enabled) {\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n } else {\n this.wildcard = new XnIndex([]);\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 5000);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], - "mappings": "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", + "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction openSettingsSection(sectionId: string) {\n const settingsTab = gradioApp().getElementById('tab_settings');\n const settingsButton = settingsTab ? gradioApp().querySelector(`button[aria-controls=\"${settingsTab.id}\"]`) : null;\n settingsButton?.click();\n const section = gradioApp().getElementById(`settings_section_tab_${sectionId}`);\n const sectionButton = section ? gradioApp().querySelector(`button[aria-controls=\"${section.id}\"]`) : null;\n sectionButton?.click();\n section?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n}\nwindow.openSettingsSection = openSettingsSection;\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.background = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n if (window.opts.diffusers_enable_embed) {\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n } else {\n this.embed = new XnIndex([]);\n }\n // Wildcards: [{name}, ...]\n if (window.opts.wildcards_enabled) {\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n } else {\n this.wildcard = new XnIndex([]);\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 5000);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], + "mappings": "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", "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] } diff --git a/ui/progressBar.ts b/ui/progressBar.ts index f1881fbd7..e08922239 100644 --- a/ui/progressBar.ts +++ b/ui/progressBar.ts @@ -4,7 +4,7 @@ import { sendNotification } from './notification'; let lastState: any = {}; let refreshInterval = 10000; -const progressTimeout = 180; +const progressTimeout = 600; const startTimeout = 5; export function setRefreshInterval() { From 1df487f01c74c543eac6411837de236ef515ca28 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 14:46:21 +0200 Subject: [PATCH 208/270] dlss framegen align fps Signed-off-by: Vladimir Mandic --- scripts/dlss_ext.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index 404c81b88..3b7a82c47 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -62,7 +62,7 @@ def create_ui(parent): with gr.Row(): fg_enabled = gr.Checkbox(label='FG enable', value=False, elem_id='dlss_fg_enabled') with gr.Row(): - fg_source_fps = gr.Dropdown(label='Source FPS', choices=FPS_CHOICES, value='24', elem_id='dlss_fg_source_fps') + fg_source_fps = gr.Dropdown(label='Source FPS', choices=FPS_CHOICES, value='23.976', elem_id='dlss_fg_source_fps') fg_target_fps = gr.Dropdown(label='Target FPS', choices=FPS_CHOICES, value='60', elem_id='dlss_fg_target_fps') with gr.Row(): fg_engine = gr.Dropdown(label='Engine', choices=['Auto', 'Native DLSSG', 'Cascade'], value='Auto', elem_id='dlss_fg_engine') @@ -219,6 +219,10 @@ def neuralrender(pkg_path, images, nr_style, nr_intensity, nr_local_tone, nr_loc def framegen(pkg_path, images, fg_source_fps, fg_target_fps, fg_engine): + # source and target fps need to be aligned to closest item from FPS_CHOICES + FPS_CHOICES = ['23.976', '25', '29.97', '30', '50', '59.94', '60', '90', '119.88', '120', '144', '165', '180', '240', '360', '480'] + fg_source_fps = min(FPS_CHOICES, key=lambda x: abs(float(x) - float(fg_source_fps))) + fg_target_fps = min(FPS_CHOICES, key=lambda x: abs(float(x) - float(fg_target_fps))) try: if len(images) < 2: log.warning('DLSS: FrameGen requires at least two frames, skipping') From a3b8a7e353dcda1d127eaee2de719dbd3f46805c Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 14:47:39 +0200 Subject: [PATCH 209/270] dlss handle errors Signed-off-by: Vladimir Mandic --- scripts/dlss_ext.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index 3b7a82c47..1c744a5f3 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -176,12 +176,12 @@ def supersample(pkg_path, images, ss_vsr_quality, ss_size_mode, ss_scale_factor, if response.get('status') != 'ok': error = response.get('error') or {} log.error(f'DLSS: {error.get("message")}') - return None + return images return c.nchw_to_images(response.get('result')) except Exception as e: log.error(f'DLSS: {e}') errors.display(e, 'DLSS') - return None + return images def neuralrender(pkg_path, images, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset): @@ -215,18 +215,17 @@ def neuralrender(pkg_path, images, nr_style, nr_intensity, nr_local_tone, nr_loc except Exception as e: log.error(f'DLSS: {e}') errors.display(e, 'DLSS') - return None + return images def framegen(pkg_path, images, fg_source_fps, fg_target_fps, fg_engine): # source and target fps need to be aligned to closest item from FPS_CHOICES - FPS_CHOICES = ['23.976', '25', '29.97', '30', '50', '59.94', '60', '90', '119.88', '120', '144', '165', '180', '240', '360', '480'] fg_source_fps = min(FPS_CHOICES, key=lambda x: abs(float(x) - float(fg_source_fps))) fg_target_fps = min(FPS_CHOICES, key=lambda x: abs(float(x) - float(fg_target_fps))) try: if len(images) < 2: log.warning('DLSS: FrameGen requires at least two frames, skipping') - return None + return images options = { 'ai_gpu_uuid': 'auto', 'engine': fg_engine } frames = c.images_to_nchw(images) if debug: @@ -239,12 +238,12 @@ def framegen(pkg_path, images, fg_source_fps, fg_target_fps, fg_engine): if response.get('status') != 'ok': error = response.get('error') or {} log.error(f'DLSS: {error.get("message")}') - return None + return images return c.nchw_to_images(response.get('result')) except Exception as e: log.error(f'DLSS: {e}') errors.display(e, 'DLSS') - return None + return images def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processed | scripts_postprocessing.PostprocessedImage, From 489cbf804875e25c67bda7f6f95b7aa4ea614d49 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 13 Sep 2026 16:31:16 +0200 Subject: [PATCH 210/270] lora: keep parsed network data through pipeline Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/control/proc/hed.py | 4 +-- modules/extra_networks.py | 25 ++++++++------- modules/ltx/ltx_util.py | 2 +- modules/processing.py | 3 +- modules/processing_diffusers.py | 2 +- pipelines/minimax/minimax_nunchaku.py | 45 +++++++++++++++++++++++++-- scripts/dlss_ext.py | 12 +++---- scripts/prompt_enhance_ext.py | 4 ++- 9 files changed, 72 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7ed11f00..e073bd292 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -127,6 +127,7 @@ Plus inevitable bug-fixes... - log: ansi color handling - lora: cleanup tags - lora: support transformer ref models + - lora: keep parsed network data through pipeline - lucida: handle requirements - lumina-dimoo: attention-kwargs, thanks @Anai-Guo - metadata: fix wildcard info diff --git a/modules/control/proc/hed.py b/modules/control/proc/hed.py index 06610921e..fb04e24fe 100644 --- a/modules/control/proc/hed.py +++ b/modules/control/proc/hed.py @@ -102,8 +102,8 @@ class HEDdetector: if scribble: detected_map = nms(detected_map, 127, 3.0) detected_map = cv2.GaussianBlur(detected_map, (0, 0), 3.0) - detected_map[detected_map > 4] = 255 - detected_map[detected_map < 255] = 0 + detected_map[detected_map > 4] = 255 # pylint: disable=unsupported-assignment-operation + detected_map[detected_map < 255] = 0 # pylint: disable=unsupported-assignment-operation if opts.control_move_processor: self.model.to('cpu') if output_type == "pil": diff --git a/modules/extra_networks.py b/modules/extra_networks.py index 3d57d4d7f..678e21494 100644 --- a/modules/extra_networks.py +++ b/modules/extra_networks.py @@ -168,17 +168,20 @@ def parse_prompt(prompt: str | None) -> tuple[str, defaultdict[str, list[ExtraNe return updated_prompt, res -def parse_prompts(prompts: list[str], extra_data: defaultdict[str, list[ExtraNetworkParams]] | None = None): - updated_prompt_list: list[str] = [] - extra_data = extra_data or defaultdict(list) +def parse_prompts( + prompts: list[str], + extra_data: defaultdict[str, list[ExtraNetworkParams]] | None = None, +): + updated_prompts: list[str] = [] + if extra_data is None: + extra_data = defaultdict(list) for prompt in prompts: updated_prompt, parsed_extra_data = parse_prompt(prompt) - if not extra_data: - extra_data = parsed_extra_data - elif parsed_extra_data: - extra_data = parsed_extra_data - else: - pass - updated_prompt_list.append(updated_prompt) + if parsed_extra_data: + for key, values in parsed_extra_data.items(): + for item in values: + if item not in extra_data[key]: + extra_data[key].append(item) - return updated_prompt_list, extra_data + updated_prompts.append(updated_prompt) + return updated_prompts, extra_data diff --git a/modules/ltx/ltx_util.py b/modules/ltx/ltx_util.py index bfbffa1bb..76f8ec9d7 100644 --- a/modules/ltx/ltx_util.py +++ b/modules/ltx/ltx_util.py @@ -249,7 +249,7 @@ def get_conditions(width, height, condition_strength, condition_images, conditio def get_prompts(p): prompt = shared.prompt_styles.apply_styles_to_prompt(p.prompt, p.styles) negative = shared.prompt_styles.apply_negative_styles_to_prompt(p.negative_prompt, p.styles) - prompts, networks = extra_networks.parse_prompts([prompt]) + prompts, networks = extra_networks.parse_prompts([prompt], p.network_data) prompt = prompts[0] if len(prompts) > 0 else prompt return prompt, negative, networks diff --git a/modules/processing.py b/modules/processing.py index ad407b004..3adb1a721 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -510,8 +510,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: p.scripts.before_process_batch(p, batch_number=n, prompts=p.prompts, seeds=p.seeds, subseeds=p.subseeds) if not p.prompts: break - p.prompts, p.network_data = extra_networks.parse_prompts(p.prompts) - + p.prompts, p.network_data = extra_networks.parse_prompts(p.prompts, p.network_data) if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner): p.scripts.process_batch(p, batch_number=n, prompts=p.prompts, seeds=p.seeds, subseeds=p.subseeds) diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index fcc33037a..3b8d5e129 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -307,7 +307,7 @@ def process_hires(p: processing.StableDiffusionProcessing, output): sched_eta = p.scheduler_eta if p.scheduler_eta is not None else shared.opts.scheduler_eta if len(p.refiner_prompt) > 0: prompts = len(output.images)* [p.refiner_prompt] - prompts, p.network_data = extra_networks.parse_prompts(prompts) + prompts, p.network_data = extra_networks.parse_prompts(prompts, p.network_data) reset_prompts = True if reset_prompts or ('base' in p.skip): extra_networks.activate(p) diff --git a/pipelines/minimax/minimax_nunchaku.py b/pipelines/minimax/minimax_nunchaku.py index d72de72f4..bb3baf248 100644 --- a/pipelines/minimax/minimax_nunchaku.py +++ b/pipelines/minimax/minimax_nunchaku.py @@ -1,5 +1,5 @@ import diffusers -from modules import shared +from modules import shared, devices from modules.logger import log @@ -9,8 +9,9 @@ def load_nunchaku(repo_id, load_config=None): from modules.attention import hijack_kernels hijack_kernels() + ## naive approach using diffusers class cls_name = diffusers.MiniMaxH3Transformer3DModel - log.debug(f'Load model: transformer="{repo_id}" subfolder="calibrated-8x20" cls={cls_name.__name__} loader="nunchaku-lite" args={load_config}') + log.debug(f'Load model: transformer="{repo_id}" subfolder="calibrated-8x20" cls={cls_name.__name__} loader="nunchaku-lite" patch=False args={load_config}') transformer = cls_name.from_pretrained( repo_id, subfolder="calibrated-8x20", @@ -18,3 +19,43 @@ def load_nunchaku(repo_id, load_config=None): **load_config, ) return transformer + + +def load_nunchaku_patched(repo_id, load_config=None): # pylint: disable=unused-argument + import torch + from huggingface_hub import hf_hub_download + from diffusers.models.transformers.transformer_minimax_h3 import MiniMaxH3RotaryPosEmbed + + from modules.attention import hijack_kernels + hijack_kernels() + + from installer import install + install('git+https://github.com/rootonchair/nunchaku-lite', 'nunchaku-lite') + from nunchaku_lite import core + + filename = "svdq-int4_r32-minimax-h3-t2va.safetensors" + orig_repo = "MiniMaxAI/MiniMax-H3" + cls_name = diffusers.MiniMaxH3Transformer3DModel + + log.debug(f'Load model: transformer="{repo_id}" fn="{filename}" cls={cls_name.__name__} loader="nunchaku-lite" patch=True args={load_config}') + ckpt = hf_hub_download(repo_id, + filename=filename, + cache_dir=shared.opts.diffusers_dir + ) + config = diffusers.MiniMaxH3Transformer3DModel.load_config(orig_repo, subfolder="transformer") + with torch.device("meta"): + transformer: diffusers.MiniMaxH3Transformer3DModel = diffusers.MiniMaxH3Transformer3DModel.from_config(config) + + # rope.inv_freq is a non-persistent buffer (absent from the checkpoint), so the meta-assign load would leave it on the meta device — rebuild it off-meta first. + transformer.rope.inv_freq = MiniMaxH3RotaryPosEmbed(rope_freq_dim=transformer.config.rope_freq_dim, rope_theta=transformer.config.rope_theta).inv_freq # pylint: disable=no-member + core._patch_component(transformer, # pylint: disable=protected-access + ckpt, + target="manifest", + precision="int4", + torch_dtype=devices.dtype, + device=devices.device, + strict=True, + adapter_options=None, + assign=True, + ) + return transformer diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index 1c744a5f3..00a42670b 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -301,14 +301,14 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe t0 = time.time() if p: p.extra_generation_params["DLSSSuperSample"] = True - log.debug(f'DLSS: method=SuperSample quality="{ss_vsr_quality}" mode="{ss_size_mode}" scale={ss_scale_factor} width={ss_width} height={ss_height}') + log.info(f'DLSS: method=SuperSample quality="{ss_vsr_quality}" mode="{ss_size_mode}" scale={ss_scale_factor} width={ss_width} height={ss_height}') if ss_append: originals.extend(current_images) output = supersample(pkg_path, current_images, ss_vsr_quality, ss_size_mode, ss_scale_factor, ss_width, ss_height) if debug: log.trace(f'DLSS: method=SuperSample images={len(output) if output else 0} time={time.time() - t0:.3f}') if output: - images.extend(output) + images = output current_images = output t.ts('supersample', t0) @@ -318,14 +318,14 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe t0 = time.time() if p: p.extra_generation_params["DLSSNeuralRender"] = True - log.debug(f'DLSS: method=NeuralRender style={nr_style} intensity={nr_intensity} tone={nr_local_tone} structure={nr_local_structure} skin={nr_skin_structure} scale={nr_upscaling_factor} preset={nr_preset} mask={nr_automatic_mask} model={nr_model_preset}') + log.info(f'DLSS: method=NeuralRender style={nr_style} intensity={nr_intensity} tone={nr_local_tone} structure={nr_local_structure} skin={nr_skin_structure} scale={nr_upscaling_factor} preset={nr_preset} mask={nr_automatic_mask} model={nr_model_preset}') if nr_append: originals.extend(current_images) output = neuralrender(pkg_path, current_images, nr_style, nr_intensity, nr_local_tone, nr_local_structure, nr_skin_structure, nr_upscaling_factor, nr_preset, nr_automatic_mask, nr_model_preset) if debug: log.trace(f'DLSS: method=NeuralRender images={len(output) if output else 0} time={time.time() - t0:.3f}') if output: - images.extend(output) + images = output current_images = output t.ts('neuralrender', t0) @@ -333,12 +333,12 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe t0 = time.time() if p: p.extra_generation_params["DLSSFrameGen"] = True - log.debug(f'DLSS: method=FrameGen source={fg_source_fps} target={fg_target_fps} engine={fg_engine}') + log.info(f'DLSS: method=FrameGen source={fg_source_fps} target={fg_target_fps} engine={fg_engine}') output = framegen(pkg_path, current_images, fg_source_fps, fg_target_fps, fg_engine) if debug: log.trace(f'DLSS: method=FrameGen images={len(output) if output else 0} time={time.time() - t0:.3f}') if output: - images.extend(output) + images = output current_images = output t.ts('framegen', t0) diff --git a/scripts/prompt_enhance_ext.py b/scripts/prompt_enhance_ext.py index dfb4edba6..105c7fe8b 100644 --- a/scripts/prompt_enhance_ext.py +++ b/scripts/prompt_enhance_ext.py @@ -6,7 +6,7 @@ import torch import transformers import gradio as gr from PIL import Image -from modules import scripts_manager, shared, devices, errors, processing, sd_models, sd_modules, timer +from modules import scripts_manager, shared, devices, errors, processing, sd_models, sd_modules, timer, extra_networks from modules import ui_control_helpers from modules.sd_offload_aux import register_aux, deregister_aux, move_aux_to_gpu, offload_aux from modules.logger import log @@ -732,6 +732,8 @@ class PromptEnhanceScript(scripts_manager.Script): p.prompt = shared.prompt_styles.apply_styles_to_prompt(p.prompt, p.styles) p.negative_prompt = shared.prompt_styles.apply_negative_styles_to_prompt(p.negative_prompt, p.styles) shared.prompt_styles.apply_styles_to_extra(p) + prompts, p.network_data = extra_networks.parse_prompts([p.prompt], p.network_data) + p.prompt = prompts[0] p.styles = [] jobid = shared.state.begin('LLM') p.extra_generation_params['LLM'] = get_model_repo_from_display(llm_model) From cdc76c25c608a5fcd159d1a885d882aafe52dd5f Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 18:41:33 +0100 Subject: [PATCH 211/270] fix(json_helpers): make atomic saves work on windows, keep lock file writefile(atomic=True) renamed the temp file while it was still open, which Windows refuses, so every atomic save failed there and left a temp file behind. The temp file is now created with mkstemp, closed before os.replace and removed when the save fails; the replace retries briefly when another handle holds the target, which Windows reports as a permission error. Both helpers removed the .lock file after releasing it. That removal raced other holders on both platforms, and any failure switched locking off for the whole process without a log line. The lock file now stays in place; a failed release or a lock timeout is logged instead. writefile deep-copied and validated the live object in Python, so a concurrent insert into a shared dict raised "dictionary changed size during iteration" and dropped the save. dict.copy and list.copy run under the GIL, so the deep copy and the per-key validation now walk that snapshot; nested containers remain the caller's responsibility. test/test-json-helpers.py covers all three on Linux and Windows. --- modules/json_helpers.py | 54 +++++++---- test/test-json-helpers.py | 199 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 236 insertions(+), 17 deletions(-) create mode 100644 test/test-json-helpers.py diff --git a/modules/json_helpers.py b/modules/json_helpers.py index 4e6c5551a..5d9a6d707 100644 --- a/modules/json_helpers.py +++ b/modules/json_helpers.py @@ -1,5 +1,6 @@ import os import sys +import contextlib import time import json from typing import overload, Literal @@ -10,6 +11,18 @@ from modules.logger import log locking_available = True # used by file read/write locking +def replace_file(source: str, target: str, attempts: int = 10, delay: float = 0.05): + """os.replace that waits out a target another handle holds open, which Windows reports as a permission error.""" + for attempt in range(attempts): + try: + os.replace(source, target) + return + except PermissionError: + if attempt == attempts - 1: + raise + time.sleep(delay) + + @overload def readfile(filename: str | os.PathLike[str], silent: bool = False, lock: bool = False, *, as_type: Literal["dict"]) -> dict: ... @overload @@ -27,6 +40,8 @@ def readfile(filename: str | os.PathLike[str], silent: bool = False, lock: bool lock_file = fasteners.InterProcessReaderWriterLock(f"{filename}.lock") lock_file.logger.disabled = True # type: ignore - False positive. Bad typing in Fasteners. locked = lock_file.acquire_read_lock(blocking=True, timeout=3) + if not locked: + log.warning(f'File read lock: file="{filename}" timeout') except Exception as err: lock_file = None locking_available = False @@ -57,11 +72,9 @@ def readfile(filename: str | os.PathLike[str], silent: bool = False, lock: bool try: if locking_available and lock_file is not None: - lock_file.release_read_lock() - if locked and os.path.exists(f"{filename}.lock"): - os.remove(f"{filename}.lock") - except Exception: - locking_available = False + lock_file.release_read_lock() # the lock file stays: removing it after release races other holders + except Exception as err: + log.error(f'File read lock release: file="{filename}" {err}') if isinstance(data, list) and as_type == "dict": if not data: @@ -93,8 +106,9 @@ def writefile(obj: dict | list, filename: str | os.PathLike[str], mode="w", sile try: t0 = time.time() - data = copy.deepcopy(obj) # ensure keys/items aren't added/deleted during json.dumps - for k, v in obj.items() if isinstance(obj, dict) else []: # validate each key-by-key to avoid global exceptions + snapshot = obj.copy() if isinstance(obj, (dict, list)) else obj # dict.copy and list.copy run under the GIL, so a concurrent insert cannot interrupt them + data = copy.deepcopy(snapshot) + for k, v in list(data.items()) if isinstance(data, dict) else []: # validate each key-by-key to avoid global exceptions try: _tmp = json.dumps(v, indent=2, default=default, allow_nan=False, ensure_ascii=False) except Exception as err: @@ -111,6 +125,8 @@ def writefile(obj: dict | list, filename: str | os.PathLike[str], mode="w", sile lock_file = fasteners.InterProcessReaderWriterLock(f"{filename}.lock") if locking_available else None lock_file.logger.disabled = True # type: ignore - False positive. Bad typing in Fasteners. locked = lock_file.acquire_write_lock(blocking=True, timeout=3) if lock_file is not None else False + if not locked: + log.warning(f'File write lock: file="{filename}" timeout') except Exception as err: locking_available = False lock_file = None @@ -119,11 +135,17 @@ def writefile(obj: dict | list, filename: str | os.PathLike[str], mode="w", sile try: if atomic: - with tempfile.NamedTemporaryFile(mode=mode, encoding="utf8", delete=False, dir=os.path.dirname(filename)) as f: - f.write(output) - f.flush() - os.fsync(f.fileno()) - os.replace(f.name, filename) + fd, temp_name = tempfile.mkstemp(dir=os.path.dirname(os.path.abspath(filename)), prefix=f"{os.path.basename(filename)}.", suffix=".tmp") + try: + with os.fdopen(fd, mode, encoding="utf8") as f: + f.write(output) + f.flush() + os.fsync(f.fileno()) + replace_file(temp_name, filename) + except BaseException: + with contextlib.suppress(OSError): + os.remove(temp_name) + raise else: with open(filename, mode=mode, encoding="utf8") as file: file.write(output) @@ -136,8 +158,6 @@ def writefile(obj: dict | list, filename: str | os.PathLike[str], mode="w", sile try: if locking_available and lock_file is not None: - lock_file.release_write_lock() - if locked and os.path.exists(f"{filename}.lock"): - os.remove(f"{filename}.lock") - except Exception: - locking_available = False + lock_file.release_write_lock() # the lock file stays: removing it after release races other holders + except Exception as err: + log.error(f'File write lock release: file="{filename}" {err}') diff --git a/test/test-json-helpers.py b/test/test-json-helpers.py new file mode 100644 index 000000000..95e91ce31 --- /dev/null +++ b/test/test-json-helpers.py @@ -0,0 +1,199 @@ +#!/usr/bin/env python +""" +Offline tests for modules.json_helpers on Linux and Windows. + +Covers: + +- atomic saves replace a fresh or existing target and leave no temp file, including when the save fails +- an atomic save waits out a target another thread briefly holds open, which Windows otherwise refuses +- locking stays available under overlapping locked reads and writes and the lock file is left in place +- concurrent inserts into a shared dict never drop a save +- readfile returns what writefile wrote, as dict and as list + +No running server required. + +Usage: + python test/test-json-helpers.py +""" + +import importlib +import json +import os +import shutil +import sys +import tempfile +import threading + +script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, script_dir) +os.chdir(script_dir) +sys.argv = [sys.argv[0]] + +from modules.logger import log # pylint: disable=wrong-import-position +from modules import json_helpers # pylint: disable=wrong-import-position + + +class ErrorLog: + """Counts error lines from json_helpers while passing everything else to the real logger.""" + + def __init__(self, inner): + self.inner = inner + self.errors = [] + self.lock = threading.Lock() + + def error(self, message, *args, **kwargs): + with self.lock: + self.errors.append(str(message)) + + def count(self, needle): + return sum(1 for m in self.errors if needle in m) + + def __getattr__(self, name): + return getattr(self.inner, name) + + +def fresh_helper(): + importlib.reload(json_helpers) + json_helpers.log = ErrorLog(log) + return json_helpers + + +def run_threads(worker, count): + pool = [threading.Thread(target=worker, args=(n,)) for n in range(count)] + for t in pool: + t.start() + for t in pool: + t.join() + + +def leftovers(folder, target): + keep = {os.path.basename(target), os.path.basename(target) + '.lock'} + return sorted(set(os.listdir(folder)) - keep) + + +def test_atomic_save_replaces_target(folder): + jh = fresh_helper() + target = os.path.join(folder, 'atomic.json') + jh.writefile({'first': 1}, target, silent=True, atomic=True) + assert jh.readfile(target, silent=True, as_type='dict') == {'first': 1}, 'fresh target not written' + jh.writefile({'second': 2}, target, silent=True, atomic=True) + assert jh.readfile(target, silent=True, as_type='dict') == {'second': 2}, 'existing target not replaced' + assert leftovers(folder, target) == [], f'temp files left: {leftovers(folder, target)}' + assert jh.log.errors == [], jh.log.errors + + +def test_failed_atomic_save_leaves_no_temp(folder): + jh = fresh_helper() + target = os.path.join(folder, 'blocked.json') + os.mkdir(target) # a directory cannot be replaced by a file + jh.writefile({'x': 1}, target, silent=True, atomic=True) + assert jh.log.count('Save failed') == 1, jh.log.errors + assert os.path.isdir(target), 'target directory was replaced' + assert leftovers(folder, target) == [], f'temp files left: {leftovers(folder, target)}' + + +def test_atomic_save_waits_for_open_target(folder): + jh = fresh_helper() + target = os.path.join(folder, 'open.json') + jh.writefile({'v': 0}, target, silent=True) + opened = threading.Event() + release = threading.Event() + + def holder(_n): + with open(target, 'rb') as f: + f.read(1) + opened.set() + release.wait(5) + + thread = threading.Thread(target=holder, args=(0,)) + thread.start() + opened.wait(5) + threading.Timer(0.2, release.set).start() + jh.writefile({'v': 1}, target, silent=True, atomic=True) + thread.join() + assert jh.readfile(target, silent=True, as_type='dict') == {'v': 1}, 'save did not wait for the open target' + assert jh.log.errors == [], jh.log.errors + assert leftovers(folder, target) == [], f'temp files left: {leftovers(folder, target)}' + + +def test_locking_survives_overlap(folder, threads=8, iterations=25): + jh = fresh_helper() + target = os.path.join(folder, 'locked.json') + jh.writefile({'seed': 0}, target, silent=True) + + def worker(n): + for i in range(iterations): + if (n + i) % 2: + jh.writefile({'n': n, 'i': i}, target, silent=True, atomic=True) + else: + jh.readfile(target, silent=True, lock=True, as_type='dict') + + run_threads(worker, threads) + assert jh.locking_available, 'locking switched itself off' + assert jh.log.errors == [], jh.log.errors + assert os.path.exists(target + '.lock'), 'lock file was removed' + assert leftovers(folder, target) == [], f'temp files left: {leftovers(folder, target)}' + + +def test_concurrent_inserts_keep_every_save(folder, threads=4, per_thread=40): + jh = fresh_helper() + target = os.path.join(folder, 'cache.json') + cache = {} + payload = {'metadata': {f'k{i}': 'x' * 64 for i in range(200)}, 'tensors': list(range(500))} + + def worker(n): + for i in range(per_thread): + cache[f'{n}-{i}'] = payload + jh.writefile(cache, target, silent=True, atomic=True) + + run_threads(worker, threads) + assert jh.log.count('changed size') == 0, f'{jh.log.count("changed size")} saves dropped' + assert jh.log.errors == [], jh.log.errors + with open(target, encoding='utf8') as f: + assert len(json.load(f)) == threads * per_thread, 'last save is incomplete' + + +def test_roundtrip(folder): + jh = fresh_helper() + target = os.path.join(folder, 'roundtrip.json') + data = {'a': 1, 'b': [1, 2, 3], 'c': {'d': 'e'}, 'f': None} + jh.writefile(data, target, silent=True) + assert jh.readfile(target, silent=True, as_type='dict') == data + jh.writefile([1, 'two', {'three': 3}], target, silent=True, atomic=True) + assert jh.readfile(target, silent=True, as_type='list') == [1, 'two', {'three': 3}] + assert jh.readfile(os.path.join(folder, 'missing.json'), silent=True, as_type='dict') == {} + assert jh.log.errors == [], jh.log.errors + + +def run_all(): + tests = [ + test_atomic_save_replaces_target, + test_failed_atomic_save_leaves_no_temp, + test_atomic_save_waits_for_open_target, + test_locking_survives_overlap, + test_concurrent_inserts_keep_every_save, + test_roundtrip, + ] + passed = 0 + failed = 0 + for fn in tests: + folder = tempfile.mkdtemp(prefix='sdnext-json-') + try: + fn(folder) + log.info(f' PASS {fn.__name__}') + passed += 1 + except Exception as e: + log.error(f' FAIL {fn.__name__}: {type(e).__name__}: {e}') + failed += 1 + finally: + shutil.rmtree(folder, ignore_errors=True) + log.warning(f'Total: {passed} passed, {failed} failed') + return failed == 0 + + +if __name__ == '__main__': + import time + t0 = time.time() + ok = run_all() + log.warning(f'Total time: {time.time() - t0:.2f}s') + sys.exit(0 if ok else 1) From b39639ce2e3e4297ca0472302956e9b130f252e7 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 18:55:17 +0100 Subject: [PATCH 212/270] fix(json_helpers): serialize file access per path within the process The fasteners lock is inter-process only. On Linux fcntl record locks belong to the process, so two threads writing the same file were never serialized and could tear it; on Windows they were, until the lock switched itself off. Every writer of these files runs inside one multi-threaded process, so that is the case that matters. readfile(lock=True) and writefile now take a re-entrant lock per normalized path, held from the snapshot through the replace so writes to one path land in call order. Other processes are covered by the atomic replace. A .lock file left next to a JSON file by the old lock is removed the first time that path is used. --- modules/json_helpers.py | 174 ++++++++++++++++---------------------- test/test-json-helpers.py | 58 +++++++++++-- 2 files changed, 122 insertions(+), 110 deletions(-) diff --git a/modules/json_helpers.py b/modules/json_helpers.py index 5d9a6d707..4b866ee24 100644 --- a/modules/json_helpers.py +++ b/modules/json_helpers.py @@ -1,14 +1,27 @@ import os import sys import contextlib +import threading import time import json from typing import overload, Literal -import fasteners import orjson from modules.logger import log -locking_available = True # used by file read/write locking +path_locks: dict[str, threading.RLock] = {} +path_locks_guard = threading.Lock() + + +def path_lock(filename: str | os.PathLike[str]) -> threading.RLock: + """One lock per file path; threads of this process serialize on it, other processes are covered by atomic replace.""" + key = os.path.normcase(os.path.abspath(filename)) + with path_locks_guard: + lock = path_locks.get(key) + if lock is None: + lock = path_locks[key] = threading.RLock() + with contextlib.suppress(OSError): + os.remove(f"{key}.lock") # left behind by the file lock this replaces + return lock def replace_file(source: str, target: str, attempts: int = 10, delay: float = 0.05): @@ -30,51 +43,27 @@ def readfile(filename: str | os.PathLike[str], silent: bool = False, lock: bool @overload def readfile(filename: str | os.PathLike[str], silent: bool = False, lock: bool = False) -> dict | list: ... def readfile(filename: str | os.PathLike[str], silent: bool = False, lock: bool = False, *, as_type="") -> dict | list: - global locking_available # pylint: disable=global-statement + """Read a JSON file; lock=True serializes with writers of the same path in this process.""" data = {} if as_type == "dict" else [] - lock_file = None - locked = False - if lock and locking_available: + with path_lock(filename) if lock else contextlib.nullcontext(): try: - lock_file = fasteners.InterProcessReaderWriterLock(f"{filename}.lock") - lock_file.logger.disabled = True # type: ignore - False positive. Bad typing in Fasteners. - locked = lock_file.acquire_read_lock(blocking=True, timeout=3) - if not locked: - log.warning(f'File read lock: file="{filename}" timeout') + t0 = time.time() + with open(filename, "rb") as file: + b = file.read() + if len(b) == 0: + return {} if as_type == "dict" else [] + data = orjson.loads(b) # pylint: disable=no-member + t1 = time.time() + if not silent: + fn = f"{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}" # pylint: disable=protected-access + log.debug(f'Read: file="{filename}" json={len(data)} bytes={os.path.getsize(filename)} time={t1 - t0:.3f} fn={fn}') + except FileNotFoundError as err: + if not silent: + log.debug(f'Read failed: file="{filename}" {err}') except Exception as err: - lock_file = None - locking_available = False - log.error(f'File read lock: file="{filename}" {err}') - locked = False - - try: - # if not os.path.exists(filename): - # return {} - t0 = time.time() - with open(filename, "rb") as file: - b = file.read() - if len(b) == 0: - return {} if as_type == "dict" else [] - data = orjson.loads(b) # pylint: disable=no-member - # if type(data) is str: - # data = json.loads(data) - t1 = time.time() - if not silent: - fn = f"{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}" # pylint: disable=protected-access - log.debug(f'Read: file="{filename}" json={len(data)} bytes={os.path.getsize(filename)} time={t1 - t0:.3f} fn={fn}') - except FileNotFoundError as err: - if not silent: - log.debug(f'Read failed: file="{filename}" {err}') - except Exception as err: - if not silent: - log.error(f'Read failed: file="{filename}" {err}') - - try: - if locking_available and lock_file is not None: - lock_file.release_read_lock() # the lock file stays: removing it after release races other holders - except Exception as err: - log.error(f'File read lock release: file="{filename}" {err}') + if not silent: + log.error(f'Read failed: file="{filename}" {err}') if isinstance(data, list) and as_type == "dict": if not data: @@ -93,71 +82,50 @@ def readfile(filename: str | os.PathLike[str], silent: bool = False, lock: bool def writefile(obj: dict | list, filename: str | os.PathLike[str], mode="w", silent=False, atomic=False): + """Write obj as JSON; writes to the same path from this process run one at a time, in call order.""" import copy import tempfile - global locking_available # pylint: disable=global-statement - lock_file = None - locked = False - def default(obj): log.error(f'Save: file="{filename}" not a valid object: {obj}') return str(obj) - try: - t0 = time.time() - snapshot = obj.copy() if isinstance(obj, (dict, list)) else obj # dict.copy and list.copy run under the GIL, so a concurrent insert cannot interrupt them - data = copy.deepcopy(snapshot) - for k, v in list(data.items()) if isinstance(data, dict) else []: # validate each key-by-key to avoid global exceptions - try: - _tmp = json.dumps(v, indent=2, default=default, allow_nan=False, ensure_ascii=False) - except Exception as err: - if not silent: - log.error(f'Save: file="{filename}" key="{k}" value="{v}" {err}') - del data[k] - output = json.dumps(data, indent=2, default=default) - except Exception as err: - log.error(f'Save failed: file="{filename}" {err}') - return + with path_lock(filename): + try: + t0 = time.time() + snapshot = obj.copy() if isinstance(obj, (dict, list)) else obj # dict.copy and list.copy run under the GIL, so a concurrent insert cannot interrupt them + data = copy.deepcopy(snapshot) + for k, v in list(data.items()) if isinstance(data, dict) else []: # validate each key-by-key to avoid global exceptions + try: + _tmp = json.dumps(v, indent=2, default=default, allow_nan=False, ensure_ascii=False) + except Exception as err: + if not silent: + log.error(f'Save: file="{filename}" key="{k}" value="{v}" {err}') + del data[k] + output = json.dumps(data, indent=2, default=default) + except Exception as err: + log.error(f'Save failed: file="{filename}" {err}') + return - try: - if locking_available: - lock_file = fasteners.InterProcessReaderWriterLock(f"{filename}.lock") if locking_available else None - lock_file.logger.disabled = True # type: ignore - False positive. Bad typing in Fasteners. - locked = lock_file.acquire_write_lock(blocking=True, timeout=3) if lock_file is not None else False - if not locked: - log.warning(f'File write lock: file="{filename}" timeout') - except Exception as err: - locking_available = False - lock_file = None - log.error(f'File write lock: file="{filename}" {err}') - locked = False - - try: - if atomic: - fd, temp_name = tempfile.mkstemp(dir=os.path.dirname(os.path.abspath(filename)), prefix=f"{os.path.basename(filename)}.", suffix=".tmp") - try: - with os.fdopen(fd, mode, encoding="utf8") as f: - f.write(output) - f.flush() - os.fsync(f.fileno()) - replace_file(temp_name, filename) - except BaseException: - with contextlib.suppress(OSError): - os.remove(temp_name) - raise - else: - with open(filename, mode=mode, encoding="utf8") as file: - file.write(output) - t1 = time.time() - if not silent: - datalength = len(data) - log.debug(f'Save: file="{filename}" json={datalength} bytes={len(output)} time={t1 - t0:.3f}') - except Exception as err: - log.error(f'Save failed: file="{filename}" {err}') - - try: - if locking_available and lock_file is not None: - lock_file.release_write_lock() # the lock file stays: removing it after release races other holders - except Exception as err: - log.error(f'File write lock release: file="{filename}" {err}') + try: + if atomic: + fd, temp_name = tempfile.mkstemp(dir=os.path.dirname(os.path.abspath(filename)), prefix=f"{os.path.basename(filename)}.", suffix=".tmp") + try: + with os.fdopen(fd, mode, encoding="utf8") as f: + f.write(output) + f.flush() + os.fsync(f.fileno()) + replace_file(temp_name, filename) + except BaseException: + with contextlib.suppress(OSError): + os.remove(temp_name) + raise + else: + with open(filename, mode=mode, encoding="utf8") as file: + file.write(output) + t1 = time.time() + if not silent: + datalength = len(data) + log.debug(f'Save: file="{filename}" json={datalength} bytes={len(output)} time={t1 - t0:.3f}') + except Exception as err: + log.error(f'Save failed: file="{filename}" {err}') diff --git a/test/test-json-helpers.py b/test/test-json-helpers.py index 95e91ce31..f21f2a6e8 100644 --- a/test/test-json-helpers.py +++ b/test/test-json-helpers.py @@ -6,7 +6,9 @@ Covers: - atomic saves replace a fresh or existing target and leave no temp file, including when the save fails - an atomic save waits out a target another thread briefly holds open, which Windows otherwise refuses -- locking stays available under overlapping locked reads and writes and the lock file is left in place +- overlapping locked reads and atomic writes never fail or read a torn file, and no lock file is created +- locked readers never see a torn file while unlocked writers rewrite it in place +- a lock file left behind by the former file lock is removed - concurrent inserts into a shared dict never drop a save - readfile returns what writefile wrote, as dict and as list @@ -116,25 +118,65 @@ def test_atomic_save_waits_for_open_target(folder): assert leftovers(folder, target) == [], f'temp files left: {leftovers(folder, target)}' -def test_locking_survives_overlap(folder, threads=8, iterations=25): +def test_overlapping_locked_access(folder, threads=8, iterations=25): jh = fresh_helper() target = os.path.join(folder, 'locked.json') jh.writefile({'seed': 0}, target, silent=True) + torn = [] def worker(n): for i in range(iterations): if (n + i) % 2: jh.writefile({'n': n, 'i': i}, target, silent=True, atomic=True) - else: - jh.readfile(target, silent=True, lock=True, as_type='dict') + elif not jh.readfile(target, silent=True, lock=True, as_type='dict'): + torn.append((n, i)) run_threads(worker, threads) - assert jh.locking_available, 'locking switched itself off' assert jh.log.errors == [], jh.log.errors - assert os.path.exists(target + '.lock'), 'lock file was removed' + assert torn == [], f'{len(torn)} reads returned nothing' + assert not os.path.exists(target + '.lock'), 'a lock file was created' assert leftovers(folder, target) == [], f'temp files left: {leftovers(folder, target)}' +def test_locked_readers_never_see_torn_writes(folder, writers=8, per_writer=15, readers=2): + jh = fresh_helper() + target = os.path.join(folder, 'config.json') + jh.writefile({'seed': 0}, target, silent=True) + stop = threading.Event() + torn = [] + + def reader(_n): + while not stop.is_set(): + if not jh.readfile(target, silent=True, lock=True, as_type='dict'): + torn.append(1) + + def writer(n): + for i in range(per_writer): + jh.writefile({'writer': n, 'i': i, 'blob': 'x' * (40000 + 1000 * n)}, target, silent=True, atomic=False) + + pool = [threading.Thread(target=reader, args=(r,)) for r in range(readers)] + for t in pool: + t.start() + run_threads(writer, writers) + stop.set() + for t in pool: + t.join() + assert torn == [], f'{len(torn)} reads returned nothing' + with open(target, encoding='utf8') as f: + json.load(f) + assert jh.log.errors == [], jh.log.errors + + +def test_legacy_lock_file_removed(folder): + jh = fresh_helper() + target = os.path.join(folder, 'legacy.json') + with open(target + '.lock', 'w', encoding='utf8'): + pass + jh.writefile({'x': 1}, target, silent=True) + assert not os.path.exists(target + '.lock'), 'legacy lock file kept' + assert jh.log.errors == [], jh.log.errors + + def test_concurrent_inserts_keep_every_save(folder, threads=4, per_thread=40): jh = fresh_helper() target = os.path.join(folder, 'cache.json') @@ -170,7 +212,9 @@ def run_all(): test_atomic_save_replaces_target, test_failed_atomic_save_leaves_no_temp, test_atomic_save_waits_for_open_target, - test_locking_survives_overlap, + test_overlapping_locked_access, + test_locked_readers_never_see_torn_writes, + test_legacy_lock_file_removed, test_concurrent_inserts_keep_every_save, test_roundtrip, ] From 68c64fb4bcf867a3b81632b1778ffa2a32861fff Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 19:01:04 +0100 Subject: [PATCH 213/270] fix(json_helpers): write atomically by default and warn on empty reads Every caller writes a whole JSON document, and a plain open/write can leave a torn or empty file when the process dies or another writer overlaps, which readfile then returns as {}. Writes now go through the temp file and replace unless atomic=False or the mode is append. A read waits out an open that Windows refuses while a replace of the same name is in flight, and an empty file is reported when the read is not silent, since a zero-byte config.json otherwise resets settings without a trace. --- modules/json_helpers.py | 38 ++++++++++++---- test/test-json-helpers.py | 96 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 122 insertions(+), 12 deletions(-) diff --git a/modules/json_helpers.py b/modules/json_helpers.py index 4b866ee24..b780ae45f 100644 --- a/modules/json_helpers.py +++ b/modules/json_helpers.py @@ -14,7 +14,7 @@ path_locks_guard = threading.Lock() def path_lock(filename: str | os.PathLike[str]) -> threading.RLock: """One lock per file path; threads of this process serialize on it, other processes are covered by atomic replace.""" - key = os.path.normcase(os.path.abspath(filename)) + key = os.path.normcase(os.path.realpath(filename)) with path_locks_guard: lock = path_locks.get(key) if lock is None: @@ -24,6 +24,19 @@ def path_lock(filename: str | os.PathLike[str]) -> threading.RLock: return lock +def read_bytes(filename: str | os.PathLike[str], attempts: int = 5, delay: float = 0.01) -> bytes: + """Read a whole file, waiting out an open that Windows refuses while a replace of the same name is in flight.""" + for attempt in range(attempts): + try: + with open(filename, "rb") as file: + return file.read() + except PermissionError: + if attempt == attempts - 1: + raise + time.sleep(delay) + return b"" + + def replace_file(source: str, target: str, attempts: int = 10, delay: float = 0.05): """os.replace that waits out a target another handle holds open, which Windows reports as a permission error.""" for attempt in range(attempts): @@ -49,11 +62,12 @@ def readfile(filename: str | os.PathLike[str], silent: bool = False, lock: bool with path_lock(filename) if lock else contextlib.nullcontext(): try: t0 = time.time() - with open(filename, "rb") as file: - b = file.read() - if len(b) == 0: - return {} if as_type == "dict" else [] - data = orjson.loads(b) # pylint: disable=no-member + b = read_bytes(filename) + if len(b) == 0: + if not silent: + log.warning(f'Read: file="{filename}" empty') + return {} if as_type == "dict" else [] + data = orjson.loads(b) # pylint: disable=no-member t1 = time.time() if not silent: fn = f"{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}" # pylint: disable=protected-access @@ -81,8 +95,8 @@ def readfile(filename: str | os.PathLike[str], silent: bool = False, lock: bool return data -def writefile(obj: dict | list, filename: str | os.PathLike[str], mode="w", silent=False, atomic=False): - """Write obj as JSON; writes to the same path from this process run one at a time, in call order.""" +def writefile(obj: dict | list, filename: str | os.PathLike[str], mode="w", silent=False, atomic=True): + """Write obj as JSON through a temp file and replace; writes to the same path from this process run one at a time, in call order.""" import copy import tempfile @@ -90,6 +104,9 @@ def writefile(obj: dict | list, filename: str | os.PathLike[str], mode="w", sile log.error(f'Save: file="{filename}" not a valid object: {obj}') return str(obj) + if mode != "w": + atomic = False # append cannot go through a temp file + with path_lock(filename): try: t0 = time.time() @@ -109,13 +126,14 @@ def writefile(obj: dict | list, filename: str | os.PathLike[str], mode="w", sile try: if atomic: - fd, temp_name = tempfile.mkstemp(dir=os.path.dirname(os.path.abspath(filename)), prefix=f"{os.path.basename(filename)}.", suffix=".tmp") + target = os.path.realpath(filename) # replace the file a symlink points at, not the symlink + fd, temp_name = tempfile.mkstemp(dir=os.path.dirname(target), prefix=f"{os.path.basename(target)}.", suffix=".tmp") try: with os.fdopen(fd, mode, encoding="utf8") as f: f.write(output) f.flush() os.fsync(f.fileno()) - replace_file(temp_name, filename) + replace_file(temp_name, target) except BaseException: with contextlib.suppress(OSError): os.remove(temp_name) diff --git a/test/test-json-helpers.py b/test/test-json-helpers.py index f21f2a6e8..53f11fb11 100644 --- a/test/test-json-helpers.py +++ b/test/test-json-helpers.py @@ -10,6 +10,10 @@ Covers: - locked readers never see a torn file while unlocked writers rewrite it in place - a lock file left behind by the former file lock is removed - concurrent inserts into a shared dict never drop a save +- default writes are atomic, so unlocked readers never see a torn file either +- an atomic write through a symlink replaces the file it points at and keeps the link +- a read waits out an open that is refused while a replace is in flight +- an empty file reads as empty and is reported unless the read is silent - readfile returns what writefile wrote, as dict and as list No running server required. @@ -25,6 +29,7 @@ import shutil import sys import tempfile import threading +import time script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, script_dir) @@ -36,17 +41,22 @@ from modules import json_helpers # pylint: disable=wrong-import-position class ErrorLog: - """Counts error lines from json_helpers while passing everything else to the real logger.""" + """Counts error and warning lines from json_helpers while passing everything else to the real logger.""" def __init__(self, inner): self.inner = inner self.errors = [] + self.warnings = [] self.lock = threading.Lock() def error(self, message, *args, **kwargs): with self.lock: self.errors.append(str(message)) + def warning(self, message, *args, **kwargs): + with self.lock: + self.warnings.append(str(message)) + def count(self, needle): return sum(1 for m in self.errors if needle in m) @@ -195,6 +205,85 @@ def test_concurrent_inserts_keep_every_save(folder, threads=4, per_thread=40): assert len(json.load(f)) == threads * per_thread, 'last save is incomplete' +def test_default_writes_never_tear(folder, writers=4, per_writer=20, readers=2): + jh = fresh_helper() + target = os.path.join(folder, 'default.json') + jh.writefile({'seed': 0}, target, silent=True) + stop = threading.Event() + torn = [] + + def reader(_n): + while not stop.is_set(): + if not jh.readfile(target, silent=True, as_type='dict'): + torn.append(1) + time.sleep(0.001) # real readers do not spin; a spinning reader starves the writer's retry on Windows + + def writer(n): + for i in range(per_writer): + jh.writefile({'writer': n, 'i': i, 'blob': 'x' * (40000 + 1000 * n)}, target, silent=True) + + pool = [threading.Thread(target=reader, args=(r,)) for r in range(readers)] + for t in pool: + t.start() + run_threads(writer, writers) + stop.set() + for t in pool: + t.join() + assert torn == [], f'{len(torn)} unlocked reads returned nothing' + assert jh.log.errors == [], jh.log.errors + assert leftovers(folder, target) == [], f'temp files left: {leftovers(folder, target)}' + + +def test_atomic_write_keeps_symlink(folder): + jh = fresh_helper() + real = os.path.join(folder, 'real.json') + link = os.path.join(folder, 'link.json') + jh.writefile({'v': 0}, real, silent=True) + try: + os.symlink(real, link) + except OSError as e: + log.info(f' SKIP symlink not available: {e}') + return + jh.writefile({'v': 1}, link, silent=True) + assert os.path.islink(link), 'symlink was replaced by a file' + assert jh.readfile(real, silent=True, as_type='dict') == {'v': 1}, 'target of the symlink not updated' + assert sorted(os.listdir(folder)) == ['link.json', 'real.json'], os.listdir(folder) + assert jh.log.errors == [], jh.log.errors + + +def test_read_waits_out_refused_open(folder): + jh = fresh_helper() + target = os.path.join(folder, 'refused.json') + jh.writefile({'x': 1}, target, silent=True) + calls = [] + real_open = open + + def refuse_twice(*args, **kwargs): + calls.append(1) + if len(calls) <= 2: + raise PermissionError(13, 'replace in flight') + return real_open(*args, **kwargs) + + jh.open = refuse_twice # module globals shadow the builtin inside read_bytes + try: + assert jh.readfile(target, silent=True, as_type='dict') == {'x': 1} + finally: + del jh.open + assert len(calls) == 3, f'{len(calls)} open attempts' + assert jh.log.errors == [], jh.log.errors + + +def test_empty_file_is_reported(folder): + jh = fresh_helper() + target = os.path.join(folder, 'empty.json') + with open(target, 'w', encoding='utf8'): + pass + assert jh.readfile(target, as_type='dict') == {} + assert jh.readfile(target, silent=True, as_type='list') == [] + assert len(jh.log.warnings) == 1 and 'empty' in jh.log.warnings[0], jh.log.warnings + assert jh.log.errors == [], jh.log.errors + + def test_roundtrip(folder): jh = fresh_helper() target = os.path.join(folder, 'roundtrip.json') @@ -216,6 +305,10 @@ def run_all(): test_locked_readers_never_see_torn_writes, test_legacy_lock_file_removed, test_concurrent_inserts_keep_every_save, + test_default_writes_never_tear, + test_atomic_write_keeps_symlink, + test_read_waits_out_refused_open, + test_empty_file_is_reported, test_roundtrip, ] passed = 0 @@ -236,7 +329,6 @@ def run_all(): if __name__ == '__main__': - import time t0 = time.time() ok = run_all() log.warning(f'Total time: {time.time() - t0:.2f}s') From 6aeec2b6fe076a9b0d652c20bceef27ed018dd10 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 19:01:04 +0100 Subject: [PATCH 214/270] chore: drop fasteners from requirements modules/json_helpers.py was its only user. --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7d5167b82..080d9c2ce 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,6 @@ psutil pyyaml toml voluptuous -fasteners limits orjson ftfy From 6d5c63d9fe00362d1e10db034f98d12026ef1577 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 20:35:37 +0100 Subject: [PATCH 215/270] fix(hashes): snapshot the stores under a lock before saving the cache save_cache handed writefile the live HashStore objects, so an add_hash from another thread during the deep copy raised "dictionary changed size during iteration" and dropped the save. The stores are now copied under a lock that also covers the write, so a later save never lands under an earlier snapshot. --- modules/hashes.py | 8 +++++--- test/test-json-helpers.py | 43 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/modules/hashes.py b/modules/hashes.py index 0c6c1021e..d4658c7ae 100644 --- a/modules/hashes.py +++ b/modules/hashes.py @@ -1,5 +1,6 @@ import hashlib import os.path +import threading from collections import defaultdict from typing import Literal, TypeAlias, TypedDict from rich import progress, errors @@ -29,6 +30,7 @@ cache_filename = os.path.join(data_path, "data", "cache.json") progress_ok = True # defaultdict allows for easily using new stores without needing to define them ahead of time _data: defaultdict[str, HashStore] = defaultdict(HashStore) +cache_lock = threading.Lock() def load_cache(): @@ -38,9 +40,9 @@ def load_cache(): def save_cache(): - # Don't include empty hash stores - filtered = filter(lambda item: len(item[1]) > 0, _data.items()) - writefile(dict(filtered), cache_filename) + with cache_lock: # snapshot and write together, so a later save never lands under an earlier snapshot + snapshot = {store: dict(data) for store, data in list(_data.items()) if len(data) > 0} # dict() of a store runs under the GIL, so add_hash from another thread cannot interrupt it + writefile(snapshot, cache_filename) def cache(store: KnownHashStores | str | None = None) -> HashStore: diff --git a/test/test-json-helpers.py b/test/test-json-helpers.py index 53f11fb11..22a677970 100644 --- a/test/test-json-helpers.py +++ b/test/test-json-helpers.py @@ -15,6 +15,7 @@ Covers: - a read waits out an open that is refused while a replace is in flight - an empty file reads as empty and is reported unless the read is silent - readfile returns what writefile wrote, as dict and as list +- the hash cache saves cleanly while other threads keep adding hashes No running server required. @@ -284,6 +285,47 @@ def test_empty_file_is_reported(folder): assert jh.log.errors == [], jh.log.errors +def test_hash_cache_saves_under_concurrent_adds(folder, adders=4, per_adder=200): + jh = fresh_helper() + from modules import hashes # pylint: disable=import-outside-toplevel + saved_filename = hashes.cache_filename + hashes.cache_filename = os.path.join(folder, 'cache.json') + hashes.cache('hashes').clear() + hashes.cache('hashes-addnet').clear() + stop = threading.Event() + + def adder(n): + for i in range(per_adder): + hashes.cache('hashes').add_hash(f'checkpoint/{n}-{i}', 1.0, 'a' * 64) + if i % 10 == 9: + hashes.save_cache() + + def churn(_n): # a second store whose size keeps changing while the saves run, bounded so the snapshots stay small + i = 0 + while not stop.is_set(): + store = hashes.cache('hashes-addnet') + if i % 500 == 499: + store.clear() + else: + store.add_hash(f'lora/{i % 500}', 1.0, 'b' * 64) + i += 1 + + thread = threading.Thread(target=churn, args=(0,)) + thread.start() + try: + run_threads(adder, adders) + finally: + stop.set() + thread.join() + hashes.cache_filename = saved_filename + assert jh.log.errors == [], jh.log.errors + with open(os.path.join(folder, 'cache.json'), encoding='utf8') as f: + on_disk = json.load(f) + assert len(on_disk['hashes']) == adders * per_adder, f'{len(on_disk["hashes"])} of {adders * per_adder} hashes on disk' + hashes.cache('hashes').clear() + hashes.cache('hashes-addnet').clear() + + def test_roundtrip(folder): jh = fresh_helper() target = os.path.join(folder, 'roundtrip.json') @@ -309,6 +351,7 @@ def run_all(): test_atomic_write_keeps_symlink, test_read_waits_out_refused_open, test_empty_file_is_reported, + test_hash_cache_saves_under_concurrent_adds, test_roundtrip, ] passed = 0 From 1701d6aa172c995c9b9835590aafb90c5e09e6ee Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 11 Sep 2026 23:47:03 +0100 Subject: [PATCH 216/270] fix(civitai): route settings writes through the options setter post_settings wrote opts.data directly, bypassing the __setattr__ hook that files _token keys into secrets.json; a token saved through the endpoint landed in config.json. The setter also applies the freeze and restricted-key guards. --- modules/civitai/api_civitai.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/civitai/api_civitai.py b/modules/civitai/api_civitai.py index 28705a641..b568bc31a 100644 --- a/modules/civitai/api_civitai.py +++ b/modules/civitai/api_civitai.py @@ -374,14 +374,14 @@ def post_settings(request: dict): if user is None: return JSONResponse(content={"error": "Invalid API token"}, status_code=400) log.info(f'CivitAI token validated: user={user.get("username", "?")}') - shared.opts.data['civitai_token'] = token.strip() + shared.opts.civitai_token = token.strip() save_subfolder_enabled = request.get('save_subfolder_enabled') if save_subfolder_enabled is not None: - shared.opts.data['civitai_save_subfolder_enabled'] = bool(save_subfolder_enabled) + shared.opts.civitai_save_subfolder_enabled = bool(save_subfolder_enabled) if save_subfolder is not None: - shared.opts.data['civitai_save_subfolder'] = save_subfolder + shared.opts.civitai_save_subfolder = save_subfolder if discard_hash_mismatch is not None: - shared.opts.data['civitai_discard_hash_mismatch'] = discard_hash_mismatch + shared.opts.civitai_discard_hash_mismatch = discard_hash_mismatch shared.opts.save() return get_settings() From a1614e6b2d7fba0c46c7ae2ab95b5cbb5a8958f2 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 11 Sep 2026 23:47:25 +0100 Subject: [PATCH 217/270] refactor(civitai): derive hidden base models from the enums endpoint The civitai repo dropped base-model.constants.ts, so the GitHub fetch 404ed and every call lost the group and hidden flags. /enums carries ActiveBaseModel next to BaseModel; the difference is the retired set the hidden flag marked. --- modules/civitai/basemodels_civitai.py | 134 -------------------------- modules/civitai/client_civitai.py | 14 +-- 2 files changed, 4 insertions(+), 144 deletions(-) delete mode 100644 modules/civitai/basemodels_civitai.py diff --git a/modules/civitai/basemodels_civitai.py b/modules/civitai/basemodels_civitai.py deleted file mode 100644 index 4b9a5c072..000000000 --- a/modules/civitai/basemodels_civitai.py +++ /dev/null @@ -1,134 +0,0 @@ -import re -import time -from modules.logger import log - - -# Canonical base-model metadata lives in the civitai/civitai repo. The live -# /images validator is generated from it, so the file has metadata (group, -# ecosystem, engine, hidden) while the validator has the current name list. -# Callers merge both. -github_cache: list[dict] = [] -github_cache_time: float = 0 -GITHUB_TTL = 6 * 3600 # 6 hours -GITHUB_URL = 'https://raw.githubusercontent.com/civitai/civitai/main/src/shared/constants/base-model.constants.ts' - - -def parse_base_model_config(ts_source: str) -> list[dict]: - """Parse the baseModelConfig array from base-model.constants.ts. - - Uses character-by-character bracket walking rather than regex because - entries can span multiple lines. Returns list of dicts with keys - name/type/group/hidden plus optional ecosystem/engine/family. - """ - start_match = re.search(r'const\s+baseModelConfig\s*=\s*\[', ts_source) - if not start_match: - return [] - # Walk to the matching ] respecting string literals - pos = start_match.end() - depth = 1 - in_string: str | None = None - end_pos = -1 - while pos < len(ts_source): - ch = ts_source[pos] - if in_string is not None: - if ch == '\\': - pos += 2 - continue - if ch == in_string: - in_string = None - else: - if ch in ("'", '"', '`'): - in_string = ch - elif ch == '[': - depth += 1 - elif ch == ']': - depth -= 1 - if depth == 0: - end_pos = pos - break - pos += 1 - if end_pos < 0: - return [] - array_body = ts_source[start_match.end():end_pos] - # Extract top-level {...} entries, respecting strings and nested braces - entries: list[str] = [] - brace_start = -1 - brace_depth = 0 - in_string = None - i = 0 - while i < len(array_body): - ch = array_body[i] - if in_string is not None: - if ch == '\\': - i += 2 - continue - if ch == in_string: - in_string = None - else: - if ch in ("'", '"', '`'): - in_string = ch - elif ch == '{': - if brace_depth == 0: - brace_start = i - brace_depth += 1 - elif ch == '}': - brace_depth -= 1 - if brace_depth == 0 and brace_start >= 0: - entries.append(array_body[brace_start:i + 1]) - brace_start = -1 - i += 1 - # Per-entry field extraction (string + bool values only) - field_re = re.compile( - r"(\w+)\s*:\s*(?:'([^'\\]*(?:\\.[^'\\]*)*)'|\"([^\"\\]*(?:\\.[^\"\\]*)*)\"|(true|false))" - ) - parsed: list[dict] = [] - for entry in entries: - fields: dict = {} - for m in field_re.finditer(entry): - key = m.group(1) - if m.group(2) is not None: - fields[key] = m.group(2) - elif m.group(3) is not None: - fields[key] = m.group(3) - elif m.group(4) is not None: - fields[key] = m.group(4) == 'true' - if 'name' in fields and 'type' in fields and 'group' in fields: - item: dict = { - 'name': fields['name'], - 'type': fields['type'], - 'group': fields['group'], - 'hidden': bool(fields.get('hidden', False)), - } - for opt in ('ecosystem', 'engine', 'family'): - if opt in fields: - item[opt] = fields[opt] - parsed.append(item) - return parsed - - -def fetch_github_base_models() -> list[dict]: - """Fetch and parse civitai's base-model constants from GitHub. - - Returns list of metadata dicts (name, type, group, hidden, plus - optional ecosystem/engine/family). Returns [] on any failure; - callers fall back to the live /images probe. Cached with a longer - TTL than discover_options since these constants change rarely. - """ - global github_cache, github_cache_time # pylint: disable=global-statement - now = time.time() - if github_cache and (now - github_cache_time) < GITHUB_TTL: - return github_cache - try: - from modules import shared - r = shared.req(GITHUB_URL) - if r.status_code != 200: - log.debug(f'CivitAI github constants: code={r.status_code}') - return [] - parsed = parse_base_model_config(r.text) - if parsed: - github_cache = parsed - github_cache_time = now - return parsed - except Exception as e: - log.debug(f'CivitAI github constants fetch failed: {e}') - return [] diff --git a/modules/civitai/client_civitai.py b/modules/civitai/client_civitai.py index 3593136e8..e94d93bcb 100644 --- a/modules/civitai/client_civitai.py +++ b/modules/civitai/client_civitai.py @@ -1,7 +1,6 @@ import os import time from modules.logger import log -from modules.civitai.basemodels_civitai import fetch_github_base_models from modules.civitai.models_civitai import CivitModel, CivitVersion, CivitImage, CivitSearchResponse, CivitTagResponse, CivitCreatorResponse, CivitUserProfile @@ -287,20 +286,15 @@ class CivitaiClient: break except Exception as e: log.debug(f'CivitAI discover options: key={key} {e}') - # Enrich base-model names with github metadata (group/hidden/ecosystem). - # github also serves as the name-list fallback when both /enums and the - # probe came back empty. - github_entries = fetch_github_base_models() - github_index: dict = {entry['name']: entry for entry in github_entries} - if not result['base_models'] and github_entries: - result['base_models'] = [entry['name'] for entry in github_entries] + # hidden marks names in BaseModel but not in ActiveBaseModel, the retired set; an empty ActiveBaseModel hides nothing + active = set(enums.get('ActiveBaseModel', []) or []) result['base_models_info'] = [ - github_index.get(name, {'name': name, 'type': 'image', 'group': '', 'hidden': False}) + {'name': name, 'type': 'image', 'group': '', 'hidden': bool(active) and name not in active} for name in result['base_models'] ] options_cache = result options_cache_time = now - log.debug(f'CivitAI options: types={len(result["types"])} sort={len(result["sort"])} period={len(result["period"])} base_models={len(result["base_models"])} (enriched={len(github_index)})') + log.debug(f'CivitAI options: types={len(result["types"])} sort={len(result["sort"])} period={len(result["period"])} base_models={len(result["base_models"])} active={len(active)}') return result From 7c364b4554ad1451fd7a26a183dbdfdd8df54927 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 11 Sep 2026 23:47:33 +0100 Subject: [PATCH 218/270] feat(civitai): route text encoder, unet, clip and detection downloads Eight live ModelType values had no TYPE_MAP entry and fell into the checkpoint folder, where a detection or encoder model shows up in the model picker. TextEncoder, UNet, CLIP, CLIPVision and Detection get their own folders; LLM, VisionLanguage and ComfyWorkflows have none and are logged once per session. --- modules/civitai/filemanage_civitai.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/modules/civitai/filemanage_civitai.py b/modules/civitai/filemanage_civitai.py index a7372942e..f67229939 100644 --- a/modules/civitai/filemanage_civitai.py +++ b/modules/civitai/filemanage_civitai.py @@ -5,11 +5,16 @@ from modules.logger import log # Map CivitAI model types to shared.opts directory settings and fallback subfolder -# names. 'Text Encoder' is a file type, not a model type: versions bundle companion -# files, and clients route those by the file's own type. +# names. 'Text Encoder' is the file type of bundled companion files, 'TextEncoder' +# the model type. Types absent here land in Stable-diffusion. TYPE_MAP = { 'Checkpoint': ('ckpt_dir', 'Stable-diffusion'), 'Text Encoder': ('te_dir', 'Text-encoder'), + 'TextEncoder': ('te_dir', 'Text-encoder'), + 'UNet': ('unet_dir', 'UNET'), + 'CLIP': ('clip_models_path', 'CLIP'), + 'CLIPVision': ('clip_models_path', 'CLIP'), + 'Detection': ('yolo_dir', 'yolo'), 'TextualInversion': ('embeddings_dir', 'embeddings'), 'Hypernetwork': ('hypernetwork_dir', 'hypernetworks'), 'AestheticGradient': ('ckpt_dir', 'Stable-diffusion'), @@ -26,6 +31,9 @@ TYPE_MAP = { 'Other': ('ckpt_dir', 'Stable-diffusion'), } +# unmapped types already logged; one warning each per session +warned_types: set[str] = set() + # CivitAI has no type for a standalone transformer, so DiT finetunes ship as # 'Checkpoint' like full models. Bases listed here are full checkpoints and stay # in Stable-diffusion; any other base is transformer-only in practice and routes @@ -53,6 +61,9 @@ def get_type_folder(model_type: str, base_model: str = '') -> Path: return Path(paths.models_path) / custom[model_type] except Exception as e: log.warning(f'CivitAI type folder override parse error: {e}') + if model_type not in TYPE_MAP and model_type not in warned_types: + warned_types.add(model_type) + log.warning(f'CivitAI type unmapped: type="{model_type}" folder="Stable-diffusion"') opt_attr, fallback_dir = TYPE_MAP.get(model_type, ('ckpt_dir', 'Stable-diffusion')) if model_type == 'Checkpoint' and base_model and not is_full_checkpoint_base(base_model): opt_attr, fallback_dir = 'unet_dir', 'UNET' From ca6ad175d67349a504c374f7ec84b20d50474b81 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 11 Sep 2026 23:47:39 +0100 Subject: [PATCH 219/270] fix(civitai): follow the stats and profile fields upstream favoriteCount, ratingCount and rating are gone since reactions replaced ratings, tippedAmountCount is new, and unreported counts arrive as null, which a strict int field turned into a rejected search page. /me lost its avatar and reports tier, status and isMember, with tier absent for non-members; email, emailVerified and tokenScope stay unmodelled. --- modules/civitai/models_civitai.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/modules/civitai/models_civitai.py b/modules/civitai/models_civitai.py index e709e659f..00c41e2a8 100644 --- a/modules/civitai/models_civitai.py +++ b/modules/civitai/models_civitai.py @@ -51,15 +51,14 @@ class CivitFile(BaseModel): class CivitStats(BaseModel): + # counts CivitAI does not report arrive as null, not zero class Config: allow_population_by_field_name = True - download_count: int = Field(0, alias="downloadCount") - favorite_count: int = Field(0, alias="favoriteCount") - thumb_up_count: int = Field(0, alias="thumbsUpCount") - thumb_down_count: int = Field(0, alias="thumbsDownCount") - comment_count: int = Field(0, alias="commentCount") - rating_count: int = Field(0, alias="ratingCount") - rating: float = 0 + download_count: int | None = Field(0, alias="downloadCount") + thumb_up_count: int | None = Field(0, alias="thumbsUpCount") + thumb_down_count: int | None = Field(0, alias="thumbsDownCount") + comment_count: int | None = Field(0, alias="commentCount") + tipped_amount_count: int | None = Field(0, alias="tippedAmountCount") class CivitVersion(BaseModel): @@ -192,9 +191,12 @@ class CivitCreatorResponse(BaseModel): class CivitUserProfile(BaseModel): + # tier is omitted for non-members; email, emailVerified and tokenScope are left unmodelled to keep the address out of the API response class Config: allow_population_by_field_name = True id: int = 0 username: str = "" - image: str | None = None - profile_picture: str | None = Field(None, alias="profilePicture") + tier: str | None = None + status: str | None = None + is_member: bool = Field(False, alias="isMember") + subscriptions: list = Field(default_factory=list) From 4cf734dbd6c050fda24c3238dd97a696ec5d6870 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 11 Sep 2026 23:47:46 +0100 Subject: [PATCH 220/270] feat(civitai): add the mini version endpoint GET /sdapi/v2/civitai/version/mini/{id} exposes /model-versions/mini: the primary file flattened onto the version, every hash, and the permission flags a download needs. CivitVersionMini is its own model because its field set is per-file, not per-version. --- modules/civitai/api_civitai.py | 10 ++++++++++ modules/civitai/client_civitai.py | 13 ++++++++++++- modules/civitai/models_civitai.py | 31 +++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/modules/civitai/api_civitai.py b/modules/civitai/api_civitai.py index b568bc31a..b1fd29cdd 100644 --- a/modules/civitai/api_civitai.py +++ b/modules/civitai/api_civitai.py @@ -158,6 +158,15 @@ def get_version_by_hash(hash_str: str, token: str | None = None): return version_to_dict(version) +def get_version_mini(version_id: int, token: str | None = None): + """Download-shaped version view carrying permission and early-access flags.""" + from modules.civitai.client_civitai import client + version = client.get_version_mini(version_id, token=token) + if version is None: + return JSONResponse(content={"error": "version not found"}, status_code=404) + return version_to_dict(version) + + def get_options(): """Get valid types, sort, period, base_models from CivitAI API discovery.""" from modules.civitai.client_civitai import client @@ -687,6 +696,7 @@ def register_api(api): api.add_api_route("/sdapi/v2/civitai/model/{model_id}", get_model, methods=["GET"], tags=["CivitAI"]) api.add_api_route("/sdapi/v2/civitai/version/{version_id}", get_version, methods=["GET"], tags=["CivitAI"]) api.add_api_route("/sdapi/v2/civitai/version/by-hash/{hash_str}", get_version_by_hash, methods=["GET"], tags=["CivitAI"]) + api.add_api_route("/sdapi/v2/civitai/version/mini/{version_id}", get_version_mini, methods=["GET"], tags=["CivitAI"]) api.add_api_route("/sdapi/v2/civitai/options", get_options, methods=["GET"], tags=["CivitAI"]) api.add_api_route("/sdapi/v2/civitai/tags", get_tags, methods=["GET"], tags=["CivitAI"]) api.add_api_route("/sdapi/v2/civitai/creators", get_creators, methods=["GET"], tags=["CivitAI"]) diff --git a/modules/civitai/client_civitai.py b/modules/civitai/client_civitai.py index e94d93bcb..e62a8eb08 100644 --- a/modules/civitai/client_civitai.py +++ b/modules/civitai/client_civitai.py @@ -1,7 +1,7 @@ import os import time from modules.logger import log -from modules.civitai.models_civitai import CivitModel, CivitVersion, CivitImage, CivitSearchResponse, CivitTagResponse, CivitCreatorResponse, CivitUserProfile +from modules.civitai.models_civitai import CivitModel, CivitVersion, CivitVersionMini, CivitImage, CivitSearchResponse, CivitTagResponse, CivitCreatorResponse, CivitUserProfile options_cache: dict = {} @@ -122,6 +122,17 @@ class CivitaiClient: log.error(f'CivitAI get version by hash parse error: hash={hash_str} {e}') return None + def get_version_mini(self, version_id: int, *, token: str | None = None) -> CivitVersionMini | None: + r = self._get(f'/model-versions/mini/{version_id}', token=token) + if r.status_code != 200: + log.error(f'CivitAI get version mini: id={version_id} code={r.status_code}') + return None + try: + return CivitVersionMini.parse_obj(r.json()) + except Exception as e: + log.error(f'CivitAI get version mini parse error: id={version_id} {e}') + return None + def get_images(self, *, model_version_id: int | None = None, limit: int | None = None, token: str | None = None) -> list[CivitImage]: params: dict = {} if model_version_id is not None: diff --git a/modules/civitai/models_civitai.py b/modules/civitai/models_civitai.py index 00c41e2a8..55b6db77a 100644 --- a/modules/civitai/models_civitai.py +++ b/modules/civitai/models_civitai.py @@ -23,6 +23,7 @@ class CivitFileHashes(BaseModel): autov3: str | None = Field(None, alias="AutoV3") crc32: str | None = Field(None, alias="CRC32") blake3: str | None = Field(None, alias="BLAKE3") + sha256_12: str | None = Field(None, alias="SHA256_12") class CivitFileMetadata(BaseModel): @@ -88,6 +89,36 @@ class CivitVersion(BaseModel): return "Unknown" if v in (None, "") else v +class CivitVersionMini(BaseModel): + # primary file flattened onto the version plus permission flags; earlyAccessEndsAt and freeTrialLimit exist only during early access + class Config: + allow_population_by_field_name = True + air: str = "" + version_name: str = Field("", alias="versionName") + model_name: str = Field("", alias="modelName") + user_id: int = Field(0, alias="userId") + base_model: str = Field("Unknown", alias="baseModel") + availability: str = "Unknown" + published_at: str | None = Field(None, alias="publishedAt") + size: float = 0 + file_type: str = Field("", alias="fileType") + file_name: str = Field("", alias="fileName") + format: str = "" + hashes: CivitFileHashes = Field(default_factory=CivitFileHashes) + download_urls: list[str] = Field(default_factory=list, alias="downloadUrls") + can_generate: bool = Field(False, alias="canGenerate") + is_featured: bool = Field(False, alias="isFeatured") + require_auth: bool = Field(False, alias="requireAuth") + check_permission: bool = Field(False, alias="checkPermission") + additional_resource_charge: bool = Field(False, alias="additionalResourceCharge") + payout_enabled: bool = Field(False, alias="payoutEnabled") + minor: bool = False + sfw_only: bool = Field(False, alias="sfwOnly") + fees: list = Field(default_factory=list) + early_access_ends_at: str | None = Field(None, alias="earlyAccessEndsAt") + free_trial_limit: int | None = Field(None, alias="freeTrialLimit") + + class CivitCreator(BaseModel): class Config: allow_population_by_field_name = True From b10fefca77f0a1ba84f7255568050d47060f6334 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 04:05:51 +0100 Subject: [PATCH 221/270] feat(civitai): add batch hash lookups and 429 backoff to the client Every API call goes through CivitaiClient.send, which caps concurrent requests at shared.max_workers and retries 429 up to four times, using Retry-After or exponential backoff up to 60s. New lookups wrap POST /model-versions/by-hash/ids, POST /model-versions/by-hash and GET /models?ids= within their caps and return a status per input whose chunk failed; the ids query sends nsfw=true because it drops NSFW models otherwise. --- modules/civitai/client_civitai.py | 111 +++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 2 deletions(-) diff --git a/modules/civitai/client_civitai.py b/modules/civitai/client_civitai.py index e62a8eb08..f98db6c2e 100644 --- a/modules/civitai/client_civitai.py +++ b/modules/civitai/client_civitai.py @@ -1,5 +1,7 @@ import os import time +import threading +from types import SimpleNamespace from modules.logger import log from modules.civitai.models_civitai import CivitModel, CivitVersion, CivitVersionMini, CivitImage, CivitSearchResponse, CivitTagResponse, CivitCreatorResponse, CivitUserProfile @@ -10,6 +12,43 @@ OPTIONS_TTL = 3600 # 1 hour # Civitai nsfwLevel bitmask: 1=PG/None 2=PG-13/Soft 4=R/Mature 8=X 16=XXX 32=Blocked NSFW_LEVEL_SFW = 3 # None + Soft: Civitai's SFW browsing boundary NSFW_LEVEL_ALL = 63 # every level set: disables filtering +BY_HASH_IDS_LIMIT = 10000 # POST /model-versions/by-hash/ids request cap +BY_HASH_LIMIT = 100 # POST /model-versions/by-hash request cap +MODEL_IDS_LIMIT = 100 # GET /models page cap; longer ids lists paginate +RETRY_LIMIT = 4 # retries after HTTP 429 +RETRY_DELAY_MAX = 60 # seconds +request_slots: threading.BoundedSemaphore | None = None +request_slots_lock = threading.Lock() + + +def get_request_slots() -> threading.BoundedSemaphore: + """Process-wide cap on concurrent CivitAI API requests, sized to shared.max_workers.""" + global request_slots # pylint: disable=global-statement + with request_slots_lock: + if request_slots is None: + from modules.shared import max_workers + request_slots = threading.BoundedSemaphore(max_workers) + return request_slots + + +def retry_delay(response, attempt: int) -> float: + """Seconds before retrying a 429: Retry-After when given in seconds, otherwise exponential.""" + headers = getattr(response, 'headers', None) or {} + try: + delay = float(headers.get('Retry-After')) + except (TypeError, ValueError): + delay = 2 ** attempt + return min(max(delay, 0.0), RETRY_DELAY_MAX) + + +def post_json(url: str, body, headers: dict): + """POST with the timeout, TLS and failure shape of shared.req.""" + import requests + try: + return requests.post(url, json=body, timeout=30, headers=headers, verify=False, allow_redirects=True) + except Exception as e: + log.error(f'HTTP request error: url={url} {e}') + return SimpleNamespace(status_code=500, text=f'HTTP request error: url={url} {e}') class CivitaiClient: @@ -24,7 +63,7 @@ class CivitaiClient: return tok return os.environ.get('CIVITAI_TOKEN', None) - def _get(self, path: str, params: dict | None = None, token: str | None = None, stream: bool = False): + def send(self, method: str, path: str, params: dict | None = None, body=None, token: str | None = None, stream: bool = False): from modules import shared url = f"{self.BASE_URL}{path}" headers = {} @@ -36,7 +75,22 @@ class CivitaiClient: query = urlencode({k: v for k, v in params.items() if v is not None and v != ''}, doseq=True) if query: url = f"{url}?{query}" - return shared.req(url, headers=headers if headers else None, stream=stream) + attempt = 0 + while True: + with get_request_slots(): + if method == 'POST': + r = post_json(url, body, headers) + else: + r = shared.req(url, headers=headers if headers else None, stream=stream) + if r.status_code != 429 or attempt >= RETRY_LIMIT: + return r + delay = retry_delay(r, attempt) + log.warning(f'CivitAI rate limited: path={path} attempt={attempt + 1} delay={delay:.0f}s') + time.sleep(delay) + attempt += 1 + + def _get(self, path: str, params: dict | None = None, token: str | None = None, stream: bool = False): + return self.send('GET', path, params=params, token=token, stream=stream) def search_models(self, *, query: str = "", tag: str = "", types: str = "", sort: str = "", period: str = "", base_models: list[str] | None = None, nsfw: bool | None = None, limit: int = 20, @@ -133,6 +187,59 @@ class CivitaiClient: log.error(f'CivitAI get version mini parse error: id={version_id} {e}') return None + def get_version_ids_by_hash(self, hashes: list[str], *, token: str | None = None) -> tuple[list[dict], dict[str, int]]: + """{modelVersionId, modelId, hash} rows for SHA256 hashes, plus the status code for each hash whose request failed.""" + rows, failed = [], {} + for i in range(0, len(hashes), BY_HASH_IDS_LIMIT): + chunk = hashes[i:i + BY_HASH_IDS_LIMIT] + r = self.send('POST', '/model-versions/by-hash/ids', body=chunk, token=token) + if r.status_code != 200: + log.error(f'CivitAI version ids by hash: count={len(chunk)} code={r.status_code}') + failed.update(dict.fromkeys(chunk, r.status_code)) + continue + try: + rows.extend(r.json()) + except Exception as e: + log.error(f'CivitAI version ids by hash parse error: count={len(chunk)} {e}') + failed.update(dict.fromkeys(chunk, 500)) + return rows, failed + + def get_versions_by_hash(self, hashes: list[str], *, token: str | None = None) -> tuple[list[CivitVersion], dict[str, int]]: + """Full versions for SHA256 hashes, plus the status code for each hash whose request failed.""" + versions, failed = [], {} + for i in range(0, len(hashes), BY_HASH_LIMIT): + chunk = hashes[i:i + BY_HASH_LIMIT] + r = self.send('POST', '/model-versions/by-hash', body=chunk, token=token) + if r.status_code != 200: + log.error(f'CivitAI versions by hash: count={len(chunk)} code={r.status_code}') + failed.update(dict.fromkeys(chunk, r.status_code)) + continue + try: + versions.extend([CivitVersion.parse_obj(v) for v in r.json()]) + except Exception as e: + log.error(f'CivitAI versions by hash parse error: count={len(chunk)} {e}') + failed.update(dict.fromkeys(chunk, 500)) + return versions, failed + + def get_models_raw(self, model_ids: list[int], *, token: str | None = None) -> tuple[dict[int, dict], dict[int, int]]: + """Unparsed /models items keyed by id, plus the status code for each id whose request failed.""" + models, failed = {}, {} + for i in range(0, len(model_ids), MODEL_IDS_LIMIT): + chunk = model_ids[i:i + MODEL_IDS_LIMIT] + params = {'ids': ','.join(str(m) for m in chunk), 'limit': MODEL_IDS_LIMIT, 'nsfw': 'true'} # ids query drops NSFW models unless nsfw=true + r = self.send('GET', '/models', params=params, token=token) + if r.status_code != 200: + log.error(f'CivitAI models by id: count={len(chunk)} code={r.status_code}') + failed.update(dict.fromkeys(chunk, r.status_code)) + continue + try: + for item in r.json().get('items', []): + models[item['id']] = item + except Exception as e: + log.error(f'CivitAI models by id parse error: count={len(chunk)} {e}') + failed.update(dict.fromkeys(chunk, 500)) + return models, failed + def get_images(self, *, model_version_id: int | None = None, limit: int | None = None, token: str | None = None) -> list[CivitImage]: params: dict = {} if model_version_id is not None: From 0b59d2acc4cf34ee95a5d9963389492d14912350 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 04:06:03 +0100 Subject: [PATCH 222/270] fix(civitai): identify models by file digest in batched metadata sweeps The sweeps queried with the extra-networks shorthash, which for LoRA is the kohya sshs_model_hash and never matches, and the update sweep skipped every uncached checkpoint. Hashes now come from the default hash store or from hashing the file, lookups are batched, hashing stops on interrupt and honours --no-hashing, and one lock serializes both sweeps with a second start answered by 409. --- modules/civitai/api_civitai.py | 25 +- modules/civitai/download_civitai.py | 10 +- modules/civitai/metadata_civitai.py | 403 +++++++++++++++++----------- 3 files changed, 273 insertions(+), 165 deletions(-) diff --git a/modules/civitai/api_civitai.py b/modules/civitai/api_civitai.py index b1fd29cdd..e57831b18 100644 --- a/modules/civitai/api_civitai.py +++ b/modules/civitai/api_civitai.py @@ -424,9 +424,12 @@ def post_metadata_scan(request: dict | None = None): from modules.civitai import metadata_civitai page = (request or {}).get('page', None) results = [] - for batch in metadata_civitai.civit_search_metadata(title=page, raw=True): - if isinstance(batch, list): - results = batch + try: + for batch in metadata_civitai.civit_search_metadata(title=page, raw=True): + if isinstance(batch, list): + results = batch + except metadata_civitai.SweepBusy as e: + return JSONResponse(content={"error": str(e)}, status_code=409) return {"results": results} @@ -434,9 +437,12 @@ def post_metadata_update(): """Update local metadata from CivitAI.""" from modules.civitai import metadata_civitai items = [] - for batch in metadata_civitai.civit_update_metadata(raw=True): - if isinstance(batch, list): - items = batch + try: + for batch in metadata_civitai.civit_update_metadata(raw=True): + if isinstance(batch, list): + items = batch + except metadata_civitai.SweepBusy as e: + return JSONResponse(content={"error": str(e)}, status_code=409) results = [] for item in items: results.append({ @@ -681,8 +687,11 @@ def legacy_post_civitai(page: str | None = None): """Legacy POST /sdapi/v1/civitai — scan metadata.""" from modules.civitai import metadata_civitai result = [] - for r in metadata_civitai.civit_search_metadata(title=page, raw=True): - result = r + try: + for r in metadata_civitai.civit_search_metadata(title=page, raw=True): + result = r + except metadata_civitai.SweepBusy as e: + return JSONResponse(content={"error": str(e)}, status_code=409) return result diff --git a/modules/civitai/download_civitai.py b/modules/civitai/download_civitai.py index 833270f4c..90401458f 100644 --- a/modules/civitai/download_civitai.py +++ b/modules/civitai/download_civitai.py @@ -694,6 +694,13 @@ def backfill_preview_parameters(model_path: str, preview_url: str, meta: dict | # ---- Legacy compatibility functions ---- +def save_civit_meta(model_path: str, data: dict) -> str: + from modules.json_helpers import writefile + fn = os.path.splitext(model_path)[0] + '.json' + writefile(data, filename=fn, mode='w', silent=True) + return fn + + def download_civit_meta(model_path: str, model_id): fn = os.path.splitext(model_path)[0] + '.json' url = f'https://civitai.com/api/v1/models/{model_id}' @@ -701,8 +708,7 @@ def download_civit_meta(model_path: str, model_id): if r.status_code == 200: try: data = r.json() - from modules.json_helpers import writefile - writefile(data, filename=fn, mode='w', silent=True) + save_civit_meta(model_path, data) log.info(f'CivitAI download: id={model_id} url={url} file="{fn}"') return r.status_code, len(data), '' except Exception as e: diff --git a/modules/civitai/metadata_civitai.py b/modules/civitai/metadata_civitai.py index 88f50a1da..2571c7e4d 100644 --- a/modules/civitai/metadata_civitai.py +++ b/modules/civitai/metadata_civitai.py @@ -1,10 +1,20 @@ import os import re import time -from modules.shared import log, opts, readfile, max_workers +import threading +import concurrent.futures +from modules.shared import log, opts, max_workers, state, cmd_opts from modules.civitai.client_civitai import client +GIB = 1024 ** 3 +sweep_lock = threading.Lock() + + +class SweepBusy(Exception): + """A metadata sweep was started while another one was running.""" + + class CivitModel: def __init__(self, name, fn, sha=None, meta=None): if meta is None: @@ -24,6 +34,102 @@ class CivitModel: self.status = 'Not found' +def cache_title(page: str, item: dict) -> str | None: + """Hash cache key read by the page's own loader, or None when it keeps no cache entry.""" + if page == 'model': + return f"checkpoint/{item.get('name')}" + if page == 'lora': # lora_load registers the basename with dots replaced + return 'lora/' + os.path.splitext(os.path.basename(item.get('filename', '')))[0].replace('.', '_') + if page == 'unet/dit': + return f"unet/{item.get('name')}" + if page == 'vae': + return f"vae/{item.get('filename')}" + return None + + +def resolve_sha256(entries: list[tuple[str, dict]], size_limit: int | None = None) -> tuple[dict[str, str], dict[str, str]]: + """File SHA256 per filename plus a note per unresolved file, from the default hash store or by hashing files below size_limit. + + The hashes-addnet store and sshs_model_hash are kohya tensor hashes, which CivitAI never matches. + """ + from modules import hashes + resolved, notes, todo, seen = {}, {}, [], set() + for page, item in entries: + fn = item.get('filename') or '' + if fn in seen or not os.path.isfile(fn): + continue + seen.add(fn) + title = cache_title(page, item) + sha = hashes.sha256_from_cache(fn, title) if title else None + if sha: + resolved[fn] = sha.lower() + elif size_limit is not None and os.path.getsize(fn) >= size_limit: + notes[fn] = f'not hashed: {size_limit // GIB} GiB or larger' + else: + todo.append((fn, title)) + if len(todo) == 0: + return resolved, notes + if cmd_opts.no_hashing: + log.warning(f'CivitAI metadata: unhashed={len(todo)} hashing disabled') + notes.update({fn: 'not hashed: hashing disabled' for fn, _title in todo}) + return resolved, notes + + def hash_file(fn: str) -> str | None: + return None if state.interrupted else hashes.calculate_sha256(fn, quiet=True) + + log.info(f'CivitAI metadata: hashing files={len(todo)} size={sum(os.path.getsize(fn) for fn, _title in todo) / GIB:.1f}GB') + jobid = state.begin('CivitAI hash') + state.job_count = len(todo) + cached = 0 + try: + with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor: + futures = {executor.submit(hash_file, fn): (fn, title) for fn, title in todo} + for future in concurrent.futures.as_completed(futures): + fn, title = futures[future] + state.job_no += 1 + state.textinfo = os.path.basename(fn) + try: + sha = future.result() + except Exception as e: + log.error(f'CivitAI metadata hash: file="{fn}" {e}') + notes[fn] = 'not hashed: unreadable' + continue + if sha is None: + notes[fn] = 'not hashed: interrupted' + continue + resolved[fn] = sha.lower() + if title is not None: + hashes.cache().add_hash(title, os.path.getmtime(fn), resolved[fn]) + cached += 1 + finally: + if cached > 0: + hashes.save_cache() + state.end(jobid) + return resolved, notes + + +def apply_update_status(model: CivitModel, sha: str, versions: list[dict], local_hashes: set[str]): + if len(versions) == 0: + return + model.latest = versions[0].get('name', '') + latest_hashes = {str((f.get('hashes') or {}).get('SHA256', '')).upper() for f in versions[0].get('files', [])} - {''} + model.latest_hashes = sorted(latest_hashes) + for ver in versions: + for f in ver.get('files', []): + if str((f.get('hashes') or {}).get('SHA256', '')).upper() != sha.upper(): + continue + model.vername = ver.get('name', '') + model.url = f.get('downloadUrl', None) + model.latest_name = f.get('name', '') + if model.vername == model.latest: + model.status = 'Latest version' + elif len(local_hashes & latest_hashes) > 0: + model.status = 'Update downloaded' + else: + model.status = 'Update available' + return + + def civit_update_metadata(raw: bool = False): def create_update_metadata_table(rows: list[CivitModel]): html = """ @@ -54,132 +160,81 @@ def civit_update_metadata(raw: bool = False): log.error(f'Model list: row={row} {e}') return html.format(tbody=tbody) - log.debug('CivitAI update metadata: models') - from modules import ui_extra_networks - from modules.civitai.download_civitai import download_civit_meta - pages = ui_extra_networks.get_pages('Model') - if len(pages) == 0: - return 'CivitAI update metadata: no models found' - page: ui_extra_networks.ExtraNetworksPage = pages[0] - results = [] - all_hashes = [(item.get('hash', None) or 'XXXXXXXX').upper()[:8] for item in page.list_items()] - for item in page.list_items(): - model = CivitModel(name=item['name'], fn=item['filename'], sha=item.get('hash', None), meta=item.get('metadata', {})) - if model.sha is None or len(model.sha) == 0: - log.debug(f'CivitAI skip search: name="{model.name}" hash=None') - else: - version = client.get_version_by_hash(model.sha) - if version is not None: - model.id = version.model_id - download_civit_meta(model.fn, model.id) - fn = os.path.splitext(item['filename'])[0] + '.json' - model.meta = readfile(fn, silent=True, as_type="dict") - model.name = model.meta.get('name', model.name) - model.versions = len(model.meta.get('modelVersions', [])) - time.sleep(0.25) # rate limiting - versions = model.meta.get('modelVersions', []) - if len(versions) > 0: - model.latest = versions[0].get('name', '') - model.latest_hashes.clear() - for v in versions[0].get('files', []): - for h in v.get('hashes', {}).values(): - model.latest_hashes.append(h[:8].upper()) - for ver in versions: - for f in ver.get('files', []): - for h in f.get('hashes', {}).values(): - if h[:8].upper() == model.sha[:8].upper(): - model.vername = ver.get('name', '') - model.url = f.get('downloadUrl', None) - model.latest_name = f.get('name', '') - if model.vername == model.latest: - model.status = 'Latest version' - elif any(map(lambda v: v in model.latest_hashes, all_hashes)): # pylint: disable=cell-var-from-loop - model.status = 'Update downloaded' - else: - model.status = 'Update available' - break - results.append(model) - yield results if raw else create_update_metadata_table(results) - yield results if raw else create_update_metadata_table(results) - - -def atomic_civit_search_metadata(item, results): - from modules.civitai.download_civitai import download_civit_preview, download_civit_meta, backfill_preview_parameters, preview_has_parameters, resolve_preview_file - if item is None: + if not sweep_lock.acquire(blocking=False): # pylint: disable=consider-using-with + log.warning('CivitAI update metadata: another metadata sweep is running') + if raw: + raise SweepBusy('CivitAI metadata sweep already running') + yield 'CivitAI update metadata: another metadata sweep is running' return try: - meta = os.path.splitext(item['filename'])[0] + '.json' - except Exception: - return - has_meta = os.path.isfile(meta) and os.stat(meta).st_size > 0 - needs_backfill = False - if has_meta and 'missing.png' not in item.get('preview', ''): - actual_preview = resolve_preview_file(item) - if actual_preview and not preview_has_parameters(actual_preview): - needs_backfill = True - if ('missing.png' in item['preview'] or not has_meta or needs_backfill) and os.path.isfile(item['filename']): - sha = item.get('hash', None) - found = False - result = { - 'id': '', - 'name': item['name'], - 'type': '', - 'hash': '', - 'code': '', - 'size': '', - 'note': '', - } - if sha is not None and len(sha) > 0: - version = client.get_version_by_hash(sha) - result['hash'] = sha - if version is not None: - result['code'] = 200 - result['code'], result['size'], result['note'] = download_civit_meta(item['filename'], version.model_id) - result['id'] = version.model_id - result['type'] = 'metadata' - # Create a new dict for each append to avoid mutation bugs - results.append(dict(result)) - for img in version.images: - if img.url: - code, size, note = download_civit_preview(item['filename'], img.url, meta=img.meta) - if code == 200: - results.append({**result, 'code': code, 'size': size, 'note': note, 'type': 'preview'}) - found = True - break - if code == 304 and backfill_preview_parameters(item['filename'], img.url, img.meta): - results.append({**result, 'code': 200, 'size': '', 'note': 'metadata embedded', 'type': 'preview'}) - found = True - break - else: - result['code'] = 404 - time.sleep(0.25) # rate limiting - if not found and os.stat(item['filename']).st_size < (1024 * 1024 * 1024): - from modules import hashes - sha = hashes.calculate_sha256(item['filename'], quiet=True)[:10] - version = client.get_version_by_hash(sha) - result['hash'] = sha - if version is not None: - result['code'] = 200 - result['code'], result['size'], result['note'] = download_civit_meta(item['filename'], version.model_id) - result['id'] = version.model_id - result['type'] = 'metadata' - results.append(dict(result)) - for img in version.images: - if img.url: - code, size, note = download_civit_preview(item['filename'], img.url, meta=img.meta) - if code == 200: - results.append({**result, 'code': code, 'size': size, 'note': note, 'type': 'preview'}) - found = True - break - if code == 304 and backfill_preview_parameters(item['filename'], img.url, img.meta): - results.append({**result, 'code': 200, 'size': '', 'note': 'metadata embedded', 'type': 'preview'}) - found = True - break - else: - result['code'] = 404 - time.sleep(0.25) # rate limiting - if not found: - results.append(dict(result)) + log.debug('CivitAI update metadata: models') + from modules import ui_extra_networks + from modules.civitai.download_civitai import save_civit_meta + pages = ui_extra_networks.get_pages('Model') + if len(pages) == 0: + yield [] if raw else 'CivitAI update metadata: no models found' + return + items = [item for item in pages[0].list_items() if item is not None] + shas, notes = resolve_sha256([('model', item) for item in items]) + rows, failed = client.get_version_ids_by_hash(sorted(set(shas.values()))) + by_hash = {} + for row in rows: # one hash can match several versions; GET /by-hash/{hash} returns the first + by_hash.setdefault(str(row.get('hash', '')).lower(), row) + metas, failed_models = client.get_models_raw(sorted({row['modelId'] for row in by_hash.values() if row.get('modelId')})) + local_hashes = {sha.upper() for sha in shas.values()} + results = [] + for item in items: + fn = item['filename'] + sha = shas.get(fn) + model = CivitModel(name=item['name'], fn=fn, sha=sha[:10] if sha else item.get('hash', None)) + if sha is None: + model.status = 'Not hashed' if fn in notes else 'Not found' + elif sha in failed: + model.status = 'Lookup failed' + elif sha in by_hash: + model.id = by_hash[sha]['modelId'] + meta = metas.get(model.id) + if meta is None: + model.status = 'Lookup failed' if model.id in failed_models else 'Not found' + else: + meta_fn = save_civit_meta(fn, meta) + log.info(f'CivitAI download: id={model.id} file="{meta_fn}"') + model.meta = meta + model.name = meta.get('name', model.name) + model.versions = len(meta.get('modelVersions', [])) + apply_update_status(model, sha, meta.get('modelVersions', []), local_hashes) + results.append(model) + yield results if raw else create_update_metadata_table(results) + yield results if raw else create_update_metadata_table(results) + finally: + sweep_lock.release() + + +def needs_metadata(item: dict) -> bool: + """True when the item's file exists and it lacks a sidecar, a preview, or preview parameters.""" + from modules.civitai.download_civitai import preview_has_parameters, resolve_preview_file + filename = item.get('filename') or '' + if not os.path.isfile(filename): + return False + meta = os.path.splitext(filename)[0] + '.json' + if 'missing.png' in (item.get('preview') or '') or not (os.path.isfile(meta) and os.stat(meta).st_size > 0): + return True + actual_preview = resolve_preview_file(item) + return bool(actual_preview) and not preview_has_parameters(actual_preview) + + +def download_previews(fn: str, version, result: dict) -> list[dict]: + """Preview row for the first version image that downloads or gains embedded parameters.""" + from modules.civitai.download_civitai import download_civit_preview, backfill_preview_parameters + for img in version.images: + if not img.url: + continue + code, size, note = download_civit_preview(fn, img.url, meta=img.meta) + if code == 200: + return [{**result, 'code': code, 'size': size, 'note': note, 'type': 'preview'}] + if code == 304 and backfill_preview_parameters(fn, img.url, img.meta): + return [{**result, 'code': 200, 'size': '', 'note': 'metadata embedded', 'type': 'preview'}] + return [] def civit_search_metadata(title: str | None = None, raw: bool = False): @@ -208,36 +263,74 @@ def civit_search_metadata(title: str | None = None, raw: bool = False): log.error(f'Model list: row={row} {e}') return html.format(tbody=tbody) - from modules.ui_extra_networks import get_pages - results = [] - scanned, skipped = 0, 0 - t0 = time.time() - candidates = [] - re_skip = [r.strip() for r in opts.extra_networks_scan_skip.split(',') if len(r.strip()) > 0] - for page in get_pages(): - if isinstance(title, str): - if page.title.lower() != title.lower(): + if not sweep_lock.acquire(blocking=False): # pylint: disable=consider-using-with + log.warning('CivitAI search metadata: another metadata sweep is running') + if raw: + raise SweepBusy('CivitAI metadata sweep already running') + yield 'CivitAI search metadata: another metadata sweep is running' + return + try: + from modules.ui_extra_networks import get_pages + from modules.civitai.download_civitai import save_civit_meta + results = [] + scanned, skipped = 0, 0 + t0 = time.time() + entries = [] + re_skip = [r.strip() for r in opts.extra_networks_scan_skip.split(',') if len(r.strip()) > 0] + for page in get_pages(): + if isinstance(title, str) and page.title.lower() != title.lower(): continue - if page.name in ('style', 'wildcards'): - continue - for item in page.list_items(): - if item is None: + if page.name in ('style', 'wildcards'): continue - if any(re.search(re_str, item.get('name', '') + item.get('filename', '')) for re_str in re_skip): - skipped += 1 + for item in page.list_items(): + if item is None: + continue + if any(re.search(re_str, item.get('name', '') + item.get('filename', '')) for re_str in re_skip): + skipped += 1 + continue + scanned += 1 + entries.append((page.name, item)) + log.debug(f'CivitAI search metadata: type={title if isinstance(title, str) else "all"} workers={max_workers} skip={len(re_skip)} items={len(entries)}') + with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor: + flags = list(executor.map(lambda entry: needs_metadata(entry[1]), entries)) + entries = [entry for entry, flag in zip(entries, flags) if flag] + shas, notes = resolve_sha256(entries, size_limit=GIB) + versions, failed = client.get_versions_by_hash(sorted(set(shas.values()))) + by_hash = {} + for version in versions: # one hash can match several versions; GET /by-hash/{hash} returns the first + for f in version.files: + if f.hashes.sha256: + by_hash.setdefault(f.hashes.sha256.lower(), version) + matched = {} + for _page, item in entries: + fn = item['filename'] + sha = shas.get(fn) + result = {'id': '', 'name': item['name'], 'type': '', 'hash': sha[:10] if sha else '', 'code': '', 'size': '', 'note': notes.get(fn, '')} + if sha is None: + results.append(result) + elif sha in failed: + results.append({**result, 'code': failed[sha], 'note': 'lookup failed'}) + elif sha not in by_hash: + results.append({**result, 'code': 404}) + else: + matched[fn] = (by_hash[sha], {**result, 'id': by_hash[sha].model_id}) + metas, failed_models = client.get_models_raw(sorted({version.model_id for version, _result in matched.values()})) + for fn, (version, result) in matched.items(): + meta = metas.get(version.model_id) + if meta is None: + results.append({**result, 'type': 'metadata', 'code': failed_models.get(version.model_id, 404)}) continue - scanned += 1 - candidates.append(item) - log.debug(f'CivitAI search metadata: type={title if isinstance(title, str) else "all"} workers={max_workers} skip={len(re_skip)} items={len(candidates)}') - import concurrent.futures - with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor: - future_items = {} - for candidate in candidates: - future_items[executor.submit(atomic_civit_search_metadata, candidate, results)] = candidate - for future in concurrent.futures.as_completed(future_items): - future.result() - yield results if raw else create_search_metadata_table(results) - - t1 = time.time() - log.debug(f'CivitAI search metadata: scanned={scanned} skipped={skipped} time={t1 - t0:.2f}') - yield results if raw else create_search_metadata_table(results) + meta_fn = save_civit_meta(fn, meta) + log.info(f'CivitAI download: id={version.model_id} file="{meta_fn}"') + results.append({**result, 'type': 'metadata', 'code': 200, 'size': len(meta)}) + yield results if raw else create_search_metadata_table(results) + with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor: + futures = [executor.submit(download_previews, fn, version, result) for fn, (version, result) in matched.items()] + for future in concurrent.futures.as_completed(futures): + results.extend(future.result()) + yield results if raw else create_search_metadata_table(results) + t1 = time.time() + log.debug(f'CivitAI search metadata: scanned={scanned} skipped={skipped} pending={len(entries)} hashed={len(shas)} matched={len(matched)} time={t1 - t0:.2f}') + yield results if raw else create_search_metadata_table(results) + finally: + sweep_lock.release() From 244db2e93e11e55010dff3d44042bdf33537d220 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 04:58:33 +0100 Subject: [PATCH 223/270] feat(civitai): retry overloaded search and log civitai error messages An overloaded text search answers 503 with Retry-After, which send now retries like a 429. Failure logs carry the server's error text with ZodError issues flattened; a 404 from by-hash and a 401 from /me stay quiet. --- modules/civitai/client_civitai.py | 51 +++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/modules/civitai/client_civitai.py b/modules/civitai/client_civitai.py index f98db6c2e..00bfa3558 100644 --- a/modules/civitai/client_civitai.py +++ b/modules/civitai/client_civitai.py @@ -1,4 +1,5 @@ import os +import json import time import threading from types import SimpleNamespace @@ -41,6 +42,24 @@ def retry_delay(response, attempt: int) -> float: return min(max(delay, 0.0), RETRY_DELAY_MAX) +def response_message(response) -> str: + """CivitAI error text from a failed response: its error string, ZodError issues, or the HTTP reason.""" + try: + body = response.json() + except Exception: + body = None + error = body.get('error') if isinstance(body, dict) else None + if isinstance(error, dict): + error = error.get('message', '') + try: + error = '; '.join(f"{'.'.join(str(p) for p in issue.get('path', []))}: {issue.get('message', '')}" for issue in json.loads(error)) + except Exception: + pass + if not error: + error = getattr(response, 'reason', '') or getattr(response, 'text', '') + return str(error).strip()[:200] + + def post_json(url: str, body, headers: dict): """POST with the timeout, TLS and failure shape of shared.req.""" import requests @@ -82,10 +101,11 @@ class CivitaiClient: r = post_json(url, body, headers) else: r = shared.req(url, headers=headers if headers else None, stream=stream) - if r.status_code != 429 or attempt >= RETRY_LIMIT: + retry_after = (getattr(r, 'headers', None) or {}).get('Retry-After') + if not (r.status_code == 429 or (r.status_code == 503 and retry_after is not None)) or attempt >= RETRY_LIMIT: # CivitAI sends 503 with Retry-After when search is overloaded return r delay = retry_delay(r, attempt) - log.warning(f'CivitAI rate limited: path={path} attempt={attempt + 1} delay={delay:.0f}s') + log.warning(f'CivitAI retry: path={path} code={r.status_code} attempt={attempt + 1} delay={delay:.0f}s message="{response_message(r)}"') time.sleep(delay) attempt += 1 @@ -121,7 +141,7 @@ class CivitaiClient: params['favorites'] = 'true' r = self._get('/models', params=params, token=token) if r.status_code != 200: - log.error(f'CivitAI search: code={r.status_code} reason={getattr(r, "reason", "")}') + log.error(f'CivitAI search: code={r.status_code} message="{response_message(r)}"') return CivitSearchResponse() data = r.json() if 'items' not in data: @@ -147,7 +167,7 @@ class CivitaiClient: def get_model(self, model_id: int, *, token: str | None = None) -> CivitModel | None: r = self._get(f'/models/{model_id}', token=token) if r.status_code != 200: - log.error(f'CivitAI get model: id={model_id} code={r.status_code}') + log.error(f'CivitAI get model: id={model_id} code={r.status_code} message="{response_message(r)}"') return None try: return CivitModel.parse_obj(r.json()) @@ -158,7 +178,7 @@ class CivitaiClient: def get_version(self, version_id: int, *, token: str | None = None) -> CivitVersion | None: r = self._get(f'/model-versions/{version_id}', token=token) if r.status_code != 200: - log.error(f'CivitAI get version: id={version_id} code={r.status_code}') + log.error(f'CivitAI get version: id={version_id} code={r.status_code} message="{response_message(r)}"') return None try: return CivitVersion.parse_obj(r.json()) @@ -169,6 +189,8 @@ class CivitaiClient: def get_version_by_hash(self, hash_str: str, *, token: str | None = None) -> CivitVersion | None: r = self._get(f'/model-versions/by-hash/{hash_str}', token=token) if r.status_code != 200: + if r.status_code != 404: + log.error(f'CivitAI get version by hash: hash={hash_str} code={r.status_code} message="{response_message(r)}"') return None try: return CivitVersion.parse_obj(r.json()) @@ -179,7 +201,7 @@ class CivitaiClient: def get_version_mini(self, version_id: int, *, token: str | None = None) -> CivitVersionMini | None: r = self._get(f'/model-versions/mini/{version_id}', token=token) if r.status_code != 200: - log.error(f'CivitAI get version mini: id={version_id} code={r.status_code}') + log.error(f'CivitAI get version mini: id={version_id} code={r.status_code} message="{response_message(r)}"') return None try: return CivitVersionMini.parse_obj(r.json()) @@ -194,7 +216,7 @@ class CivitaiClient: chunk = hashes[i:i + BY_HASH_IDS_LIMIT] r = self.send('POST', '/model-versions/by-hash/ids', body=chunk, token=token) if r.status_code != 200: - log.error(f'CivitAI version ids by hash: count={len(chunk)} code={r.status_code}') + log.error(f'CivitAI version ids by hash: count={len(chunk)} code={r.status_code} message="{response_message(r)}"') failed.update(dict.fromkeys(chunk, r.status_code)) continue try: @@ -211,7 +233,7 @@ class CivitaiClient: chunk = hashes[i:i + BY_HASH_LIMIT] r = self.send('POST', '/model-versions/by-hash', body=chunk, token=token) if r.status_code != 200: - log.error(f'CivitAI versions by hash: count={len(chunk)} code={r.status_code}') + log.error(f'CivitAI versions by hash: count={len(chunk)} code={r.status_code} message="{response_message(r)}"') failed.update(dict.fromkeys(chunk, r.status_code)) continue try: @@ -229,7 +251,7 @@ class CivitaiClient: params = {'ids': ','.join(str(m) for m in chunk), 'limit': MODEL_IDS_LIMIT, 'nsfw': 'true'} # ids query drops NSFW models unless nsfw=true r = self.send('GET', '/models', params=params, token=token) if r.status_code != 200: - log.error(f'CivitAI models by id: count={len(chunk)} code={r.status_code}') + log.error(f'CivitAI models by id: count={len(chunk)} code={r.status_code} message="{response_message(r)}"') failed.update(dict.fromkeys(chunk, r.status_code)) continue try: @@ -248,6 +270,7 @@ class CivitaiClient: params['limit'] = limit r = self._get('/images', params=params, token=token) if r.status_code != 200: + log.error(f'CivitAI get images: code={r.status_code} message="{response_message(r)}"') return [] data = r.json() items = data.get('items', []) @@ -269,6 +292,7 @@ class CivitaiClient: params['limit'] = limit r = self._get('/images', params=params, token=token) if r.status_code != 200: + log.error(f'CivitAI get images: code={r.status_code} message="{response_message(r)}"') return [] data = r.json() return data.get('items', []) @@ -283,6 +307,7 @@ class CivitaiClient: params['page'] = page r = self._get('/tags', params=params) if r.status_code != 200: + log.error(f'CivitAI get tags: code={r.status_code} message="{response_message(r)}"') return CivitTagResponse() try: return CivitTagResponse.parse_obj(r.json()) @@ -300,6 +325,7 @@ class CivitaiClient: params['page'] = page r = self._get('/creators', params=params) if r.status_code != 200: + log.error(f'CivitAI get creators: code={r.status_code} message="{response_message(r)}"') return CivitCreatorResponse() try: return CivitCreatorResponse.parse_obj(r.json()) @@ -310,6 +336,8 @@ class CivitaiClient: def get_me(self, token: str | None = None) -> CivitUserProfile | None: r = self._get('/me', token=token) if r.status_code != 200: + if r.status_code != 401: + log.error(f'CivitAI get me: code={r.status_code} message="{response_message(r)}"') return None try: return CivitUserProfile.parse_obj(r.json()) @@ -328,7 +356,7 @@ class CivitaiClient: """Civitai enum lists (ModelType, ModelFileType, BaseModel, ActiveBaseModel, BaseModelType). Public endpoint.""" r = self._get('/enums') if r.status_code != 200: - log.debug(f'CivitAI enums: code={r.status_code}') + log.debug(f'CivitAI enums: code={r.status_code} message="{response_message(r)}"') return {} try: return r.json() @@ -372,11 +400,10 @@ class CivitaiClient: if not isinstance(error, dict): continue # Parse ZodError: error.message is a JSON-encoded array of issues - import json as _json issues = error.get('issues', []) if not issues: try: - issues = _json.loads(error.get('message', '[]')) + issues = json.loads(error.get('message', '[]')) except Exception: issues = [] for issue in issues: From cd86ea63212f713715f1f3401b4c2c7449ef4dce Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 05:09:03 +0100 Subject: [PATCH 224/270] fix(civitai): keep windows separators literal in save subfolder paths resolve_save_path passed os.sep as the re.sub replacement string; on Windows that lone backslash is an unfinished escape and every subfolder download raised PatternError. A callable replacement is inserted verbatim. --- modules/civitai/filemanage_civitai.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/civitai/filemanage_civitai.py b/modules/civitai/filemanage_civitai.py index f67229939..b755bbd50 100644 --- a/modules/civitai/filemanage_civitai.py +++ b/modules/civitai/filemanage_civitai.py @@ -118,7 +118,7 @@ def resolve_save_path(model_type: str, model_name: str = "", base_model: str = " for key, value in replacements.items(): subfolder = subfolder.replace(key, value) # Clean up empty path segments - subfolder = re.sub(r'[/\\]+', os.sep, subfolder) + subfolder = re.sub(r'[/\\]+', lambda _match: os.sep, subfolder) # callable repl: a string repl reads the Windows backslash as an escape subfolder = subfolder.strip(os.sep) return base_folder / subfolder From b06b5381041cfce43b29aa8c3afe52b58a974d31 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 05:37:44 +0100 Subject: [PATCH 225/270] feat(civitai): verify downloads in flight and cache under loader keys The downloader hashes bytes as it writes them, seeding from the partial on resume, and checks the declared SHA256 against that digest instead of rereading the file. The declared hash, or the computed one when none is given, is cached under the key the owning loader reads; loader_kind and hash_cache_title derive that key for the downloader and the sweeps. --- modules/civitai/download_civitai.py | 83 ++++++++++++++++----------- modules/civitai/filemanage_civitai.py | 49 ++++++++++++++++ modules/civitai/metadata_civitai.py | 15 ++--- 3 files changed, 103 insertions(+), 44 deletions(-) diff --git a/modules/civitai/download_civitai.py b/modules/civitai/download_civitai.py index 90401458f..4e13094c3 100644 --- a/modules/civitai/download_civitai.py +++ b/modules/civitai/download_civitai.py @@ -28,7 +28,7 @@ class DownloadItem: token: str | None = None model_id: int = 0 version_id: int = 0 - status: str = "queued" # queued | downloading | verifying | completed | failed | cancelled + status: str = "queued" # queued | downloading | completed | failed | cancelled progress: float = 0.0 bytes_downloaded: int = 0 bytes_total: int = 0 @@ -195,6 +195,7 @@ class DownloadManager: item.status = "downloading" item.bytes_downloaded = starting_pos + digest = hashlib.sha256() try: r = shared.req(item.url, headers=headers if headers else None, stream=True) @@ -222,6 +223,10 @@ class DownloadManager: starting_pos = 0 item.bytes_downloaded = 0 os.truncate(temp_file, 0) + if starting_pos > 0: # a resumed download's digest must include the partial already on disk + with open(temp_file, 'rb') as partial: + for block in iter(lambda: partial.read(1024 * 1024), b''): + digest.update(block) total_size = int(r.headers.get('content-length', 0)) item.bytes_total = starting_pos + total_size @@ -255,6 +260,7 @@ class DownloadManager: return f.write(chunk) + digest.update(chunk) written += len(chunk) item.bytes_downloaded = written if item.bytes_total > 0: @@ -290,27 +296,19 @@ class DownloadManager: log.error(f'CivitAI download error: id={item.id} {e}') return - # Hash verification - if item.expected_hash: - item.status = "verifying" - try: - from modules import hashes - computed = hashes.calculate_sha256(temp_file, quiet=True) - if computed.upper() != item.expected_hash.upper(): - discard = getattr(shared.opts, 'civitai_discard_hash_mismatch', True) - if discard: - try: - os.remove(temp_file) - except OSError: - pass - item.status = "failed" - item.error = f'hash mismatch: expected={item.expected_hash[:16]}... got={computed[:16]}...' - item.completed_at = datetime.now() - log.error(f'CivitAI download hash mismatch: id={item.id} expected={item.expected_hash[:16]} got={computed[:16]}') - return - log.warning(f'CivitAI download hash mismatch (kept): id={item.id} expected={item.expected_hash[:16]} got={computed[:16]}') - except Exception as e: - log.warning(f'CivitAI download hash check failed: id={item.id} {e}') + computed = digest.hexdigest() + if item.expected_hash and computed != item.expected_hash.lower(): + if getattr(shared.opts, 'civitai_discard_hash_mismatch', True): + try: + os.remove(temp_file) + except OSError: + pass + item.status = "failed" + item.error = f'hash mismatch: expected={item.expected_hash[:16]}... got={computed[:16]}...' + item.completed_at = datetime.now() + log.error(f'CivitAI download hash mismatch: id={item.id} expected={item.expected_hash[:16]} got={computed[:16]}') + return + log.warning(f'CivitAI download hash mismatch (kept): id={item.id} expected={item.expected_hash[:16]} got={computed[:16]}') # Move temp to final try: @@ -326,18 +324,16 @@ class DownloadManager: item.completed_at = datetime.now() log.info(f'CivitAI download complete: id={item.id} file="{final_file}" size={item.bytes_downloaded}') - # Write verified hash to cache so check-local finds it immediately - if item.expected_hash: - try: - from modules import hashes - model_type_map = {'Checkpoint': 'checkpoint', 'LORA': 'lora', 'TextualInversion': 'embedding', 'VAE': 'vae'} - prefix = model_type_map.get(item.model_type, item.model_type.lower()) - name = os.path.splitext(item.filename)[0] - title = f"{prefix}/{name}" - hashes.cache().add_hash(title, os.path.getmtime(final_file), item.expected_hash.lower()) + # the declared hash is cached even on a kept mismatch: it is what CivitAI knows the file by + try: + from modules import hashes + from modules.civitai.filemanage_civitai import loader_kind, hash_cache_title + title = hash_cache_title(loader_kind(final_file), final_file) + if title is not None: + hashes.cache().add_hash(title, os.path.getmtime(final_file), (item.expected_hash or computed).lower()) hashes.save_cache() - except Exception: - pass + except Exception as e: + log.warning(f'CivitAI download hash cache: id={item.id} {e}') # Download metadata and preview self._fetch_sidecar(item, final_file) @@ -776,8 +772,23 @@ def download_civit_preview(model_path: str, preview_url: str, meta: dict | None return 200, str(total_size), '' +def declared_sha256(version_id: int, url: str, filename: str, token: str | None = None) -> str: + """SHA256 CivitAI declares for the version file behind url, matched by download URL, then by file name.""" + if not version_id: + return '' + from modules.civitai.client_civitai import client + version = client.get_version(version_id, token=token) + if version is None: + return '' + for matches in (lambda f: f.download_url == url, lambda f: f.name == filename): + for f in version.files: + if f.hashes.sha256 and matches(f): + return f.hashes.sha256.lower() + return '' + + def download_civit_model(model_url: str, model_name: str = '', model_path: str = '', model_type: str = '', token: str | None = None, - base_model: str = '', model_id: int = 0, version_id: int = 0): + base_model: str = '', model_id: int = 0, version_id: int = 0, expected_hash: str = ''): """Legacy function — delegates to DownloadManager for non-blocking downloads.""" if not model_url: log.error('Model download: no url provided') @@ -797,17 +808,19 @@ def download_civit_model(model_url: str, model_name: str = '', model_path: str = folder = model_path else: folder = os.path.join(paths.models_path, model_path) + expected_hash = expected_hash or declared_sha256(version_id, model_url, model_name, token=token) item = download_manager.enqueue( url=model_url, folder=folder, filename=model_name or "Unknown", model_type=model_type, + expected_hash=expected_hash, token=token, model_id=model_id, version_id=version_id, ) # Wait for completion (legacy blocking behavior) - while item.status in ("queued", "downloading", "verifying"): + while item.status in ("queued", "downloading"): time.sleep(0.5) if item.status == "completed" and not item.error: from modules.sd_models import list_models diff --git a/modules/civitai/filemanage_civitai.py b/modules/civitai/filemanage_civitai.py index b755bbd50..d89c38ea6 100644 --- a/modules/civitai/filemanage_civitai.py +++ b/modules/civitai/filemanage_civitai.py @@ -93,6 +93,55 @@ def iter_type_roots() -> set[Path]: return {r for r in roots if r.is_dir()} +def path_under(filename: str, root: str | None) -> bool: + if not root: + return False + root = os.path.normcase(os.path.abspath(root)).rstrip(os.sep) + os.sep + return os.path.normcase(os.path.abspath(filename)).startswith(root) + + +def loader_kind(filename: str) -> str | None: + """Model loader that lists this file, judged by the folder it is in.""" + from modules import shared, paths + ckpt_roots = (getattr(shared.opts, 'ckpt_dir', ''), os.path.join(paths.models_path, 'Stable-diffusion')) + if path_under(filename, getattr(shared.opts, 'vae_dir', '')) or path_under(filename, os.path.join(paths.models_path, 'VAE')): + return 'vae' + if filename.endswith('.vae.safetensors') and any(path_under(filename, root) for root in ckpt_roots): + return 'vae' + if path_under(filename, getattr(shared.opts, 'unet_dir', '')): + return 'unet' + if path_under(filename, getattr(shared.cmd_opts, 'lora_dir', '')): + return 'lora' + if any(path_under(filename, root) for root in ckpt_roots): + return 'checkpoint' + return None + + +def hash_cache_title(kind: str | None, filename: str, name: str | None = None) -> str | None: + """Hash cache key the loader of kind reads for filename, or None when it keeps none.""" + from modules import shared, paths + basename = os.path.basename(filename) + stem = os.path.splitext(basename)[0] + if kind == 'lora': # lora_load registers the basename with dots replaced + return 'lora/' + stem.replace('.', '_') + if kind == 'unet': # sd_unet keeps the extension on anything but safetensors + return f"unet/{name or (stem if '.safetensors' in basename else basename)}" + if kind == 'vae': + return f'vae/{os.path.abspath(filename)}' + if kind == 'checkpoint': + if name is None: # CheckpointInfo matches the folder by string prefix, then drops the extension + relname = filename + ckpt_dir = getattr(shared.opts, 'ckpt_dir', '') or '' + model_path = os.path.abspath(os.path.join(paths.models_path, 'Stable-diffusion')) + if ckpt_dir and relname.startswith(ckpt_dir): + relname = os.path.relpath(filename, ckpt_dir) + elif relname.startswith(model_path): + relname = os.path.relpath(filename, model_path) + name = os.path.splitext(relname)[0] + return f'checkpoint/{name}' + return None + + def resolve_save_path(model_type: str, model_name: str = "", base_model: str = "", nsfw: bool = False, creator: str = "", model_id: int = 0, version_id: int = 0, version_name: str = "") -> Path: diff --git a/modules/civitai/metadata_civitai.py b/modules/civitai/metadata_civitai.py index 2571c7e4d..1b132f162 100644 --- a/modules/civitai/metadata_civitai.py +++ b/modules/civitai/metadata_civitai.py @@ -5,6 +5,7 @@ import threading import concurrent.futures from modules.shared import log, opts, max_workers, state, cmd_opts from modules.civitai.client_civitai import client +from modules.civitai.filemanage_civitai import hash_cache_title GIB = 1024 ** 3 @@ -34,17 +35,13 @@ class CivitModel: self.status = 'Not found' +PAGE_KINDS = {'model': 'checkpoint', 'lora': 'lora', 'unet/dit': 'unet', 'vae': 'vae'} + + def cache_title(page: str, item: dict) -> str | None: """Hash cache key read by the page's own loader, or None when it keeps no cache entry.""" - if page == 'model': - return f"checkpoint/{item.get('name')}" - if page == 'lora': # lora_load registers the basename with dots replaced - return 'lora/' + os.path.splitext(os.path.basename(item.get('filename', '')))[0].replace('.', '_') - if page == 'unet/dit': - return f"unet/{item.get('name')}" - if page == 'vae': - return f"vae/{item.get('filename')}" - return None + kind = PAGE_KINDS.get(page) + return hash_cache_title(kind, item.get('filename') or '', name=item.get('name') if kind in ('checkpoint', 'unet') else None) def resolve_sha256(entries: list[tuple[str, dict]], size_limit: int | None = None) -> tuple[dict[str, str], dict[str, str]]: From eb3a0623392964dbeac3c8e7a93bef2f7570f826 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 16:43:44 +0100 Subject: [PATCH 226/270] feat(civitai): list every file of a version in the gradio model details The versions table showed only files[0], so precision variants of one version could not be downloaded. Each file gets its own row under rowspan version cells, sorted by precision then size, with a variant column and a star on the primary; rows download by fileId URL and All variants queues each version's primary from the fetched model. Companion files pass their own type, and save names carry the precision, then full/pruned and the file id only when needed to stay unique. --- modules/civitai/api_civitai.py | 2 + ui/civitai.ts | 163 ++++++++++++++++++++++----------- ui/globals.d.ts | 2 +- 3 files changed, 112 insertions(+), 55 deletions(-) diff --git a/modules/civitai/api_civitai.py b/modules/civitai/api_civitai.py index e57831b18..a0dcbad0c 100644 --- a/modules/civitai/api_civitai.py +++ b/modules/civitai/api_civitai.py @@ -71,6 +71,8 @@ def file_to_legacy_dict(f) -> dict: 'size': int(f.size_kb * 1024), 'name': f.name, 'type': f.type, + 'primary': bool(f.primary), + 'metadata': {'fp': f.metadata.fp, 'format': f.metadata.format, 'size': f.metadata.size, 'quantType': f.metadata.quant_type}, 'hashes': [h for h in [f.hashes.sha256, f.hashes.autov1, f.hashes.autov2, f.hashes.autov3, f.hashes.crc32, f.hashes.blake3] if h], 'url': f.download_url, } diff --git a/ui/civitai.ts b/ui/civitai.ts index 5c1933a5c..82f376a84 100644 --- a/ui/civitai.ts +++ b/ui/civitai.ts @@ -2,11 +2,21 @@ import { gradioApp, onUiLoaded } from './script'; import { log, error } from './logger'; import { authFetch } from './authWrap'; +interface CivitFileMetadata { + fp?: string | null; + format?: string | null; + size?: string | null; + quantType?: string | null; +} + interface CivitFile { + id: number; url?: string; name?: string; type?: string; size?: number; + primary?: boolean; + metadata?: CivitFileMetadata; } interface CivitImage { @@ -39,6 +49,11 @@ interface CivitModel { versions: CivitVersion[]; } +interface QueuedFile { + version: CivitVersion; + file: CivitFile; +} + // eslint-disable-next-line no-extend-native String.prototype.format = function format(this: string, args: Record): string { let thisString = ''; @@ -56,6 +71,10 @@ let selectedType: string[] = []; let selectedBase: string[] = []; let selectedModelId: number[] = []; let selectedVersionId: number[] = []; +let currentModel: CivitModel | null = null; + +const precisionOrder = ['fp32', 'bf16', 'fp16', 'fp8', 'int8', 'int4']; +const companionTypes = ['VAE', 'Text Encoder']; export function clearModelDetails() { const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome'); @@ -88,6 +107,7 @@ const modelDetailsHTML = ` Type Base File + Variant Updated Size Availability @@ -101,19 +121,72 @@ const modelDetailsHTML = `
    `; -const modelVersionsHTML = ` - - {url} - {name} - {type} - {base} - {file} - {mtime} - {size} - {availability} -
    {desc}
    - -`; +function fileVariant(file: CivitFile): string | null { + return file.metadata?.fp || file.metadata?.quantType || null; +} + +// Model files before companions, then by precision, then larger first +function sortFiles(files: CivitFile[]): CivitFile[] { + const isModel = (f: CivitFile) => f.type === 'Model' || f.type === 'Pruned Model'; + const rank = (f: CivitFile) => { + const index = precisionOrder.indexOf((fileVariant(f) || '').toLowerCase()); + return index < 0 ? precisionOrder.length : index; + }; + return [...files].sort((a, b) => Number(isModel(b)) - Number(isModel(a)) || rank(a) - rank(b) || (b.size || 0) - (a.size || 0)); +} + +function insertNameSuffix(name: string, suffix: string): string { + const dot = name.lastIndexOf('.'); + return dot > 0 ? `${name.slice(0, dot)}-${suffix}${name.slice(dot)}` : `${name}-${suffix}`; +} + +// Precision suffix, then full/pruned and the file id only as far as needed to stay unique within the version +function fileSaveName(file: CivitFile, siblings: CivitFile[]): string { + const tier1 = (f: CivitFile) => { + const variant = fileVariant(f); + return variant ? insertNameSuffix(f.name || '', variant) : f.name || ''; + }; + const tier2 = (f: CivitFile) => (f.metadata?.size ? insertNameSuffix(tier1(f), f.metadata.size) : tier1(f)); + const others = siblings.filter((s) => s.id !== file.id); + const name = tier1(file); + if (!others.some((s) => tier1(s) === name)) return name; + const sized = tier2(file); + if (!others.some((s) => tier2(s) === sized)) return sized; + return insertNameSuffix(name, String(file.id)); +} + +function escapeHTML(text: string): string { + return text.replace(/[&<>"']/g, (c) => `&#${c.charCodeAt(0)};`); +} + +function versionRows(version: CivitVersion, divider: boolean): string { + const files = sortFiles(version.files); + const entries: (CivitFile | null)[] = files.length > 0 ? files : [null]; + const border = divider ? ' style="border-top: 1px solid var(--sd-panel-border-color, #555)"' : ''; + const span = entries.length > 1 ? ` rowspan="${entries.length}"` : ''; + const versionCell = (content: string) => `${content}`; + return entries.map((file, i) => { + const first = i === 0; + const cell = (content: string) => `${content}`; + const link = file ? `` : ''; + const name = file ? `${escapeHTML(file.name || 'unknown')}${file.primary ? ' ' : ''}` : 'unknown'; + const variant = file ? [fileVariant(file), file.metadata?.size].filter(Boolean).join(' · ') : ''; + const size = file?.size ? `${(file.size / 1024 / 1024 / 1024).toFixed(2)} GB` : 'unknown'; + const cells = [ + cell(link), + first ? versionCell(escapeHTML(version.name || 'unknown')) : '', + cell(escapeHTML(file?.type || 'unknown')), + first ? versionCell(escapeHTML(version.base || 'unknown')) : '', + cell(name), + cell(escapeHTML(variant || '-')), + first ? versionCell((new Date(version.mtime)).toLocaleDateString()) : '', + cell(size), + first ? versionCell(escapeHTML(version.availability || 'unknown')) : '', + first ? versionCell(`
    ${version.desc || 'no description available'}
    `) : '', + ]; + return `${cells.join('')}`; + }).join(''); +} export async function modelCardClick(id) { log('modelCardClick id', id); @@ -128,18 +201,9 @@ export async function modelCardClick(id) { log('modelCardClick data', dataArray); if (!dataArray || dataArray.length === 0) return; const data: any = dataArray[0]; // assuming the first item is the one we want + currentModel = data; - const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({ - url: ``, - name: v.name || 'unknown', - type: v.files[0]?.type || 'unknown', - base: v.base || 'unknown', - mtime: (new Date(v.mtime)).toLocaleDateString(), - availability: v.availability || 'unknown', - size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown', - file: `${v.files[0]?.name || 'unknown'}`, - desc: v.desc || 'no description available', - })).join(''); + const versionsHTML = data.versions.map((v: CivitVersion, i: number) => versionRows(v, i > 0)).join(''); const url = `${data.name || 'unknown'}`; const creator = `${data.creator || 'unknown'}`; const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery @@ -160,42 +224,33 @@ export async function modelCardClick(id) { } window.modelCardClick = modelCardClick; -export function startCivitDownload(url, name, type, base, modelId, versionId) { - log('startCivitDownload', { url, name, type, base, modelId, versionId }); - selectedURL = [url]; - selectedName = [name]; - selectedType = [type]; - selectedBase = [base || '']; - selectedModelId = [modelId || 0]; - selectedVersionId = [versionId || 0]; +function queueFiles(model: CivitModel, queued: QueuedFile[]) { + selectedURL = queued.map(({ file }) => file.url || ''); + selectedName = queued.map(({ version, file }) => fileSaveName(file, version.files)); + selectedType = queued.map(({ file }) => (companionTypes.includes(file.type || '') ? file.type : model.type) || ''); + selectedBase = queued.map(({ version }) => version.base || ''); + selectedModelId = queued.map(() => model.id || 0); + selectedVersionId = queued.map(({ version }) => version.id || 0); const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn'); if (civitDownloadBtn) civitDownloadBtn.click(); } -window.startCivitDownload = startCivitDownload; + +export function startCivitFileDownload(versionId: number, fileId: number) { + log('startCivitFileDownload', { versionId, fileId }); + const version = currentModel?.versions.find((v) => v.id === versionId); + const file = version?.files.find((f) => f.id === fileId); + if (!currentModel || !version || !file) return; + queueFiles(currentModel, [{ version, file }]); +} +window.startCivitFileDownload = startCivitFileDownload; export function startCivitAllDownload(evt) { log('startCivitAllDownload', evt); - const table = gradioApp().getElementById('model-versions-table'); - if (!table) return; - const versions = table.querySelectorAll('tr'); - selectedURL = []; - selectedName = []; - selectedType = []; - selectedBase = []; - selectedModelId = []; - selectedVersionId = []; - for (const version of versions) { - const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\d+), (\d+)\)/); - if (!parsed || parsed.length < 7) continue; - selectedURL.push(parsed[1]); - selectedName.push(parsed[2]); - selectedType.push(parsed[3]); - selectedBase.push(parsed[4]); - selectedModelId.push(parseInt(parsed[5], 10)); - selectedVersionId.push(parseInt(parsed[6], 10)); - } - const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn'); - if (civitDownloadBtn) civitDownloadBtn.click(); + if (!currentModel) return; + const queued = currentModel.versions + .map((version) => ({ version, file: version.files.find((f) => f.primary) || version.files[0] })) + .filter((entry): entry is QueuedFile => !!entry.file); + queueFiles(currentModel, queued); } window.startCivitAllDownload = startCivitAllDownload; diff --git a/ui/globals.d.ts b/ui/globals.d.ts index 6b9326879..889d5d338 100644 --- a/ui/globals.d.ts +++ b/ui/globals.d.ts @@ -94,7 +94,7 @@ declare global { downloadCivitModel?: (...args: unknown[]) => unknown[]; // ui/civitai.ts modelCardClick?: (id: string | number) => Promise; // ui/civitai.ts startCivitAllDownload?: (evt: Event) => void; // ui/civitai.ts - startCivitDownload?: (url: string, name: string, type: string, base: string, modelId: number, versionId: number) => void; // ui/civitai.ts + startCivitFileDownload?: (versionId: number, fileId: number) => void; // ui/civitai.ts clickDocsPage?: (page: string) => Promise; // ui/docs.ts getDocsPage?: () => string; // ui/docs.ts getGitHubWikiPage?: () => string; // ui/docs.ts From ef31ce70c7cc20ef2beae3345a57cfc6d6fff275 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 22:59:32 +0100 Subject: [PATCH 227/270] refactor(civitai): seed the base-model filter from discovery only search_civitai.base_models was a hand-kept copy of the /enums list that lacked every base added this year. The dropdown starts empty and takes the discovered names minus the bases CivitAI has retired (in BaseModel but not ActiveBaseModel). The tab handler refreshes the choice lists on every visit, since later browser sessions used to get no update; the initial search still runs once per process. --- modules/civitai/search_civitai.py | 4 ---- modules/ui_models.py | 15 ++++++++------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/modules/civitai/search_civitai.py b/modules/civitai/search_civitai.py index 6c4fd99dc..aea995628 100644 --- a/modules/civitai/search_civitai.py +++ b/modules/civitai/search_civitai.py @@ -5,10 +5,6 @@ from modules.civitai.client_civitai import client from modules.civitai.models_civitai import CivitModel, CivitSearchResponse -# Hardcoded fallback list — used by Gradio UI if discover_options() fails -base_models = ['', 'AuraFlow', 'Chroma', 'CogVideoX', 'Flux.1 S', 'Flux.1 D', 'Flux.1 Krea', 'Flux.1 Kontext', 'Flux.2 D', 'HiDream', 'Hunyuan 1', 'Hunyuan Video', 'Illustrious', 'Kolors', 'LTXV', 'Lumina', 'Mochi', 'NoobAI', 'PixArt a', 'PixArt E', 'Pony', 'Pony V7', 'Qwen', 'SD 1.4', 'SD 1.5', 'SD 1.5 LCM', 'SD 1.5 Hyper', 'SD 2.0', 'SD 2.1', 'SDXL 1.0', 'SDXL Lightning', 'SDXL Hyper', 'Wan Video 1.3B t2v', 'Wan Video 14B t2v', 'Wan Video 14B i2v 480p', 'Wan Video 14B i2v 720p', 'Wan Video 2.2 TI2V-5B', 'Wan Video 2.2 I2V-A14B', 'Wan Video 2.2 T2V-A14B', 'Wan Video 2.5 T2V', 'Wan Video 2.5 I2V', 'ZImageTurbo', 'Other'] - - def search_civitai( query: str, tag: str = '', diff --git a/modules/ui_models.py b/modules/ui_models.py index b3b4b6839..1aab89bba 100644 --- a/modules/ui_models.py +++ b/modules/ui_models.py @@ -521,7 +521,7 @@ def create_ui(): ) with gr.Tab(label="CivitAI", elem_id="models_civitai_tab") as civitai_tab: - from modules.civitai.search_civitai import search_civitai, create_model_cards, base_models + from modules.civitai.search_civitai import search_civitai, create_model_cards sort_fallback = ['', 'Most Downloaded', 'Highest Rated', 'Most Liked', 'Most Discussed', 'Most Collected', 'Most Images', 'Newest', 'Oldest'] @@ -572,7 +572,7 @@ def create_ui(): civit_download_btn = gr.Button(value="Download model", variant='primary', elem_id="civitai_download_btn", visible=False) with gr.Row(): civit_type = gr.Dropdown(choices=type_fallback, label='CivitAI model type', value='', elem_id='civit_type') - civit_base = gr.Dropdown(choices=base_models, label='CivitAI base model', value='') + civit_base = gr.Dropdown(choices=[''], label='CivitAI base model', value='') with gr.Row(): civit_sort = gr.Dropdown(choices=sort_fallback, label='CivitAI sort', value='', elem_id='civit_sort') civit_period = gr.Dropdown( @@ -628,14 +628,15 @@ def create_ui(): def civitai_on_tab_enter(): nonlocal _civitai_loaded - if _civitai_loaded: - return [gr.update(), gr.update(), gr.update(), gr.update(), gr.update()] - _civitai_loaded = True from modules.civitai.client_civitai import client - options = client.discover_options() + options = client.discover_options() # cached, so every visit can refresh the choices type_choices = [''] + (options.get('types', []) or type_fallback[1:]) sort_choices = [''] + (options.get('sort', []) or sort_fallback[1:]) - base_choices = [''] + (options.get('base_models', []) or base_models[1:]) + hidden_bases = {entry.get('name') for entry in options.get('base_models_info', []) if entry.get('hidden')} # retired bases, which the site's own filter omits too + base_choices = [''] + [base for base in options.get('base_models', []) if base not in hidden_bases] + if _civitai_loaded: + return [gr.update(choices=type_choices), gr.update(choices=sort_choices), gr.update(choices=base_choices), gr.update(), gr.update()] + _civitai_loaded = True results = search_civitai(query='', sort='Most Downloaded', period='AllTime', limit=20) html = create_model_cards(results) return [ From 229db02b1427f6c831a8a52e15140157c15694d2 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 13 Sep 2026 23:41:41 +0100 Subject: [PATCH 228/270] feat(civitai): show search failures in the models tab CivitSearchResponse carries the server's error text; the Gradio page renders it, or a no-results line, in the details area instead of a blank card list. The legacy route reads items from the response. --- modules/civitai/api_civitai.py | 2 +- modules/civitai/client_civitai.py | 7 ++++--- modules/civitai/models_civitai.py | 1 + modules/civitai/search_civitai.py | 28 ++++++++++++++++------------ 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/modules/civitai/api_civitai.py b/modules/civitai/api_civitai.py index a0dcbad0c..ac25130f3 100644 --- a/modules/civitai/api_civitai.py +++ b/modules/civitai/api_civitai.py @@ -681,7 +681,7 @@ def legacy_get_civitai( query=query, tag=tag, types=types, sort=sort, period=period, nsfw=nsfw, limit=limit, base=base, token=token, exact=exact, ) - return [model_to_legacy_dict(m) for m in models] + return [model_to_legacy_dict(m) for m in models.items] return JSONResponse(content=[], status_code=200) diff --git a/modules/civitai/client_civitai.py b/modules/civitai/client_civitai.py index 00bfa3558..ddd695af5 100644 --- a/modules/civitai/client_civitai.py +++ b/modules/civitai/client_civitai.py @@ -141,8 +141,9 @@ class CivitaiClient: params['favorites'] = 'true' r = self._get('/models', params=params, token=token) if r.status_code != 200: - log.error(f'CivitAI search: code={r.status_code} message="{response_message(r)}"') - return CivitSearchResponse() + message = response_message(r) + log.error(f'CivitAI search: code={r.status_code} message="{message}"') + return CivitSearchResponse(error=message) data = r.json() if 'items' not in data: # single model by numeric query — wrap in search response @@ -155,7 +156,7 @@ class CivitaiClient: response = CivitSearchResponse.parse_obj(data) except Exception as e: log.error(f'CivitAI search parse error: {e}') - return CivitSearchResponse() + return CivitSearchResponse(error='search response could not be parsed') # /models rejects server-side level filtering and its nsfw boolean leaks # Mature+ content, so filter on each model's aggregate nsfwLevel here: # nsfw on keeps every level, nsfw off/unset keeps SFW (None + Soft). diff --git a/modules/civitai/models_civitai.py b/modules/civitai/models_civitai.py index 55b6db77a..3a31e0005 100644 --- a/modules/civitai/models_civitai.py +++ b/modules/civitai/models_civitai.py @@ -188,6 +188,7 @@ class CivitSearchResponse(BaseModel): items: list[CivitModel] = Field(default_factory=list) metadata: CivitSearchMetadata = Field(default_factory=CivitSearchMetadata) request_url: str | None = Field(None, alias="requestUrl") + error: str | None = None # server or parse failure text; items is empty when set class CivitTag(BaseModel): diff --git a/modules/civitai/search_civitai.py b/modules/civitai/search_civitai.py index aea995628..65653de56 100644 --- a/modules/civitai/search_civitai.py +++ b/modules/civitai/search_civitai.py @@ -1,5 +1,6 @@ import re import time +from html import escape from installer import log from modules.civitai.client_civitai import client from modules.civitai.models_civitai import CivitModel, CivitSearchResponse @@ -16,10 +17,10 @@ def search_civitai( base: str = '', token: str | None = None, exact: bool = True, -) -> list[CivitModel]: +) -> CivitSearchResponse: if not query and not tag and not sort: log.error('CivitAI: no search criteria provided') - return [] + return CivitSearchResponse(error='no search criteria provided') t0 = time.time() @@ -35,8 +36,8 @@ def search_civitai( if model: t1 = time.time() log.info(f'CivitAI result: id={query} time={t1 - t0:.2f}') - return [model] - return [] + return CivitSearchResponse(items=[model]) + return CivitSearchResponse(error=f'model {query} not found') response: CivitSearchResponse = client.search_models( query=query, @@ -61,17 +62,20 @@ def search_civitai( if any(q_lower in name for name in names): exact_models.append(model) - result = exact_models if exact_models else all_models + response.items = exact_models if exact_models else all_models t1 = time.time() log.info(f'CivitAI result: exact={len(exact_models)} total={len(all_models)} time={t1 - t0:.2f}') - return result + return response -def create_model_cards(all_models: list[CivitModel]) -> str: - details = """ -
    -
    - """ +def create_model_cards(response: CivitSearchResponse) -> str: + if response.error: + notice = f'CivitAI: {escape(response.error)}' + elif not response.items: + notice = 'No models found' + else: + notice = '' + details = f'
    {notice}
    ' cards = """
    {cards} @@ -85,7 +89,7 @@ def create_model_cards(all_models: list[CivitModel]) -> str:
    """ all_cards = '' - for model in all_models: + for model in response.items: previews = [] for version in model.versions: for image in version.images: From 7554389f2e1e1f18641b3f84e16d22cef889e7ff Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 14 Sep 2026 00:01:14 +0100 Subject: [PATCH 229/270] fix(civitai): stop check-local from reporting deleted model files A hash cache hit now resolves through its loader's registry and counts only while the file exists; entries whose file is gone are pruned, on the request that finds them and once per process for the rest. filename is always the local path. --- modules/civitai/api_civitai.py | 79 ++++++++++++++------------- modules/civitai/filemanage_civitai.py | 70 ++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 37 deletions(-) diff --git a/modules/civitai/api_civitai.py b/modules/civitai/api_civitai.py index ac25130f3..f7c68b761 100644 --- a/modules/civitai/api_civitai.py +++ b/modules/civitai/api_civitai.py @@ -567,7 +567,6 @@ def buildsidecar_index(): continue # Match the companion file to a JSON entry by size (sizeKB) companion_size_kb = os.path.getsize(companion) / 1024.0 - companion_name = os.path.basename(base) best_sha = None best_diff = float('inf') for v in data.get('modelVersions', []): @@ -580,7 +579,7 @@ def buildsidecar_index(): best_sha = sha best_diff = diff if best_sha: - sidecar_index[best_sha.lower()] = {"filename": companion_name, "type": model_type} + sidecar_index[best_sha.lower()] = {"filename": companion, "type": model_type} except Exception: continue log.debug(f'CivitAI sidecar index: {len(sidecar_index)} hashes from sidecar files') @@ -597,54 +596,60 @@ def invalidatesidecar_index(): # --------------------------------------------------------------------------- def post_check_local(request: dict): - """Check which SHA256 hashes correspond to locally downloaded files.""" + """Check which SHA256 hashes correspond to local model files, dropping hash cache entries whose files are gone.""" from modules import hashes as hash_module - input_hashes = request.get('hashes', []) - if not input_hashes: + from modules.civitai.filemanage_civitai import hash_cache_path, prune_hash_cache + requested = [str(h) for h in request.get('hashes', []) if h] + if not requested: return {"found": {}} - # Build reverse lookup: lowercase sha256 -> {filename, type} + prune_hash_cache() + wanted = {h.lower() for h in requested} + titles_by_sha: dict[str, list[str]] = {} + for title, entry in list(hash_module.cache().items()): + sha = (entry.get("sha256") or "").lower() + if sha in wanted: + titles_by_sha.setdefault(sha, []).append(title) found = {} - for title, entry in hash_module.cache().items(): - sha = entry["sha256"] - if not sha: - continue - parts = title.split("/", 1) - file_type = parts[0] if len(parts) > 1 else "unknown" - found[sha.lower()] = {"filename": title, "type": file_type} - # Supplement from in-memory checkpoint registry + gone = [] + for sha, titles in titles_by_sha.items(): + for title in titles: + path = hash_cache_path(title) + if path is None: # no loaded registry names the file + continue + if os.path.exists(path): + found[sha] = {"filename": path, "type": title.split("/", 1)[0]} + break + gone.append(title) + if gone: + for title in gone: + hash_module.cache().pop(title, None) + hash_module.save_cache() + log.debug(f'CivitAI check local: pruned={len(gone)} hash cache entries without files') try: from modules.sd_checkpoint import checkpoints_list - for _title, cp in checkpoints_list.items(): - if cp.sha256: - key = cp.sha256.lower() - if key not in found: - found[key] = {"filename": cp.filename, "type": "checkpoint"} + for cp in checkpoints_list.values(): + key = (cp.sha256 or "").lower() + if key in wanted and key not in found and os.path.exists(cp.filename): + found[key] = {"filename": cp.filename, "type": "checkpoint"} except Exception: pass - # Supplement from in-memory LoRA registry try: from modules.lora.lora_load import available_networks - for _name, net in available_networks.items(): - if net.hash: - key = net.hash.lower() - if key not in found: - found[key] = {"filename": net.filename, "type": "lora"} + for net in available_networks.values(): + key = (net.hash or "").lower() + if key in wanted and key not in found and os.path.isfile(net.filename): + found[key] = {"filename": net.filename, "type": "lora"} except Exception: pass - # Supplement from sidecar index (covers files never hashed locally) sidecar = buildsidecar_index() - for h in input_hashes: - if not h: - continue - key = h.lower() - if key not in found and key in sidecar: - found[key] = sidecar[key] - # Match requested hashes result = {} - for h in input_hashes: - if not h: - continue - match = found.get(h.lower()) + for h in requested: + key = h.lower() + match = found.get(key) + if match is None: + entry = sidecar.get(key) + if entry and os.path.isfile(entry["filename"]): + match = entry if match: result[h] = match return {"found": result} diff --git a/modules/civitai/filemanage_civitai.py b/modules/civitai/filemanage_civitai.py index d89c38ea6..9eb7c7211 100644 --- a/modules/civitai/filemanage_civitai.py +++ b/modules/civitai/filemanage_civitai.py @@ -142,6 +142,76 @@ def hash_cache_title(kind: str | None, filename: str, name: str | None = None) - return None +hash_cache_pruned = False + + +def loader_root(kind: str) -> str | None: + """Folder the loader of kind lists, or None for a kind no loader owns.""" + from modules import shared, paths + if kind == 'vae': + return getattr(shared.opts, 'vae_dir', '') or os.path.join(paths.models_path, 'VAE') + if kind == 'unet': + return getattr(shared.opts, 'unet_dir', '') + if kind == 'lora': + return getattr(shared.cmd_opts, 'lora_dir', '') + if kind == 'checkpoint': + return getattr(shared.opts, 'ckpt_dir', '') or os.path.join(paths.models_path, 'Stable-diffusion') + return None + + +def loader_registry(kind: str) -> dict[str, str] | None: + """Name to path map of the loader that reads the kind's hash cache keys, or None for a kind no loader owns.""" + if kind == 'vae': + from modules.sd_vae import vae_dict + return vae_dict + if kind == 'unet': + from modules.sd_unet import unet_dict + return unet_dict + if kind == 'lora': + from modules.lora.lora_load import available_networks + return {name: entry.filename for name, entry in available_networks.items()} + if kind == 'checkpoint': + from modules.sd_checkpoint import checkpoints_list + return {entry.name: entry.filename for entry in checkpoints_list.values()} + return None + + +def hash_cache_path(title: str) -> str | None: + """Path the loader registry holds for a hash cache key, or None when no loaded registry names it.""" + kind, _, name = title.partition('/') + if kind == 'vae' and os.path.isabs(name): + return name + registry = loader_registry(kind) + return registry.get(name) if registry else None + + +def hash_cache_stale(title: str) -> bool: + """True when the key's loader folder is reachable but the registry no longer lists the file, or lists a path that is gone.""" + kind, _, name = title.partition('/') + if kind == 'vae' and os.path.isabs(name): + return os.path.isdir(os.path.dirname(name)) and not os.path.exists(name) + root = loader_root(kind) + if not root or not os.path.isdir(root): + return False + path = (loader_registry(kind) or {}).get(name) + return path is None or not os.path.exists(path) + + +def prune_hash_cache(): + """Drop hash cache entries for files that are gone, once per process.""" + global hash_cache_pruned # pylint: disable=global-statement + if hash_cache_pruned: + return + hash_cache_pruned = True + from modules import hashes + gone = [title for title in list(hashes.cache()) if hash_cache_stale(title)] + for title in gone: + hashes.cache().pop(title, None) + if gone: + hashes.save_cache() + log.info(f'CivitAI hash cache: pruned={len(gone)} entries without files') + + def resolve_save_path(model_type: str, model_name: str = "", base_model: str = "", nsfw: bool = False, creator: str = "", model_id: int = 0, version_id: int = 0, version_name: str = "") -> Path: From 9a6b7a1c932065acb954109f429148b14b9f5991 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 14 Sep 2026 03:03:09 +0100 Subject: [PATCH 230/270] fix(civitai): register a finished download with its loader list A finished download refreshed the checkpoint list alone, so a new LoRA or UNET stayed invisible to check-local and Networks until a manual refresh. add_network, now module-level, registers one LoRA file; unet, vae and checkpoint downloads run their loader's scan. --- modules/civitai/download_civitai.py | 11 +++--- modules/civitai/filemanage_civitai.py | 17 +++++++++ modules/lora/lora_load.py | 52 ++++++++++++++------------- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/modules/civitai/download_civitai.py b/modules/civitai/download_civitai.py index 4e13094c3..47ded4b56 100644 --- a/modules/civitai/download_civitai.py +++ b/modules/civitai/download_civitai.py @@ -338,12 +338,11 @@ class DownloadManager: # Download metadata and preview self._fetch_sidecar(item, final_file) - # Refresh model list and extra-networks cache try: - from modules.sd_models import list_models - list_models() - except Exception: - pass + from modules.civitai.filemanage_civitai import register_download + register_download(final_file) + except Exception as e: + log.warning(f'CivitAI download register: id={item.id} {e}') try: from modules.api.loras import _invalidate_extra_networks _invalidate_extra_networks() @@ -823,7 +822,5 @@ def download_civit_model(model_url: str, model_name: str = '', model_path: str = while item.status in ("queued", "downloading"): time.sleep(0.5) if item.status == "completed" and not item.error: - from modules.sd_models import list_models - list_models() return os.path.join(item.folder, item.filename) return None diff --git a/modules/civitai/filemanage_civitai.py b/modules/civitai/filemanage_civitai.py index 9eb7c7211..0c710434e 100644 --- a/modules/civitai/filemanage_civitai.py +++ b/modules/civitai/filemanage_civitai.py @@ -117,6 +117,23 @@ def loader_kind(filename: str) -> str | None: return None +def register_download(filename: str): + """Add a finished download to its loader's list: one file for lora, a folder scan for unet, vae and checkpoint.""" + kind = loader_kind(filename) + if kind == 'lora': + from modules.lora.lora_load import add_network + add_network(filename) + elif kind == 'unet': + from modules.sd_unet import refresh_unet_list + refresh_unet_list() + elif kind == 'vae': + from modules.sd_vae import refresh_vae_list + refresh_vae_list() + elif kind == 'checkpoint': + from modules.sd_models import list_models + list_models() + + def hash_cache_title(kind: str | None, filename: str, name: str | None = None) -> str | None: """Hash cache key the loader of kind reads for filename, or None when it keeps none.""" from modules import shared, paths diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index 6eb0fd5b1..ffcf053a1 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -211,6 +211,33 @@ def maybe_recompile_model(names, te_multipliers): return recompile_model, skip_lora_load +def add_network(filename): + """Register one network file in the available-network tables.""" + if not os.path.isfile(filename): + return + name = os.path.splitext(os.path.basename(filename))[0] + name = name.replace('.', '_') + try: + entry = network.NetworkOnDisk(name, filename) + available_networks[entry.name] = entry + if entry.alias in available_network_aliases: + forbidden_network_aliases[entry.alias.lower()] = 1 + available_network_aliases[entry.name] = entry + if entry.fullname != entry.name: + available_network_aliases[entry.fullname] = entry + # entry.name mangles dots to underscores for legacy reasons and entry.fullname + # carries any subfolder prefix, so neither matches when the user types the file's + # natural basename. setdefault avoids clobbering an explicit primary entry when + # two files in different subfolders share a basename. + basename_alias = os.path.splitext(os.path.basename(filename))[0] + if basename_alias and basename_alias not in (entry.name, entry.fullname): + available_network_aliases.setdefault(basename_alias, entry) + if entry.shorthash: + available_network_hash_lookup[entry.shorthash] = entry + except OSError as e: # should catch FileNotFoundError and PermissionError etc. + log.error(f'LoRA: filename="{filename}" {e}') + + def list_available_networks(): t0 = time.time() available_networks.clear() @@ -221,31 +248,6 @@ def list_available_networks(): if not os.path.exists(shared.cmd_opts.lora_dir): log.warning(f'LoRA directory not found: path="{shared.cmd_opts.lora_dir}"') - def add_network(filename): - if not os.path.isfile(filename): - return - name = os.path.splitext(os.path.basename(filename))[0] - name = name.replace('.', '_') - try: - entry = network.NetworkOnDisk(name, filename) - available_networks[entry.name] = entry - if entry.alias in available_network_aliases: - forbidden_network_aliases[entry.alias.lower()] = 1 - available_network_aliases[entry.name] = entry - if entry.fullname != entry.name: - available_network_aliases[entry.fullname] = entry - # entry.name mangles dots to underscores for legacy reasons and entry.fullname - # carries any subfolder prefix, so neither matches when the user types the file's - # natural basename. setdefault avoids clobbering an explicit primary entry when - # two files in different subfolders share a basename. - basename_alias = os.path.splitext(os.path.basename(filename))[0] - if basename_alias and basename_alias not in (entry.name, entry.fullname): - available_network_aliases.setdefault(basename_alias, entry) - if entry.shorthash: - available_network_hash_lookup[entry.shorthash] = entry - except OSError as e: # should catch FileNotFoundError and PermissionError etc. - log.error(f'LoRA: filename="{filename}" {e}') - candidates = sorted(files_cache.list_files(shared.cmd_opts.lora_dir, ext_filter=[".pt", ".ckpt", ".safetensors"])) with concurrent.futures.ThreadPoolExecutor(max_workers=shared.max_workers) as executor: for fn in candidates: From 6d20ea0332e9047aac7b3ae49414d3bc826f694a Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 14 Sep 2026 03:33:05 +0100 Subject: [PATCH 231/270] fix(civitai): keep civitai's reason on refused downloads A refused download recorded only the status code and logged nothing. The error now carries CivitAI's own message, as in "HTTP 403: Early Access: ...", and the refusal and rename failure log like every other branch. --- modules/civitai/client_civitai.py | 3 +++ modules/civitai/download_civitai.py | 12 ++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/civitai/client_civitai.py b/modules/civitai/client_civitai.py index ddd695af5..1a2f9c499 100644 --- a/modules/civitai/client_civitai.py +++ b/modules/civitai/client_civitai.py @@ -55,6 +55,9 @@ def response_message(response) -> str: error = '; '.join(f"{'.'.join(str(p) for p in issue.get('path', []))}: {issue.get('message', '')}" for issue in json.loads(error)) except Exception: pass + message = body.get('message') if isinstance(body, dict) else None + if isinstance(error, str) and isinstance(message, str) and message and message != error: # download refusals carry a short error and a longer message + error = f'{error}: {message}' if not error: error = getattr(response, 'reason', '') or getattr(response, 'text', '') return str(error).strip()[:200] diff --git a/modules/civitai/download_civitai.py b/modules/civitai/download_civitai.py index 47ded4b56..a3a2a0cea 100644 --- a/modules/civitai/download_civitai.py +++ b/modules/civitai/download_civitai.py @@ -200,9 +200,12 @@ class DownloadManager: try: r = shared.req(item.url, headers=headers if headers else None, stream=True) if r.status_code not in (200, 206): + from modules.civitai.client_civitai import response_message + reason = response_message(r) item.status = "failed" - item.error = f'HTTP {r.status_code}' + item.error = f'HTTP {r.status_code}: {reason}' if reason else f'HTTP {r.status_code}' item.completed_at = datetime.now() + log.error(f'CivitAI download refused: id={item.id} file="{item.filename}" code={r.status_code} message="{reason}"') return # A text/* response is an error or login page served with HTTP 200, @@ -212,7 +215,7 @@ class DownloadManager: item.status = "failed" item.error = f'invalid content-type: {content_type}' item.completed_at = datetime.now() - log.warning(f'CivitAI download invalid content-type: id={item.id} content-type="{content_type}"') + log.warning(f'CivitAI download invalid content-type: id={item.id} file="{item.filename}" content-type="{content_type}"') return # A 200 reply to a Range request means the server ignored the range @@ -276,7 +279,7 @@ class DownloadManager: item.status = "failed" item.error = f'incomplete: expected={expected} got={written}' item.completed_at = datetime.now() - log.warning(f'CivitAI download incomplete: id={item.id} expected={expected} got={written}') + log.warning(f'CivitAI download incomplete: id={item.id} file="{item.filename}" expected={expected} got={written}') return elif written < 1024: try: @@ -293,7 +296,7 @@ class DownloadManager: item.status = "failed" item.error = str(e) item.completed_at = datetime.now() - log.error(f'CivitAI download error: id={item.id} {e}') + log.error(f'CivitAI download error: id={item.id} file="{item.filename}" {e}') return computed = digest.hexdigest() @@ -317,6 +320,7 @@ class DownloadManager: item.status = "failed" item.error = f'rename failed: {e}' item.completed_at = datetime.now() + log.error(f'CivitAI download rename failed: id={item.id} file="{final_file}" {e}') return item.status = "completed" From b3c78e9b5639854ff1b111891306c513759fd3f7 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 14 Sep 2026 03:59:32 +0100 Subject: [PATCH 232/270] fix(civitai): thumbnail video previews from the cdn's h.264 copy CivitAI video covers are AV1, which OpenCV builds without dav1d cannot decode. Previews fetch the CDN's transcode=true,width=450 H.264 copy first, fall back to the original named by its content type, and drop a video that yields no frame for the next media item. An unreadable frame logs one line, and the download path is absolute before registration. --- modules/civitai/download_civitai.py | 120 +++++++++++++++++----------- modules/video.py | 8 +- 2 files changed, 79 insertions(+), 49 deletions(-) diff --git a/modules/civitai/download_civitai.py b/modules/civitai/download_civitai.py index a3a2a0cea..d28a6a179 100644 --- a/modules/civitai/download_civitai.py +++ b/modules/civitai/download_civitai.py @@ -167,7 +167,7 @@ class DownloadManager: # Create temp file name from URL hash url_hash = hashlib.sha256(item.url.encode('utf-8')).hexdigest()[:8] temp_file = os.path.join(item.folder, f'{url_hash}.tmp') - final_file = os.path.join(item.folder, item.filename) + final_file = os.path.abspath(os.path.join(item.folder, item.filename)) # Check if already exists if os.path.isfile(final_file): @@ -371,9 +371,9 @@ class DownloadManager: if version and version.images: for img in version.images: if img.url: - code, _size, _note = download_civit_preview(final_file, img.url, meta=img.meta) + code, _size, note = download_civit_preview(final_file, img.url, meta=img.meta) if code == 200: - log.info(f'CivitAI preview saved: id={item.id}') + log.info(f'CivitAI preview saved: id={item.id} file="{note}"') break if code == 304 and backfill_preview_parameters(final_file, img.url, img.meta): log.info(f'CivitAI preview backfilled: id={item.id}') @@ -671,7 +671,7 @@ def backfill_preview_parameters(model_path: str, preview_url: str, meta: dict | ext = os.path.splitext(preview_url)[1].lower() base = os.path.splitext(model_path)[0] if ext in VIDEO_PREVIEW_EXTENSIONS: - if not os.path.exists(base + ext): + if not any(os.path.exists(base + e) for e in VIDEO_PREVIEW_EXTENSIONS): return False preview_file = base + '.thumb.jpg' if not os.path.exists(preview_file): @@ -718,61 +718,89 @@ def download_civit_meta(model_path: str, model_id): return r.status_code, '', '' +VIDEO_CONTENT_TYPES = {'video/mp4': '.mp4', 'video/webm': '.webm'} + + +def transcoded_video_url(preview_url: str) -> str | None: + """The CDN's H.264 copy of a CivitAI video, or None for any other URL.""" + if '/original=true/' not in preview_url: + return None + return preview_url.replace('/original=true/', '/transcode=true,width=450/', 1) + + def download_civit_preview(model_path: str, preview_url: str, meta: dict | None = None): + """Save the preview behind preview_url beside model_path; on 200 the note is the file the UI shows.""" if model_path is None: return 500, '', '' - ext = os.path.splitext(preview_url)[1] - preview_file = os.path.splitext(model_path)[0] + ext - is_video = preview_file.lower().endswith(VIDEO_PREVIEW_EXTENSIONS) - is_json = preview_file.lower().endswith('.json') - if is_json: + ext = os.path.splitext(preview_url)[1].lower() + base = os.path.splitext(model_path)[0] + if ext == '.json': log.warning(f'CivitAI download: url="{preview_url}" skip json') return 500, '', 'expected preview image got json' - if os.path.exists(preview_file): - return 304, '', 'already exists' - r = shared.req(preview_url, stream=True) - total_size = int(r.headers.get('content-length', 0)) - block_size = 16384 - written = 0 + is_video = ext in VIDEO_PREVIEW_EXTENSIONS + if is_video: + if any(os.path.exists(base + e) for e in VIDEO_PREVIEW_EXTENSIONS): + return 304, '', 'already exists' + candidates = [url for url in (transcoded_video_url(preview_url), preview_url) if url] # the original may be AV1, which OpenCV builds without dav1d cannot decode + else: + if os.path.exists(base + ext): + return 304, '', 'already exists' + candidates = [preview_url] jobid = shared.state.begin('Download CivitAI') try: - with open(preview_file, 'wb') as f: - for data in r.iter_content(block_size): - written += len(data) - f.write(data) - if written < 1024: - os.remove(preview_file) - return 400, '', 'removed invalid download' - if is_video: - from modules.civitai.video_helper import save_video_frame - save_video_frame(preview_file) - if meta: - thumb_file = os.path.splitext(preview_file)[0] + '.thumb.jpg' - if os.path.exists(thumb_file): - try: - parameters = civitai_meta_to_parameters(meta) - if parameters and embed_preview_parameters(thumb_file, parameters): - log.debug(f'CivitAI preview embed: file="{thumb_file}"') - except Exception as e: - log.debug(f'CivitAI preview embed skipped: file="{thumb_file}" {e}') - else: - from PIL import Image - img = Image.open(preview_file) - log.info(f'CivitAI download: url={preview_url} file="{preview_file}" size={total_size} image={img.size}') - img.close() + for url in candidates: + r = shared.req(url, stream=True) + headers = getattr(r, 'headers', None) or {} + if r.status_code != 200: + log.warning(f'CivitAI preview: url="{url}" code={r.status_code}') + continue + if is_video: + content_type = headers.get('content-type', '').split(';')[0].strip().lower() + file_ext = VIDEO_CONTENT_TYPES.get(content_type) + if file_ext is None: + log.warning(f'CivitAI preview: url="{url}" content-type="{content_type}" not a video') + continue + preview_file = base + file_ext # named by content; the URL says .mp4 for webm originals + else: + preview_file = base + ext + total_size = int(headers.get('content-length', 0)) + written = 0 + with open(preview_file, 'wb') as f: + for data in r.iter_content(16384): + written += len(data) + f.write(data) + if written < 1024: + os.remove(preview_file) + log.warning(f'CivitAI preview: url="{url}" file="{preview_file}" removed invalid download') + continue + if is_video: + from modules.civitai.video_helper import save_video_frame + thumb_file = base + '.thumb.jpg' + if save_video_frame(preview_file) is None or not os.path.exists(thumb_file): + os.remove(preview_file) + continue + log.info(f'CivitAI download: url={url} file="{preview_file}" size={total_size} thumb="{thumb_file}"') + shown = thumb_file + else: + from PIL import Image + img = Image.open(preview_file) + log.info(f'CivitAI download: url={url} file="{preview_file}" size={total_size} image={img.size}') + img.close() + shown = preview_file if meta: try: parameters = civitai_meta_to_parameters(meta) - if parameters and embed_preview_parameters(preview_file, parameters): - log.debug(f'CivitAI preview embed: file="{preview_file}"') + if parameters and embed_preview_parameters(shown, parameters): + log.debug(f'CivitAI preview embed: file="{shown}"') except Exception as e: - log.debug(f'CivitAI preview embed skipped: file="{preview_file}" {e}') + log.debug(f'CivitAI preview embed skipped: file="{shown}" {e}') + return 200, str(total_size), shown + return 415, '', 'no usable preview' except Exception as e: - log.error(f'CivitAI download error: url={preview_url} file="{preview_file}" written={written} {e}') - shared.state.end(jobid) + log.error(f'CivitAI preview error: url={preview_url} file="{base}" {e}') return 500, '', str(e) - shared.state.end(jobid) - return 200, str(total_size), '' + finally: + shared.state.end(jobid) def declared_sha256(version_id: int, url: str, filename: str, token: str | None = None) -> str: diff --git a/modules/video.py b/modules/video.py index f94324a0b..4fde8fa14 100644 --- a/modules/video.py +++ b/modules/video.py @@ -7,6 +7,8 @@ from modules.logger import log from modules.image.namegen import FilenameGenerator # pylint: disable=unused-import from modules.paths import resolve_output_path +os.environ.setdefault('OPENCV_FFMPEG_LOGLEVEL', '8') # fatal only; OpenCV reads it once, at its first capture + def interpolate_frames(images, count: int = 0, scale: float = 1.0, pad: int = 1, change: float = 0.3): if images is None: @@ -113,9 +115,9 @@ def get_video_params(filepath: str, capture: bool = False): codec = decode_fourcc(video.get(cv2.CAP_PROP_FOURCC)) frame = None if capture: - _status, frame = video.read() - frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) - frame = Image.fromarray(frame) + ok, raw = video.read() + if ok and raw is not None: + frame = Image.fromarray(cv2.cvtColor(raw, cv2.COLOR_BGR2RGB)) video.release() return frames, fps, duration, w, h, codec, frame From bc416b759c56be90e1cc25bcf9b626512228a62b Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 14 Sep 2026 09:18:55 +0200 Subject: [PATCH 233/270] cleanup wildcard metadata Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 8 +++++--- extensions-builtin/sdnext-modernui | 2 +- modules/styles.py | 7 +++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e073bd292..9256755a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-09-13 +## Update for 2026-09-14 -### Highlights for 2026-09-13 +### Highlights for 2026-09-14 *What's New*? Well, code-wise, this is a big one... First, a-lot-of-optimizations: @@ -23,7 +23,7 @@ Plus inevitable bug-fixes... [Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) -### Details for 2026-09-13 +### Details for 2026-09-14 - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) @@ -124,6 +124,7 @@ Plus inevitable bug-fixes... - compile: keep model compiled state - detailer: handling of stop/skip/pause - framepack: correct device assignment, thanks @li-lizhe + - json: handle file locks - log: ansi color handling - lora: cleanup tags - lora: support transformer ref models @@ -142,6 +143,7 @@ Plus inevitable bug-fixes... - prompt: unnecessary secondary prompt if same - prompt: clean prompt after network parsing - rife: cleanup dead code, thanks @Anai-Guo + - temp files: handle locking - theme: fix circular imports changing theme to default - todo: remove dead code, thanks @Anai-Guo - ui: js fetch exception handling diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index a9ed76cd1..e91b28e90 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit a9ed76cd116aa666b5bab00e37eddd8edf48b01c +Subproject commit e91b28e904e7507cfb2a3ae0ec7835fb2f945d48 diff --git a/modules/styles.py b/modules/styles.py index d432959ea..9eb4bb284 100644 --- a/modules/styles.py +++ b/modules/styles.py @@ -207,8 +207,11 @@ def apply_wildcards_to_prompt(prompt, all_wildcards, seed=-1, silent=False, p: S if (len(replaced_files) > 0 or len(missing_files) > 0) and not silent: log.debug(f'Apply wildcards: found={replaced_files} missing={missing_files} path="{shared.opts.wildcards_dir}" type=file seed={seed} time={t2-t1:.2f}') if p is not None: - wildcards = p.extra_generation_params.get('Wildcards', []) + replaced_files - p.extra_generation_params['Wildcards'] = ', '.join(wildcards) + existing_wildcards = p.extra_generation_params.get('Wildcards', []) + if p.batch_size > 1 and existing_wildcards == replaced_files: + pass + else: + p.extra_generation_params['Wildcards'] = existing_wildcards + replaced_files if old_state is not None: random.setstate(old_state) return prompt From 94116600538d724237f64be940733c29b5076c5d Mon Sep 17 00:00:00 2001 From: resonantsky Date: Mon, 14 Sep 2026 10:21:43 +0200 Subject: [PATCH 234/270] MIOpen script clean up --- scripts/rocm/rocm_mgr.py | 4 --- scripts/rocm/rocm_vars.py | 57 +++------------------------------------ scripts/rocm_ext.py | 18 ++++++------- 3 files changed, 12 insertions(+), 67 deletions(-) diff --git a/scripts/rocm/rocm_mgr.py b/scripts/rocm/rocm_mgr.py index 0a0ec5366..aef5b6ae0 100644 --- a/scripts/rocm/rocm_mgr.py +++ b/scripts/rocm/rocm_mgr.py @@ -270,10 +270,6 @@ def apply_env(config: Optional[Dict[str, str]] = None) -> None: if unavailable: for var in unavailable: os.environ[var] = "0" - dtype_str = _resolve_dtype() - if dtype_str in ('FP16', 'BF16'): - for var in _FP32_ONLY_SOLVERS: - os.environ[var] = "0" def start_miopen_logging() -> None: diff --git a/scripts/rocm/rocm_vars.py b/scripts/rocm/rocm_vars.py index c40e343b0..13bf66b89 100644 --- a/scripts/rocm/rocm_vars.py +++ b/scripts/rocm/rocm_vars.py @@ -288,63 +288,12 @@ SOLVER_DTYPE_TAGS: Dict[str, str] = { "MIOPEN_DEBUG_CK_DEFAULT_KERNELS": "FP16/BF16/FP32", } -# Build full merged var registry +# Solver controls are currently hidden. Keep their metadata above for reference, but do not +# expose or apply it through the active ROCm configuration registry. ROCM_ENV_VARS: Dict[str, Dict[str, Any]] = {} ROCM_ENV_VARS.update(GENERAL_VARS) -for _var, _desc in _SOLVER_DESCS.items(): - ROCM_ENV_VARS[_var] = { - "default": "0" if _var in SOLVER_DISABLED_BY_DEFAULT else "1", - "desc": _desc, - "widget": "checkbox", - "options": None, - "dtype": SOLVER_DTYPE_TAGS.get(_var), - "restart_required": False, - } -# UI group ordering for solver sections -SOLVER_GROUPS: List[Tuple[str, List[str]]] = [ - ("Algorithm/Solver Group Enables", [ - "MIOPEN_DEBUG_CONV_FFT", "MIOPEN_DEBUG_CONV_DIRECT", "MIOPEN_DEBUG_CONV_GEMM", - "MIOPEN_DEBUG_CONV_WINOGRAD", "MIOPEN_DEBUG_CONV_IMPLICIT_GEMM", - ]), - ("Immediate Fallback Mode", [ - "MIOPEN_DEBUG_CONV_IMMED_FALLBACK", "MIOPEN_DEBUG_ENABLE_AI_IMMED_MODE_FALLBACK", - "MIOPEN_DEBUG_FORCE_IMMED_MODE_FALLBACK", - ]), - ("Build Method Toggles", [ - "MIOPEN_DEBUG_GCN_ASM_KERNELS", "MIOPEN_DEBUG_HIP_KERNELS", - "MIOPEN_DEBUG_OPENCL_CONVOLUTIONS", "MIOPEN_DEBUG_OPENCL_WAVE64_NOWGP", - "MIOPEN_DEBUG_ATTN_SOFTMAX", - ]), - ("Direct ASM Solver Toggles", [ - "MIOPEN_DEBUG_CONV_DIRECT_ASM_3X3U", "MIOPEN_DEBUG_CONV_DIRECT_ASM_1X1U", - "MIOPEN_DEBUG_CONV_DIRECT_ASM_1X1UV2", - "MIOPEN_DEBUG_CONV_DIRECT_ASM_1X1U_SEARCH_OPTIMIZED", "MIOPEN_DEBUG_CONV_DIRECT_ASM_1X1U_AI_HEUR", - ]), - ("Direct OpenCL Solver Toggles", [ - "MIOPEN_DEBUG_CONV_DIRECT_OCL_FWD", "MIOPEN_DEBUG_CONV_DIRECT_OCL_FWD1X1", - ]), - ("Winograd Solver Toggles", [ - "MIOPEN_DEBUG_AMD_WINOGRAD_3X3", "MIOPEN_DEBUG_AMD_WINOGRAD_RXS", - "MIOPEN_DEBUG_AMD_WINOGRAD_RXS_FWD_BWD", - "MIOPEN_DEBUG_AMD_WINOGRAD_RXS_F3X2", "MIOPEN_DEBUG_AMD_WINOGRAD_RXS_F2X3", - "MIOPEN_DEBUG_AMD_WINOGRAD_RXS_F2X3_G1", "MIOPEN_DEBUG_AMD_FUSED_WINOGRAD", - "MIOPEN_DEBUG_AMD_WINOGRAD_FURY_RXS_F2X3", - "MIOPEN_DEBUG_AMD_WINOGRAD_FURY_RXS_F3X2", "MIOPEN_DEBUG_AMD_WINOGRAD_RAGE_RXS_F2X3", - ]), - ("Multi-pass Winograd Toggles", [ - "MIOPEN_DEBUG_AMD_WINOGRAD_MPASS_F3X2", "MIOPEN_DEBUG_AMD_WINOGRAD_MPASS_F3X3", - ]), - ("Implicit GEMM Toggles", [ - "MIOPEN_DEBUG_CONV_IMPLICIT_GEMM_ASM_FWD_V4R1", "MIOPEN_DEBUG_CONV_IMPLICIT_GEMM_ASM_FWD_V4R1_1X1", - "MIOPEN_DEBUG_CONV_IMPLICIT_GEMM_HIP_FWD_V4R1", "MIOPEN_DEBUG_CONV_IMPLICIT_GEMM_HIP_FWD_V4R4", - ]), - ("Group Conv / CK Toggles (RDNA3/4+)", [ - "MIOPEN_DEBUG_GROUP_CONV_IMPLICIT_GEMM_HIP_FWD_XDLOPS", - "MIOPEN_DEBUG_GROUP_CONV_IMPLICIT_GEMM_HIP_FWD_XDLOPS_AI_HEUR", - "MIOPEN_DEBUG_CK_DEFAULT_KERNELS", - ]), -] +SOLVER_GROUPS: List[Tuple[str, List[str]]] = [] # Variables that are relevant only when hipBLASLt is the active GEMM backend. # These are visually greyed-out in the UI when rocBLAS (MIOPEN_GEMM_ENFORCE_BACKEND="1") is selected. diff --git a/scripts/rocm_ext.py b/scripts/rocm_ext.py index 0c4db1892..f306e2a12 100644 --- a/scripts/rocm_ext.py +++ b/scripts/rocm_ext.py @@ -87,15 +87,15 @@ class ROCmScript(scripts_manager.Script): components.append(comp) # Solver groups (all checkboxes, grouped by section) - for group_name, varlist in rocm_vars.SOLVER_GROUPS: - with gr.Group(): - gr.HTML(f"

    {group_name}


    ") - for name in varlist: - meta = rocm_vars.ROCM_ENV_VARS[name] - comp = _make_component(name, meta, config) - var_names.append(name) - components.append(comp) - gr.HTML("

    ") + # for group_name, varlist in rocm_vars.SOLVER_GROUPS: + # with gr.Group(): + # gr.HTML(f"

    {group_name}


    ") + # for name in varlist: + # meta = rocm_vars.ROCM_ENV_VARS[name] + # comp = _make_component(name, meta, config) + # var_names.append(name) + # components.append(comp) + # gr.HTML("

    ") def _autosave_field(name, value): meta = rocm_vars.ROCM_ENV_VARS[name] From cb7bc0facaf53276a2f6137b5b6ce7d6482fea37 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 14 Sep 2026 11:34:34 +0200 Subject: [PATCH 235/270] fix grid with lora, add dlss framgen logging, add 8bit minimax variants Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 2 +- data/reference-quantized.json | 34 ++++++++++++++++++++++++++++++++++ modules/image/grid.py | 4 ++-- modules/lora/lora_load.py | 2 ++ modules/sd_hijack_modular.py | 4 ++++ scripts/dlss/framegen.py | 7 +++++-- scripts/dlss_ext.py | 16 +++++++++------- scripts/xyz_grid.py | 1 + scripts/xyz_grid_on.py | 1 + 9 files changed, 59 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9256755a1..0c0bca81e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,7 +33,7 @@ Plus inevitable bug-fixes... with support for text-to-image, vq-conditioned text-to-image and image-editing workflows *note* model is extremely quantization sensitive so minimum allowed quant type is `uint8` - [MiniMax-H3](https://huggingface.co/MiniMaxAI/MiniMax-H3) updates - new [SDNQ-uint8](https://huggingface.co/OzzyGT/MiniMax_H3_sdnq_8bit_pruned) pre-quantized *pruned* variants + new [SDNQ-uint8](https://huggingface.co/OzzyGT/MiniMax_H3_sdnq_8bit_pruned) pre-quantized *base* and *pruned* variants new [Nunchaku-Lite](https://huggingface.co/rootonchair/MiniMax-H3-nunchaku-lite-int4) variant new [VDN](https://huggingface.co/OpenVDN/vdn-minimax-h3) *video-delta-net* variant - **LoRA** diff --git a/data/reference-quantized.json b/data/reference-quantized.json index ee0cbbd09..310a6c0af 100644 --- a/data/reference-quantized.json +++ b/data/reference-quantized.json @@ -275,5 +275,39 @@ "extras": "sampler: Default", "size": 23.70, "date": "2026 August" + }, + "MiniMaxAI MiniMax-H3 sdnq-uint8": { + "path": "OzzyGT/MiniMax_H3_sdnq_dynamic_8bit", + "preview": "MiniMaxAI--MiniMax-H3.jpg", + "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 8-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", + "extras": "sampler: Default", + "size": 32.29, + "date": "2026 August" + }, + "MiniMaxAI MiniMax-H3 sdnq-uint8 Ref2VA": { + "path": "OzzyGT/MiniMax_H3_sdnq_dynamic_8bit", + "preview": "MiniMaxAI--MiniMax-H3.jpg", + "subfolder": "ref2va", + "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 8-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", + "extras": "sampler: Default", + "size": 32.29, + "date": "2026 August" + }, + "MiniMaxAI MiniMax-H3 Pruned sdnq-uint8": { + "path": "OzzyGT/MiniMax_H3_sdnq_8bit_pruned", + "preview": "MiniMaxAI--MiniMax-H3.jpg", + "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 8-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", + "extras": "sampler: Default", + "size": 32.29, + "date": "2026 August" + }, + "MiniMaxAI MiniMax-H3 Pruned sdnq-uint8 Ref2VA": { + "path": "OzzyGT/MiniMax_H3_sdnq_8bit_pruned", + "preview": "MiniMaxAI--MiniMax-H3.jpg", + "subfolder": "ref2va", + "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 8-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", + "extras": "sampler: Default", + "size": 32.29, + "date": "2026 August" } } diff --git a/modules/image/grid.py b/modules/image/grid.py index e387270a0..dbd4bbda6 100644 --- a/modules/image/grid.py +++ b/modules/image/grid.py @@ -154,7 +154,7 @@ def get_font(fontsize: float): def draw_grid_annotations(im: Image.Image, width: int, height: int, x_texts: list[list[GridAnnotation]], y_texts: list[list[GridAnnotation]], margin=0, title: list[GridAnnotation] | None = None): def wrap(drawing: ImageDraw.ImageDraw, text, font, line_length): lines = [''] - for word in text.split(): + for word in text.split('/\\'): line = f'{lines[-1]} {word}'.strip() if drawing.textlength(line, font=font) <= line_length: lines[-1] = line @@ -162,7 +162,7 @@ def draw_grid_annotations(im: Image.Image, width: int, height: int, x_texts: lis lines.append(word) return lines - def draw_texts(drawing: ImageDraw.ImageDraw, draw_x: float, draw_y: float, lines, initial_fnt: ImageFont.FreeTypeFont, initial_fontsize: int): + def draw_texts(drawing: ImageDraw.ImageDraw, draw_x: float, draw_y: float, lines: list[GridAnnotation], initial_fnt: ImageFont.FreeTypeFont, initial_fontsize: int): for line in lines: font = initial_fnt fontsize = initial_fontsize diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index ffcf053a1..0fcc2dc34 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -322,6 +322,8 @@ def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=Non if net is None: failed_to_load_networks.append(name) lora_ver = network_on_disk.sd_version if network_on_disk is not None else None + if lora_ver is None or len(lora_ver) == 0: + lora_ver = "unknown" log.error(f'Network load: type=LoRA name="{name}" detected={lora_ver} not loaded') continue if hasattr(sd_model, 'embedding_db'): diff --git a/modules/sd_hijack_modular.py b/modules/sd_hijack_modular.py index 50f3965de..59651deab 100644 --- a/modules/sd_hijack_modular.py +++ b/modules/sd_hijack_modular.py @@ -39,6 +39,8 @@ def modular_step(components: diffusers.modular_pipelines.ModularPipeline, state: def modular_intercept(self, components, state: diffusers.modular_pipelines.modular_pipeline.BlockState, *args, **kwargs): + if shared.state.interrupted or shared.state.skipped: + raise AssertionError('Interrupted...') t0 = time.time() block = type(self).__name__ # run code before block call @@ -117,6 +119,8 @@ def install_state_hook(pipe): def set_phase(phase: str, module: torch.nn.Module | None = None): # every stage runs inside one pipeline call, so the forward hooks are the only place the current stage is visible + if shared.state.interrupted or shared.state.skipped: + raise AssertionError('Interrupted...') if getattr(pipe, 'sdnext_phase', None) != phase: pipe.sdnext_phase = phase jobid = getattr(pipe, 'sdnext_phaseid', None) # previous jobid if any diff --git a/scripts/dlss/framegen.py b/scripts/dlss/framegen.py index dfb07ac4d..4df99f04c 100644 --- a/scripts/dlss/framegen.py +++ b/scripts/dlss/framegen.py @@ -93,8 +93,7 @@ class DLSSFrameGen: capabilities = probe_frame_interpolation_capabilities(options.ai_gpu_uuid) log.debug(f'DLSSFrameGen: capabilities={capabilities}') if not capabilities.available: - raise StandaloneError("feature_unavailable", "FrameGen: unavailable. " + capabilities.detail, - ) + raise StandaloneError("feature_unavailable", "FrameGen: unavailable. " + capabilities.detail) plan = choose_interpolation_plan( source_rate, target_rate, @@ -102,6 +101,7 @@ class DLSSFrameGen: capabilities.native_multiplier, cfr=True, ) + log.debug(f'DLSSFrameGen: plan={plan}') source_frames = [ _TimedFrame(rgb_to_rgba(nchw_image_to_hwc(frames, index, name="frames")), Fraction(index, 1) / source_rate) for index in range(batch) @@ -146,6 +146,7 @@ class DLSSFrameGen: ideal = Fraction(index, 1) / target_rate selected = min(frames, key=lambda frame, target=ideal: abs(frame.timestamp - target)) result.append(_TimedFrame(selected.rgba.copy(), ideal)) + log.debug(f'DLSSFrameGen: input={len(frames)} resampled={len(result)}') return result @staticmethod @@ -155,6 +156,7 @@ class DLSSFrameGen: try: stage_count = plan.cascade_stages or 1 for stage_index in range(stage_count): + log.debug(f'DirectDLSSGSession: index={stage_index + 1} count={stage_count} stage create') generated_count = ( plan.generated_per_interval if plan.path == "Native DLSSG" @@ -195,6 +197,7 @@ class DLSSFrameGen: return result finally: for session in reversed(sessions): + log.debug(f'DirectDLSSGSession: session={session} close') try: session.close() except (OSError, RuntimeError, ValueError): diff --git a/scripts/dlss_ext.py b/scripts/dlss_ext.py index 00a42670b..bc042d6b1 100644 --- a/scripts/dlss_ext.py +++ b/scripts/dlss_ext.py @@ -62,10 +62,10 @@ def create_ui(parent): with gr.Row(): fg_enabled = gr.Checkbox(label='FG enable', value=False, elem_id='dlss_fg_enabled') with gr.Row(): - fg_source_fps = gr.Dropdown(label='Source FPS', choices=FPS_CHOICES, value='23.976', elem_id='dlss_fg_source_fps') - fg_target_fps = gr.Dropdown(label='Target FPS', choices=FPS_CHOICES, value='60', elem_id='dlss_fg_target_fps') + fg_source_fps = gr.Dropdown(label='FG source FPS', choices=FPS_CHOICES, value='23.976', elem_id='dlss_fg_source_fps') + fg_target_fps = gr.Dropdown(label='FG target FPS', choices=FPS_CHOICES, value='60', elem_id='dlss_fg_target_fps') with gr.Row(): - fg_engine = gr.Dropdown(label='Engine', choices=['Auto', 'Native DLSSG', 'Cascade'], value='Auto', elem_id='dlss_fg_engine') + fg_engine = gr.Dropdown(label='FG engine', choices=['Auto', 'Native DLSSG', 'Cascade'], value='Auto', elem_id='dlss_fg_engine') with gr.Accordion('DLSS Status', open=True, elem_id='dlss_status'): ss_status = gr.JSON({ 'Status': 'unknown' if len(shared.opts.dlss_pkg_path) < 4 else 'stored'}) @@ -231,9 +231,10 @@ def framegen(pkg_path, images, fg_source_fps, fg_target_fps, fg_engine): if debug: log.trace(f'DLSS: method=FrameGen input={frames.shape} options={options}') response = c.controller.call( - pkg_path, 'framegen', + pkg_path, + 'framegen', { 'frames': frames, 'source_fps': fg_source_fps, 'target_fps': fg_target_fps, 'options': options }, - timeout=300.0, + timeout=600.0, ) if response.get('status') != 'ok': error = response.get('error') or {} @@ -333,10 +334,11 @@ def dlss(p: processing.StableDiffusionProcessing | None, pp: processing.Processe t0 = time.time() if p: p.extra_generation_params["DLSSFrameGen"] = True - log.info(f'DLSS: method=FrameGen source={fg_source_fps} target={fg_target_fps} engine={fg_engine}') + log.info(f'DLSS: method=FrameGen source={fg_source_fps} target={fg_target_fps} engine="{fg_engine}"') output = framegen(pkg_path, current_images, fg_source_fps, fg_target_fps, fg_engine) if debug: - log.trace(f'DLSS: method=FrameGen images={len(output) if output else 0} time={time.time() - t0:.3f}') + t1 = time.time() + log.trace(f'DLSS: method=FrameGen frames={len(output) if output else 0} time={t1 - t0:.3f}') if output: images = output current_images = output diff --git a/scripts/xyz_grid.py b/scripts/xyz_grid.py index 66d697f5d..1a79b5ec8 100644 --- a/scripts/xyz_grid.py +++ b/scripts/xyz_grid.py @@ -330,6 +330,7 @@ class XYZGridScript(scripts_manager.Script): return processing.Processed(p, [], p.seed, ""), 0 p.xyz = True pc = copy(p) + pc.network_data = None pc.override_settings_restore_afterwards = False pc.styles = pc.styles[:] x_opt.apply(pc, x, xs) diff --git a/scripts/xyz_grid_on.py b/scripts/xyz_grid_on.py index b6e09ff30..c45271e23 100644 --- a/scripts/xyz_grid_on.py +++ b/scripts/xyz_grid_on.py @@ -352,6 +352,7 @@ class XYZGridScript(scripts_manager.Script): return processing.Processed(p, [], p.seed, ""), 0 p.xyz = True pc = copy(p) + pc.network_data = None pc.override_settings_restore_afterwards = False pc.styles = pc.styles[:] if no_fixed_seeds: From 516b9f4a45b1293f160ab3d51b07777a4258facf Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 14 Sep 2026 12:11:52 +0200 Subject: [PATCH 236/270] lint Signed-off-by: Vladimir Mandic --- TODO.md | 6 ------ extensions-builtin/sdnext-modernui | 2 +- modules/lora/network.py | 6 +++--- modules/sd_checkpoint.py | 10 +++++----- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/TODO.md b/TODO.md index 239489ae1..853262554 100644 --- a/TODO.md +++ b/TODO.md @@ -2,9 +2,7 @@ ## Short-term -- MiniMax: Create pre-quants for MiniMax-H3-Turbo, MiniMax-H3-Pruned-Turbo - Control tab verify overrides handling, @vladmandic -- LTX: Create pre-quant for LTX-2.5 - LTX: Implement LTX2DFRPipeline - ROCm: v10 - Video: unify execution path for ui and api @@ -13,7 +11,6 @@ ## Issues - [Inpaint](https://discord.com/channels/1101998836328697867/1130536562422186044/1506850651035144322), @vladmandic -- [OpenVINO](https://github.com/vladmandic/sdnext/issues/4939), @vladmandic ## Features @@ -29,9 +26,6 @@ ### Roadmap - Automated testing and integrate models repo -- [MiniMax VDN](https://huggingface.co/OpenVDN/vdn-minimax-h3) -- [MiniMax VSA](https://huggingface.co/FastVideo/FastVideo-FastH3-4-step-Preview-v1-VSA-DataFree) -- [MiniMax Nunchaku-Lite](https://huggingface.co/rootonchair/MiniMax-H3-nunchaku-lite-int4) - Video upscaling: LTX-Upscaler - Video upscaling: [MiniMax-Upscaler](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler) - Video capabilities to processing tab, add RIFE, upscaling (once available) diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index e91b28e90..63b59e517 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit e91b28e904e7507cfb2a3ae0ec7835fb2f945d48 +Subproject commit 63b59e51787d5aee7ef67065c81c62a9a43cb654 diff --git a/modules/lora/network.py b/modules/lora/network.py index bfbf29bfa..899e6940c 100644 --- a/modules/lora/network.py +++ b/modules/lora/network.py @@ -22,11 +22,11 @@ class SdVersion(enum.Enum): class NetworkOnDisk: - def __init__(self, name, filename): + def __init__(self, name: str, filename: str): self.shorthash = None self.hash = None - self.name = name - self.filename = filename + self.name: str = name + self.filename: str = filename if filename.startswith(shared.cmd_opts.lora_dir): # strip("/") missed Windows's leading backslash after the slice; normalize separators # so the registry key is one canonical form on every OS. diff --git a/modules/sd_checkpoint.py b/modules/sd_checkpoint.py index 783186ed4..9831befd2 100644 --- a/modules/sd_checkpoint.py +++ b/modules/sd_checkpoint.py @@ -27,11 +27,11 @@ warn_once = False class CheckpointInfo: def __init__(self, filename: str, name: str | None = None, sha: str | None = None, subfolder: str | None = None, model_type: str = 'checkpoint', folder: str | None = None): - self.name = name - self.hash = sha - self.filename = filename if filename is not None else 'none' - self.type = '' - self.subfolder = subfolder + self.filename: str = filename if filename is not None else 'none' + self.name: str = name if name is not None else '' + self.hash: str | None = sha + self.type: str = '' + self.subfolder: str | None = subfolder relname = self.filename app_path = os.path.abspath(paths.script_path) From 8691654bef914b871786b39bfb040b9921c1e429 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 14 Sep 2026 13:57:08 +0200 Subject: [PATCH 237/270] cleanup Signed-off-by: Vladimir Mandic --- extensions-builtin/sdnext-modernui | 2 +- scripts/xyz/xyz_grid_classes.py | 58 ++++++------ ui/dist/sdnext.mjs | 139 ++++++++++++++++++----------- ui/dist/sdnext.mjs.map | 4 +- ui/startup.ts | 2 + 5 files changed, 119 insertions(+), 86 deletions(-) diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 63b59e517..92dea6028 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 63b59e51787d5aee7ef67065c81c62a9a43cb654 +Subproject commit 92dea6028623b076521eb6f7949ba9bcb13ab23f diff --git a/scripts/xyz/xyz_grid_classes.py b/scripts/xyz/xyz_grid_classes.py index 047ab37bb..ba7b0ccd1 100644 --- a/scripts/xyz/xyz_grid_classes.py +++ b/scripts/xyz/xyz_grid_classes.py @@ -220,7 +220,7 @@ axis_options = [ AxisOption("[Model] Model", str, apply_checkpoint, cost=1.0, fmt=format_value_add_label, choices=lambda: sorted(sd_models.checkpoints_list)), AxisOption("[Model] UNET", str, apply_unet, cost=0.8, choices=lambda: ['None'] + list(sd_unet.unet_dict)), AxisOption("[Model] VAE", str, apply_vae, cost=0.6, choices=lambda: ['None'] + list(sd_vae.vae_dict)), - AxisOption("[Model] Refiner", str, apply_refiner, cost=0.8, fmt=format_value_add_label, choices=lambda: ['None'] + sorted(sd_models.checkpoints_list)), + AxisOption("[Model] Refiner", str, apply_refiner, cost=0.9, fmt=format_value_add_label, choices=lambda: ['None'] + sorted(sd_models.checkpoints_list)), AxisOption("[Model] Text encoder", str, apply_te, cost=0.7, choices=shared_items.sd_te_items), AxisOption("[Prompt] Search & replace", str, apply_prompt_primary, fmt=format_value_add_label), AxisOption("[Prompt] Search & replace refine", str, apply_prompt_refine, fmt=format_value_add_label), @@ -228,14 +228,14 @@ axis_options = [ AxisOption("[Prompt] Search & replace all", str, apply_prompt_all, fmt=format_value_add_label), AxisOption("[Prompt] Prompt order", str_permutations, apply_order, fmt=format_value_join_list), AxisOption("[Prompt] Prompt parser", str, apply_setting("prompt_attention"), choices=lambda: ["native", "compel", "xhinker", "a1111", "fixed"]), - AxisOption("[Network] LoRA", str, apply_lora, cost=0.5, choices=list_lora), - AxisOption("[Network] LoRA strength", float, apply_lora_strength, cost=0.6), - AxisOption("[Network] LoRA block weight", str, apply_lora_blocks, cost=0.6, fmt=format_value_trim, choices=list_lora_blocks), - AxisOption("[Network] LoRA stack mode", str, apply_setting("lora_stack_mode"), cost=0.6, choices=lambda: ["sum", "ties", "dare_ties", "dare_linear", "magnitude_prune", "klora", "estlora"]), - AxisOption("[Network] LoRA stack density", float, apply_setting("lora_stack_density"), cost=0.6), - AxisOption("[Network] LoRA stack ramp", float, apply_setting("lora_stack_alpha"), cost=0.6), - AxisOption("[Network] LoRA stack discrepancy", float, apply_setting("lora_stack_discrepancy"), cost=0.6), - AxisOption("[Network] LoRA force diffusers", bool, apply_setting("lora_force_diffusers"), cost=0.6, choices=lambda: [False, True]), + AxisOption("[Network] LoRA", str, apply_lora, cost=0.6, choices=list_lora), + AxisOption("[Network] LoRA strength", float, apply_lora_strength, cost=0.5), + AxisOption("[Network] LoRA block weight", str, apply_lora_blocks, cost=0.5, fmt=format_value_trim, choices=list_lora_blocks), + AxisOption("[Network] LoRA stack mode", str, apply_setting("lora_stack_mode"), cost=0.5, choices=lambda: ["sum", "ties", "dare_ties", "dare_linear", "magnitude_prune", "klora", "estlora"]), + AxisOption("[Network] LoRA stack density", float, apply_setting("lora_stack_density"), cost=0.5), + AxisOption("[Network] LoRA stack ramp", float, apply_setting("lora_stack_alpha"), cost=0.5), + AxisOption("[Network] LoRA stack discrepancy", float, apply_setting("lora_stack_discrepancy"), cost=0.5), + AxisOption("[Network] LoRA force diffusers", bool, apply_setting("lora_force_diffusers"), cost=0.65, choices=lambda: [False, True]), AxisOption("[Network] Styles", str, apply_styles, choices=lambda: [s.name for s in shared.prompt_styles.styles.values()]), AxisOption("[Param] Width", int, apply_field("width")), AxisOption("[Param] Height", int, apply_field("height")), @@ -270,7 +270,7 @@ axis_options = [ AxisOption("[Guidance] Start", float, apply_field("cfg_start")), AxisOption("[Guidance] Stop", float, apply_field("cfg_stop")), AxisOption("[Guidance] Image scale", float, apply_field("cfg_image")), - AxisOption("[Refine] Upscaler", str, apply_field("hr_upscaler"), cost=0.3, choices=lambda: [x.name for x in shared.sd_upscalers]), + AxisOption("[Refine] Upscaler", str, apply_field("hr_upscaler"), cost=0.4, choices=lambda: [x.name for x in shared.sd_upscalers]), AxisOption("[Refine] Sampler", str, apply_hr_sampler_name, fmt=format_value_add_label, confirm=confirm_samplers, choices=lambda: [x.name for x in sd_samplers.visible_samplers()]), AxisOption("[Refine] Denoising strength", float, apply_field("denoising_strength")), AxisOption("[Refine] Hires steps", int, apply_field("hr_second_pass_steps")), @@ -280,21 +280,21 @@ axis_options = [ AxisOption("[Postprocess] Context", str, apply_context, choices=lambda: ["Add with forward", "Remove with forward", "Add with backward", "Remove with backward"]), AxisOption("[Postprocess] Detailer", bool, apply_detailer, fmt=format_bool, choices=lambda: [False, True]), AxisOption("[Postprocess] Detailer strength", str, apply_field("detailer_strength")), - AxisOption("[Quant] SDNQ quant mode", str, apply_sdnq_quant, cost=0.9, fmt=format_value_add_label, choices=lambda: ['none'] + sorted(shared_items.sdnq_quant_modes)), - AxisOption("[Quant] SDNQ quant mode TE", str, apply_sdnq_quant_te, cost=0.9, fmt=format_value_add_label, choices=lambda: ['none'] + sorted(shared_items.sdnq_quant_modes)), - AxisOption("[Attention] Method", str, apply_setting('cross_attention_optimization'), cost=0.2, choices=shared_items.list_crossattention), - AxisOption("[Attention] Dispatcher", str, apply_attention_dispatcher, cost=0.2, choices=lambda: ['None'] + attention.list_dispatcher_backends()), - AxisOption("[Attention] SDNQ matmul", str, apply_attention('sdnq_attention_matmul_type'), cost=0.2, choices=lambda: list(shared_items.sdnq_matmul_modes)), - AxisOption("[Attention] SDNQ PV matmul", str, apply_attention('sdnq_attention_pv_matmul_type'), cost=0.2, choices=lambda: list(shared_items.sdnq_matmul_modes)), - AxisOption("[Attention] SDNQ smooth K", str, apply_attention('sdnq_attention_smooth_k'), cost=0.2, choices=lambda: ['False', 'True']), - AxisOption("[Attention] SDNQ hadamard", str, apply_attention('sdnq_attention_use_hadamard'), cost=0.2, choices=lambda: ['False', 'True']), - AxisOption("[Attention] SDNQ fp16 accumulation", str, apply_attention('sdnq_attention_use_fp16_accum'), cost=0.2, choices=lambda: ['False', 'True']), - AxisOption("[Sparse] Enabled", str, apply_attention('sparse_attention_enabled'), cost=0.2, choices=lambda: ['False', 'True']), - AxisOption("[Sparse] KV budget", int, apply_attention('sparse_attention_budget'), cost=0.2), - AxisOption("[Sparse] Minimum sequence", int, apply_attention('sparse_attention_min_tokens'), cost=0.2), - AxisOption("[Sparse] Dense steps", int, apply_attention('sparse_attention_schedule_steps'), cost=0.2), - AxisOption("[Sparse] Dense step bonus", int, apply_attention('sparse_attention_schedule_bump'), cost=0.2), - AxisOption("[Sparse] Shared heads", str, apply_attention('sparse_attention_head_shared'), cost=0.2, choices=lambda: ['False', 'True']), + AxisOption("[Quant] SDNQ quant mode", str, apply_sdnq_quant, cost=0.85, fmt=format_value_add_label, choices=lambda: ['none'] + sorted(shared_items.sdnq_quant_modes)), + AxisOption("[Quant] SDNQ quant mode TE", str, apply_sdnq_quant_te, cost=0.85, fmt=format_value_add_label, choices=lambda: ['none'] + sorted(shared_items.sdnq_quant_modes)), + AxisOption("[Attention] Method", str, apply_setting('cross_attention_optimization'), cost=0.4, choices=shared_items.list_crossattention), + AxisOption("[Attention] Dispatcher", str, apply_attention_dispatcher, cost=0.4, choices=lambda: ['None'] + attention.list_dispatcher_backends()), + AxisOption("[Attention] SDNQ matmul", str, apply_attention('sdnq_attention_matmul_type'), cost=0.4, choices=lambda: list(shared_items.sdnq_matmul_modes)), + AxisOption("[Attention] SDNQ PV matmul", str, apply_attention('sdnq_attention_pv_matmul_type'), cost=0.4, choices=lambda: list(shared_items.sdnq_matmul_modes)), + AxisOption("[Attention] SDNQ smooth K", str, apply_attention('sdnq_attention_smooth_k'), cost=0.4, choices=lambda: ['False', 'True']), + AxisOption("[Attention] SDNQ hadamard", str, apply_attention('sdnq_attention_use_hadamard'), cost=0.4, choices=lambda: ['False', 'True']), + AxisOption("[Attention] SDNQ fp16 accumulation", str, apply_attention('sdnq_attention_use_fp16_accum'), cost=0.4, choices=lambda: ['False', 'True']), + AxisOption("[Sparse] Enabled", str, apply_attention('sparse_attention_enabled'), cost=0.3, choices=lambda: ['False', 'True']), + AxisOption("[Sparse] KV budget", int, apply_attention('sparse_attention_budget'), cost=0.3), + AxisOption("[Sparse] Minimum sequence", int, apply_attention('sparse_attention_min_tokens'), cost=0.3), + AxisOption("[Sparse] Dense steps", int, apply_attention('sparse_attention_schedule_steps'), cost=0.3), + AxisOption("[Sparse] Dense step bonus", int, apply_attention('sparse_attention_schedule_bump'), cost=0.3), + AxisOption("[Sparse] Shared heads", str, apply_attention('sparse_attention_head_shared'), cost=0.3, choices=lambda: ['False', 'True']), AxisOption("[HDR] Mode", int, apply_field("hdr_mode")), AxisOption("[HDR] Brightness", float, apply_field("hdr_brightness")), AxisOption("[HDR] Color", float, apply_field("hdr_color")), @@ -311,13 +311,13 @@ axis_options = [ AxisOption("[FreeU] 2nd stage backbone factor", float, apply_setting('freeu_b2')), AxisOption("[FreeU] 1st stage skip factor", float, apply_setting('freeu_s1')), AxisOption("[FreeU] 2nd stage skip factor", float, apply_setting('freeu_s2')), - AxisOption("[IP adapter] Name", str, apply_field('ip_adapter_names'), cost=1.0, choices=lambda: list(ipadapter.ADAPTERS)), + AxisOption("[IP adapter] Name", str, apply_field('ip_adapter_names'), cost=0.6, choices=lambda: list(ipadapter.ADAPTERS)), AxisOption("[IP adapter] Scale", float, apply_field('ip_adapter_scales')), AxisOption("[IP adapter] Starts", float, apply_field('ip_adapter_starts')), AxisOption("[IP adapter] Ends", float, apply_field('ip_adapter_ends')), - AxisOption("[Control] ControlNet", str, apply_control('controlnet'), cost=0.9, choices=lambda: list(controlnet.all_models)), - AxisOption("[Control] T2IAdapter", str, apply_control('t2i adapter'), cost=0.9, choices=lambda: list(t2iadapter.all_models)), - AxisOption("[Control] Processor", str, apply_control('processor'), cost=0.6, choices=lambda: processor.processors), + AxisOption("[Control] ControlNet", str, apply_control('controlnet'), cost=0.7, choices=lambda: list(controlnet.all_models)), + AxisOption("[Control] T2IAdapter", str, apply_control('t2i adapter'), cost=0.7, choices=lambda: list(t2iadapter.all_models)), + AxisOption("[Control] Processor", str, apply_control('processor'), cost=0.4, choices=lambda: processor.processors), AxisOption("[Control] Strength", float, apply_control('control_strength')), AxisOption("[Control] Start", float, apply_control('control_start')), AxisOption("[Control] End", float, apply_control('control_end')), diff --git a/ui/dist/sdnext.mjs b/ui/dist/sdnext.mjs index e290d2031..8509491e9 100644 --- a/ui/dist/sdnext.mjs +++ b/ui/dist/sdnext.mjs @@ -16241,6 +16241,8 @@ async function initStartup() { onUiLoaded(initStartup); onUiReady(() => log("uiReady")); window.initStartup = initStartup; +window.addEventListener("pageshow", (evt) => log("pageShow", evt)); +window.addEventListener("pagehide", (evt) => log("pageHide", evt)); // ui/extensions.ts function extensions_apply(_extensionsDisabledList, _extensionsUpdateList, disableAll) { @@ -16397,6 +16399,9 @@ var selectedType = []; var selectedBase = []; var selectedModelId = []; var selectedVersionId = []; +var currentModel = null; +var precisionOrder = ["fp32", "bf16", "fp16", "fp8", "int8", "int4"]; +var companionTypes = ["VAE", "Text Encoder"]; function clearModelDetails() { const el2 = gradioApp().getElementById("model-details") || gradioApp().getElementById("civitai_models_output") || gradioApp().getElementById("models_outcome"); if (!el2) return; @@ -16427,6 +16432,7 @@ var modelDetailsHTML = ` Type Base File + Variant Updated Size Availability @@ -16439,19 +16445,65 @@ var modelDetailsHTML = `
    `; -var modelVersionsHTML = ` - - {url} - {name} - {type} - {base} - {file} - {mtime} - {size} - {availability} -
    {desc}
    - -`; +function fileVariant(file) { + return file.metadata?.fp || file.metadata?.quantType || null; +} +function sortFiles(files) { + const isModel = (f) => f.type === "Model" || f.type === "Pruned Model"; + const rank = (f) => { + const index = precisionOrder.indexOf((fileVariant(f) || "").toLowerCase()); + return index < 0 ? precisionOrder.length : index; + }; + return [...files].sort((a, b) => Number(isModel(b)) - Number(isModel(a)) || rank(a) - rank(b) || (b.size || 0) - (a.size || 0)); +} +function insertNameSuffix(name, suffix) { + const dot = name.lastIndexOf("."); + return dot > 0 ? `${name.slice(0, dot)}-${suffix}${name.slice(dot)}` : `${name}-${suffix}`; +} +function fileSaveName(file, siblings) { + const tier1 = (f) => { + const variant = fileVariant(f); + return variant ? insertNameSuffix(f.name || "", variant) : f.name || ""; + }; + const tier2 = (f) => f.metadata?.size ? insertNameSuffix(tier1(f), f.metadata.size) : tier1(f); + const others = siblings.filter((s) => s.id !== file.id); + const name = tier1(file); + if (!others.some((s) => tier1(s) === name)) return name; + const sized = tier2(file); + if (!others.some((s) => tier2(s) === sized)) return sized; + return insertNameSuffix(name, String(file.id)); +} +function escapeHTML(text) { + return text.replace(/[&<>"']/g, (c) => `&#${c.charCodeAt(0)};`); +} +function versionRows(version, divider) { + const files = sortFiles(version.files); + const entries = files.length > 0 ? files : [null]; + const border = divider ? ' style="border-top: 1px solid var(--sd-panel-border-color, #555)"' : ""; + const span = entries.length > 1 ? ` rowspan="${entries.length}"` : ""; + const versionCell = (content) => `${content}`; + return entries.map((file, i) => { + const first = i === 0; + const cell = (content) => `${content}`; + const link = file ? `` : ""; + const name = file ? `${escapeHTML(file.name || "unknown")}${file.primary ? ' \u2605' : ""}` : "unknown"; + const variant = file ? [fileVariant(file), file.metadata?.size].filter(Boolean).join(" \xB7 ") : ""; + const size = file?.size ? `${(file.size / 1024 / 1024 / 1024).toFixed(2)} GB` : "unknown"; + const cells = [ + cell(link), + first ? versionCell(escapeHTML(version.name || "unknown")) : "", + cell(escapeHTML(file?.type || "unknown")), + first ? versionCell(escapeHTML(version.base || "unknown")) : "", + cell(name), + cell(escapeHTML(variant || "-")), + first ? versionCell(new Date(version.mtime).toLocaleDateString()) : "", + cell(size), + first ? versionCell(escapeHTML(version.availability || "unknown")) : "", + first ? versionCell(`
    ${version.desc || "no description available"}
    `) : "" + ]; + return `${cells.join("")}`; + }).join(""); +} async function modelCardClick(id) { log("modelCardClick id", id); const el2 = gradioApp().getElementById("model-details") || gradioApp().getElementById("civitai_models_output") || gradioApp().getElementById("models_outcome"); @@ -16465,17 +16517,8 @@ async function modelCardClick(id) { log("modelCardClick data", dataArray); if (!dataArray || dataArray.length === 0) return; const data = dataArray[0]; - const versionsHTML = data.versions.map((v) => modelVersionsHTML.format({ - url: ``, - name: v.name || "unknown", - type: v.files[0]?.type || "unknown", - base: v.base || "unknown", - mtime: new Date(v.mtime).toLocaleDateString(), - availability: v.availability || "unknown", - size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : "unknown", - file: `${v.files[0]?.name || "unknown"}`, - desc: v.desc || "no description available" - })).join(""); + currentModel = data; + const versionsHTML = data.versions.map((v, i) => versionRows(v, i > 0)).join(""); const url2 = `${data.name || "unknown"}`; const creator = `${data.creator || "unknown"}`; const images = data.versions.map((v) => v.images).flat().map((i) => i.url); @@ -16495,41 +16538,29 @@ async function modelCardClick(id) { el2.innerHTML = modelHTML; } window.modelCardClick = modelCardClick; -function startCivitDownload(url2, name, type, base, modelId, versionId) { - log("startCivitDownload", { url: url2, name, type, base, modelId, versionId }); - selectedURL = [url2]; - selectedName = [name]; - selectedType = [type]; - selectedBase = [base || ""]; - selectedModelId = [modelId || 0]; - selectedVersionId = [versionId || 0]; +function queueFiles(model, queued) { + selectedURL = queued.map(({ file }) => file.url || ""); + selectedName = queued.map(({ version, file }) => fileSaveName(file, version.files)); + selectedType = queued.map(({ file }) => (companionTypes.includes(file.type || "") ? file.type : model.type) || ""); + selectedBase = queued.map(({ version }) => version.base || ""); + selectedModelId = queued.map(() => model.id || 0); + selectedVersionId = queued.map(({ version }) => version.id || 0); const civitDownloadBtn = gradioApp().getElementById("civitai_download_btn"); if (civitDownloadBtn) civitDownloadBtn.click(); } -window.startCivitDownload = startCivitDownload; +function startCivitFileDownload(versionId, fileId) { + log("startCivitFileDownload", { versionId, fileId }); + const version = currentModel?.versions.find((v) => v.id === versionId); + const file = version?.files.find((f) => f.id === fileId); + if (!currentModel || !version || !file) return; + queueFiles(currentModel, [{ version, file }]); +} +window.startCivitFileDownload = startCivitFileDownload; function startCivitAllDownload(evt) { log("startCivitAllDownload", evt); - const table = gradioApp().getElementById("model-versions-table"); - if (!table) return; - const versions = table.querySelectorAll("tr"); - selectedURL = []; - selectedName = []; - selectedType = []; - selectedBase = []; - selectedModelId = []; - selectedVersionId = []; - for (const version of versions) { - const parsed = version.querySelector("td:nth-child(1) div")?.getAttribute("onclick")?.match(/startCivitDownload\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\d+), (\d+)\)/); - if (!parsed || parsed.length < 7) continue; - selectedURL.push(parsed[1]); - selectedName.push(parsed[2]); - selectedType.push(parsed[3]); - selectedBase.push(parsed[4]); - selectedModelId.push(parseInt(parsed[5], 10)); - selectedVersionId.push(parseInt(parsed[6], 10)); - } - const civitDownloadBtn = gradioApp().getElementById("civitai_download_btn"); - if (civitDownloadBtn) civitDownloadBtn.click(); + if (!currentModel) return; + const queued = currentModel.versions.map((version) => ({ version, file: version.files.find((f) => f.primary) || version.files[0] })).filter((entry) => !!entry.file); + queueFiles(currentModel, queued); } window.startCivitAllDownload = startCivitAllDownload; function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) { diff --git a/ui/dist/sdnext.mjs.map b/ui/dist/sdnext.mjs.map index c9f9d3ee6..2df4e3da7 100644 --- a/ui/dist/sdnext.mjs.map +++ b/ui/dist/sdnext.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist/jquery.js", "../js/iframeResizer.js", "../../node_modules/.pnpm/exifr@7.1.3/node_modules/exifr/dist/full.umd.js", "../../node_modules/.pnpm/wheel@1.0.0/node_modules/wheel/index.js", "../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js", "../../node_modules/.pnpm/amator@1.1.0/node_modules/amator/index.js", "../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/index.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/kinetic.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeTextSelectionInterceptor.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/transform.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeSvgController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeDomController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/index.js", "../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist-module/wrappers/jquery.node-module-wrapper.js", "../vendor.ts", "../logger.ts", "../authWrap.ts", "../timers.ts", "../script.ts", "../changelog.ts", "../control.ts", "../extraNetworks.ts", "../generationParams.ts", "../imageParams.ts", "../notification.ts", "../progressBar.ts", "../dynamicUI.ts", "../ui.ts", "../inputAccordion.ts", "../indexdb.ts", "../logMonitor.ts", "../settings.ts", "../monitor.ts", "../promptChecker.ts", "../js/sha256.ts", "../gallery.ts", "../imageViewer.ts", "../autocomplete_xn.ts", "../autocomplete.ts", "../setHints.ts", "../contextMenus.ts", "../uiConfig.ts", "../loader.ts", "../legacy.ts", "../startup.ts", "../extensions.ts", "../dragDrop.ts", "../civitai.ts", "../guidance.ts", "../timesheet.ts", "../history.ts", "../storage.ts", "../aspectRatioOverlay.ts", "../resolutionLock.ts", "../editAttention.ts", "../../node_modules/.pnpm/jquery-sparkline@2.4.0/node_modules/jquery-sparkline/jquery.sparkline.js", "../gpu.ts"], - "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction openSettingsSection(sectionId: string) {\n const settingsTab = gradioApp().getElementById('tab_settings');\n const settingsButton = settingsTab ? gradioApp().querySelector(`button[aria-controls=\"${settingsTab.id}\"]`) : null;\n settingsButton?.click();\n const section = gradioApp().getElementById(`settings_section_tab_${sectionId}`);\n const sectionButton = section ? gradioApp().querySelector(`button[aria-controls=\"${section.id}\"]`) : null;\n sectionButton?.click();\n section?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n}\nwindow.openSettingsSection = openSettingsSection;\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.background = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n if (window.opts.diffusers_enable_embed) {\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n } else {\n this.embed = new XnIndex([]);\n }\n // Wildcards: [{name}, ...]\n if (window.opts.wildcards_enabled) {\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n } else {\n this.wildcard = new XnIndex([]);\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 5000);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFile {\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nconst modelVersionsHTML = `\n \n {url}\n {name}\n {type}\n {base}\n {file}\n {mtime}\n {size}\n {availability}\n
    {desc}
    \n \n`;\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n\n const versionsHTML = data.versions.map((v: CivitVersion) => modelVersionsHTML.format({\n url: `
    \\udb80\\uddda
    `,\n name: v.name || 'unknown',\n type: v.files[0]?.type || 'unknown',\n base: v.base || 'unknown',\n mtime: (new Date(v.mtime)).toLocaleDateString(),\n availability: v.availability || 'unknown',\n size: v.files[0]?.size ? `${(v.files[0].size / 1024 / 1024).toFixed(2)} MB` : 'unknown',\n file: `${v.files[0]?.name || 'unknown'}`,\n desc: v.desc || 'no description available',\n })).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nexport function startCivitDownload(url, name, type, base, modelId, versionId) {\n log('startCivitDownload', { url, name, type, base, modelId, versionId });\n selectedURL = [url];\n selectedName = [name];\n selectedType = [type];\n selectedBase = [base || ''];\n selectedModelId = [modelId || 0];\n selectedVersionId = [versionId || 0];\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitDownload = startCivitDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n const table = gradioApp().getElementById('model-versions-table');\n if (!table) return;\n const versions = table.querySelectorAll('tr');\n selectedURL = [];\n selectedName = [];\n selectedType = [];\n selectedBase = [];\n selectedModelId = [];\n selectedVersionId = [];\n for (const version of versions) {\n const parsed = version.querySelector('td:nth-child(1) div')?.getAttribute('onclick')?.match(/startCivitDownload\\('([^']+)', '([^']+)', '([^']+)', '([^']*)', (\\d+), (\\d+)\\)/);\n if (!parsed || parsed.length < 7) continue;\n selectedURL.push(parsed[1]);\n selectedName.push(parsed[2]);\n selectedType.push(parsed[3]);\n selectedBase.push(parsed[4]);\n selectedModelId.push(parseInt(parsed[5], 10));\n selectedVersionId.push(parseInt(parsed[6], 10));\n }\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], - "mappings": "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", + "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction openSettingsSection(sectionId: string) {\n const settingsTab = gradioApp().getElementById('tab_settings');\n const settingsButton = settingsTab ? gradioApp().querySelector(`button[aria-controls=\"${settingsTab.id}\"]`) : null;\n settingsButton?.click();\n const section = gradioApp().getElementById(`settings_section_tab_${sectionId}`);\n const sectionButton = section ? gradioApp().querySelector(`button[aria-controls=\"${section.id}\"]`) : null;\n sectionButton?.click();\n section?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n}\nwindow.openSettingsSection = openSettingsSection;\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.background = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n if (window.opts.diffusers_enable_embed) {\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n } else {\n this.embed = new XnIndex([]);\n }\n // Wildcards: [{name}, ...]\n if (window.opts.wildcards_enabled) {\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n } else {\n this.wildcard = new XnIndex([]);\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 5000);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\nwindow.addEventListener('pageshow', (evt) => log('pageShow', evt));\nwindow.addEventListener('pagehide', (evt) => log('pageHide', evt));\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFileMetadata {\n fp?: string | null;\n format?: string | null;\n size?: string | null;\n quantType?: string | null;\n}\n\ninterface CivitFile {\n id: number;\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n primary?: boolean;\n metadata?: CivitFileMetadata;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\ninterface QueuedFile {\n version: CivitVersion;\n file: CivitFile;\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\nlet currentModel: CivitModel | null = null;\n\nconst precisionOrder = ['fp32', 'bf16', 'fp16', 'fp8', 'int8', 'int4'];\nconst companionTypes = ['VAE', 'Text Encoder'];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileVariantUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nfunction fileVariant(file: CivitFile): string | null {\n return file.metadata?.fp || file.metadata?.quantType || null;\n}\n\n// Model files before companions, then by precision, then larger first\nfunction sortFiles(files: CivitFile[]): CivitFile[] {\n const isModel = (f: CivitFile) => f.type === 'Model' || f.type === 'Pruned Model';\n const rank = (f: CivitFile) => {\n const index = precisionOrder.indexOf((fileVariant(f) || '').toLowerCase());\n return index < 0 ? precisionOrder.length : index;\n };\n return [...files].sort((a, b) => Number(isModel(b)) - Number(isModel(a)) || rank(a) - rank(b) || (b.size || 0) - (a.size || 0));\n}\n\nfunction insertNameSuffix(name: string, suffix: string): string {\n const dot = name.lastIndexOf('.');\n return dot > 0 ? `${name.slice(0, dot)}-${suffix}${name.slice(dot)}` : `${name}-${suffix}`;\n}\n\n// Precision suffix, then full/pruned and the file id only as far as needed to stay unique within the version\nfunction fileSaveName(file: CivitFile, siblings: CivitFile[]): string {\n const tier1 = (f: CivitFile) => {\n const variant = fileVariant(f);\n return variant ? insertNameSuffix(f.name || '', variant) : f.name || '';\n };\n const tier2 = (f: CivitFile) => (f.metadata?.size ? insertNameSuffix(tier1(f), f.metadata.size) : tier1(f));\n const others = siblings.filter((s) => s.id !== file.id);\n const name = tier1(file);\n if (!others.some((s) => tier1(s) === name)) return name;\n const sized = tier2(file);\n if (!others.some((s) => tier2(s) === sized)) return sized;\n return insertNameSuffix(name, String(file.id));\n}\n\nfunction escapeHTML(text: string): string {\n return text.replace(/[&<>\"']/g, (c) => `&#${c.charCodeAt(0)};`);\n}\n\nfunction versionRows(version: CivitVersion, divider: boolean): string {\n const files = sortFiles(version.files);\n const entries: (CivitFile | null)[] = files.length > 0 ? files : [null];\n const border = divider ? ' style=\"border-top: 1px solid var(--sd-panel-border-color, #555)\"' : '';\n const span = entries.length > 1 ? ` rowspan=\"${entries.length}\"` : '';\n const versionCell = (content: string) => `${content}`;\n return entries.map((file, i) => {\n const first = i === 0;\n const cell = (content: string) => `${content}`;\n const link = file ? `
    \\udb80\\uddda
    ` : '';\n const name = file ? `${escapeHTML(file.name || 'unknown')}${file.primary ? ' \u2605' : ''}` : 'unknown';\n const variant = file ? [fileVariant(file), file.metadata?.size].filter(Boolean).join(' \u00B7 ') : '';\n const size = file?.size ? `${(file.size / 1024 / 1024 / 1024).toFixed(2)} GB` : 'unknown';\n const cells = [\n cell(link),\n first ? versionCell(escapeHTML(version.name || 'unknown')) : '',\n cell(escapeHTML(file?.type || 'unknown')),\n first ? versionCell(escapeHTML(version.base || 'unknown')) : '',\n cell(name),\n cell(escapeHTML(variant || '-')),\n first ? versionCell((new Date(version.mtime)).toLocaleDateString()) : '',\n cell(size),\n first ? versionCell(escapeHTML(version.availability || 'unknown')) : '',\n first ? versionCell(`
    ${version.desc || 'no description available'}
    `) : '',\n ];\n return `${cells.join('')}`;\n }).join('');\n}\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n currentModel = data;\n\n const versionsHTML = data.versions.map((v: CivitVersion, i: number) => versionRows(v, i > 0)).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nfunction queueFiles(model: CivitModel, queued: QueuedFile[]) {\n selectedURL = queued.map(({ file }) => file.url || '');\n selectedName = queued.map(({ version, file }) => fileSaveName(file, version.files));\n selectedType = queued.map(({ file }) => (companionTypes.includes(file.type || '') ? file.type : model.type) || '');\n selectedBase = queued.map(({ version }) => version.base || '');\n selectedModelId = queued.map(() => model.id || 0);\n selectedVersionId = queued.map(({ version }) => version.id || 0);\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\n\nexport function startCivitFileDownload(versionId: number, fileId: number) {\n log('startCivitFileDownload', { versionId, fileId });\n const version = currentModel?.versions.find((v) => v.id === versionId);\n const file = version?.files.find((f) => f.id === fileId);\n if (!currentModel || !version || !file) return;\n queueFiles(currentModel, [{ version, file }]);\n}\nwindow.startCivitFileDownload = startCivitFileDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n if (!currentModel) return;\n const queued = currentModel.versions\n .map((version) => ({ version, file: version.files.find((f) => f.primary) || version.files[0] }))\n .filter((entry): entry is QueuedFile => !!entry.file);\n queueFiles(currentModel, queued);\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], + "mappings": "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", "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] } diff --git a/ui/startup.ts b/ui/startup.ts index 3fb1e7f32..c797def8b 100644 --- a/ui/startup.ts +++ b/ui/startup.ts @@ -133,6 +133,8 @@ onUiLoaded(initStartup); onUiReady(() => log('uiReady')); window.initStartup = initStartup; +window.addEventListener('pageshow', (evt) => log('pageShow', evt)); +window.addEventListener('pagehide', (evt) => log('pageHide', evt)); // onAfterUiUpdate(() => log('evt onAfterUiUpdate')); // onUiLoaded(() => log('evt onUiLoaded')); From e4766f99dcd661b0a041e94bae382d46b776f6f1 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 14 Sep 2026 20:41:02 +0200 Subject: [PATCH 238/270] minimax redo video/audio shift Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 2 ++ modules/minimax/minimax_ui.py | 4 ++-- modules/minimax/minimax_video.py | 4 ++-- modules/video_models/video_minimax.py | 27 ++++++++++++++++++++++----- wiki | 2 +- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c0bca81e..f529ff418 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ Plus inevitable bug-fixes... can significantly improve lora quality when using multiple loras at once - per-block strength - native support for **MiniMax** + see [MiniMax Turbo LoRA collection](https://huggingface.co/vladmandic/MiniMax-H3-Turbo-LoRA) for LoRAs and examples - **DLSS** - add DLSS support for: *NeuralRender, SuperSample and FrameGen* dlls 5 caused quite a stir, but combined with generative ai it becomes a nice tool @@ -107,6 +108,7 @@ Plus inevitable bug-fixes... *note*: this may break compatibility with some legacy packages, so report any finidings - **Other** - video preview: TAESD support for **MiniMax** + - **minimax** video and audio shift are now dependent on steps instead of static - support `xai grok` for prompt enhance workflows *note*: requires grok api key - remove `/redocs` as `/docs` are primary api docs diff --git a/modules/minimax/minimax_ui.py b/modules/minimax/minimax_ui.py index d452c7f75..04c425bc6 100644 --- a/modules/minimax/minimax_ui.py +++ b/modules/minimax/minimax_ui.py @@ -29,8 +29,8 @@ def create_ui(prompt, _negative, styles, overrides, script_inputs, mp4_fps, mp4_ steps = gr.Slider(minimum=2, maximum=100, step=1, label="MiniMax steps", elem_id='minimax_steps', value=30) frames = gr.Slider(label='MiniMax frames', minimum=22, maximum=362, step=17, value=124, elem_id='minimax_frames') with gr.Row(): - video_shift = gr.Slider(minimum=8.0, maximum=16.0, step=0.1, label="MiniMax video shift", elem_id='minimax_video_shift', value=12) - audio_shift = gr.Slider(minimum=1.5, maximum=6.0, step=0.1, label="MiniMax audio shift", elem_id='minimax_audio_shift', value=3) + video_shift = gr.Slider(minimum=0.05, maximum=0.95, step=0.05, value=0.40, label="MiniMax video shift", elem_id='minimax_video_shift') + audio_shift = gr.Slider(minimum=0.05, maximum=0.95, step=0.05, value=0.15, label="MiniMax audio shift", elem_id='minimax_audio_shift') with gr.Row(): seed = gr.Number(label='Seed', value=-1, elem_id='minimax_seed', container=True) random_seed = ToolButton(ui_symbols.random, elem_id='minimax_seed_random') diff --git a/modules/minimax/minimax_video.py b/modules/minimax/minimax_video.py index 2e29bd031..5631a0b3f 100644 --- a/modules/minimax/minimax_video.py +++ b/modules/minimax/minimax_video.py @@ -145,8 +145,8 @@ def generate(task_id, _ui_state, ops=['video'], ) video_minimax.apply_overrides(p, shared.sd_model, still=False, audio=enable_audio, preview=enable_preview) - video_minimax.set_sampler_shift(shared.sd_model, video_shift=video_shift, audio_shift=audio_shift) - log.debug(f'Video: engine="{engine}" model="{model}" workflow={workflow} cls={shared.sd_model.__class__.__name__} audio={enable_audio} preview={enable_preview} shift={video_shift}:{audio_shift} kwargs={p.task_args}') + video_minimax.set_sampler_shift(shared.sd_model, steps=steps, video_shift=video_shift, audio_shift=audio_shift) + log.debug(f'Video: engine="{engine}" model="{model}" workflow={workflow} cls={shared.sd_model.__class__.__name__} audio={enable_audio} preview={enable_preview} kwargs={p.task_args}') processing.fix_seed(p) p.ops.append('video') p.scripts = scripts_manager.scripts_video diff --git a/modules/video_models/video_minimax.py b/modules/video_models/video_minimax.py index f52697689..29a43e2d2 100644 --- a/modules/video_models/video_minimax.py +++ b/modules/video_models/video_minimax.py @@ -91,8 +91,25 @@ def set_audio(pipe, enabled: bool): log.debug(f'Pipeline: cls={pipe.__class__.__name__} audio=disabled') -def set_sampler_shift(pipe, video_shift: float = 12.0, audio_shift: float = 3.0): - if getattr(pipe, 'scheduler', None) is not None and getattr(pipe.scheduler, 'config', None) is not None: - pipe.scheduler.config.shift = video_shift - if getattr(pipe, 'audio_scheduler', None) is not None and getattr(pipe.audio_scheduler, 'config', None) is not None: - pipe.audio_scheduler.config.shift = audio_shift +def calculate_video_shift(steps: int, value: float = 0.40, max_shift: float = 16.0) -> int: + value = max(0.05, min(0.95, value)) + return min(max_shift, round((value * steps) + 0.5)) + + +def calculate_audio_shift(steps: int, value: float = 0.15, max_shift: float = 6.0) -> int: + value = max(0.05, min(0.95, value)) + return min(max_shift, round((value * steps) + 0.5)) + + +def set_sampler_shift(pipe, steps: int, video_shift: float = 12.0, audio_shift: float = 3.0): + import diffusers + if getattr(pipe, 'scheduler', None) is None or getattr(pipe.scheduler, 'config', None) is None: + log.warning(f'Pipeline: cls={pipe.__class__.__name__} scheduler is missing') + return + video_calc_shift = calculate_video_shift(steps=steps, value=video_shift) + audio_calc_shift = calculate_audio_shift(steps=steps, value=audio_shift) + dct_video = { 'shift': video_shift, 'steps': video_calc_shift } + dct_audio = { 'shift': audio_shift, 'steps': audio_calc_shift } + pipe.scheduler = diffusers.MiniMaxH3Scheduler(shift=video_calc_shift) + pipe.audio_scheduler.config.shift = diffusers.MiniMaxH3Scheduler(shift=audio_calc_shift) + log.debug(f'Pipeline: scheduler={pipe.scheduler.__class__.__name__} video={dct_video} audio={dct_audio} ') diff --git a/wiki b/wiki index 5e3c67042..3e33a90f2 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 5e3c6704294346e7dc4e86802049d63646547437 +Subproject commit 3e33a90f279e1eb31a89dec28e268ba57a6c3374 From af69cb7a882bd4cc550d7c4b3b4034de785dcfdc Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 14 Sep 2026 20:59:55 +0200 Subject: [PATCH 239/270] lint Signed-off-by: Vladimir Mandic --- modules/video_models/video_minimax.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/video_models/video_minimax.py b/modules/video_models/video_minimax.py index 29a43e2d2..247112496 100644 --- a/modules/video_models/video_minimax.py +++ b/modules/video_models/video_minimax.py @@ -91,12 +91,12 @@ def set_audio(pipe, enabled: bool): log.debug(f'Pipeline: cls={pipe.__class__.__name__} audio=disabled') -def calculate_video_shift(steps: int, value: float = 0.40, max_shift: float = 16.0) -> int: +def calculate_video_shift(steps: int, value: float = 0.40, max_shift: float = 16.0) -> float: value = max(0.05, min(0.95, value)) return min(max_shift, round((value * steps) + 0.5)) -def calculate_audio_shift(steps: int, value: float = 0.15, max_shift: float = 6.0) -> int: +def calculate_audio_shift(steps: int, value: float = 0.15, max_shift: float = 6.0) -> float: value = max(0.05, min(0.95, value)) return min(max_shift, round((value * steps) + 0.5)) From 16a20a337ada71b1376bf02b3f0e888b85278bbc Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 15 Sep 2026 00:22:13 +0100 Subject: [PATCH 240/270] fix(video): apply the minimax shift through set_shift on both schedulers MiniMaxH3Scheduler reads its shift from the instance, not config.shift, and the per-request video scheduler was replaced by the Default sampler restore. Both schedulers now take set_shift, including the default_scheduler copy the restore reads. --- modules/video_models/video_minimax.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/modules/video_models/video_minimax.py b/modules/video_models/video_minimax.py index 247112496..cd0d17e2a 100644 --- a/modules/video_models/video_minimax.py +++ b/modules/video_models/video_minimax.py @@ -102,14 +102,18 @@ def calculate_audio_shift(steps: int, value: float = 0.15, max_shift: float = 6. def set_sampler_shift(pipe, steps: int, video_shift: float = 12.0, audio_shift: float = 3.0): - import diffusers - if getattr(pipe, 'scheduler', None) is None or getattr(pipe.scheduler, 'config', None) is None: - log.warning(f'Pipeline: cls={pipe.__class__.__name__} scheduler is missing') + scheduler = getattr(pipe, 'scheduler', None) + audio_scheduler = getattr(pipe, 'audio_scheduler', None) + if not hasattr(scheduler, 'set_shift') or not hasattr(audio_scheduler, 'set_shift'): + log.warning(f'Pipeline: cls={pipe.__class__.__name__} scheduler={scheduler.__class__.__name__} audio={audio_scheduler.__class__.__name__} shift unsupported') return video_calc_shift = calculate_video_shift(steps=steps, value=video_shift) audio_calc_shift = calculate_audio_shift(steps=steps, value=audio_shift) - dct_video = { 'shift': video_shift, 'steps': video_calc_shift } - dct_audio = { 'shift': audio_shift, 'steps': audio_calc_shift } - pipe.scheduler = diffusers.MiniMaxH3Scheduler(shift=video_calc_shift) - pipe.audio_scheduler.config.shift = diffusers.MiniMaxH3Scheduler(shift=audio_calc_shift) - log.debug(f'Pipeline: scheduler={pipe.scheduler.__class__.__name__} video={dct_video} audio={dct_audio} ') + dct_video = { 'value': video_shift, 'shift': video_calc_shift } + dct_audio = { 'value': audio_shift, 'shift': audio_calc_shift } + # set_shift keeps the shipped value in config.shift; the default sampler restores scheduler from default_scheduler every generation, so that copy carries the shift too + for target in (scheduler, getattr(pipe, 'default_scheduler', None)): + if hasattr(target, 'set_shift'): + target.set_shift(video_calc_shift) + audio_scheduler.set_shift(audio_calc_shift) + log.debug(f'Pipeline: scheduler={scheduler.__class__.__name__} video={dct_video} audio={dct_audio}') From f001a38dd32f2eaf65ece66cac41dc00b1795c2d Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 15 Sep 2026 00:22:40 +0100 Subject: [PATCH 241/270] fix(lora): accept bare lora_down and lora_up parameter names Wrappers holding the factors as nn.Parameter save them without the .weight suffix (alibaba-pai PDD files), which the marker gate rejected before grouping. The MiniMax-only normalization for that form is removed. --- modules/lora/native_adapter.py | 6 +++++- pipelines/minimax/minimax_lora.py | 20 +------------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index 40cd29e97..002c57d82 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -92,6 +92,9 @@ def _resolve_prefix(network_prefix, prefix_used): SUFFIX_NORMALIZE = { "lora_A.weight": "lora_down.weight", "lora_B.weight": "lora_up.weight", + # bare parameter names, saved by wrappers that hold the factors as nn.Parameter (alibaba-pai PDD files) + "lora_down": "lora_down.weight", + "lora_up": "lora_up.weight", } @@ -103,6 +106,7 @@ SUFFIX_NORMALIZE = { LORA_SUFFIXES = ( ".lora_down.weight", ".lora_up.weight", ".lora_mid.weight", ".lora_A.weight", ".lora_B.weight", + ".lora_down", ".lora_up", # diff_b: bias delta some saves pair with the weight LoRA, applied as ex_bias. # magnitude / lora_magnitude_vector: DoRA row norms (ai-toolkit / PEFT key # names); converted onto the dora_scale path by try_load_lora. @@ -154,7 +158,7 @@ FULL_SUFFIXES = ( # on accidental overlaps with other families. LORA_MARKERS = ( - ".lora_down.weight", ".lora_up.weight", + ".lora_down", ".lora_up", # bare and .weight forms alike ".lora_A.weight", ".lora_B.weight", # PEFT named-adapter saves embed the slot name as ``.lora_A..weight``; # the trailing-dot forms catch every variant. diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index 5709772f4..17079f74d 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -85,20 +85,6 @@ BARE_DIFFUSERS_PREFIX_USED = native_adapter.BARE_DIFFUSERS_PREFIX_USED has_marker = native_adapter.has_marker -MINIMAX_EXTRA_SUFFIXES = (".lora_down", ".lora_up", ".lora_A", ".lora_B") -MINIMAX_LORA_SUFFIXES = native_adapter.LORA_SUFFIXES + MINIMAX_EXTRA_SUFFIXES -MINIMAX_SUFFIX_NORMALIZE = { - "lora_down": "lora_down.weight", - "lora_up": "lora_up.weight", - "lora_A": "lora_down.weight", - "lora_B": "lora_up.weight", -} - - -def normalize_mini_max_suffix(suffix: str) -> str: - return MINIMAX_SUFFIX_NORMALIZE.get(suffix, suffix) - - def _flattened(dotted): return re.escape(dotted.replace(".", "_")) @@ -132,11 +118,7 @@ def parse_key(key, suffixes): key = native_adapter.unwrap_peft_wrapper(key) if key.startswith("dit."): key = "diffusion_model." + key[len("dit."):] - parsed = native_adapter.parse_key(key, suffixes, prefixes=KNOWN_PREFIXES) - if parsed is None: - return None - prefix_used, base, suffix = parsed - return prefix_used, base, normalize_mini_max_suffix(suffix) + return native_adapter.parse_key(key, suffixes, prefixes=KNOWN_PREFIXES) def group_by_suffixes(state_dict, suffixes, *, prefixes=None): # pylint: disable=unused-argument From 3e705bc4af571e0824fdfc18072ba2f38a4ec564 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 15 Sep 2026 00:23:09 +0100 Subject: [PATCH 242/270] feat(lora): project adaln deltas onto the pruned minimax basis The pruned transformer stores W @ P for each AdaLN projection against the rank-8 basis in time_embedder.basis, so deltas trained at the released width failed the shape check. try_load_lora gains an adapt_weights hook and the MiniMax loader refits lora_down as down @ P, which is exact. --- modules/lora/native_adapter.py | 30 ++++++++++------- pipelines/minimax/minimax_lora.py | 35 +++++++++++++++++++- test/test-minimax-native-adapters.py | 49 +++++++++++++++++++++++++--- 3 files changed, 98 insertions(+), 16 deletions(-) diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index 002c57d82..fd0ff8730 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -303,19 +303,19 @@ def finalize_network(net, name, family, lora_scale, t0, unmapped=0, mismatch=0, return net -def shapes_match(sd_module, down_w: torch.Tensor, up_w: torch.Tensor) -> bool: - """LoRA-style rank-and-dim sanity check against the live module weight. - - Honors SDNQ-quantized modules by reading the original shape from the - dequantizer rather than the packed weight tensor. - """ +def module_shape(sd_module): + """The live weight shape of a module, read from the dequantizer for SDNQ-quantized layers; None without a weight.""" if not hasattr(sd_module, "weight"): - return False + return None if hasattr(sd_module, "sdnq_dequantizer"): - mod_shape = sd_module.sdnq_dequantizer.original_shape - else: - mod_shape = sd_module.weight.shape - if len(mod_shape) < 2 or len(down_w.shape) < 2 or len(up_w.shape) < 2: + return tuple(sd_module.sdnq_dequantizer.original_shape) + return tuple(sd_module.weight.shape) + + +def shapes_match(sd_module, down_w: torch.Tensor, up_w: torch.Tensor) -> bool: + """LoRA-style rank-and-dim sanity check against the live module weight.""" + mod_shape = module_shape(sd_module) + if mod_shape is None or len(mod_shape) < 2 or len(down_w.shape) < 2 or len(up_w.shape) < 2: return False return down_w.shape[1] == mod_shape[1] and up_w.shape[0] == mod_shape[0] @@ -576,6 +576,7 @@ def try_load_lora(name, network_on_disk, lora_scale, *, network_prefix=NETWORK_PREFIX_DEFAULT, group_by_suffixes_fn=group_by_suffixes, network_alpha=None, + adapt_weights=None, arch_name="generic"): """Generic LoRA loader (handles DoRA via the universal ``finalize_updown`` hook). @@ -584,6 +585,10 @@ def try_load_lora(name, network_on_disk, lora_scale, *, ``network_alpha`` is a file-level alpha for files without alpha tensors; a file carrying any alpha of its own keeps those and ignores it. + + ``adapt_weights(sd_module, network_key, w)`` lets an arch refit a delta onto + a module whose live layout differs from the trained one (a pruned AdaLN + basis, for instance) before the shape check; returning None keeps ``w``. """ t0 = time.time() state_dict = read_state_dict(network_on_disk.filename, what="network") @@ -647,6 +652,9 @@ def try_load_lora(name, network_on_disk, lora_scale, *, skipped += 1 continue + if adapt_weights is not None: + target_w = adapt_weights(sd_module, network_key, target_w) or target_w + if not shapes_match(sd_module, target_w["lora_down.weight"], target_w["lora_up.weight"]): if l.debug: _module = f'{getattr(sd_module, "weight", None).shape if hasattr(sd_module, "weight") else "?"}' diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index 17079f74d..26961b684 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -12,6 +12,9 @@ lands on the fused SwiGLU projection with its two output halves swapped. import re +import torch + +from modules.logger import log from modules.lora import native_adapter @@ -215,8 +218,38 @@ _BIND_KWARGS = dict( ) +def pruned_basis(sd_module, rank, width): + """The AdaLN curve basis of the loaded transformer that owns ``sd_module``, or None on an unpruned model.""" + from modules import shared + pipe = getattr(shared.sd_model, "pipe", shared.sd_model) + for component in ("transformer", "transformer_ref"): + transformer = getattr(pipe, component, None) + basis = getattr(getattr(transformer, "time_embedder", None), "basis", None) + if basis is None or tuple(basis.shape) != (rank, width): + continue + if any(module is sd_module for module in transformer.modules()): + return basis + return None + + +def project_pruned_adaln(sd_module, network_key, w): + """Refit an AdaLN delta trained on the released time embedding onto the pruned curve basis: the pruned class + stores ``W @ P``, so ``up @ down`` lands exactly as ``up @ (down @ P)``.""" + down = w.get("lora_down.weight") + shape = native_adapter.module_shape(sd_module) + if down is None or down.ndim != 2 or shape is None or len(shape) != 2 or down.shape[1] == shape[1]: + return None + basis = pruned_basis(sd_module, shape[1], down.shape[1]) + if basis is None: + return None + projected = dict(w) + projected["lora_down.weight"] = (down.to(dtype=torch.float32, device=basis.device) @ basis.to(dtype=torch.float32).T).to(dtype=down.dtype, device=down.device) + log.debug(f'Network load: type=LoRA arch=minimaxh3 key={network_key} adaln projected {down.shape[1]}->{shape[1]}') + return projected + + def try_load_lora(name, network_on_disk, lora_scale): - return native_adapter.try_load_lora(name, network_on_disk, lora_scale, network_alpha=file_alpha(network_on_disk), **_BIND_KWARGS) + return native_adapter.try_load_lora(name, network_on_disk, lora_scale, network_alpha=file_alpha(network_on_disk), adapt_weights=project_pruned_adaln, **_BIND_KWARGS) def try_load_lokr(name, network_on_disk, lora_scale): diff --git a/test/test-minimax-native-adapters.py b/test/test-minimax-native-adapters.py index 9d8e7ff30..8b375f239 100644 --- a/test/test-minimax-native-adapters.py +++ b/test/test-minimax-native-adapters.py @@ -24,6 +24,8 @@ Save formats exercised, each seen in a published LoRA: - diffusers names with kohya suffixes: the alibaba-pai Acc LoRAs. - peft wrapper around a ``dit`` attribute (``base_model.model.dit.blocks.0...``): the mvp-lab RAVEN LoRA. +- pruned checkpoints (``MiniMaxH3PrunedTransformer3DModel``): AdaLN deltas + trained at the released width refit onto the rank-k curve basis. The reference module tree is the real ``MiniMaxH3Transformer3DModel`` at tiny dims, so module names and target shapes are authoritative. Every LoRA file @@ -201,14 +203,36 @@ class _MockSdModel: self.__class__.__name__ = 'MiniMaxH3ModularPipeline' -def install_mock_pipe(): +def install_mock_pipe(transformer=REF): """Point shared.sd_model at a mock exposing the reference transformer; re-installed per load so stamps do not leak.""" - sd_model = _MockSdModel(_MockPipeline(REF)) + sd_model = _MockSdModel(_MockPipeline(transformer)) from modules.modeldata import model_data model_data.sd_model = sd_model return sd_model +CURVE_RANK = 2 + + +class _CurveTimeEmbedder(nn.Module): + """The pruned class's table lookup, reduced to the basis buffer the loader reads.""" + + def __init__(self, rank, width): + super().__init__() + self.register_buffer('basis', torch.randn(rank, width)) + + +def pruned_reference(): + """REF with every AdaLN projection folded onto a rank-2 curve basis, the layout of MiniMaxH3PrunedTransformer3DModel.""" + import copy + pruned = copy.deepcopy(REF) + pruned.time_embedder = _CurveTimeEmbedder(CURVE_RANK, pruned.transformer_blocks[0].adaln_proj.linear.in_features) + for block in pruned.transformer_blocks: + block.adaln_proj.linear = nn.Linear(CURVE_RANK, block.adaln_proj.linear.out_features) + pruned.norm_out.linear = nn.Linear(CURVE_RANK, pruned.norm_out.linear.out_features) + return pruned + + # ============================================================ # Synthesizers and helpers # ============================================================ @@ -280,8 +304,8 @@ class _MockNetworkOnDisk: self.metadata = metadata or {} -def load_native(state_dict, name='test', metadata=None): - install_mock_pipe() +def load_native(state_dict, name='test', metadata=None, transformer=REF): + install_mock_pipe(transformer) with TempLora(state_dict, name=name, metadata=metadata) as nod: return M.try_load(name, nod, lora_scale=1.0) @@ -605,6 +629,22 @@ def test_non_numeric_metadata_alpha_is_ignored(): return True +def test_adaln_deltas_project_onto_the_pruned_basis(): + """On a pruned transformer an AdaLN delta trained at the released width binds as up @ (down @ basis.T); every other layer binds verbatim.""" + pruned = pruned_reference() + basis = pruned.time_embedder.basis + sd = {k: v for k, v in synth_diffusers(suffix=KOHYA).items() if not k.startswith('time_embedder.')} # the pruned class drops the time embedder MLP + net = load_native(sd, name='pruned', transformer=pruned) + assert net is not None and net.mismatch == 0, f'mismatch={None if net is None else net.mismatch}' + expected = identity_deltas(sd) + curve_keys = [k for k in expected if k.endswith('_adaln_proj_linear') and '_refiner_' not in k] + ['lora_transformer_norm_out_linear'] + for key in curve_keys: + expected[key] = expected[key] @ basis.T + assert_same_deltas(native_deltas(net), expected) + assert tuple(net.modules['lora_transformer_norm_out_linear'].down_model.weight.shape) == (RANK, CURVE_RANK) + return True + + # ============================================================ # Tests - real files # ============================================================ @@ -665,6 +705,7 @@ def run_tests(): test_metadata_alpha_scales_an_alphaless_file, test_metadata_alpha_yields_to_alpha_tensors, test_non_numeric_metadata_alpha_is_ignored, + test_adaln_deltas_project_onto_the_pruned_basis, ]: run_test(CAT_LOADER, fn) From 5860ea91535bc90b09eba53f0b2c9b26b55a7f80 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 15 Sep 2026 00:23:27 +0100 Subject: [PATCH 243/270] feat(lora): parallel decoding heads for pdd acceleration files PDD files pair a backbone LoRA with the output projections repeated per interval of a training grid; each step fuses the heads of its block into one projection. network_pdd reads the grid from the metadata, swaps a ParallelHead in for each projection, fuses from the scheduler's step_index and pins the step count and shift while heads are installed. The MiniMax loader declares which scheduler each head follows. --- modules/lora/native_adapter.py | 1 + modules/lora/network.py | 1 + modules/lora/network_pdd.py | 305 +++++++++++++++++++++++++ modules/lora/networks.py | 10 +- modules/processing_args.py | 5 + pipelines/minimax/minimax_lora.py | 12 +- test/test-pdd.py | 366 ++++++++++++++++++++++++++++++ 7 files changed, 695 insertions(+), 5 deletions(-) create mode 100644 modules/lora/network_pdd.py create mode 100644 test/test-pdd.py diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index fd0ff8730..01c130c95 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -1140,6 +1140,7 @@ def try_load_chain(name, network_on_disk, lora_scale, family_loaders): net = sub else: net.modules.update(sub.modules) + net.extras.update(sub.extras) sd_models_utils.state_dict_cache.disable() if net is not None and mismatch > 0: # applying only the layers that fit leaves the model in a state nothing was trained for log.error(f'Network load: type=LoRA name="{name}" modules={len(net.modules)} mismatch={mismatch} shapes do not match the loaded model') diff --git a/modules/lora/network.py b/modules/lora/network.py index 899e6940c..5f23407ca 100644 --- a/modules/lora/network.py +++ b/modules/lora/network.py @@ -161,6 +161,7 @@ class Network: # LoraModule self.block_spec = None # raw lbw= value; per-layer factors resolve through lora_blocks self.pending_config = None # staged multipliers; network_activate promotes them after the removal pass so fuse removal subtracts the delta that was applied self.modules = {} + self.extras = {} # non-delta payloads a family carries, e.g. parallel heads self.mismatch = 0 # deltas dropped for not fitting their target module; try_load_chain refuses the file when non-zero self.bundle_embeddings = {} self.mtime = None diff --git a/modules/lora/network_pdd.py b/modules/lora/network_pdd.py new file mode 100644 index 000000000..82cf7f35a --- /dev/null +++ b/modules/lora/network_pdd.py @@ -0,0 +1,305 @@ +"""Parallel decoding distillation heads carried by a native network. + +A PDD file pairs a backbone LoRA with the output projections repeated once per interval of an N-step +training grid; each step fuses the heads of its block into one projection, so N / block_size evaluations +walk the trajectory. Heads ride on ``Network.extras['pdd']``: ``reconcile`` installs and removes them with +the loaded set, ``pin`` holds the step count and schedule the file was distilled for. +""" + +import copy +import weakref +import torch +from modules.logger import log + + +METADATA_STEPS = 'pdd_num_steps' +METADATA_BLOCK = 'pdd_block_size' +EXTRAS_KEY = 'pdd' + + +class ArchSpec: + """How an architecture hosts parallel heads: the scheduler behind each head and how interval counts map onto its num_inference_steps.""" + + def __init__(self, schedulers=None, default_scheduler='scheduler', steps_for=None): + self.schedulers = schedulers or {} # head path -> attribute of the scheduler the head was trained on + self.default_scheduler = default_scheduler + self.steps_for = steps_for or (lambda intervals: intervals) # num_inference_steps that yields this many grid intervals + + def scheduler_name(self, head): + return self.schedulers.get(head, self.default_scheduler) + + +class ParallelHeads: + """The head tensors of one file and the grid they were trained on.""" + + def __init__(self, num_steps, block_size, heads): + self.num_steps = num_steps + self.block_size = block_size + self.heads = heads # head path -> (weight [N, out, in], bias [N, out] or None) + self.nfe = num_steps // block_size + + +class Installed: + """Bookkeeping for the heads currently swapped into a pipeline.""" + + def __init__(self, name, strength, component, modules, heads, spec): + self.name = name + self.strength = strength + self.component = component + self.modules = modules # head path -> (parent, attribute, original module) + self.heads = heads + self.spec = spec + self.steps = spec.steps_for(heads.nfe) + + +def detect(metadata): + """The (num_steps, block_size) grid a file declares; None without PDD metadata, ValueError for an unusable grid.""" + metadata = metadata or {} + if METADATA_STEPS not in metadata: + return None + num_steps = int(metadata[METADATA_STEPS]) + block_size = int(metadata.get(METADATA_BLOCK, 1)) + if num_steps < 1 or block_size < 1 or num_steps % block_size != 0: + raise ValueError(f'grid={num_steps} block={block_size}') + return num_steps, block_size + + +def load(name, metadata, state_dict): + """Collect the per-interval head tensors of a file, or None when the file carries no PDD grid.""" + try: + grid = detect(metadata) + except ValueError as e: + log.error(f'Network load: type=PDD name="{name}" {e} block size must divide the grid') + return None + if grid is None: + return None + num_steps, block_size = grid + heads = {} + for key, tensor in state_dict.items(): + if key.endswith('.weight') and tensor.ndim == 3 and tensor.shape[0] == num_steps: + path = key[:-len('.weight')] + heads[path] = (tensor, state_dict.get(f'{path}.bias', None)) + if len(heads) == 0: + log.error(f'Network load: type=PDD name="{name}" grid={num_steps} block={block_size} no head tensors') + return None + log.debug(f'Network load: type=PDD name="{name}" grid={num_steps} block={block_size} nfe={num_steps // block_size} heads={list(heads)}') + return ParallelHeads(num_steps, block_size, heads) + + +def try_load(name, network_on_disk, lora_scale): # pylint: disable=unused-argument + """Family loader for the native chain: a network carrying only the heads.""" + metadata = getattr(network_on_disk, 'metadata', None) or {} + if METADATA_STEPS not in metadata: + return None + from modules.lora import native_adapter + state_dict = native_adapter.read_state_dict(network_on_disk.filename, what='network') + heads = load(name, metadata, state_dict) + if heads is None: + return None + net = native_adapter.new_network(name, network_on_disk) + net.extras[EXTRAS_KEY] = heads + return net + + +def base_tensors(module): + """Float copies of a projection's weight and bias for the strength blend; None when the weight is not a plain tensor.""" + weight = getattr(module, 'weight', None) + if weight is None or getattr(module, 'sdnq_dequantizer', None) is not None or not torch.is_floating_point(weight) or weight.ndim != 2: + return None, None + bias = getattr(module, 'bias', None) + return weight.detach().to(dtype=torch.float32), None if bias is None else bias.detach().to(dtype=torch.float32) + + +class ParallelHead(torch.nn.Module): + """An output projection replaced by its per-interval heads, fused per step for the block the scheduler is about to take.""" + + def __init__(self, base, weight, bias, strength, get_scheduler, block_size, intervals): + super().__init__() + object.__setattr__(self, 'base', base) # kept out of the module tree so nothing walks, offloads or serializes it + object.__setattr__(self, 'get_scheduler', get_scheduler) + self.weight = torch.nn.Parameter(weight.to(dtype=torch.float32), requires_grad=False) # float32 like the projection it replaces + self.bias = None if bias is None else torch.nn.Parameter(bias.to(dtype=torch.float32), requires_grad=False) + self.register_buffer('intervals', intervals.to(dtype=torch.float32)) + self.in_features = weight.shape[2] + self.out_features = weight.shape[1] + self.num_steps = weight.shape[0] + self.block_size = block_size + self.strength = strength + self.base_weight, self.base_bias = base_tensors(base) if strength != 1.0 else (None, None) + self.fused_index = None + self.fused_weight = None + self.fused_bias = None + self.overflow_warned = False + + def step_index(self): + scheduler = self.get_scheduler() + index = getattr(scheduler, 'step_index', None) if scheduler is not None else None + index = 0 if index is None else int(index) + nfe = self.num_steps // self.block_size + if index >= nfe: + if not self.overflow_warned: + self.overflow_warned = True + log.warning(f'Network: type=PDD step={index} nfe={nfe} schedule longer than the distilled grid') + index = nfe - 1 + return index + + def fuse(self, index): + start = index * self.block_size + stop = start + self.block_size + plan = torch.zeros(self.num_steps, dtype=torch.float32, device=self.weight.device) + span = self.intervals[start:stop] + plan[start:stop] = (span / span.sum()).to(device=plan.device) + weight = torch.tensordot(plan, self.weight.detach(), dims=1) + bias = None if self.bias is None else plan @ self.bias.detach() + if self.base_weight is not None: + base_weight = self.base_weight.to(device=weight.device) + weight = base_weight + self.strength * (weight - base_weight) + if bias is not None and self.base_bias is not None: + base_bias = self.base_bias.to(device=bias.device) + bias = base_bias + self.strength * (bias - base_bias) + self.fused_index, self.fused_weight, self.fused_bias = index, weight, bias + + def forward(self, hidden_states): + index = self.step_index() + if index != self.fused_index or self.fused_weight is None or self.fused_weight.device != self.weight.device: + self.fuse(index) + weight = self.fused_weight.to(device=hidden_states.device, dtype=hidden_states.dtype) + bias = None if self.fused_bias is None else self.fused_bias.to(device=hidden_states.device, dtype=hidden_states.dtype) + return torch.nn.functional.linear(hidden_states, weight, bias) + + +def grid_intervals(scheduler, num_steps, spec): + """Interval lengths of the training grid in ascending time, from a pristine scheduler copy immune to a live shift override.""" + probe = scheduler.__class__.from_config(scheduler.config) if hasattr(scheduler, 'from_config') else copy.deepcopy(scheduler) + probe.set_timesteps(spec.steps_for(num_steps)) + sigmas = probe.sigmas.detach().to(device='cpu', dtype=torch.float64) + if sigmas.numel() != num_steps + 1: + return None + return (1.0 - sigmas).diff() + + +def submodule(component, path): + try: + return component.get_submodule(path) + except AttributeError: + return None + + +def owner(pipe, heads, components): + """The component holding every head projection, as (name, module); (None, None) when no component has them all.""" + for name in components: + component = getattr(pipe, name, None) + if component is not None and hasattr(component, 'get_submodule') and all(submodule(component, path) is not None for path in heads.heads): + return name, component + return None, None + + +def target_shape(module): + dequantizer = getattr(module, 'sdnq_dequantizer', None) + if dequantizer is not None and getattr(dequantizer, 'original_shape', None) is not None: + return tuple(dequantizer.original_shape) + weight = getattr(module, 'weight', None) + return tuple(weight.shape) if weight is not None else None + + +def install(pipe, net, heads, spec, components): + """Swap the heads into the component that owns their projections; True when the module tree changed.""" + component_name, component = owner(pipe, heads, components) + if component is None: + log.error(f'Network load: type=PDD name="{net.name}" heads={list(heads.heads)} no loaded component holds these projections') + return False + strength = float(net.te_multiplier) # transformer-keyed layers scale by the te multiplier, see network.NetworkModule.multiplier + pipe_ref = weakref.ref(pipe) + modules = {} + for path, (weight, bias) in heads.heads.items(): + module = submodule(component, path) + shape = target_shape(module) + if shape != tuple(weight.shape[1:]): + log.error(f'Network load: type=PDD name="{net.name}" head={path} shape={list(weight.shape[1:])} module={list(shape) if shape else None} shape mismatch') + for parent, attr, original in modules.values(): + setattr(parent, attr, original) + return False + scheduler_name = spec.scheduler_name(path) + scheduler = getattr(pipe, scheduler_name, None) + intervals = grid_intervals(scheduler, heads.num_steps, spec) if scheduler is not None else None + if intervals is None: + log.error(f'Network load: type=PDD name="{net.name}" head={path} scheduler={scheduler.__class__.__name__} cannot build a {heads.num_steps}-interval grid') + for parent, attr, original in modules.values(): + setattr(parent, attr, original) + return False + def get_scheduler(name=scheduler_name): + owner_pipe = pipe_ref() + return getattr(owner_pipe, name, None) if owner_pipe is not None else None + head = ParallelHead(module, weight, bias, strength, get_scheduler, heads.block_size, intervals) + parent_path, _, attr = path.rpartition('.') + parent = component.get_submodule(parent_path) if parent_path else component + setattr(parent, attr, head) + modules[path] = (parent, attr, module) + pipe.sdnext_pdd = Installed(net.name, strength, component_name, modules, heads, spec) + log.info(f'Network load: type=PDD name="{net.name}" component={component_name} heads={list(modules)} grid={heads.num_steps} block={heads.block_size} nfe={heads.nfe} steps={pipe.sdnext_pdd.steps} strength={strength}') + return True + + +def restore(pipe): + """Put the original projections back; True when heads were installed.""" + state = getattr(pipe, 'sdnext_pdd', None) + if state is None: + return False + for parent, attr, original in state.modules.values(): + setattr(parent, attr, original) + del pipe.sdnext_pdd + log.info(f'Network unload: type=PDD name="{state.name}" component={state.component} heads={list(state.modules)}') + return True + + +def arch_spec(): + """The parallel-head spec of the loaded architecture's native loader module, or None.""" + import importlib + from modules import shared + from modules.lora import lora_load + module_name = lora_load.NATIVE_DISPATCH.get(shared.sd_model_type) + if module_name is None: + return None + return getattr(importlib.import_module(module_name), 'PDD', None) + + +def reconcile(pipe, loaded, components): + """Match the installed heads to the loaded networks; True when the module tree changed.""" + carriers = [net for net in loaded if EXTRAS_KEY in getattr(net, 'extras', {})] + if len(carriers) == 0: + return restore(pipe) + if len(carriers) > 1: + log.warning(f'Network load: type=PDD networks={[net.name for net in carriers]} one grid per model, using first') + net = carriers[0] + current = getattr(pipe, 'sdnext_pdd', None) + if current is not None and current.name == net.name and current.strength == float(net.te_multiplier): + return False + spec = arch_spec() + if spec is None: + from modules import shared + log.error(f'Network load: type=PDD name="{net.name}" type={shared.sd_model_type} architecture has no parallel head support') + return restore(pipe) + changed = restore(pipe) + return install(pipe, net, net.extras[EXTRAS_KEY], spec, components) or changed + + +def pin(p, model): + """Hold a generation on the distilled step count and shipped schedule while heads are installed; returns the pinned step count or None.""" + state = getattr(model, 'sdnext_pdd', None) + if state is None: + return None + shifts = {} + for path in state.modules: + name = state.spec.scheduler_name(path) + scheduler = getattr(model, name, None) + if scheduler is not None and hasattr(scheduler, 'set_shift') and getattr(scheduler, 'config', None) is not None and 'shift' in scheduler.config: + scheduler.set_shift(scheduler.config['shift']) + shifts[name] = scheduler.config['shift'] + requested = p.steps + p.steps = state.steps + if getattr(p, 'task_args', None) is not None: + p.task_args['num_inference_steps'] = state.steps + if getattr(model, 'num_timesteps', None) is not None: + model.num_timesteps = state.heads.nfe # the progress total counts transformer evaluations + log.info(f'Network: type=PDD name="{state.name}" steps={state.steps} requested={requested} nfe={state.heads.nfe} shift={shifts}') + return state.steps diff --git a/modules/lora/networks.py b/modules/lora/networks.py index 87dde344f..cab987fdf 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -48,8 +48,9 @@ from modules.lora import lora_common as l from modules.lora import lora_overrides from modules.lora import lora_sdnq from modules.lora import lora_stack +from modules.lora import network_pdd from modules.lora.lora_apply import network_apply_weights, network_apply_direct, network_backup_weights, network_calc_weights -from modules import shared, devices, sd_models +from modules import shared, devices, sd_models, errors from modules.logger import log, console @@ -334,7 +335,12 @@ def finish_pass(ctx, t0): log.error(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} weights={ctx.applied_weight} bias={ctx.applied_bias} refused={ctx.refused} network partially applied') if l.debug and len(l.loaded_networks) > 0: log.debug(f'Network load: type=LoRA networks={[n.name for n in l.loaded_networks]} modules={ctx.active_components} layers={ctx.total} weights={ctx.applied_weight} bias={ctx.applied_bias} refused={ctx.refused} backup={round(ctx.backup_size/1024/1024/1024, 2)} fuse={ctx.fuse}:{shared.opts.lora_fuse_diffusers} device={ctx.device} time={l.timer.summary}') - if len(applied_layers) > 0 or shared.opts.diffusers_offload_mode == "sequential" or len(ctx.group_stripped) > 0: + try: + heads_changed = network_pdd.reconcile(ctx.sd_model, l.loaded_networks, default_components) # carried projections swap with the loaded set before the offload snapshot below + except Exception as e: + heads_changed = False + errors.display(e, 'Network load: type=PDD') + if len(applied_layers) > 0 or shared.opts.diffusers_offload_mode == "sequential" or len(ctx.group_stripped) > 0 or heads_changed: sd_models.set_diffuser_offload(ctx.sd_model, op="model") diff --git a/modules/processing_args.py b/modules/processing_args.py index 4ac2781ff..2833f4f82 100644 --- a/modules/processing_args.py +++ b/modules/processing_args.py @@ -12,6 +12,7 @@ from modules.attention import context as attention_context from modules.processing_callbacks import diffusers_callback_legacy, diffusers_callback, set_callbacks_p from modules.processing_helpers import get_generator, apply_circular # pylint: disable=unused-import from modules.processing_prompt import set_prompt +from modules.lora import network_pdd from modules.api import helpers @@ -263,6 +264,10 @@ def set_pipeline_args(p, model, prompts:list, negative_prompts:list, prompts_2:l possible = get_params(model) + pinned = network_pdd.pin(p, model) # installed parallel-decoding heads fix the step count and schedule + if pinned is not None and 'num_inference_steps' in possible: + kwargs['num_inference_steps'] = pinned + debug_log(f'Pipeline: cls={cls} possible={possible}') steps = kwargs.get("num_inference_steps", None) or len(getattr(p, 'timesteps', ['1'])) clip_skip = kwargs.pop("clip_skip", 1) diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index 26961b684..171f47d42 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -15,7 +15,11 @@ import re import torch from modules.logger import log -from modules.lora import native_adapter +from modules.lora import native_adapter, network_pdd + + +# Parallel decoding heads: the audio projection follows the audio schedule, and MiniMaxH3Scheduler counts the terminal sigma in num_inference_steps. +PDD = network_pdd.ArchSpec(schedulers={"audio_proj_out": "audio_scheduler"}, steps_for=lambda intervals: intervals + 1) KNOWN_PREFIXES = ( @@ -199,8 +203,9 @@ def network_prefix_for(prefix_used): def file_alpha(network_on_disk): - """The training alpha some trainers record in the safetensors metadata instead of per-key tensors, or None.""" - alpha = (getattr(network_on_disk, "metadata", None) or {}).get("alpha") + """The file-level training alpha from the safetensors metadata (alpha, or lora_alpha in PDD files), or None.""" + metadata = getattr(network_on_disk, "metadata", None) or {} + alpha = metadata.get("alpha", metadata.get("lora_alpha")) if alpha is None: return None try: @@ -287,5 +292,6 @@ def try_load(name, network_on_disk, lora_scale): family_loaders=( try_load_lora, try_load_lokr, try_load_loha, try_load_oft, try_load_ia3, try_load_glora, try_load_norm, try_load_full, + network_pdd.try_load, ), ) diff --git a/test/test-pdd.py b/test/test-pdd.py new file mode 100644 index 000000000..7eab00d7b --- /dev/null +++ b/test/test-pdd.py @@ -0,0 +1,366 @@ +#!/usr/bin/env python +""" +Offline unit tests for modules.lora.network_pdd. + +Checks the parallel decoding head mechanics against the reference formulas +shipped with alibaba-pai/MiniMax-H3-Acc-LoRAs (minimax_h3_pdd.py): + +- ``detect`` / ``load`` metadata and head-tensor discovery +- ``grid_intervals`` against ``pdd_time_grid`` for the video and audio shifts +- ``ParallelHead`` against ``MiniMaxH3ParallelHead`` on every block, plus the strength blend +- ``install`` / ``restore`` / ``reconcile`` round trips on a stub pipeline +- ``pin`` step and shift override + +No running server required. + +Usage: + python test/test-pdd.py +""" + +import os +import sys +import types + +import torch + +script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, script_dir) +os.chdir(script_dir) + +os.environ['SD_INSTALL_QUIET'] = '1' + +# Bootstrap cmd_args before any module that pulls in shared.py. +import modules.cmd_args # pylint: disable=wrong-import-position +import installer # pylint: disable=wrong-import-position +_orig_argv = sys.argv +sys.argv = [sys.argv[0]] +try: + modules.cmd_args.parse_args() +finally: + sys.argv = _orig_argv +installer.add_args(modules.cmd_args.parser) +modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) + +import diffusers # pylint: disable=wrong-import-position +from modules import shared # pylint: disable=wrong-import-position,unused-import # shared must initialize before sd_models, which imports back into it +from modules.errors import log # pylint: disable=wrong-import-position +from modules.lora import network_pdd # pylint: disable=wrong-import-position +from pipelines.minimax import minimax_lora # pylint: disable=wrong-import-position + + +NUM_STEPS = 32 +BLOCK = 4 +HIDDEN = 16 +VIDEO_OUT = 8 +AUDIO_OUT = 6 +METADATA = {'pdd_num_steps': '32', 'pdd_block_size': '4', 'lora_rank': '64', 'lora_alpha': '64.0'} + + +# ============================================================ +# Reference implementation (minimax_h3_pdd.py) +# ============================================================ + +def reference_time_grid(shift, num_steps): + sigma = torch.linspace(1.0, 0.0, num_steps + 1, dtype=torch.float64) + return 1.0 - shift * sigma / (1 + (shift - 1) * sigma) + + +def reference_plan(step_sizes, start, block_size): + plan = torch.zeros(1, step_sizes.shape[0], dtype=step_sizes.dtype) + span = step_sizes[start:start + block_size].sum() + plan[0, start:start + block_size] = step_sizes[start:start + block_size] / span + return plan + + +class ReferenceHead(torch.nn.Module): + def __init__(self, weight, bias): + super().__init__() + self.num_steps = weight.shape[0] + self.weight = torch.nn.Parameter(weight.clone()) + self.bias = torch.nn.Parameter(bias.clone()) + self.plan = torch.zeros(1, self.num_steps) + + def forward(self, hidden_states): + plan = self.plan.to(device=self.weight.device, dtype=self.weight.dtype) + weight = torch.einsum('pn,noi->poi', plan, self.weight).flatten(0, 1) + bias = torch.einsum('pn,no->po', plan, self.bias).flatten() + return torch.nn.functional.linear(hidden_states, weight, bias) + + +# ============================================================ +# Test infrastructure +# ============================================================ + +results: dict[str, dict] = {} + + +def category(name: str): + if name not in results: + results[name] = {'passed': 0, 'failed': 0, 'tests': []} + return name + + +def record(cat: str, passed: bool, name: str, detail: str = ''): + status = 'PASS' if passed else 'FAIL' + results[cat]['passed' if passed else 'failed'] += 1 + results[cat]['tests'].append((status, name)) + msg = f' {status}: {name}' + if detail: + msg += f' ({detail})' + if passed: + log.info(msg) + else: + log.error(msg) + + +def run_test(cat: str, fn): + name = fn.__name__ + try: + ok = fn() + record(cat, ok is not False, name) + except AssertionError as e: + record(cat, False, name, str(e)) + except Exception as e: # pylint: disable=broad-except + record(cat, False, name, f'{type(e).__name__}: {e}') + + +# ============================================================ +# Fixtures +# ============================================================ + +class StubPipe: + """The parts of a modular pipeline the engine touches: components and two schedulers.""" + + def __init__(self): + self.transformer = torch.nn.Module() + self.transformer.proj_out = torch.nn.Linear(HIDDEN, VIDEO_OUT) + self.transformer.audio_proj_out = torch.nn.Linear(HIDDEN, AUDIO_OUT) + self.scheduler = diffusers.MiniMaxH3Scheduler(shift=12.0) + self.audio_scheduler = diffusers.MiniMaxH3Scheduler(shift=3.0) + self.num_timesteps = 29 + + +def make_heads(): + torch.manual_seed(0) + return network_pdd.ParallelHeads(NUM_STEPS, BLOCK, { + 'proj_out': (torch.randn(NUM_STEPS, VIDEO_OUT, HIDDEN), torch.randn(NUM_STEPS, VIDEO_OUT)), + 'audio_proj_out': (torch.randn(NUM_STEPS, AUDIO_OUT, HIDDEN), torch.randn(NUM_STEPS, AUDIO_OUT)), + }) + + +def make_net(heads, strength=1.0): + return types.SimpleNamespace(name='pdd-test', te_multiplier=strength, extras={network_pdd.EXTRAS_KEY: heads}) + + +# ============================================================ +# Tests: detection and loading +# ============================================================ + +def test_detect_grid(): + assert network_pdd.detect(METADATA) == (32, 4) + assert network_pdd.detect({'pdd_num_steps': '16'}) == (16, 1) + assert network_pdd.detect({}) is None + assert network_pdd.detect(None) is None + + +def test_detect_rejects_bad_block(): + try: + network_pdd.detect({'pdd_num_steps': '32', 'pdd_block_size': '5'}) + except ValueError: + return True + raise AssertionError('block size 5 accepted for a 32 grid') + + +def test_load_collects_heads(): + state_dict = { + 'proj_out.weight': torch.zeros(NUM_STEPS, VIDEO_OUT, HIDDEN), + 'proj_out.bias': torch.zeros(NUM_STEPS, VIDEO_OUT), + 'audio_proj_out.weight': torch.zeros(NUM_STEPS, AUDIO_OUT, HIDDEN), + 'audio_proj_out.bias': torch.zeros(NUM_STEPS, AUDIO_OUT), + 'transformer_blocks.0.attn.to_q.lora_down': torch.zeros(64, HIDDEN), + 'transformer_blocks.0.attn.to_q.lora_up': torch.zeros(HIDDEN, 64), + } + heads = network_pdd.load('x', METADATA, state_dict) + assert heads is not None and set(heads.heads) == {'proj_out', 'audio_proj_out'}, f'heads={None if heads is None else list(heads.heads)}' + assert heads.nfe == 8 and heads.block_size == 4 + assert heads.heads['proj_out'][1] is not None, 'bias not paired' + + +def test_load_without_metadata_is_none(): + assert network_pdd.load('x', {'alpha': '1'}, {'proj_out.weight': torch.zeros(NUM_STEPS, VIDEO_OUT, HIDDEN)}) is None + + +def test_load_without_heads_is_none(): + assert network_pdd.load('x', METADATA, {'transformer_blocks.0.attn.to_q.lora_down': torch.zeros(64, HIDDEN)}) is None + + +# ============================================================ +# Tests: grid and fusion math +# ============================================================ + +def test_grid_intervals_match_reference(): + for shift in (12.0, 3.0): + scheduler = diffusers.MiniMaxH3Scheduler(shift=shift) + scheduler.set_shift(4.0) # a live override must not leak into the training grid + intervals = network_pdd.grid_intervals(scheduler, NUM_STEPS, minimax_lora.PDD) + reference = reference_time_grid(shift, NUM_STEPS).diff() + assert intervals is not None and intervals.shape == reference.shape, f'shift={shift} shape={None if intervals is None else intervals.shape}' + assert torch.allclose(intervals, reference, atol=1e-6), f'shift={shift} maxdiff={(intervals - reference).abs().max().item()}' + + +def test_steps_for_counts_terminal_sigma(): + assert minimax_lora.PDD.steps_for(8) == 9 + assert minimax_lora.PDD.scheduler_name('audio_proj_out') == 'audio_scheduler' + assert minimax_lora.PDD.scheduler_name('proj_out') == 'scheduler' + + +def test_parallel_head_matches_reference_per_block(): + heads = make_heads() + weight, bias = heads.heads['proj_out'] + base = torch.nn.Linear(HIDDEN, VIDEO_OUT) + scheduler = diffusers.MiniMaxH3Scheduler(shift=12.0) + intervals = network_pdd.grid_intervals(scheduler, NUM_STEPS, minimax_lora.PDD) + stub = types.SimpleNamespace(step_index=None) + head = network_pdd.ParallelHead(base, weight, bias, 1.0, lambda: stub, BLOCK, intervals) + reference = ReferenceHead(weight, bias) + step_sizes = reference_time_grid(12.0, NUM_STEPS).diff() + x = torch.randn(2, 5, HIDDEN) + for index in range(NUM_STEPS // BLOCK): + stub.step_index = None if index == 0 else index + reference.plan = reference_plan(step_sizes, index * BLOCK, BLOCK).float() + out = head(x) + ref = reference(x) + assert torch.allclose(out, ref, rtol=1e-4, atol=1e-4), f'block={index} maxdiff={(out - ref).abs().max().item()}' # float32 reduction order differs between tensordot and einsum + assert head.fused_index == index + + +def test_parallel_head_strength_blend(): + heads = make_heads() + weight, bias = heads.heads['proj_out'] + base = torch.nn.Linear(HIDDEN, VIDEO_OUT) + intervals = network_pdd.grid_intervals(diffusers.MiniMaxH3Scheduler(shift=12.0), NUM_STEPS, minimax_lora.PDD) + stub = types.SimpleNamespace(step_index=3) + x = torch.randn(3, HIDDEN) + full = network_pdd.ParallelHead(base, weight, bias, 1.0, lambda: stub, BLOCK, intervals)(x) + off = network_pdd.ParallelHead(base, weight, bias, 0.0, lambda: stub, BLOCK, intervals)(x) + half = network_pdd.ParallelHead(base, weight, bias, 0.5, lambda: stub, BLOCK, intervals)(x) + assert torch.allclose(off, base(x), atol=1e-6), 'strength 0 is not the base projection' + assert torch.allclose(half, 0.5 * (full + base(x)), atol=1e-5), 'strength 0.5 is not the midpoint' + + +def test_parallel_head_clamps_overflow(): + heads = make_heads() + weight, bias = heads.heads['proj_out'] + intervals = network_pdd.grid_intervals(diffusers.MiniMaxH3Scheduler(shift=12.0), NUM_STEPS, minimax_lora.PDD) + stub = types.SimpleNamespace(step_index=11) + head = network_pdd.ParallelHead(torch.nn.Linear(HIDDEN, VIDEO_OUT), weight, bias, 1.0, lambda: stub, BLOCK, intervals) + head(torch.randn(1, HIDDEN)) + assert head.fused_index == 7 and head.overflow_warned + + +def test_parallel_head_keeps_base_out_of_tree(): + heads = make_heads() + weight, bias = heads.heads['proj_out'] + intervals = network_pdd.grid_intervals(diffusers.MiniMaxH3Scheduler(shift=12.0), NUM_STEPS, minimax_lora.PDD) + head = network_pdd.ParallelHead(torch.nn.Linear(HIDDEN, VIDEO_OUT), weight, bias, 1.0, lambda: None, BLOCK, intervals) + assert set(dict(head.named_parameters())) == {'weight', 'bias'}, list(dict(head.named_parameters())) + assert len(list(head.children())) == 0 + assert next(head.parameters()).dtype == torch.float32 + + +# ============================================================ +# Tests: install, restore, reconcile, pin +# ============================================================ + +def test_install_and_restore_round_trip(): + pipe = StubPipe() + original_video, original_audio = pipe.transformer.proj_out, pipe.transformer.audio_proj_out + heads = make_heads() + assert network_pdd.install(pipe, make_net(heads), heads, minimax_lora.PDD, ['unet', 'transformer']) is True + assert isinstance(pipe.transformer.proj_out, network_pdd.ParallelHead) + assert isinstance(pipe.transformer.audio_proj_out, network_pdd.ParallelHead) + assert pipe.sdnext_pdd.steps == 9 and pipe.sdnext_pdd.component == 'transformer' + pipe.audio_scheduler.set_shift(3.0) + pipe.scheduler.set_timesteps(9) + pipe.audio_scheduler.set_timesteps(9) + out = pipe.transformer.audio_proj_out(torch.randn(2, HIDDEN)) + assert out.shape == (2, AUDIO_OUT) + assert network_pdd.restore(pipe) is True + assert pipe.transformer.proj_out is original_video and pipe.transformer.audio_proj_out is original_audio + assert not hasattr(pipe, 'sdnext_pdd') + assert network_pdd.restore(pipe) is False + + +def test_install_refuses_shape_mismatch(): + pipe = StubPipe() + original = pipe.transformer.proj_out + heads = make_heads() + heads.heads['audio_proj_out'] = (torch.randn(NUM_STEPS, AUDIO_OUT + 1, HIDDEN), None) + assert network_pdd.install(pipe, make_net(heads), heads, minimax_lora.PDD, ['transformer']) is False + assert pipe.transformer.proj_out is original, 'partial install left a head behind' + assert not hasattr(pipe, 'sdnext_pdd') + + +def test_install_needs_an_owner(): + pipe = StubPipe() + heads = make_heads() + heads.heads['norm_out.linear'] = (torch.randn(NUM_STEPS, VIDEO_OUT, HIDDEN), None) + assert network_pdd.install(pipe, make_net(heads), heads, minimax_lora.PDD, ['transformer']) is False + + +def test_reconcile_follows_loaded_set(): + pipe = StubPipe() + heads = make_heads() + net = make_net(heads) + saved = network_pdd.arch_spec + network_pdd.arch_spec = lambda: minimax_lora.PDD + try: + assert network_pdd.reconcile(pipe, [net], ['transformer']) is True + assert network_pdd.reconcile(pipe, [net], ['transformer']) is False, 'unchanged set reinstalled' + stronger = make_net(heads, strength=0.5) + assert network_pdd.reconcile(pipe, [stronger], ['transformer']) is True, 'strength change not applied' + assert pipe.sdnext_pdd.strength == 0.5 + assert network_pdd.reconcile(pipe, [types.SimpleNamespace(name='plain', te_multiplier=1.0, extras={})], ['transformer']) is True + assert not hasattr(pipe, 'sdnext_pdd') + assert network_pdd.reconcile(pipe, [], ['transformer']) is False + finally: + network_pdd.arch_spec = saved + + +def test_pin_overrides_steps_and_shift(): + pipe = StubPipe() + heads = make_heads() + assert network_pdd.install(pipe, make_net(heads), heads, minimax_lora.PDD, ['transformer']) is True + pipe.scheduler.set_shift(4.0) + pipe.audio_scheduler.set_shift(2.0) + p = types.SimpleNamespace(steps=30, task_args={'num_inference_steps': 30}) + assert network_pdd.pin(p, pipe) == 9 + assert p.steps == 9 and p.task_args['num_inference_steps'] == 9 + assert pipe.num_timesteps == 8 + assert pipe.scheduler.shift == 12.0 and pipe.audio_scheduler.shift == 3.0 + network_pdd.restore(pipe) + assert network_pdd.pin(p, pipe) is None + + +# ============================================================ +# Main +# ============================================================ + +def main(): + cat = category('detect') + for fn in (test_detect_grid, test_detect_rejects_bad_block, test_load_collects_heads, test_load_without_metadata_is_none, test_load_without_heads_is_none): + run_test(cat, fn) + cat = category('math') + for fn in (test_grid_intervals_match_reference, test_steps_for_counts_terminal_sigma, test_parallel_head_matches_reference_per_block, test_parallel_head_strength_blend, test_parallel_head_clamps_overflow, test_parallel_head_keeps_base_out_of_tree): + run_test(cat, fn) + cat = category('lifecycle') + for fn in (test_install_and_restore_round_trip, test_install_refuses_shape_mismatch, test_install_needs_an_owner, test_reconcile_follows_loaded_set, test_pin_overrides_steps_and_shift): + run_test(cat, fn) + failed = sum(r['failed'] for r in results.values()) + passed = sum(r['passed'] for r in results.values()) + log.info(f'PDD tests: passed={passed} failed={failed}') + return 1 if failed else 0 + + +if __name__ == '__main__': + sys.exit(main()) From a0f0097e52adaa8e6b0c49b418ea74c4d16c67a0 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 15 Sep 2026 03:52:04 +0100 Subject: [PATCH 244/270] refactor(lora): make the fused chunk slicer public The fidelity CLI slices fused saves the way try_load_lora does. --- modules/lora/native_adapter.py | 4 ++-- test/test-minimax-native-adapters.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index 01c130c95..42810913f 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -525,7 +525,7 @@ def slice_chunk_rows(t, chunk: ChunkSpec): return t.contiguous() -def _slice_lora_chunk(w, chunk: ChunkSpec): +def slice_lora_chunk(w, chunk: ChunkSpec): """Return a shallow copy of ``w`` with ``lora_up.weight`` sliced per ``chunk``; a dense bias follows a pure reorder.""" out = dict(w) out["lora_up.weight"] = slice_chunk_rows(w["lora_up.weight"], chunk) @@ -640,7 +640,7 @@ def try_load_lora(name, network_on_disk, lora_scale, *, skipped += 1 continue fused_out = w["lora_up.weight"].shape[0] - target_w = _slice_lora_chunk(w, chunk) + target_w = slice_lora_chunk(w, chunk) target_w = slice_dora_scale(target_w, chunk, fused_out) if target_w is None: log.warning(f'Network load: type=LoRA name="{name}" arch={arch_name} key={network_key} per-input DoRA on fused target skipped (unsupported)') diff --git a/test/test-minimax-native-adapters.py b/test/test-minimax-native-adapters.py index 8b375f239..81e293fa5 100644 --- a/test/test-minimax-native-adapters.py +++ b/test/test-minimax-native-adapters.py @@ -370,7 +370,7 @@ def native_mapping(state_dict, network_alpha=None): if 'lora_down.weight' not in w or 'lora_up.weight' not in w: continue for path, chunk in native_adapter.resolve_group_targets(M.resolve_targets, prefix, base): - target = native_adapter._slice_lora_chunk(w, chunk) if chunk is not None else w # pylint: disable=protected-access + target = native_adapter.slice_lora_chunk(w, chunk) if chunk is not None else w alpha = network_alpha if 'alpha' not in target else float(target['alpha']) scale = 1.0 if alpha is None else alpha / target['lora_down.weight'].shape[0] out[path] = (target['lora_down.weight'], target['lora_up.weight'], scale) From a800fe59cfd195000e40dd6ef2565431300827ed Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 15 Sep 2026 03:52:04 +0100 Subject: [PATCH 245/270] fix(lora): accept lowercase lora_a and lora_b factor names TaoLive adapters save the factors as lora_a and lora_b without the .weight suffix, which no suffix table knew, so the file bound nothing. --- modules/lora/native_adapter.py | 5 ++++- test/test-minimax-native-adapters.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/lora/native_adapter.py b/modules/lora/native_adapter.py index 42810913f..10582447b 100644 --- a/modules/lora/native_adapter.py +++ b/modules/lora/native_adapter.py @@ -94,6 +94,8 @@ SUFFIX_NORMALIZE = { "lora_B.weight": "lora_up.weight", # bare parameter names, saved by wrappers that hold the factors as nn.Parameter (alibaba-pai PDD files) "lora_down": "lora_down.weight", + "lora_a": "lora_down.weight", + "lora_b": "lora_up.weight", "lora_up": "lora_up.weight", } @@ -107,6 +109,7 @@ LORA_SUFFIXES = ( ".lora_down.weight", ".lora_up.weight", ".lora_mid.weight", ".lora_A.weight", ".lora_B.weight", ".lora_down", ".lora_up", + ".lora_a", ".lora_b", # lowercase peft factor names without .weight (TaoLive adapters) # diff_b: bias delta some saves pair with the weight LoRA, applied as ex_bias. # magnitude / lora_magnitude_vector: DoRA row norms (ai-toolkit / PEFT key # names); converted onto the dora_scale path by try_load_lora. @@ -158,7 +161,7 @@ FULL_SUFFIXES = ( # on accidental overlaps with other families. LORA_MARKERS = ( - ".lora_down", ".lora_up", # bare and .weight forms alike + ".lora_down", ".lora_up", ".lora_a", ".lora_b", # bare and .weight forms alike ".lora_A.weight", ".lora_B.weight", # PEFT named-adapter saves embed the slot name as ``.lora_A..weight``; # the trailing-dot forms catch every variant. diff --git a/test/test-minimax-native-adapters.py b/test/test-minimax-native-adapters.py index 81e293fa5..094946fab 100644 --- a/test/test-minimax-native-adapters.py +++ b/test/test-minimax-native-adapters.py @@ -390,6 +390,7 @@ def oracle_mapping(state_dict, network_alpha=None): """ if any(k.startswith(REFERENCE_PREFIXES) for k in state_dict): sd = {k.replace('base_model.model.dit.', 'diffusion_model.', 1) if k.startswith('base_model.model.dit.') else k: v for k, v in state_dict.items()} + sd = {k[:-len('.lora_a')] + ('.lora_A.weight' if k.endswith('.lora_a') else '.lora_B.weight') if k.endswith(('.lora_a', '.lora_b')) else k: v for k, v in sd.items()} # lowercase peft names the converter does not read converted = convert_diffusers(sd) out = {} for key, value in converted.items(): From 57328dc615d9de375848fa0657b7abf1f5138af6 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 15 Sep 2026 03:52:04 +0100 Subject: [PATCH 246/270] fix(lora): bind minimax extraction residuals Layer-wise extractions (FastH3) ship diff_b on every projection and diff on the norms; final_layer.norm had no rename onto norm_out.norm, so its residual went unmapped. --- pipelines/minimax/minimax_lora.py | 1 + test/test-minimax-native-adapters.py | 40 ++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index 171f47d42..d6fda7c13 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -49,6 +49,7 @@ STANDALONE_RENAMES = { "time_embedder.proj_in": "time_embedder.linear_1", "time_embedder.proj_out": "time_embedder.linear_2", "final_layer.adaln_proj.linear": "norm_out.linear", + "final_layer.norm": "norm_out.norm", "final_layer.video_out": "proj_out", "final_layer.audio_out": "audio_proj_out", } diff --git a/test/test-minimax-native-adapters.py b/test/test-minimax-native-adapters.py index 094946fab..1c03bb605 100644 --- a/test/test-minimax-native-adapters.py +++ b/test/test-minimax-native-adapters.py @@ -389,7 +389,8 @@ def oracle_mapping(state_dict, network_alpha=None): a per-key alpha or else the file-level one applied as ``alpha / rank``. """ if any(k.startswith(REFERENCE_PREFIXES) for k in state_dict): - sd = {k.replace('base_model.model.dit.', 'diffusion_model.', 1) if k.startswith('base_model.model.dit.') else k: v for k, v in state_dict.items()} + ignored = [k for k in state_dict if k.endswith(('.diff', '.diff_b'))] # weight and bias residuals of an extraction: not pairs, the converter rejects them + sd = {k.replace('base_model.model.dit.', 'diffusion_model.', 1) if k.startswith('base_model.model.dit.') else k: v for k, v in state_dict.items() if k not in ignored} sd = {k[:-len('.lora_a')] + ('.lora_A.weight' if k.endswith('.lora_a') else '.lora_B.weight') if k.endswith(('.lora_a', '.lora_b')) else k: v for k, v in sd.items()} # lowercase peft names the converter does not read converted = convert_diffusers(sd) out = {} @@ -397,7 +398,7 @@ def oracle_mapping(state_dict, network_alpha=None): if key.endswith('.lora_A.weight'): path = key[len('transformer.'):-len('.lora_A.weight')] out[path] = (value, converted[f'transformer.{path}.lora_B.weight'], 1.0) - return out, [] + return out, ignored has_alpha = any(k.endswith('.alpha') for k in state_dict) out, ignored = {}, [] for key, value in state_dict.items(): @@ -646,6 +647,30 @@ def test_adaln_deltas_project_onto_the_pruned_basis(): return True +def test_extraction_residuals_bind(): + """Bias residuals ride their pair as ex_bias, norm weight residuals bind through the full family, and the final norm resolves.""" + out_proj = REF.transformer_blocks[0].attn.to_out[0] + linear_1 = REF.time_embedder.linear_1 + sd = { + 'blocks.0.attn.out_proj.lora_A.weight': torch.randn(RANK, out_proj.in_features), + 'blocks.0.attn.out_proj.lora_B.weight': torch.randn(out_proj.out_features, RANK), + 'blocks.0.attn.out_proj.diff_b': torch.randn(out_proj.out_features), + 'time_embedder.proj_in.lora_A.weight': torch.randn(RANK, linear_1.in_features), + 'time_embedder.proj_in.lora_B.weight': torch.randn(linear_1.out_features, RANK), + 'time_embedder.proj_in.diff_b': torch.randn(linear_1.out_features), + 'blocks.0.norm1.diff': torch.randn(REF.transformer_blocks[0].norm1.weight.shape[0]), + 'final_layer.norm.diff': torch.randn(REF.norm_out.norm.weight.shape[0]), + } + net = load_native(sd, name='residuals') + assert net is not None, 'chain returned nothing' + mods = net.modules + assert torch.equal(mods['lora_transformer_transformer_blocks_0_attn_to_out_0'].ex_bias, sd['blocks.0.attn.out_proj.diff_b']) + assert torch.equal(mods['lora_transformer_time_embedder_linear_1'].ex_bias, sd['time_embedder.proj_in.diff_b']) + assert torch.equal(mods['lora_transformer_transformer_blocks_0_norm1'].weight, sd['blocks.0.norm1.diff']) + assert torch.equal(mods['lora_transformer_norm_out_norm'].weight, sd['final_layer.norm.diff']) + return True + + # ============================================================ # Tests - real files # ============================================================ @@ -660,10 +685,14 @@ def test_real_files_match_reference_loaders(): return True for path in REAL_FILES: name = os.path.basename(path) - with safetensors.safe_open(path, framework='pt') as f: - metadata = f.metadata() or {} + try: + with safetensors.safe_open(path, framework='pt') as f: + metadata = f.metadata() or {} + sd = safetensors.torch.load_file(path) + except safetensors.SafetensorError as e: # a malformed file the loader cannot open either + log.warning(f' {name}: unreadable, skipped: {e}') + continue network_alpha = M.file_alpha(_MockNetworkOnDisk(path, name, metadata)) - sd = safetensors.torch.load_file(path) native = native_mapping(sd, network_alpha) oracle, ignored = oracle_mapping(sd, network_alpha) probes = assert_same_factors(native, oracle, name) @@ -707,6 +736,7 @@ def run_tests(): test_metadata_alpha_yields_to_alpha_tensors, test_non_numeric_metadata_alpha_is_ignored, test_adaln_deltas_project_onto_the_pruned_basis, + test_extraction_residuals_bind, ]: run_test(CAT_LOADER, fn) From 5a2870f34568bdeca648fd965771bea3f2c90e7b Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 15 Sep 2026 03:52:04 +0100 Subject: [PATCH 247/270] feat(cli): stream quantized repos and measure the base error in lora-quant-fidelity QuantRepo builds the transformer as a meta skeleton through the sdnq conversion and streams each layer from the shards while it is analyzed, so a repo larger than host memory costs one module at a time. Remote-code classes resolve from the modeling file beside the checkpoint. LoRA groups go through the arch grouper with the file-level alpha and the adapt_weights hook, and fused saves are sliced onto their modules. --reference measures each module's quantization error against the unquantized repo and reports the delta against it; without one a uniform-rounding estimate stands in. The tool imports again: group_by_suffixes takes no bare prefixes and shared initializes before the lora modules. --- cli/lora-quant-fidelity.py | 282 +++++++++++++++++++++++++----- pipelines/minimax/minimax_lora.py | 20 ++- 2 files changed, 248 insertions(+), 54 deletions(-) diff --git a/cli/lora-quant-fidelity.py b/cli/lora-quant-fidelity.py index 8aba5675c..28036ed66 100644 --- a/cli/lora-quant-fidelity.py +++ b/cli/lora-quant-fidelity.py @@ -21,11 +21,15 @@ are measured as they would actually apply: Reported fidelity is per-module ``applied_rho`` (the measured figure for whichever path the loader would take), summarized as a median and an energy-weighted mean over the file's modules; ``requant_rho`` always carries -the if-merged figure. +the if-merged figure. ``snr`` sets the delta against the base weight's own +quantization error (uniform rounding from the grid step, or measured with +``--reference``), in the calibrated norm with ``--calib``: it does not depend +on the apply path and compares checkpoints of different widths. -Works offline against a pre-quantized SDNQ repo (stored tensors + config) or -a bf16 repo with simulated quantization settings, so a combination can be -assessed before committing to a quantized checkpoint. +Works offline against a pre-quantized SDNQ repo (stored tensors + config, +streamed one module at a time so the repo need not fit in memory) or a bf16 +repo with simulated quantization settings, so a combination can be assessed +before committing to a quantized checkpoint. Examples: python cli/lora-quant-fidelity.py --model vladmandic/Krea-2-Base-sdnq-hadamard-uint4 --arch krea2 --lora "~/models/Lora/Krea 2/krea2_turbo_distill_r256.safetensors" @@ -33,9 +37,13 @@ Examples: """ import os +import re import sys import json +import types import argparse +import importlib +import importlib.util sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) os.environ.setdefault('SD_INSTALL_QUIET', '1') @@ -54,6 +62,7 @@ def parse_cli(): parser.add_argument('--json', default=None, help='write full report to this json file') parser.add_argument('--host-rank', type=int, default=256, help='svd hosting cap for non-factorable modules on sub-8-bit formats, mirroring lora_sdnq_host_rank; 0 scores the requantize path instead') parser.add_argument('--calib', default=None, help='activation statistics file (models/calibration/*.safetensors): hosting truncation is then channel-weighted as with lora_sdnq_host_calib, and hosted rho is measured in the activation-weighted norm (the output-error proxy)') + parser.add_argument('--reference', default=None, help='unquantized repo of the same model: the base quantization error each delta competes with is then measured per module instead of estimated from the grid step') parser.add_argument('--fail-under', type=float, default=None, help='exit 2 when median applied fidelity of any lora is below this') return parser.parse_args() @@ -71,6 +80,7 @@ import torch # pylint: disable=wrong-import-position from safetensors import safe_open # pylint: disable=wrong-import-position from rich import print as rprint # pylint: disable=wrong-import-position +from modules import shared # pylint: disable=wrong-import-position,unused-import # shared must initialize before sd_models, which imports back into it from modules.lora import native_adapter, network, network_lora, network_lokr, network_hada, network_oft, network_full, network_ia3, network_glora, network_norm, lora_sdnq # pylint: disable=wrong-import-position from modules.lora.lora_load import NATIVE_DISPATCH # pylint: disable=wrong-import-position from sdnq.quantizer import sdnq_quantize_layer_weight # pylint: disable=wrong-import-position @@ -82,6 +92,7 @@ MODEL_ROOTS = [ os.path.expanduser('~/database/models/Diffusers'), ] device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') +ARCH_PACKAGES = {'zimage': 'z_image', 'f2': 'flux', 'minimaxh3': 'minimax'} # arches whose pipelines package is not spelled like the arch # every adapter family the native loader can build, with the module class that owns its # apply-time math. deltas are taken from the production calc_updown so the tool cannot @@ -104,6 +115,8 @@ class StubOnDisk: self.name = os.path.splitext(os.path.basename(path))[0] self.shorthash = '' self.sd_version = 'unknown' + with safe_open(path, framework='pt', device='cpu') as f: + self.metadata = f.metadata() or {} def resolve_model_dir(spec): @@ -129,7 +142,6 @@ def resolve_arch(name): path = NATIVE_DISPATCH.get({'flux2': 'f2', 'ernie': 'ernieimage'}.get(name, name)) if path is None: raise SystemExit(f'unknown arch {name}; choices: {sorted(NATIVE_DISPATCH)} or generic') - import importlib return importlib.import_module(path) @@ -138,21 +150,27 @@ def map_lora_modules(lora_path, arch_mod): Grouping mirrors the native loader: a family is only considered when its marker is present, and groups resolve to model paths through the arch's own - resolver. Fused-split chunks are counted but not analyzed (their apply-time - math is arch-owned). + resolver. A fused save is sliced onto its targets for the lora family; the + other families' chunks are counted but not analyzed (their apply-time math + is arch-owned). """ with safe_open(lora_path, framework='pt', device='cpu') as f: state_dict = {k: f.get_tensor(k) for k in f.keys()} + metadata = f.metadata() or {} prefixes = getattr(arch_mod, 'KNOWN_PREFIXES', native_adapter.KNOWN_PREFIXES_DEFAULT) - bare = getattr(arch_mod, 'BARE_DIFFUSERS_PREFIXES', ()) resolve = getattr(arch_mod, 'resolve_targets', None) or (lambda prefix, base: [(base, None)]) + grouper = getattr(arch_mod, 'group_by_suffixes', None) or native_adapter.group_by_suffixes # an arch that rewrites keys before parsing groups them itself + file_alpha = getattr(arch_mod, 'file_alpha', None) mapped, census, chunked = {}, {}, 0 for fam, _cls, suffixes, markers in FAMILY_SPECS: if not native_adapter.has_marker(state_dict, markers): continue - groups = native_adapter.group_by_suffixes(state_dict, suffixes, prefixes=prefixes, bare_diffusers_prefixes=bare) + groups = grouper(state_dict, suffixes, prefixes=prefixes) if fam == 'lora': groups = {k: w for k, w in groups.items() if 'lora_down.weight' in w and 'lora_up.weight' in w} + alpha = file_alpha(types.SimpleNamespace(filename=lora_path, metadata=metadata)) if file_alpha is not None else None + if alpha is not None and not any('alpha' in w for w in groups.values()): # a file-level alpha applies only to files without alpha tensors, as in try_load_lora + groups = {k: {**w, 'alpha': torch.tensor(float(alpha))} for k, w in groups.items()} else: groups = {k: w for k, w in groups.items() if native_adapter.has_marker({f'x.{s}': None for s in w}, markers)} if not groups: @@ -160,10 +178,18 @@ def map_lora_modules(lora_path, arch_mod): census[fam] = len(groups) for (prefix, base), w in groups.items(): for path, chunk in native_adapter.resolve_group_targets(resolve, prefix, base): - if chunk is not None: - chunked += 1 - continue - mapped.setdefault(path, []).append((fam, w)) # a module can carry several families; the loader applies each + target = w + if chunk is not None: # a fused save spans several modules; only the lora family slices its up factor + target = None + if fam == 'lora': + fused_out = w['lora_up.weight'].shape[0] + target = native_adapter.slice_lora_chunk(w, chunk) + target = native_adapter.slice_dora_scale(target, chunk, fused_out) + target = native_adapter.slice_bias_delta(target, chunk, fused_out) if target is not None else None + if target is None: + chunked += 1 + continue + mapped.setdefault(path, []).append((fam, target)) # a module can carry several families; the loader applies each return mapped, census, chunked @@ -192,17 +218,14 @@ def build_module(fam, path, w, net, sd_module): return cls(net, weights) -def resolve_transformer_cls(arch, class_name): - """Prefer an sdnext-owned transformer class over the upstream diffusers one. - - Arches like krea2 keep checkpoint-style module names in their own class; - the diffusers class of the same name expects diffusers-style keys and - cannot load these state dicts. - """ - if arch and class_name: +def resolve_transformer_cls(arch, class_name, model_dir=None): + """Resolve the transformer class: an sdnext-owned spec class, then diffusers, then a modeling file beside the weights. + Arches like krea2 keep checkpoint-style names in their own class; pruned MiniMax repos ship theirs as remote code.""" + if not class_name: + return None + if arch: try: - import importlib - pkg = importlib.import_module(f'pipelines.{ {"zimage": "z_image", "f2": "flux"}.get(arch, arch) }') + pkg = importlib.import_module(f'pipelines.{ARCH_PACKAGES.get(arch, arch)}') for attr in dir(pkg): if attr.endswith('_SPEC'): cls = getattr(getattr(pkg, attr), 'cls', None) @@ -210,20 +233,107 @@ def resolve_transformer_cls(arch, class_name): return cls except Exception: pass + import diffusers + cls = getattr(diffusers, class_name, None) + if cls is not None or not model_dir: + return cls + for fname in sorted(os.listdir(model_dir)): + path = os.path.join(model_dir, fname) + if not fname.endswith('.py'): + continue + with open(path, encoding='utf-8') as f: + if re.search(rf'^class {re.escape(class_name)}\b', f.read(), re.MULTILINE) is None: + continue + spec = importlib.util.spec_from_file_location(fname[:-3], path) + module = importlib.util.module_from_spec(spec) + sys.modules[spec.name] = module + spec.loader.exec_module(module) + return getattr(module, class_name) return None -def load_quantized_model(model_dir, arch=None, class_name=None): - from sdnq.loader import load_sdnq_model - model = load_sdnq_model(model_dir, model_cls=resolve_transformer_cls(arch, class_name), dtype=torch.bfloat16, device='cpu') - layers = {} - for name, module in model.named_modules(): - if getattr(module, 'sdnq_dequantizer', None) is not None: - layers[name] = module - elif module.__class__.__name__ == 'Linear' and getattr(module, 'weight', None) is not None: - layers[name] = module - del model # layer modules own their tensors; the dict keeps them alive - return layers +class QuantRepo: + """Per-module access to a pre-quantized SDNQ repo: a meta skeleton built through the sdnq conversion, each layer's + tensors streamed from the shards while it is analyzed; tensors outside the block stacks stay resident for the arch hooks.""" + + LAYER_KEYS = ('weight', 'bias', 'scale', 'zero_point', 'svd_up', 'svd_down') + + def __init__(self, model_dir, model_config, arch=None): + from accelerate import init_empty_weights + from sdnq import SDNQConfig + from sdnq.quantizer import sdnq_post_load_quant + from sdnq.utils import get_quant_args_from_config + cls = resolve_transformer_cls(arch, model_config.get('_class_name'), model_dir) + if cls is None: + raise SystemExit(f'cannot resolve transformer class {model_config.get("_class_name")} for "{model_dir}"') + quant_config = SDNQConfig.from_dict(model_config['quantization_config']) + with init_empty_weights(): + config = cls.load_config(model_dir) + if hasattr(config, 'pop'): + config.pop('quantization_config', None) + model = cls.from_config(config) + model = sdnq_post_load_quant(model, torch_dtype=torch.bfloat16, pre_quantized=True, **get_quant_args_from_config(quant_config)) + self.model = model + self.model_dir = model_dir + self.handles = {} + index = os.path.join(model_dir, 'diffusion_pytorch_model.safetensors.index.json') + if os.path.isfile(index): + with open(index, encoding='utf-8') as f: + weight_map = json.load(f)['weight_map'] + else: + weight_map = {} + for fname in sorted(os.listdir(model_dir)): + if fname.endswith('.safetensors'): + with safe_open(os.path.join(model_dir, fname), framework='pt', device='cpu') as f: + weight_map.update(dict.fromkeys(f.keys(), fname)) + mapping = getattr(model, '_checkpoint_conversion_mapping', None) or {} + self.shards = {} # model key -> (stored key, shard) + for stored, shard in weight_map.items(): + key = stored + for pattern, replacement in mapping.items(): + key = re.sub(pattern, replacement, key) + self.shards[key] = (stored, shard) + self.layers = {} + for name, module in model.named_modules(): + if getattr(module, 'sdnq_dequantizer', None) is not None or (module.__class__.__name__ == 'Linear' and getattr(module, 'weight', None) is not None): + self.layers[name] = module + stacks = tuple(f'{name}.' for name, module in model.named_modules() if isinstance(module, torch.nn.ModuleList)) + resident = {key: self.get(key) for key in self.shards if not key.startswith(stacks)} + model.load_state_dict(resident, strict=False, assign=True) + + def get(self, key): + entry = self.shards.get(key) + if entry is None: + return None + stored, shard = entry + f = self.handles.get(shard) + if f is None: + f = safe_open(os.path.join(self.model_dir, shard), framework='pt', device='cpu') + self.handles[shard] = f + return f.get_tensor(stored) + + def materialize(self, name): + """Load one layer's stored tensors onto the analysis device and return the layer.""" + from sdnq.quant_utils import prepare_weight_for_matmul, prepare_svd_for_matmul + layer = self.layers[name] + state = {} + for local in self.LAYER_KEYS: + t = self.get(f'{name}.{local}') + if t is not None: + state[local] = t.to(device) + layer.load_state_dict(state, strict=False, assign=True) + deq = getattr(layer, 'sdnq_dequantizer', None) + if deq is not None: # the loader's post-processing, so the dequantizer sees the layout it expects + if deq.use_quantized_matmul and not deq.re_quantize_for_matmul: + layer.weight.data = prepare_weight_for_matmul(layer.weight, matmul_dtype=deq.quantized_matmul_dtype) + if getattr(layer, 'svd_up', None) is not None: + layer.svd_up.data, layer.svd_down.data = prepare_svd_for_matmul(layer.svd_up, layer.svd_down, deq.use_quantized_matmul) + return layer + + def release(self, name): + layer = self.layers[name] + state = {local: torch.empty_like(t, device='meta') for local, t in layer.state_dict().items() if t.device.type != 'meta'} + layer.load_state_dict(state, strict=False, assign=True) class Bf16Repo: @@ -252,7 +362,28 @@ class Bf16Repo: return f.get_tensor(key) -def analyze_module(W_dq, deq_params, mods, calib_rms=None, step_live=None): +def quant_noise_energy(step, shape, hadamard_group, rms): + """Expected energy of the base weight's quantization error, ``step^2/12`` per element under uniform rounding; + with ``rms`` per input channel it is the output-space energy per token.""" + _out, n_in = shape + s = step.to(device, torch.float32) + if s.ndim == 3: + s = s.squeeze(-1) + if s.ndim == 1: + s = s[:, None] + groups = s.shape[1] + glen = n_in // groups + if rms is None: + power = torch.full((groups,), float(glen), device=s.device) + else: + p = rms.to(s.device, torch.float32).square() + if hadamard_group and n_in % hadamard_group == 0: + p = p.view(-1, hadamard_group).mean(1, keepdim=True).expand(-1, hadamard_group).reshape(-1) + power = p.view(groups, glen).sum(1) + return float(((s.square() / 12) @ power).sum()) + + +def analyze_module(W_dq, deq_params, mods, calib_rms=None, step_live=None, noise=None): """Return fidelity metrics for one quantized module and the adapters targeting it. Deltas come from each module's production calc_updown and sum the way the @@ -263,6 +394,14 @@ def analyze_module(W_dq, deq_params, mods, calib_rms=None, step_live=None): With ``step_live`` (the layer's own pre-add scale), the production routing rule applies: a delta fat against the grid whose truncation capture is low reports the requantize path, the way the loader would route it. + + ``snr`` is the delta's energy over the energy of the base weight's own + quantization error, in the calibrated norm when ``calib_rms`` is given: + ``noise`` carries that error's measured ``(plain, weighted)`` energies + against an unquantized reference, else the uniform-rounding estimate from + ``step_live`` stands in. It is independent of the apply path and says + whether what the adapter adds stands above the error the checkpoint + already carries. """ D = None for mod in mods: @@ -274,7 +413,23 @@ def analyze_module(W_dq, deq_params, mods, calib_rms=None, step_live=None): if float(nD) == 0.0: # an all-zero delta (some full-rank extractions carry empty .diff): retention is undefined, not erased return dict(rank=getattr(mods[0], 'dim', None), rms_delta=0.0, rms_weight=float(W_dq.pow(2).mean().sqrt()), step_ratio=None, crossers=None, requant_rho=None, requant_resid=None, - factor_eligible=factor_eligible, hosted=False, applied_rho=None, delta_energy=0.0) + factor_eligible=factor_eligible, hosted=False, applied_rho=None, delta_energy=0.0, + snr=None, snr_plain=None, noise_rms=None, noise_source=None) + snr, snr_plain, noise_rms, noise_source = None, None, None, None + if (noise is not None or step_live is not None) and not deq_params.get('use_codebook', False): + rms = calib_rms.to(device, torch.float32) if (calib_rms is not None and calib_rms.shape[-1] == D.shape[-1]) else None + if noise is not None: + plain, weighted = noise + noise_source = 'measured' + else: + hadamard = deq_params['hadamard_group_size'] if deq_params['use_hadamard'] else 0 + plain = quant_noise_energy(step_live, D.shape, hadamard, None) + weighted = quant_noise_energy(step_live, D.shape, hadamard, rms) if rms is not None else plain + noise_source = 'uniform' + delta_w = float((D * rms).square().sum()) if rms is not None else float(nD.square()) + noise_rms = (plain / D.numel()) ** 0.5 + snr_plain = float(nD.square()) / plain if plain > 0 else None + snr = delta_w / weighted if weighted > 0 else None step_ratio, crossers = None, None if control: W2 = (W_dq + D).to(torch.bfloat16).float() @@ -339,7 +494,7 @@ def analyze_module(W_dq, deq_params, mods, calib_rms=None, step_live=None): return dict(rank=getattr(mods[0], 'dim', None), rms_delta=float(D.pow(2).mean().sqrt()), rms_weight=float(W_dq.pow(2).mean().sqrt()), step_ratio=step_ratio, crossers=crossers, requant_rho=rho, requant_resid=resid, factor_eligible=factor_eligible, hosted=hosted, applied_rho=applied_rho, - delta_energy=float(nD.square())) + delta_energy=float(nD.square()), snr=snr, snr_plain=snr_plain, noise_rms=noise_rms, noise_source=noise_source) def main(): @@ -350,12 +505,17 @@ def main(): model_config = json.load(f) pre_quantized = model_config.get('quantization_config') is not None - quant_layers, bf16_repo = {}, None - quant_stamps, bf16_stamps = {}, {} + repo, bf16_repo, reference = None, None, None + quant_stamps, bf16_stamps, ref_stamps = {}, {}, {} + adapt = getattr(arch_mod, 'adapt_weights', None) # an arch refits deltas onto a live layout that differs from the trained one if pre_quantized: rprint(f'model: "{model_dir}" pre-quantized={pre_quantized}') - quant_layers = load_quantized_model(model_dir, arch=args.arch, class_name=model_config.get('_class_name')) - quant_stamps = stamp_index(quant_layers) + repo = QuantRepo(model_dir, model_config, arch=args.arch) + quant_stamps = stamp_index(repo.layers) + if args.reference: + reference = Bf16Repo(resolve_model_dir(args.reference)) + ref_stamps = stamp_index(k[:-len('.weight')] for k in reference.weight_map if k.endswith('.weight')) + rprint(f'reference: "{reference.model_dir}" tensors={len(reference.weight_map)}') else: bf16_repo = Bf16Repo(model_dir) bf16_stamps = stamp_index(k[:-len('.weight')] for k in bf16_repo.weight_map if k.endswith('.weight')) @@ -370,6 +530,14 @@ def main(): calib_stats = {k: f.get_tensor(k) for k in f.keys()} rprint(f'calib: "{args.calib}" layers={len(calib_stats)}') + noise_energies = {} # per module, shared by every lora: the base error does not depend on the adapter + def measure_noise(lname, err): + rms = calib_stats.get(lname) + plain = float(err.square().sum()) + weighted = float((err * rms.to(device, torch.float32)).square().sum()) if rms is not None and rms.shape[-1] == err.shape[-1] else plain + noise_energies[lname] = (plain, weighted) + return noise_energies[lname] + report = {'model': model_dir, 'pre_quantized': pre_quantized, 'loras': []} worst_effective = 1.0 def write_report(): @@ -389,10 +557,11 @@ def main(): for path in keys: entries = mapped[path] lname = path + noise = None if pre_quantized: - if path not in quant_layers: + if path not in repo.layers: lname = quant_stamps.get(path.replace('.', '_'), '') - layer = quant_layers.get(lname) + layer = repo.layers.get(lname) if layer is None: unmatched.append(path) continue @@ -403,12 +572,23 @@ def main(): if len(deq.original_shape) != 2: non_matrix.append(path) continue + layer = repo.materialize(lname) W_dq = deq(layer.weight, layer.scale, zero_point=layer.zero_point, svd_up=layer.svd_up, svd_down=layer.svd_down, skip_quantized_matmul=deq.use_quantized_matmul, dtype=torch.float32, skip_compile=True).to(device) params = dict(weights_dtype=deq.weights_dtype, group_size=deq.group_size, hadamard_group_size=deq.hadamard_group_size, - use_hadamard=deq.use_hadamard, use_svd=layer.svd_up is not None, svd_rank=deq.svd_rank, svd_steps=deq.svd_steps) + use_hadamard=deq.use_hadamard, use_svd=layer.svd_up is not None, svd_rank=deq.svd_rank, svd_steps=deq.svd_steps, + use_codebook=getattr(deq, 'use_codebook', False)) step_live = layer.scale.detach().to(device) + repo.release(lname) sd_module = layer + if reference is not None: + noise = noise_energies.get(lname) + if noise is None: + W_ref = reference.get(f'{lname}.weight') + if W_ref is None: + W_ref = reference.get(f'{ref_stamps.get(lname.replace(".", "_"), "")}.weight') + if W_ref is not None and tuple(W_ref.shape) == tuple(W_dq.shape): + noise = measure_noise(lname, W_dq - W_ref.to(device, torch.float32)) else: W = bf16_repo.get(f'{path}.weight') if W is None: @@ -430,10 +610,13 @@ def main(): W_dq = deq0(data0['weight'], data0['scale'], zero_point=data0['zero_point'], svd_up=None, svd_down=None, dtype=torch.float32, skip_compile=True) params = dict(weights_dtype=args.dtype, group_size=deq0.group_size, hadamard_group_size=deq0.hadamard_group_size, use_hadamard=deq0.use_hadamard) step_live = data0['scale'].detach() + noise = noise_energies.get(path) or measure_noise(path, W_dq - W.to(device, torch.float32)) # the simulated grid's own error, measured sd_module = make_stub(W.shape) try: + if adapt is not None and pre_quantized: + entries = [(fam, (adapt(sd_module, path, w, transformers=[repo.model]) or w) if fam == 'lora' else w) for fam, w in entries] mods = [build_module(fam, path, w, net, sd_module) for fam, w in entries] - row = analyze_module(W_dq, params, mods, calib_rms=calib_stats.get(lname), step_live=step_live) + row = analyze_module(W_dq, params, mods, calib_rms=calib_stats.get(lname), step_live=step_live, noise=noise) except Exception as e: # a family the tool cannot rebuild must not read as a clean module failed.append(f'{path}: {type(e).__name__}: {e}') del W_dq @@ -452,16 +635,23 @@ def main(): fb_median = sorted(fb)[len(fb) // 2] if fb else None if median_applied is not None: worst_effective = min(worst_effective, median_applied) + snr_rows = [r for r in scored if r['snr'] is not None] + snr_median = sorted(r['snr'] for r in snr_rows)[len(snr_rows) // 2] if snr_rows else None + snr_energy = sum(r['delta_energy'] for r in snr_rows) + snr_weighted = (sum(r['snr'] * r['delta_energy'] for r in snr_rows) / snr_energy) if snr_energy > 0 else None report['loras'].append({'file': lora_path, 'families': census, 'targets': len(mapped), 'unquantized': unquantized, 'unmatched': unmatched, 'non_matrix': non_matrix, 'chunked': chunked, 'failed': failed, 'exact_modules': n_exact, 'fallback_modules': len(fb), 'fallback_median_rho': fb_median, - 'median_applied_rho': median_applied, 'weighted_applied_rho': weighted, 'modules': rows}) + 'median_applied_rho': median_applied, 'weighted_applied_rho': weighted, + 'snr_median': snr_median, 'snr_weighted': snr_weighted, 'modules': rows}) write_report() # rewrite per file so a crash keeps completed work rprint(f'\nlora: "{os.path.basename(lora_path)}" families={census or "none"} targets={len(mapped)} analyzed={len(rows)} scored={len(scored)} exact={n_exact} fallback={len(fb)} unquantized={len(unquantized)} unmatched={len(unmatched)} non_matrix={len(non_matrix)} chunked={chunked} failed={len(failed)}') if median_applied is None: rprint(' no analyzable modules: nothing measured') else: rprint(f' applied fidelity: median={median_applied:.3f} energy-weighted={weighted:.3f}' + (f' (fallback modules land at median rho={fb_median:.3f})' if fb_median is not None else '')) + if snr_median is not None: + rprint(f' delta over base quantization error: snr median={snr_median:.3g} energy-weighted={snr_weighted:.3g} ({snr_rows[0]["noise_source"]} noise, {"calibrated" if calib_stats else "weight-space"} norm)') for f in failed[:3]: rprint(f' [red]could not rebuild[/red]: {f}') if fb: diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index d6fda7c13..e74a1d740 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -224,12 +224,13 @@ _BIND_KWARGS = dict( ) -def pruned_basis(sd_module, rank, width): - """The AdaLN curve basis of the loaded transformer that owns ``sd_module``, or None on an unpruned model.""" - from modules import shared - pipe = getattr(shared.sd_model, "pipe", shared.sd_model) - for component in ("transformer", "transformer_ref"): - transformer = getattr(pipe, component, None) +def pruned_basis(sd_module, rank, width, transformers=None): + """The AdaLN curve basis of the transformer owning ``sd_module``, or None on an unpruned model.""" + if transformers is None: + from modules import shared + pipe = getattr(shared.sd_model, "pipe", shared.sd_model) + transformers = [getattr(pipe, component, None) for component in ("transformer", "transformer_ref")] + for transformer in transformers: basis = getattr(getattr(transformer, "time_embedder", None), "basis", None) if basis is None or tuple(basis.shape) != (rank, width): continue @@ -238,14 +239,14 @@ def pruned_basis(sd_module, rank, width): return None -def project_pruned_adaln(sd_module, network_key, w): +def project_pruned_adaln(sd_module, network_key, w, transformers=None): """Refit an AdaLN delta trained on the released time embedding onto the pruned curve basis: the pruned class stores ``W @ P``, so ``up @ down`` lands exactly as ``up @ (down @ P)``.""" down = w.get("lora_down.weight") shape = native_adapter.module_shape(sd_module) if down is None or down.ndim != 2 or shape is None or len(shape) != 2 or down.shape[1] == shape[1]: return None - basis = pruned_basis(sd_module, shape[1], down.shape[1]) + basis = pruned_basis(sd_module, shape[1], down.shape[1], transformers) if basis is None: return None projected = dict(w) @@ -254,6 +255,9 @@ def project_pruned_adaln(sd_module, network_key, w): return projected +adapt_weights = project_pruned_adaln # offline tools refit deltas through the same hook the loader binds + + def try_load_lora(name, network_on_disk, lora_scale): return native_adapter.try_load_lora(name, network_on_disk, lora_scale, network_alpha=file_alpha(network_on_disk), adapt_weights=project_pruned_adaln, **_BIND_KWARGS) From 28c20f6aa054dd791e5f05f952012d72fcfb7a86 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 15 Sep 2026 08:17:27 +0200 Subject: [PATCH 248/270] refactor theme loading Signed-off-by: Vladimir Mandic --- extensions-builtin/sdnext-modernui | 2 +- modules/extensions.py | 10 ++-- modules/theme.py | 18 ++++---- modules/ui_javascript.py | 43 ++++++++++++------ ui/css/base.css | 4 +- ui/css/black-gray.css | 2 +- ui/css/black-orange.css | 2 +- ui/css/black-teal-reimagined.css | 2 +- ui/css/black-teal.css | 2 +- .../ibmplexmono-nerdfont-medium.ttf | Bin ui/css/light-teal.css | 2 +- .../notosans-nerdfont-regular.ttf | Bin ui/{fonts => css}/roboto.ttf | Bin ui/css/sdnext.css | 4 +- ui/css/simple-dark.css | 2 +- ui/css/simple-light.css | 2 +- ui/css/ubuntu-nerdfont.ttf | Bin 0 -> 2535756 bytes ui/dist/sdnext.mjs | 2 +- ui/dist/sdnext.mjs.map | 4 +- ui/startup.ts | 2 +- 20 files changed, 61 insertions(+), 42 deletions(-) rename ui/{fonts => css}/ibmplexmono-nerdfont-medium.ttf (100%) rename ui/{fonts => css}/notosans-nerdfont-regular.ttf (100%) rename ui/{fonts => css}/roboto.ttf (100%) create mode 100644 ui/css/ubuntu-nerdfont.ttf diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 92dea6028..5472d5dd7 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 92dea6028623b076521eb6f7949ba9bcb13ab23f +Subproject commit 5472d5dd7b1f0593d0bf2b620f42956a64e1f178 diff --git a/modules/extensions.py b/modules/extensions.py index ab59e307f..420adfc68 100644 --- a/modules/extensions.py +++ b/modules/extensions.py @@ -77,7 +77,7 @@ def temp_disable_extensions(): theme_type = shared.cmd_opts.theme if shared.cmd_opts.theme is not None else shared.opts.theme_type theme_name = f'{theme_type.lower()}/{shared.opts.gradio_theme}' if '/' not in theme_name: # set default themes per type - if theme_name == 'standard' or theme_name == 'default': + if theme_name == 'standard': theme_name = 'standard/black-teal' if theme_name == 'modern': theme_name = 'modern/Default' @@ -86,19 +86,21 @@ def temp_disable_extensions(): if theme_name == 'huggingface': theme_name = 'huggingface/blaaa' - if theme_name.lower().startswith('standard') or theme_name.lower().startswith('default'): + if theme_name.lower().startswith('standard'): shared.opts.data['theme_type'] = 'Standard' shared.opts.data['gradio_theme'] = theme_name[9:] + disabled.append('sdnext-modernui') elif theme_name.lower().startswith('modern'): shared.opts.data['theme_type'] = 'Modern' shared.opts.data['gradio_theme'] = theme_name[7:] elif theme_name.lower().startswith('huggingface') or theme_name.lower().startswith('gradio') or theme_name.lower().startswith('none'): shared.opts.data['theme_type'] = 'None' shared.opts.data['gradio_theme'] = theme_name + disabled.append('sdnext-modernui') else: log.error(f'UI theme invalid: theme="{theme_name}" available={["standard/*", "modern/*", "none/*"]} fallback="standard/black-teal"') - shared.opts.data['theme_type'] = 'Standard' - shared.opts.data['gradio_theme'] = 'black-teal' + shared.opts.data['theme_type'] = 'Modern' + shared.opts.data['gradio_theme'] = 'Default' if shared.cmd_opts.safe: for ext in disable_safe: diff --git a/modules/theme.py b/modules/theme.py index 34ff51961..381fb9cde 100644 --- a/modules/theme.py +++ b/modules/theme.py @@ -116,19 +116,18 @@ def reload_gradio_theme(): opts.gradio_theme = theme_name log.info(f'UI locale: name="{opts.ui_locale}"') - if theme_name.lower() in ['lobe', 'cozy-nest']: - log.info(f'UI theme extension: name="{theme_name}"') - return None - elif opts.theme_type == 'Standard': + if opts.theme_type == 'Standard': gradio_theme = gr.themes.Base(**default_font_params) - log.info(f'UI theme: type={opts.theme_type} name="{theme_name}" available={len(available_themes)}') + log.debug(f'UI theme: type={opts.theme_type} available={len(available_themes)}') log.warning('UI theme: please switch to ModernUI for best experience') return 'sdnext.css' - elif opts.theme_type == 'Modern': + + if opts.theme_type == 'Modern': gradio_theme = gr.themes.Base(**default_font_params) - log.info(f'UI theme: type={opts.theme_type} name="{theme_name}" available={len(available_themes)}') + log.debug(f'UI theme: type={opts.theme_type} available={len(available_themes)}') return 'base.css' - elif opts.theme_type == 'None': + + if opts.theme_type == 'None': if theme_name.startswith('gradio/'): log.warning('UI theme: using Gradio default theme which is not optimized for SD.Next') if theme_name == "gradio/default": @@ -153,8 +152,9 @@ def reload_gradio_theme(): except Exception as e: log.error(f"UI theme: download error accessing HuggingFace {e}") gradio_theme = gr.themes.Default(**default_font_params) - log.info(f'UI theme: type={opts.theme_type} name="{theme_name}" style={opts.theme_style}') + log.debug(f'UI theme: type={opts.theme_type} style={opts.theme_style}') log.warning('UI theme: please switch to ModernUI for best experience') return 'base.css' + log.error(f'UI theme: type={opts.theme_type} unknown') return None diff --git a/modules/ui_javascript.py b/modules/ui_javascript.py index af638c5ae..4312b116a 100644 --- a/modules/ui_javascript.py +++ b/modules/ui_javascript.py @@ -65,7 +65,7 @@ def html_login(): def html_css(css: list[str]): def stylesheet(fn): - return f'' + return f'\n' head = '' for cssfile in css: @@ -79,24 +79,41 @@ def html_css(css: list[str]): head += stylesheet(cssfile) usercss = os.path.join(data_path, "user.css") if os.path.exists(os.path.join(data_path, "user.css")) else None - if shared.opts.theme_type == 'Standard': - # themecss = os.path.join(script_path, 'javascript', f"{shared.opts.gradio_theme}.css") - themecss = os.path.join(script_path, 'ui', 'css', f"{shared.opts.gradio_theme}.css") - if os.path.exists(themecss): - head += stylesheet(themecss) - log.debug(f'UI theme: css="{themecss}" base="{css}" user="{usercss}"') + + if shared.cmd_opts.theme is not None: + if shared.cmd_opts.theme.lower().startswith('standard'): + shared.opts.theme_type = 'Standard' + elif shared.cmd_opts.theme.lower().startswith('modern'): + shared.opts.theme_type = 'Modern' else: - log.error(f'UI theme: css="{themecss}" path="{os.getcwd()}" not found') + shared.opts.theme_type = 'None' + + if shared.opts.theme_type == 'Standard': + if shared.opts.gradio_theme == 'Default': + shared.opts.gradio_theme = 'black-teal' + themecss = os.path.join(script_path, 'ui', 'css', f"{shared.opts.gradio_theme}.css") + if not os.path.exists(themecss): + log.error(f'UI theme: type={shared.opts.theme_type} css="{themecss}" path="{os.getcwd()}" not found') + shared.opts.gradio_theme = 'black-teal' + themecss = os.path.join(script_path, 'ui', 'css', f"{shared.opts.gradio_theme}.css") + head += stylesheet(themecss) + log.info(f'UI theme: type={shared.opts.theme_type} css="{themecss}" base="{css}" user="{usercss}"') + elif shared.opts.theme_type == 'Modern': + if shared.opts.gradio_theme == 'black-teal': + shared.opts.gradio_theme = 'Default' theme_folder = next((e.path for e in extensions.extensions if e.name == 'sdnext-modernui'), None) themecss = os.path.join(theme_folder or '', 'themes', f'{shared.opts.gradio_theme}.css') - if os.path.exists(themecss): - head += stylesheet(themecss) - log.debug(f'UI theme: css="{themecss}" base="{css}" user="{usercss}"') - else: - log.error(f'UI theme: css="{themecss}" not found') + if not os.path.exists(themecss): + log.error(f'UI theme: type={shared.opts.theme_type} css="{themecss}" not found') + shared.opts.gradio_theme = 'Default' + themecss = os.path.join(theme_folder or '', 'themes', f'{shared.opts.gradio_theme}.css') + head += stylesheet(themecss) + log.info(f'UI theme: type={shared.opts.theme_type} css="{themecss}" base="{css}" user="{usercss}"') + if usercss is not None: head += stylesheet(usercss) + return head diff --git a/ui/css/base.css b/ui/css/base.css index c4e225133..213d297b3 100644 --- a/ui/css/base.css +++ b/ui/css/base.css @@ -1,5 +1,5 @@ -@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf') } -@font-face { font-family: 'Ubuntu'; font-display: swap; font-style: normal; font-weight: 100; src: local('Ubuntu'), url('fonts/ubuntu-nerdfont.ttf') } +@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('notosans-nerdfont-regular.ttf') } +@font-face { font-family: 'Ubuntu'; font-display: swap; font-style: normal; font-weight: 100; src: local('Ubuntu'), url('ubuntu-nerdfont.ttf') } /* toolbutton */ .gradio-button.tool { max-width: min-content; min-width: min-content !important; align-self: end; font-size: 1.4em; color: var(--body-text-color) !important; } diff --git a/ui/css/black-gray.css b/ui/css/black-gray.css index de4e78530..b8a5a439d 100644 --- a/ui/css/black-gray.css +++ b/ui/css/black-gray.css @@ -1,5 +1,5 @@ /* generic html tags */ -@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf') } +@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('notosans-nerdfont-regular.ttf') } :root, .light, .dark { --font: 'NotoSans'; --font-mono: 'ui-monospace', 'Consolas', monospace; diff --git a/ui/css/black-orange.css b/ui/css/black-orange.css index e257268a1..0acb59696 100644 --- a/ui/css/black-orange.css +++ b/ui/css/black-orange.css @@ -1,5 +1,5 @@ /* generic html tags */ -@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf') } +@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('notosans-nerdfont-regular.ttf') } :root, .light, .dark { --font: 'NotoSans'; --font-mono: 'ui-monospace', 'Consolas', monospace; diff --git a/ui/css/black-teal-reimagined.css b/ui/css/black-teal-reimagined.css index 3965c8a70..2ecb386c9 100644 --- a/ui/css/black-teal-reimagined.css +++ b/ui/css/black-teal-reimagined.css @@ -4,7 +4,7 @@ font-display: swap; font-style: normal; font-weight: 100; - src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf'); + src: local('NotoSansNerd'), url('notosans-nerdfont-regular.ttf'); } html { diff --git a/ui/css/black-teal.css b/ui/css/black-teal.css index aadb8f2b8..469115388 100644 --- a/ui/css/black-teal.css +++ b/ui/css/black-teal.css @@ -1,5 +1,5 @@ /* generic html tags */ -@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf') } +@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('notosans-nerdfont-regular.ttf') } :root, .light, .dark { --font: 'NotoSans'; --font-mono: 'ui-monospace', 'Consolas', monospace; diff --git a/ui/fonts/ibmplexmono-nerdfont-medium.ttf b/ui/css/ibmplexmono-nerdfont-medium.ttf similarity index 100% rename from ui/fonts/ibmplexmono-nerdfont-medium.ttf rename to ui/css/ibmplexmono-nerdfont-medium.ttf diff --git a/ui/css/light-teal.css b/ui/css/light-teal.css index 393211fec..fb24a909f 100644 --- a/ui/css/light-teal.css +++ b/ui/css/light-teal.css @@ -1,5 +1,5 @@ /* generic html tags */ -@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf') } +@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('notosans-nerdfont-regular.ttf') } :root, .light, .dark { --font: 'NotoSans'; --font-mono: 'ui-monospace', 'Consolas', monospace; diff --git a/ui/fonts/notosans-nerdfont-regular.ttf b/ui/css/notosans-nerdfont-regular.ttf similarity index 100% rename from ui/fonts/notosans-nerdfont-regular.ttf rename to ui/css/notosans-nerdfont-regular.ttf diff --git a/ui/fonts/roboto.ttf b/ui/css/roboto.ttf similarity index 100% rename from ui/fonts/roboto.ttf rename to ui/css/roboto.ttf diff --git a/ui/css/sdnext.css b/ui/css/sdnext.css index 5a3dd4113..51c8a5d1b 100644 --- a/ui/css/sdnext.css +++ b/ui/css/sdnext.css @@ -3,14 +3,14 @@ font-family: 'NotoSans'; font-style: normal; font-weight: 100; - src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf'); + src: local('NotoSansNerd'), url('notosans-nerdfont-regular.ttf'); } @font-face { font-display: swap; font-family: 'Ubuntu'; font-style: normal; font-weight: 100; - src: local('Ubuntu'), url('fonts/ubuntu-nerdfont.ttf'); + src: local('Ubuntu'), url('ubuntu-nerdfont.ttf'); } :root { diff --git a/ui/css/simple-dark.css b/ui/css/simple-dark.css index 2f9b806d1..e2d88f098 100644 --- a/ui/css/simple-dark.css +++ b/ui/css/simple-dark.css @@ -1,5 +1,5 @@ /* generic html tags */ -@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf') } +@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('notosans-nerdfont-regular.ttf') } :root, .light, .dark { --font: 'NotoSans'; --font-mono: 'ui-monospace', 'Consolas', monospace; diff --git a/ui/css/simple-light.css b/ui/css/simple-light.css index cfc9fa3dd..9fc84c4a6 100644 --- a/ui/css/simple-light.css +++ b/ui/css/simple-light.css @@ -1,5 +1,5 @@ /* generic html tags */ -@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('fonts/notosans-nerdfont-regular.ttf') } +@font-face { font-family: 'NotoSans'; font-display: swap; font-style: normal; font-weight: 100; src: local('NotoSansNerd'), url('notosans-nerdfont-regular.ttf') } :root, .light, .dark { --font: 'NotoSans'; --font-mono: 'ui-monospace', 'Consolas', monospace; diff --git a/ui/css/ubuntu-nerdfont.ttf b/ui/css/ubuntu-nerdfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..90212194a2130a0d297e853545db3335aeac863f GIT binary patch literal 2535756 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

    7g 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�l!!eAVl12kE>}_C7Wr%*T4zjs<^F* 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ⅅnjT!^Mp~)8&** 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 t`UcK*M1Erj#Mq%mj|Ge#Ho!|DzUyk>tDlC$ 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®}DPv^^hlm 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

    hgy8@kk6(dEQl&Tji3fM8au~I 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

    }bXOTV@(E9R_&;x0))vltnUopu$RHpm@sW^pR8 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�+G~Ae|{mJ$z;fuk;&v9d=QH{Fn{86rP3U|g2sAZ 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

    HAHbEkO#$PYQ{wY5r&#-?Osf2)CHJF-zgD3Uy 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≷scp55({AcM!kR-^sIg`MY@bZhtrN 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 SFIufi{Qq^<>BIL}Xa5T%FE=It literal 0 HcmV?d00001 diff --git a/ui/dist/sdnext.mjs b/ui/dist/sdnext.mjs index 8509491e9..2d70ac64b 100644 --- a/ui/dist/sdnext.mjs +++ b/ui/dist/sdnext.mjs @@ -16218,7 +16218,7 @@ async function initStartup() { await waitForOpts(); await updateSubpath(); executeCallbacks(uiReadyCallbacks); - if (window.waitForUiReady) await window.waitForUiReady(); + if (window.opts.theme_type.toLowerCase().startsWith("modern") && window.waitForUiReady) await window.waitForUiReady(); startupPromises.push(Promise.resolve(initLogMonitor())); startupPromises.push(Promise.resolve(setRefreshInterval())); startupPromises.push(Promise.resolve(setupExtraNetworks())); diff --git a/ui/dist/sdnext.mjs.map b/ui/dist/sdnext.mjs.map index 2df4e3da7..abf3df5d9 100644 --- a/ui/dist/sdnext.mjs.map +++ b/ui/dist/sdnext.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist/jquery.js", "../js/iframeResizer.js", "../../node_modules/.pnpm/exifr@7.1.3/node_modules/exifr/dist/full.umd.js", "../../node_modules/.pnpm/wheel@1.0.0/node_modules/wheel/index.js", "../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js", "../../node_modules/.pnpm/amator@1.1.0/node_modules/amator/index.js", "../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/index.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/kinetic.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeTextSelectionInterceptor.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/transform.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeSvgController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/lib/makeDomController.js", "../../node_modules/.pnpm/panzoom@9.4.4/node_modules/panzoom/index.js", "../../node_modules/.pnpm/jquery@4.0.0/node_modules/jquery/dist-module/wrappers/jquery.node-module-wrapper.js", "../vendor.ts", "../logger.ts", "../authWrap.ts", "../timers.ts", "../script.ts", "../changelog.ts", "../control.ts", "../extraNetworks.ts", "../generationParams.ts", "../imageParams.ts", "../notification.ts", "../progressBar.ts", "../dynamicUI.ts", "../ui.ts", "../inputAccordion.ts", "../indexdb.ts", "../logMonitor.ts", "../settings.ts", "../monitor.ts", "../promptChecker.ts", "../js/sha256.ts", "../gallery.ts", "../imageViewer.ts", "../autocomplete_xn.ts", "../autocomplete.ts", "../setHints.ts", "../contextMenus.ts", "../uiConfig.ts", "../loader.ts", "../legacy.ts", "../startup.ts", "../extensions.ts", "../dragDrop.ts", "../civitai.ts", "../guidance.ts", "../timesheet.ts", "../history.ts", "../storage.ts", "../aspectRatioOverlay.ts", "../resolutionLock.ts", "../editAttention.ts", "../../node_modules/.pnpm/jquery-sparkline@2.4.0/node_modules/jquery-sparkline/jquery.sparkline.js", "../gpu.ts"], - "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction openSettingsSection(sectionId: string) {\n const settingsTab = gradioApp().getElementById('tab_settings');\n const settingsButton = settingsTab ? gradioApp().querySelector(`button[aria-controls=\"${settingsTab.id}\"]`) : null;\n settingsButton?.click();\n const section = gradioApp().getElementById(`settings_section_tab_${sectionId}`);\n const sectionButton = section ? gradioApp().querySelector(`button[aria-controls=\"${section.id}\"]`) : null;\n sectionButton?.click();\n section?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n}\nwindow.openSettingsSection = openSettingsSection;\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.background = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n if (window.opts.diffusers_enable_embed) {\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n } else {\n this.embed = new XnIndex([]);\n }\n // Wildcards: [{name}, ...]\n if (window.opts.wildcards_enabled) {\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n } else {\n this.wildcard = new XnIndex([]);\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 5000);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\nwindow.addEventListener('pageshow', (evt) => log('pageShow', evt));\nwindow.addEventListener('pagehide', (evt) => log('pageHide', evt));\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFileMetadata {\n fp?: string | null;\n format?: string | null;\n size?: string | null;\n quantType?: string | null;\n}\n\ninterface CivitFile {\n id: number;\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n primary?: boolean;\n metadata?: CivitFileMetadata;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\ninterface QueuedFile {\n version: CivitVersion;\n file: CivitFile;\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\nlet currentModel: CivitModel | null = null;\n\nconst precisionOrder = ['fp32', 'bf16', 'fp16', 'fp8', 'int8', 'int4'];\nconst companionTypes = ['VAE', 'Text Encoder'];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileVariantUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nfunction fileVariant(file: CivitFile): string | null {\n return file.metadata?.fp || file.metadata?.quantType || null;\n}\n\n// Model files before companions, then by precision, then larger first\nfunction sortFiles(files: CivitFile[]): CivitFile[] {\n const isModel = (f: CivitFile) => f.type === 'Model' || f.type === 'Pruned Model';\n const rank = (f: CivitFile) => {\n const index = precisionOrder.indexOf((fileVariant(f) || '').toLowerCase());\n return index < 0 ? precisionOrder.length : index;\n };\n return [...files].sort((a, b) => Number(isModel(b)) - Number(isModel(a)) || rank(a) - rank(b) || (b.size || 0) - (a.size || 0));\n}\n\nfunction insertNameSuffix(name: string, suffix: string): string {\n const dot = name.lastIndexOf('.');\n return dot > 0 ? `${name.slice(0, dot)}-${suffix}${name.slice(dot)}` : `${name}-${suffix}`;\n}\n\n// Precision suffix, then full/pruned and the file id only as far as needed to stay unique within the version\nfunction fileSaveName(file: CivitFile, siblings: CivitFile[]): string {\n const tier1 = (f: CivitFile) => {\n const variant = fileVariant(f);\n return variant ? insertNameSuffix(f.name || '', variant) : f.name || '';\n };\n const tier2 = (f: CivitFile) => (f.metadata?.size ? insertNameSuffix(tier1(f), f.metadata.size) : tier1(f));\n const others = siblings.filter((s) => s.id !== file.id);\n const name = tier1(file);\n if (!others.some((s) => tier1(s) === name)) return name;\n const sized = tier2(file);\n if (!others.some((s) => tier2(s) === sized)) return sized;\n return insertNameSuffix(name, String(file.id));\n}\n\nfunction escapeHTML(text: string): string {\n return text.replace(/[&<>\"']/g, (c) => `&#${c.charCodeAt(0)};`);\n}\n\nfunction versionRows(version: CivitVersion, divider: boolean): string {\n const files = sortFiles(version.files);\n const entries: (CivitFile | null)[] = files.length > 0 ? files : [null];\n const border = divider ? ' style=\"border-top: 1px solid var(--sd-panel-border-color, #555)\"' : '';\n const span = entries.length > 1 ? ` rowspan=\"${entries.length}\"` : '';\n const versionCell = (content: string) => `${content}`;\n return entries.map((file, i) => {\n const first = i === 0;\n const cell = (content: string) => `${content}`;\n const link = file ? `
    \\udb80\\uddda
    ` : '';\n const name = file ? `${escapeHTML(file.name || 'unknown')}${file.primary ? ' \u2605' : ''}` : 'unknown';\n const variant = file ? [fileVariant(file), file.metadata?.size].filter(Boolean).join(' \u00B7 ') : '';\n const size = file?.size ? `${(file.size / 1024 / 1024 / 1024).toFixed(2)} GB` : 'unknown';\n const cells = [\n cell(link),\n first ? versionCell(escapeHTML(version.name || 'unknown')) : '',\n cell(escapeHTML(file?.type || 'unknown')),\n first ? versionCell(escapeHTML(version.base || 'unknown')) : '',\n cell(name),\n cell(escapeHTML(variant || '-')),\n first ? versionCell((new Date(version.mtime)).toLocaleDateString()) : '',\n cell(size),\n first ? versionCell(escapeHTML(version.availability || 'unknown')) : '',\n first ? versionCell(`
    ${version.desc || 'no description available'}
    `) : '',\n ];\n return `${cells.join('')}`;\n }).join('');\n}\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n currentModel = data;\n\n const versionsHTML = data.versions.map((v: CivitVersion, i: number) => versionRows(v, i > 0)).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nfunction queueFiles(model: CivitModel, queued: QueuedFile[]) {\n selectedURL = queued.map(({ file }) => file.url || '');\n selectedName = queued.map(({ version, file }) => fileSaveName(file, version.files));\n selectedType = queued.map(({ file }) => (companionTypes.includes(file.type || '') ? file.type : model.type) || '');\n selectedBase = queued.map(({ version }) => version.base || '');\n selectedModelId = queued.map(() => model.id || 0);\n selectedVersionId = queued.map(({ version }) => version.id || 0);\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\n\nexport function startCivitFileDownload(versionId: number, fileId: number) {\n log('startCivitFileDownload', { versionId, fileId });\n const version = currentModel?.versions.find((v) => v.id === versionId);\n const file = version?.files.find((f) => f.id === fileId);\n if (!currentModel || !version || !file) return;\n queueFiles(currentModel, [{ version, file }]);\n}\nwindow.startCivitFileDownload = startCivitFileDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n if (!currentModel) return;\n const queued = currentModel.versions\n .map((version) => ({ version, file: version.files.find((f) => f.primary) || version.files[0] }))\n .filter((entry): entry is QueuedFile => !!entry.file);\n queueFiles(currentModel, queued);\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], - "mappings": "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", + "sourcesContent": ["/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\tmodule.exports = factory( global, true );\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n\"use strict\";\n\nif ( !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t// `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t// as an array and fires an [inner] native event to prompt state\n\t\t\t// changes that should be observed by registered listeners (such as\n\t\t\t// checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t// an array), it triggers an inner synthetic event, records the\n\t\t\t// result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t// array `saved`), it prevents double-propagation of surrogate events\n\t\t\t// but otherwise allows everything to proceed (particularly including\n\t\t\t// further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = / 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t// * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t// * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n \n \n `);\n document.close();\n}\n\nconst delay = (ms: number) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nexport async function restartReload(initial = true) {\n document.body.style = 'background: #222222; font-size: 1rem; font-family:monospace; margin-top:20%; color:lightgray; text-align:center';\n document.body.innerHTML = '

    Server shutdown in progress...

    ';\n if (initial) await delay(10000);\n try {\n const res = await authFetch(`${window.api}/progress?skip_current_image=true`);\n console.log('restartReload', res);\n if (res?.ok) {\n document.body.innerHTML = '

    Server restart in progress...

    ';\n setTimeout(() => location.reload(), 10000);\n } else {\n setTimeout(() => restartReload(false), 2500);\n }\n } catch {\n setTimeout(() => restartReload(false), 2500);\n }\n return [];\n}\n\nexport function updateInput(target) {\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: target });\n target.dispatchEvent(e);\n}\n\nlet desiredCheckpointName = null;\nexport function selectCheckpoint(name) {\n desiredCheckpointName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isRefiner = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isRefiner) gradioApp().getElementById('change_refiner').click();\n else gradioApp().getElementById('change_checkpoint').click();\n log(`selectCheckpoint ${isRefiner ? 'refiner' : 'model'}: ${desiredCheckpointName}`);\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nlet desiredVAEName = null;\nexport function selectVAE(name) {\n desiredVAEName = name;\n gradioApp().getElementById('change_vae').click();\n log(`selectVAE: ${desiredVAEName}`);\n markSelectedCards([desiredVAEName], 'vae');\n}\n\nlet desiredUNetName = null;\n\nfunction consumeDesiredCheckpointName(v) {\n const res = desiredCheckpointName;\n desiredCheckpointName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredVAEName(v) {\n const res = desiredVAEName;\n desiredVAEName = null;\n return [res || v, null];\n}\n\nfunction consumeDesiredUNetName(v) {\n const res = desiredUNetName;\n desiredUNetName = null;\n return [res || v, null];\n}\n\nfunction getDesiredCheckpointName() {\n return desiredCheckpointName;\n}\n\nexport function selectUNet(name) {\n desiredUNetName = name;\n const tabName = getENActiveTab();\n const btnModel = gradioApp().getElementById(`${tabName}_extra_model`);\n const isSecondary = btnModel && btnModel.classList.contains('toolbutton-selected');\n if (isSecondary) gradioApp().getElementById('change_unet_secondary').click();\n else gradioApp().getElementById('change_unet').click();\n log(`selectUNet ${isSecondary ? 'secondary' : 'primary'}: ${desiredUNetName}`);\n markSelectedCards([desiredUNetName], 'unet');\n}\n\nexport function selectReference(name) {\n log(`selectReference: ${name}`);\n desiredCheckpointName = name;\n gradioApp().getElementById('change_reference').click();\n markSelectedCards([desiredCheckpointName], 'model');\n setTimeout(requestProgress, 250);\n}\n\nfunction currentImageResolutionimg2img(_a, _b, scaleBy) {\n const img = gradioApp().querySelector('#mode_img2img > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction currentImageResolutioncontrol(_a, _b, scaleBy) {\n if (window.kanvas) {\n const active = window.kanvas.stages?.getActiveStage();\n return [active?.width || 0, active?.height || 0, scaleBy];\n }\n const img = gradioApp().querySelector('#control-tab-input > div[style=\"display: block;\"] img');\n return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];\n}\n\nfunction updateImg2imgResizeToTextAfterChangingImage() {\n const el = gradioApp().getElementById('img2img_update_resize_to');\n if (el) setTimeout(() => gradioApp().getElementById('img2img_update_resize_to').click(), 500);\n return [];\n}\n\nfunction createThemeElement(): HTMLImageElement {\n const el = document.createElement('img');\n el.id = 'theme-preview';\n el.className = 'theme-preview';\n el.onclick = () => { el.style.display = 'none'; };\n document.body.appendChild(el);\n return el;\n}\n\nexport async function toggleCompact(val, old) {\n if (val === old) return;\n log('toggleCompact', val);\n if (val) {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-md)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.add('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.add('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.add('accordion-compact'));\n } else {\n gradioApp().style.setProperty('--layout-gap', 'var(--spacing-xxl)');\n gradioApp().querySelectorAll('input[type=range]').forEach((el) => el.classList.remove('hidden'));\n gradioApp().querySelectorAll('div .form').forEach((el) => el.classList.remove('form-compact'));\n gradioApp().querySelectorAll('.small-accordion .label-wrap').forEach((el) => el.classList.remove('accordion-compact'));\n }\n}\n\nfunction previewTheme() {\n let name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('input')?.[0].value || '';\n authFetch(`${window.subpath}/file=data/themes.json`)\n .then((res) => {\n res.json()\n .then((themes) => {\n const theme = Array.isArray(themes) ? themes.find((t) => t.id === name) : null;\n if (theme) {\n window.open(theme.subdomain, '_blank');\n } else {\n const el = document.getElementById('theme-preview') as HTMLImageElement | null || createThemeElement();\n el.style.display = el.style.display === 'block' ? 'none' : 'block';\n name = name.replace('/', '-');\n el.src = `/file=ui/css/${name}.jpg`;\n }\n })\n .catch((e) => error(`previewTheme: ${e}`));\n })\n .catch((e) => error(`previewTheme: ${e}`));\n}\n\nasync function browseFolder() {\n const picker = window.showDirectoryPicker?.();\n if (!picker) return null;\n const f = await picker;\n if (f && f.kind === 'directory') return f.name;\n return null;\n}\n\nlet kanvasNotifyTimer: ReturnType | undefined;\n// Notify kanvas to resize its stage when the resize-panel width/height change. Wired through gradio's\n// .change so it also fires on programmatic updates (detect-size, paste params, swap, send-to) that the\n// client-side resolutionLock input listeners never see. Writes nothing back, so it cannot loop.\nexport function notifyKanvasResize(width: number, height: number) {\n if (window.resizeStage) {\n const w = Number(width);\n const h = Number(height);\n clearTimeout(kanvasNotifyTimer);\n kanvasNotifyTimer = setTimeout(() => window.resizeStage?.(w, h), 250);\n }\n}\n\nexport async function reconnectUI() {\n const t0 = performance.now();\n const gallery = gradioApp().getElementById('txt2img_gallery');\n const task_id = localStorage.getItem('task');\n const api_logo = Array.from(gradioApp().querySelectorAll('img')).filter((el) => el.src.endsWith('api-logo.svg'));\n if (api_logo.length > 0) api_logo[0].remove();\n if (task_id) {\n debug('task check:', task_id);\n requestProgress(task_id, null, gallery, null, null, true);\n }\n uiLoaded = true;\n\n const sd_model = gradioApp().getElementById('setting_sd_model_checkpoint');\n let loadingStarted = 0;\n let loadingMonitor: ReturnType | null = null;\n\n const sd_model_callback = async () => {\n const loading = sd_model.querySelector('.eta-bar');\n if (!loading) {\n loadingStarted = 0;\n clearInterval(loadingMonitor);\n updateModel();\n } else if (loadingStarted === 0) {\n loadingStarted = Date.now();\n loadingMonitor = setInterval(() => {\n const elapsed = Date.now() - loadingStarted;\n if (elapsed > 3000 && loading) loading.style.display = 'none';\n }, 5000);\n }\n };\n const sd_model_observer = new MutationObserver(sd_model_callback);\n sd_model_observer.observe(sd_model, { attributes: true, childList: true, subtree: true });\n const t1 = performance.now();\n log('reconnectUI', Math.round(t1 - t0));\n timer('reconnectUI', t1 - t0);\n}\n\nwindow.restartReload = restartReload;\nwindow.updateInput = updateInput;\nwindow.notifyKanvasResize = notifyKanvasResize;\nwindow.clip_gallery_urls = clip_gallery_urls;\nwindow.extract_image_from_gallery = extract_image_from_gallery;\nwindow.getCaptionActiveTab = getCaptionActiveTab;\nwindow.get_img2img_tab_index = get_img2img_tab_index;\nwindow.modelmerger = modelmerger;\nwindow.selected_gallery_index = selected_gallery_index;\nwindow.selected_gallery_files = selected_gallery_files;\nwindow.send_to_kanvas = send_to_kanvas;\nwindow.submit_control = submit_control;\nwindow.submit_framepack = submit_framepack;\nwindow.submit_img2img = submit_img2img;\nwindow.submit_ltx = submit_ltx;\nwindow.submit_minimax = submit_minimax;\nwindow.submit_postprocessing = submit_postprocessing;\nwindow.submit = submit_txt2img; // compatibility alias\nwindow.submit_txt2img = submit_txt2img;\nwindow.submit_video = submit_video;\nwindow.submit_video_wrapper = submit_video_wrapper;\nwindow.switch_to_txt2img = switch_to_txt2img;\nwindow.switch_to_img2img_tab = switch_to_img2img_tab;\nwindow.switch_to_img2img = switch_to_img2img;\nwindow.switch_to_inpaint = switch_to_inpaint;\nwindow.switch_to_sketch = switch_to_sketch;\nwindow.switch_to_composite = switch_to_composite;\nwindow.switch_to_extras = switch_to_extras;\nwindow.switch_to_control = switch_to_control;\nwindow.switch_to_video = switch_to_video;\nwindow.switch_to_caption = switch_to_caption;\nwindow.recalculate_prompts_txt2img = recalculate_prompts_txt2img;\nwindow.recalculate_prompts_img2img = recalculate_prompts_img2img;\nwindow.recalculate_prompts_inpaint = recalculate_prompts_inpaint;\nwindow.recalculate_prompts_control = recalculate_prompts_control;\nwindow.selectCheckpoint = selectCheckpoint;\nwindow.selectVAE = selectVAE;\nwindow.selectUNet = selectUNet;\nwindow.selectReference = selectReference;\nwindow.consumeDesiredCheckpointName = consumeDesiredCheckpointName;\nwindow.consumeDesiredVAEName = consumeDesiredVAEName;\nwindow.consumeDesiredUNetName = consumeDesiredUNetName;\nwindow.getDesiredCheckpointName = getDesiredCheckpointName;\nwindow.currentImageResolutionimg2img = currentImageResolutionimg2img;\nwindow.currentImageResolutioncontrol = currentImageResolutioncontrol;\nwindow.updateImg2imgResizeToTextAfterChangingImage = updateImg2imgResizeToTextAfterChangingImage;\nwindow.create_submit_args = create_submit_args;\nwindow.set_theme = set_theme;\n", "import { gradioApp } from './script';\nimport { updateInput } from './ui';\n\ntype AccordionElement = HTMLElement & {\n visibleCheckbox: HTMLInputElement;\n onVisibleCheckboxChange: () => void;\n onChecked: (checked: boolean) => void;\n};\n\nexport function inputAccordionChecked(id: string, checked: boolean): void {\n const accordion = gradioApp().getElementById(id);\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n acc.visibleCheckbox.checked = checked;\n acc.onVisibleCheckboxChange();\n}\n\nfunction setupAccordion(accordion: Element): void {\n if (!(accordion instanceof HTMLElement)) return;\n const acc = accordion as AccordionElement;\n const labelWrap = accordion.querySelector('.label-wrap');\n const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);\n const extra = gradioApp().querySelector(`#${accordion.id}-extra`);\n if (!(labelWrap instanceof HTMLElement) || !(gradioCheckbox instanceof HTMLInputElement)) return;\n const span = labelWrap.querySelector('span');\n if (!(span instanceof HTMLElement)) return;\n let linked = true;\n const isOpen = () => labelWrap.classList.contains('open');\n const observerAccordionOpen = new MutationObserver((mutations) => {\n mutations.forEach((mutationRecord) => {\n accordion.classList.toggle('input-accordion-open', isOpen());\n if (linked) {\n acc.visibleCheckbox.checked = isOpen();\n acc.onVisibleCheckboxChange();\n }\n });\n });\n observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });\n if (extra instanceof Node) labelWrap.insertBefore(extra, labelWrap.lastElementChild);\n acc.onChecked = (checked: boolean) => {\n if (isOpen() !== checked) labelWrap.click();\n };\n\n const visibleCheckbox = document.createElement('INPUT');\n visibleCheckbox.type = 'checkbox';\n visibleCheckbox.checked = isOpen();\n visibleCheckbox.id = `${accordion.id}-visible-checkbox`;\n visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;\n span.insertBefore(visibleCheckbox, span.firstChild);\n acc.visibleCheckbox = visibleCheckbox as any;\n acc.onVisibleCheckboxChange = () => {\n if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();\n gradioCheckbox.checked = visibleCheckbox.checked;\n updateInput(gradioCheckbox);\n };\n\n visibleCheckbox.addEventListener('click', (event) => {\n linked = false;\n event.stopPropagation();\n });\n visibleCheckbox.addEventListener('input', acc.onVisibleCheckboxChange);\n}\n\nwindow.inputAccordionChecked = inputAccordionChecked;\n\n// onUiLoaded(() => {\n// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n// });\n\nexport function initAccordions() {\n for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);\n}\n", "/**\n * @type {?IDBDatabase}\n */\nimport { log } from './logger';\n\nlet db = null;\n\ninterface ThumbRecord {\n hash: string;\n folder?: string;\n [key: string]: unknown;\n}\n\nexport async function initIndexDB(): Promise {\n async function createDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open('SDNext', 2);\n request.onerror = (evt: Event) => reject(evt);\n request.onsuccess = (evt: Event) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const countAll = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .count();\n countAll.onsuccess = () => log('initIndexDB', countAll.result);\n resolve();\n };\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => {\n db = (evt.target as IDBOpenDBRequest).result;\n const oldver = evt.oldVersion;\n if (oldver < 1) {\n const store = db.createObjectStore('thumbs', { keyPath: 'hash' });\n store.createIndex('hash', 'hash', { unique: true });\n }\n if (oldver < 2) {\n const existingStore = request.transaction.objectStore('thumbs');\n existingStore.createIndex('folder', 'folder', { unique: false });\n }\n resolve();\n };\n });\n }\n\n if (!db) await createDB();\n}\n\nexport function idbIsReady(): boolean {\n return db !== null;\n}\n\n/**\n * Reusable setup for handling IDB transactions.\n * @param {Object} resources - Required resources for implementation\n * @param {IDBTransaction} resources.transaction\n * @param {AbortSignal} resources.signal\n * @param {Function} resources.resolve\n * @param {Function} resources.reject\n * @param {*} resolveValue - Value to resolve the outer Promise with\n * @returns {() => void} - Function for manually aborting the transaction\n */\nfunction configureTransactionAbort({\n transaction,\n signal,\n resolve,\n reject,\n}: {\n transaction: IDBTransaction;\n signal: AbortSignal;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}, resolveValue: T): () => void {\n function abortTransaction() {\n signal.removeEventListener('abort', abortTransaction);\n transaction.abort();\n }\n signal.addEventListener('abort', abortTransaction);\n transaction.onabort = () => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new DOMException(`Aborting database transaction. ${signal.reason}`, 'AbortError'));\n };\n transaction.onerror = (e) => {\n signal.removeEventListener('abort', abortTransaction);\n reject(new Error('Database transaction error.'));\n };\n transaction.oncomplete = () => {\n signal.removeEventListener('abort', abortTransaction);\n resolve(resolveValue);\n };\n return abortTransaction;\n}\n\nasync function add(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .add(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function del(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .delete(hash);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function get(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .get(hash);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function getKeys(hash: string): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readonly')\n .objectStore('thumbs')\n .index('hash')\n .getAllKeys();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nasync function put(record: ThumbRecord): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const request = db\n .transaction(['thumbs'], 'readwrite')\n .objectStore('thumbs')\n .put(record);\n request.onsuccess = (evt) => resolve(evt);\n request.onerror = (evt) => reject(evt);\n });\n}\n\nexport async function idbGetAllKeys(index: string | null = null, query: IDBValidKey | IDBKeyRange | null = null): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (index) request = store.index(index).getAllKeys(query);\n else request = store.getAllKeys(query);\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Get the number of entries in the IndexedDB thumbnail cache.\n * @global\n * @param {IDBValidKey | IDBKeyRange | undefined} folder - If specified, get the count for this gallery folder. Otherwise get the total count.\n * @returns {Promise}\n */\nexport async function idbCount(folder?: IDBValidKey | IDBKeyRange): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n try {\n let request;\n const transaction = db.transaction('thumbs', 'readonly');\n transaction.onabort = (e) => reject(e);\n const store = transaction.objectStore('thumbs');\n if (folder) request = store.index('folder').count(folder);\n else request = store.count();\n request.onsuccess = () => resolve(request.result);\n request.onerror = (e) => reject(e);\n } catch (err) {\n reject(err);\n }\n });\n}\n\n/**\n * Cleanup function for IndexedDB thumbnail cache.\n * @global\n * @param {Set} keepSet - Set containing the hashes of the current files in the folder\n * @param {IDBValidKey | IDBKeyRange} folder - Folder name/path or range\n * @param {AbortSignal} signal - Signal from the AbortController for thumbCacheCleanup()\n */\nexport async function idbFolderCleanup(keepSet: Set, folder: IDBValidKey | IDBKeyRange, signal: AbortSignal): Promise {\n if (!db) return null;\n const existing = await idbGetAllKeys('folder', folder);\n const removals = new Set((existing ?? []).map((entry) => String(entry)).filter((entry) => !keepSet.has(entry))); // Don't need to keep full set in memory\n const totalRemovals = removals.size;\n if (signal.aborted) {\n throw new Error(`Aborting. ${String(signal.reason)}`);\n }\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('thumbs', 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, totalRemovals);\n const store = transaction.objectStore('thumbs');\n removals.forEach((entry) => { store.delete(entry); });\n });\n}\n\nexport async function idbClearAll(signal: AbortSignal): Promise {\n if (!db) return null;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(['thumbs'], 'readwrite');\n const props = { transaction, signal, resolve, reject };\n configureTransactionAbort(props, null);\n transaction.objectStore('thumbs').clear();\n });\n}\n\nexport const idbAdd = add;\nexport const idbDel = del;\nexport const idbGet = get;\nexport const idbPut = put;\nexport const idbKeys = getKeys;\n", "import { authFetch } from './authWrap';\nimport { log, error, xhrPost } from './logger';\nimport { timer } from './timers';\n\ninterface LogLine {\n created: number;\n level: string;\n module: string;\n facility: string;\n msg: string;\n}\n\nlet logMonitorEl: HTMLElement | null = null;\nlet logMonitorStatus = true;\nlet logWarnings = 0;\nlet logErrors = 0;\nlet logConnected = false;\n\nfunction dateToStr(ts: number): string {\n const dt = new Date(1000 * ts);\n // const year = dt.getFullYear();\n // const mo = String(dt.getMonth() + 1).padStart(2, '0');\n // const day = String(dt.getDate()).padStart(2, '0');\n const hour = String(dt.getHours()).padStart(2, '0');\n const min = String(dt.getMinutes()).padStart(2, '0');\n const sec = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n // const s = `${year}-${mo}-${day} ${hour}:${min}:${sec}.${ms}`;\n const s = `${hour}:${min}:${sec}.${ms}`;\n return s;\n}\n\nfunction htmlEscape(text: string): string {\n return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction parseLogLine(line: string): LogLine {\n let str = line.replaceAll('\\n', ' ').replaceAll('\\\\', '\\\\\\\\');\n const tracebackIndex = str.indexOf('Traceback');\n if (tracebackIndex !== -1) str = str.substring(0, tracebackIndex);\n const parsed = JSON.parse(str) as Partial;\n return {\n created: Number(parsed.created ?? Date.now()),\n level: String(parsed.level ?? 'INFO'),\n module: String(parsed.module ?? 'logMonitor'),\n facility: String(parsed.facility ?? 'ui'),\n msg: String(parsed.msg ?? ''),\n };\n}\n\nasync function clearErrors(): Promise {\n logWarnings = 0;\n logErrors = 0;\n log('clearErrors');\n}\n\nexport async function initClearErrorsButton() {\n const btnServerClear = document.getElementById('btn_console_log_server_clear');\n if (btnServerClear) {\n btnServerClear.onclick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n clearErrors();\n };\n }\n}\n\nasync function logMonitor() {\n const addLogLine = (line: string): void => {\n if (!logMonitorEl) logMonitorEl = document.getElementById('logMonitorData');\n if (!logMonitorEl) return;\n try {\n const l = parseLogLine(line);\n const row = document.createElement('tr');\n // row.style = 'padding: 10px; margin: 0;';\n const level = ``;\n if (l.level === 'WARNING') logWarnings++;\n if (l.level === 'ERROR') logErrors++;\n const module = ``;\n const facilityText = l.facility.length > 20 ? `${l.facility.substring(0, 20)}...` : l.facility;\n const facility = l.facility !== 'sd' ? `` : '';\n row.innerHTML = `${level}${facility}${module}`;\n logMonitorEl.appendChild(row);\n } catch (err) {\n error('logMonitor', { error: String(err), line });\n }\n };\n\n const cleanupLog = (atBottom: boolean): void => {\n if (!logMonitorEl) return;\n while (logMonitorEl.childElementCount > 100 && logMonitorEl.firstElementChild) {\n logMonitorEl.removeChild(logMonitorEl.firstElementChild);\n }\n if (atBottom) logMonitorEl.scrollTop = logMonitorEl.scrollHeight;\n else if (logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = 'border-bottom: 2px solid var(--highlight-color);';\n const elWarn = document.getElementById('logWarnings');\n const elErr = document.getElementById('logErrors');\n const modenUIBtn = document.getElementById('btn_console');\n if (elWarn) elWarn.innerText = String(logWarnings);\n if (elErr) elErr.innerText = String(logErrors);\n if (modenUIBtn) {\n modenUIBtn.setAttribute('error-count', logErrors > 0 ? String(logErrors) : '');\n modenUIBtn.style.backgroundColor = logErrors > 0 ? 'var(--color-error)' : '';\n modenUIBtn.title = `Log\\nErrors ${logErrors}\\nWarnings ${logWarnings}`;\n }\n };\n\n const txtGallery = document.getElementById('txt2img_gallery');\n if (txtGallery) txtGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n const imgGallery = document.getElementById('img2img_gallery');\n if (imgGallery) imgGallery.style.height = window.opts.logmonitor_show ? '50vh' : '55vh';\n\n if (!window.opts.logmonitor_show) {\n Array.from(document.getElementsByClassName('log-monitor')).forEach((el) => {\n if (el instanceof HTMLElement) el.style.display = 'none';\n });\n return;\n }\n\n if (logMonitorStatus) setTimeout(logMonitor, window.opts.logmonitor_refresh_period);\n else setTimeout(logMonitor, 10 * 1000); // on failure try to reconnect every 10sec\n\n logMonitorStatus = false;\n if (!logMonitorEl) {\n logMonitorEl = document.getElementById('logMonitorData');\n if (logMonitorEl) {\n logMonitorEl.addEventListener('scroll', () => {\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n if (atBottom && logMonitorEl.parentElement) logMonitorEl.parentElement.style.cssText = '';\n });\n }\n }\n if (!logMonitorEl) return;\n const atBottom = logMonitorEl.scrollHeight <= (logMonitorEl.scrollTop + logMonitorEl.clientHeight);\n\n try {\n const res = await authFetch(`${window.api}/log?clear=True`);\n if (res?.ok) {\n logMonitorStatus = true;\n const lines = (await res.json()) as string[];\n if (logMonitorEl && lines?.length > 0 && logMonitorEl.parentElement?.parentElement instanceof HTMLElement) {\n logMonitorEl.parentElement.parentElement.style.display = window.opts.logmonitor_show ? 'block' : 'none';\n }\n if (!logConnected) {\n logConnected = true;\n xhrPost(`${window.api}/log`, { debug: 'connected' });\n logErrors = 0; // reset error count on reconnect\n }\n for (const line of lines) addLogLine(line);\n } else {\n logConnected = false;\n logErrors++;\n if (res) addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Failed to fetch log: ${res?.status} ${res?.statusText}\" }`);\n else addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n }\n cleanupLog(atBottom);\n } catch {\n logConnected = false;\n logErrors++;\n addLogLine(`{ \"created\": ${Date.now()}, \"level\":\"ERROR\", \"module\":\"logMonitor\", \"facility\":\"ui\", \"msg\":\"Server unreachable\" }`);\n cleanupLog(atBottom);\n }\n}\n\nexport async function initLogMonitor() {\n let el = document.getElementById('logMonitorPlaceholder');\n const modernUi = Boolean(el);\n if (!el) el = document.getElementsByTagName('footer')[0];\n if (!el) return;\n const t0 = performance.now();\n el.classList.add('log-monitor');\n const uiDisabled = Array.isArray(window.opts.ui_disabled) ? window.opts.ui_disabled : [];\n if (uiDisabled.includes('logs')) return;\n if (modernUi) {\n el.style.overflow = 'auto';\n el.innerHTML = `\n
    ${l.level}${l.module}${facilityText}${dateToStr(l.created)}${htmlEscape(l.msg)}
    \n \n \n
    \n `;\n } else {\n el.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    TimeLevelModuleMessageWarnings 0Errors 0
    \n `;\n }\n el.style.display = 'none';\n authFetch(`${window.api}/start?agent=${encodeURI(navigator.userAgent)}`);\n logMonitor();\n initClearErrorsButton();\n const t1 = performance.now();\n log('initLogMonitor', { show: window.opts.logmonitor_show, time: Math.round(t1 - t0) });\n timer('initLogMonitor', t1 - t0);\n}\n", "import { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { log, debug, error } from './logger';\nimport { getENActiveTab } from './extraNetworks';\nimport { registerDragDrop, toggleCompact, setTheme, setFontSize, updateInput } from './ui';\nimport { timer } from './timers';\n\nlet settingsInitialized = false;\nlet opts_metadata = {};\nconst opts_tabs = {};\n\nfunction getSettingsTabs() {\n let nodes = gradioApp().querySelectorAll('#tab_settings .tabitem');\n if (!nodes || nodes.length === 0) nodes = gradioApp().querySelectorAll('.tab-content .tabitem');\n return nodes;\n}\n\nconst monitoredOpts: Record[] = [\n { sd_model_checkpoint: null },\n { sd_backend: () => gradioApp().getElementById('refresh_sd_model_checkpoint')?.click() },\n];\n\nexport function monitorOption(option, callback) {\n monitoredOpts.push({ [option]: callback });\n}\n\nconst AppyOpts = [ // monitored opts\n { compact_view: (val, old) => toggleCompact(val, old) },\n { gradio_theme: (val, old) => setTheme(val, old) },\n { font_size: (val, old) => setFontSize(val, old) },\n];\n\nasync function updateOpts(json_string) {\n const t0 = performance.now();\n const settings_data = JSON.parse(json_string);\n const new_opts = settings_data.values;\n opts_metadata = settings_data.metadata;\n\n const t1 = performance.now();\n for (const op of monitoredOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (Object.hasOwn(opts, key) && opts[key] !== new_opts[key]) {\n log('updateOpt', { key, val: new_opts[key] });\n if (callback) callback(new_opts[key], opts[key]);\n }\n }\n\n for (const op of AppyOpts) {\n const [key, callback] = Object.entries(op)[0];\n if (callback) {\n const t3 = performance.now();\n callback(new_opts[key], opts[key]);\n const t4 = performance.now();\n if (t4 - t3 > 100) debug('AppyOptSlow', key, `time=${Math.round(t4 - t3)}`);\n }\n }\n\n window.opts = new_opts;\n Object.entries(opts_metadata as Record).forEach(([opt, meta]: [string, any]) => {\n if (!opts_tabs[meta.tab_name]) opts_tabs[meta.tab_name] = {};\n if (!opts_tabs[meta.tab_name].unsaved_keys) opts_tabs[meta.tab_name].unsaved_keys = new Set();\n if (!opts_tabs[meta.tab_name].saved_keys) opts_tabs[meta.tab_name].saved_keys = new Set();\n if (!meta.is_stored) opts_tabs[meta.tab_name].unsaved_keys.add(opt);\n else opts_tabs[meta.tab_name].saved_keys.add(opt);\n });\n const t2 = performance.now();\n log('updateOpts', { settings: Object.keys(new_opts).length, callbacks: Math.round(t2 - t1), apply: Math.round(t1 - t0) });\n timer('updateOpts', t2 - t0);\n}\n\nfunction showAllSettings() {\n // Try to ensure that the show all settings tab is opened by clicking on its tab button\n // const tab_dirty_indicator = gradioApp().getElementById('modification_indicator_show_all_pages');\n // if (tab_dirty_indicator && tab_dirty_indicator.nextSibling) tab_dirty_indicator.nextSibling.click();\n getSettingsTabs().forEach((elem) => {\n if (elem.id === 'settings_tab_licenses' || elem.id === 'settings_show_all_pages') return;\n elem.style.display = 'block';\n });\n}\n\nfunction openSettingsSection(sectionId: string) {\n const settingsTab = gradioApp().getElementById('tab_settings');\n const settingsButton = settingsTab ? gradioApp().querySelector(`button[aria-controls=\"${settingsTab.id}\"]`) : null;\n settingsButton?.click();\n const section = gradioApp().getElementById(`settings_section_tab_${sectionId}`);\n const sectionButton = section ? gradioApp().querySelector(`button[aria-controls=\"${section.id}\"]`) : null;\n sectionButton?.click();\n section?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n}\nwindow.openSettingsSection = openSettingsSection;\n\nfunction markIfModified(setting_name, value) {\n if (!opts_metadata[setting_name]) return;\n const elem = gradioApp().getElementById(`modification_indicator_${setting_name}`);\n if (!elem) return;\n const previous_value = JSON.stringify(opts[setting_name]);\n const current_value = JSON.stringify(value);\n const changed_value = previous_value !== current_value;\n if (changed_value) elem.title = `click to revert to previous value: ${previous_value}`;\n const { is_stored } = opts_metadata[setting_name];\n if (is_stored) elem.title = 'custom value';\n elem.disabled = !changed_value && !is_stored;\n elem.classList.toggle('changed', changed_value);\n elem.classList.toggle('saved', is_stored);\n\n const { tab_name } = opts_metadata[setting_name];\n if (!opts_tabs[tab_name].changed) opts_tabs[tab_name].changed = new Set();\n const changed_items = opts_tabs[tab_name].changed;\n if (changed_value) changed_items.add(setting_name);\n else changed_items.delete(setting_name);\n const unsaved = opts_tabs[tab_name].unsaved_keys;\n const saved = opts_tabs[tab_name].saved_keys;\n\n // Set the indicator on the tab nav element\n const tab_nav_indicator = gradioApp().getElementById(`modification_indicator_${tab_name}`);\n tab_nav_indicator.disabled = (changed_items.size === 0) && (unsaved.size === 0);\n tab_nav_indicator.title = '';\n tab_nav_indicator.classList.toggle('changed', changed_items.size > 0);\n tab_nav_indicator.classList.toggle('saved', saved.size > 0);\n if (changed_items.size > 0) tab_nav_indicator.title += `click to reset ${changed_items.size} unapplied changes in this tab\\n`;\n if (saved.size > 0) tab_nav_indicator.title += `${saved.size} custom values\\n${unsaved.size} default values`;\n // TODO why is scroll happening on every change if all pages are visible?\n // elem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\nwindow.markIfModified = markIfModified;\n\nfunction updateAllOpts() {\n if (Object.keys(opts).length !== 0) return false;\n const json_elem = gradioApp().getElementById('settings_json');\n log('updateAllOpts', !!json_elem);\n if (!json_elem) return false;\n json_elem.parentElement.style.display = 'none';\n const textarea = json_elem.querySelector('textarea');\n const jsdata = textarea.value;\n updateOpts(jsdata);\n return true;\n}\n\nasync function onAfterUiUpdateCallback() {\n if (!updateAllOpts()) return;\n const json_elem = gradioApp().getElementById('settings_json');\n const textarea = json_elem.querySelector('textarea');\n executeCallbacks(optionsChangedCallbacks);\n registerDragDrop();\n\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n const oldValue = valueProp.get.call(textarea);\n valueProp.set.call(textarea, newValue);\n if (oldValue !== newValue) updateOpts(textarea.value);\n executeCallbacks(optionsChangedCallbacks);\n },\n get() {\n const valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n return valueProp.get.call(textarea);\n },\n });\n\n const settingsSearch = gradioApp().querySelectorAll('#settings_search > label > textarea')[0];\n let settingsTimer: ReturnType | undefined;\n let settingSearchValue = '';\n\n function doSettingsSearch() {\n if (settingSearchValue === settingsSearch.value.trim().toLowerCase()) return;\n showAllSettings();\n const value = settingsSearch.value.trim().toLowerCase();\n log('doSettingsSearch', value);\n settingSearchValue = value;\n getSettingsTabs().forEach((section) => {\n section.querySelectorAll('.dirtyable').forEach((setting) => {\n const visible = setting.innerText.toLowerCase().includes(value) || setting.id.toLowerCase().includes(value);\n const parent = setting.closest('.settings_section');\n if (!visible) parent.style.display = 'none';\n else parent.style.removeProperty('display');\n });\n });\n }\n\n settingsSearch.oninput = (e) => {\n if (settingsTimer) clearTimeout(settingsTimer);\n settingsTimer = setTimeout(doSettingsSearch, 250);\n };\n settingsSearch.onkeypress = (e) => {\n if (e.key === 'Enter') {\n if (settingsTimer) clearTimeout(settingsTimer);\n doSettingsSearch();\n }\n };\n}\n\nonAfterUiUpdate(onAfterUiUpdateCallback);\n\nasync function onOptionsChangedCallback() {\n const setting_elems = gradioApp().querySelectorAll('#settings [id^=\"setting_\"]');\n setting_elems.forEach((elem) => {\n const setting_name = elem.id.replace('setting_', '');\n markIfModified(setting_name, opts[setting_name]);\n });\n}\n\nonOptionsChanged(onOptionsChangedCallback);\n\nexport async function initModels() {\n const warn = () => `\n

    No models available

    \n - Select a model from reference list to download or
    \n - Set model path to a folder containing your models
    \n Current model path: ${opts.ckpt_dir}
    \n `;\n const el = gradioApp().getElementById('main_info');\n const en = gradioApp().getElementById('txt2img_extra_networks');\n if (!el || !en) return;\n const req = await authFetch(`${window.api}/sd-models`);\n const res = (req && req.ok) ? await req.json() : [];\n log('initModels', res.length);\n const ready = () => `\n

    Ready

    \n ${res.length} models available
    \n `;\n el.innerHTML = res.length > 0 ? ready() : warn();\n el.style.display = 'block';\n setTimeout(() => { el.style.display = 'none'; }, res.length === 0 ? 30000 : 1500);\n if (res.length === 0) {\n if (en.classList.contains('hide')) gradioApp().getElementById('txt2img_extra_networks_btn').click();\n const repeat = setInterval(() => {\n const buttons = Array.from(gradioApp().querySelectorAll('#txt2img_model_subdirs > button')) || [];\n const reference = buttons.find((b) => (b.innerText === 'Reference') || (b.innerText === 'Distilled') || (b.innerText === 'Community') || (b.innerText === 'Quantized') || (b.innerText === 'Cloud'));\n if (reference) {\n clearInterval(repeat);\n reference.click();\n log('enReferenceSelect');\n }\n }, 100);\n }\n}\n\nexport async function initSettings() {\n if (settingsInitialized) return;\n const t0 = performance.now();\n settingsInitialized = true;\n const tabNavElements = gradioApp().querySelector('#settings > .tab-nav');\n if (!tabNavElements) {\n error('initSettings', 'No tab nav elements found');\n return;\n }\n const tabNavButtons = gradioApp().querySelectorAll('#settings > .tab-nav > button');\n const tabElements = gradioApp().querySelectorAll('#settings > div:not(.tab-nav)');\n const observer = new MutationObserver((mutations) => {\n const showAllPages = gradioApp().getElementById('settings_show_all_pages');\n if (showAllPages.style.display === 'none') return;\n const mutation = (mut) => mut.type === 'attributes' && mut.attributeName === 'style';\n if (mutations.some(mutation)) showAllSettings();\n });\n const tabContentWrapper = document.createElement('div');\n tabContentWrapper.className = 'tab-content';\n tabNavElements.parentElement.insertBefore(tabContentWrapper, tabNavElements.nextSibling);\n tabElements.forEach((elem, index) => {\n const tabName = elem.id.replace('settings_section_tab_', '');\n const indicator = gradioApp().getElementById(`modification_indicator_${tabName}`);\n if (indicator) {\n tabNavElements.insertBefore(document.createElement('br'), tabNavButtons[index]);\n tabNavElements.insertBefore(indicator, tabNavButtons[index]);\n }\n tabContentWrapper.appendChild(elem);\n observer.observe(elem, { attributes: true, attributeFilter: ['style'] });\n });\n const t1 = performance.now();\n log('initSettings', Math.round(t1 - t0));\n timer('initSettings', t1 - t0);\n}\n", "import { debug, log } from './logger';\nimport { authFetch } from './authWrap';\nimport { monitorOption } from './settings';\n\ninterface VersionInfo {\n updated?: string;\n commit?: string;\n branch?: string;\n model?: string;\n}\n\nlet monitorActive = false;\nlet wsTimer: ReturnType | undefined;\n\nexport class ConnectionMonitorState {\n static ws: WebSocket | undefined;\n static url = '';\n static delay = 2000;\n static element: HTMLElement | undefined;\n static version = '';\n static commit = '';\n static branch = '';\n static model = '';\n static startup: Date = new Date();\n static online = false;\n static ts: Date = new Date();\n\n static getModel(): string {\n const cp = window.opts?.sd_model_checkpoint || '';\n return cp ? this.trimModelName(cp) : 'unknown model';\n }\n\n static trimModelName(name: string): string {\n return name.replace(/\\s*\\[.*\\]\\s*$/, '').split(/[\\\\/]/).pop().trim() || 'unknown model';\n }\n\n static setData({ online, data }: { online: boolean; data: VersionInfo }) {\n if (online !== this.online) {\n this.online = online;\n this.ts = new Date();\n debug('monitorState', { online: ConnectionMonitorState.online, ts: ConnectionMonitorState.ts?.toLocaleTimeString() });\n }\n if (data?.updated) this.version = data.updated;\n if (data?.commit) this.commit = data.commit;\n if (data?.branch) this.branch = data.branch;\n if (data?.model) this.model = this.trimModelName(data.model);\n }\n\n static toHTML(): string {\n if (!this.model) this.model = this.getModel();\n return `\n Version: ${this.version}
    \n Commit: ${this.commit}
    \n Branch: ${this.branch}
    \n Status: ${this.online ? 'online' : 'offline'}
    \n Model: ${this.model}
    \n Since: ${this.startup.toLocaleString()}
    \n `;\n }\n\n static updateState() {\n if (!this.element) {\n const el = document.getElementById('logo_nav');\n if (el) this.element = el;\n else return;\n }\n this.element.dataset.hint = this.toHTML();\n this.element.style.background = this.online ? 'var(--sd-main-accent-color)' : 'var(--color-error)';\n }\n}\n\nasync function updateIndicator(online: boolean, data: VersionInfo = {}, msg?: string): Promise {\n ConnectionMonitorState.setData({ online, data });\n ConnectionMonitorState.updateState();\n if (msg) log('monitorConnection:', { online, data, msg });\n}\n\nfunction scheduleNextLoop() {\n if (wsTimer) {\n clearTimeout(wsTimer);\n wsTimer = undefined;\n }\n const offlineDurationMs = Date.now() - ConnectionMonitorState.ts.getTime();\n if (!ConnectionMonitorState.online && offlineDurationMs > (60 * 60 * 1000)) ConnectionMonitorState.delay = 10000;\n else if (!ConnectionMonitorState.online && offlineDurationMs > (5 * 60 * 1000)) ConnectionMonitorState.delay = 5000;\n else ConnectionMonitorState.delay = 1000;\n wsTimer = setTimeout(wsMonitorLoop, ConnectionMonitorState.delay); // eslint-disable-line @typescript-eslint/no-use-before-define\n}\n\nasync function wsMonitorLoop() {\n // Tear down any existing socket before creating a new one\n if (ConnectionMonitorState.ws) {\n ConnectionMonitorState.ws.onopen = null;\n ConnectionMonitorState.ws.onmessage = null;\n ConnectionMonitorState.ws.onclose = null;\n ConnectionMonitorState.ws.onerror = null;\n try {\n ConnectionMonitorState.ws.close();\n } catch {\n // Ignore cleanup errors on stale sockets\n }\n ConnectionMonitorState.ws = undefined;\n }\n\n try {\n ConnectionMonitorState.ws = new WebSocket(`${ConnectionMonitorState.url}/internal/monitor`);\n ConnectionMonitorState.ws.onopen = () => updateIndicator(true);\n ConnectionMonitorState.ws.onmessage = (msg: MessageEvent) => updateIndicator(true, msg.data ? JSON.parse(msg.data) : {});\n ConnectionMonitorState.ws.onclose = () => {\n updateIndicator(false);\n scheduleNextLoop();\n };\n ConnectionMonitorState.ws.onerror = (e: Event) => updateIndicator(false, {}, String((e as ErrorEvent).message || 'unknown error'));\n } catch (e) {\n updateIndicator(false, {}, String((e as Error).message || e));\n scheduleNextLoop();\n }\n}\n\nexport async function monitorConnection() {\n if (!monitorActive) { // start monitor loop only once on startup\n monitorActive = true;\n monitorOption('sd_model_checkpoint', (newVal) => { // runs before opt actually changes\n ConnectionMonitorState.model = newVal;\n ConnectionMonitorState.updateState();\n });\n }\n ConnectionMonitorState.startup = new Date();\n\n let data: VersionInfo = {};\n try {\n const res = await authFetch(`${window.api}/version`);\n if (!res) throw new Error('No response');\n data = await res.json();\n log('monitorConnection:', { data });\n ConnectionMonitorState.startup = new Date();\n ConnectionMonitorState.url = res.url.split('/sdapi')[0].replace('https:', 'wss:').replace('http:', 'ws:'); // update global url as ws need fqdn\n updateIndicator(true, data);\n wsMonitorLoop();\n } catch {\n updateIndicator(false, data);\n scheduleNextLoop();\n }\n}\n", "// Stable Diffusion WebUI - Bracket checker\n// By Hingashi no Florin/Bwin4L & @akx\n// Counts open and closed brackets (round, square, curly) in the prompt and negative prompt text boxes in the txt2img and img2img tabs.\n// If there's a mismatch, the keyword counter turns red and if you hover on it, a tooltip tells you what's wrong.\n\nimport { gradioApp } from './script';\nimport { log } from './logger';\nimport { timer } from './timers';\n\nfunction checkBrackets(textArea: HTMLTextAreaElement, counterElt: HTMLElement): void {\n const counts: Record = {};\n const errors: string[] = [];\n\n function checkPair(open: string, close: string, kind: string): void {\n if (counts[open] !== counts[close]) errors.push(`${open}...${close} - Detected ${counts[open] || 0} opening and ${counts[close] || 0} closing ${kind}.`);\n }\n\n (textArea.value.match(/[(){}[\\]]/g) || []).forEach((bracket) => { counts[bracket] = (counts[bracket] || 0) + 1; });\n checkPair('(', ')', 'round brackets');\n checkPair('[', ']', 'square brackets');\n checkPair('{', '}', 'curly brackets');\n counterElt.title = errors.join('\\n');\n counterElt.classList.toggle('error', errors.length !== 0);\n}\n\nfunction setupBracketChecking(idPrompt: string, idCounter: string): void {\n const textarea = gradioApp().querySelector(`#${idPrompt} > label > textarea`);\n const counter = gradioApp().getElementById(idCounter);\n if (!(textarea instanceof HTMLTextAreaElement) || !counter) return;\n textarea.addEventListener('input', () => checkBrackets(textarea, counter));\n}\n\nexport async function initPromptChecker() {\n const t0 = performance.now();\n setupBracketChecking('txt2img_prompt', 'txt2img_token_counter');\n setupBracketChecking('txt2img_neg_prompt', 'txt2img_negative_token_counter');\n setupBracketChecking('img2img_prompt', 'img2img_token_counter');\n setupBracketChecking('img2img_neg_prompt', 'img2img_negative_token_counter');\n setupBracketChecking('control_prompt', 'control_token_counter');\n setupBracketChecking('control_neg_prompt', 'control_negative_token_counter');\n setupBracketChecking('video_prompt', 'video_token_counter');\n setupBracketChecking('video_neg_prompt', 'video_negative_token_counter');\n const t1 = performance.now();\n log('initPromptChecker', Math.round(t1 - t0));\n timer('initPromptChecker', t1 - t0);\n}\n", "// @ts-nocheck\n\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\n\n\nconst digestLength = 32;\nconst blockSize = 64;\n\n// SHA-256 constants\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a; let b; let c; let d; let e; let f; let g; let h; let u; let i; let j; let t1; let\n t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16)\n | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11))\n ^ (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0)\n + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13))\n ^ (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to reuse this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nwindow.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nwindow.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = (new Hash()).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hash = hash;\n// Function hash is both available as module.hash and as default export.\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = (new HMAC(key)).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\nwindow.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nwindow.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nwindow.pbkdf2 = pbkdf2;\n", "/* eslint-disable max-classes-per-file, @typescript-eslint/no-use-before-define */\nimport './js/sha256';\nimport { log, debug, error } from './logger';\nimport { authFetch } from './authWrap';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { timer } from './timers';\nimport { monitorOption } from './settings';\n\nimport {\n idbAdd,\n idbCount,\n idbFolderCleanup,\n idbClearAll,\n idbGet,\n idbKeys,\n idbIsReady,\n} from './indexdb';\n\nlet ws;\nlet url;\nlet currentSize = 0;\nlet currentSort = 'none';\nlet currentName = '';\nlet currentImage = null;\nlet currentTitle = '';\nlet currentGalleryFolder = null;\nlet pruneImagesTimer;\nlet outstanding = 0;\nlet gallerySelection = { files: [], index: -1 };\nlet maintenanceController = new AbortController();\nconst maxFetchRequests = 32;\nconst fragmentSize = 100;\nconst minCleanupCount = 1000;\nconst minCleanupTime = 1000 * 60 * 60; // 1 hour\nconst folderStylesheet = new CSSStyleSheet();\nconst fileStylesheet = new CSSStyleSheet();\nlet galleryInitialized = false;\n// Store separator states for the session\nconst separatorStates = new Map();\nconst el = {\n folders: undefined,\n files: undefined,\n search: undefined,\n status: undefined,\n btnSend: undefined,\n overlay: undefined,\n size: undefined,\n};\nconst cleanupTimers = {};\nconst maintenanceTimers = {};\nconst fetchQueue = [];\nconst icons = {\n Time: String.fromCodePoint(9201),\n Folder: String.fromCodePoint(128448), // or 128449;\n Sort: String.fromCodePoint(8645),\n Images: String.fromCodePoint(128461),\n};\n// eslint-disable-next-line @stylistic/max-len, @stylistic/quotes\nconst loadingSvg = `data:image/svg+xml;utf8,`;\n\nconst SUPPORTED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'webp', 'tiff', 'jp2', 'jxl', 'gif', 'mp4', 'mkv', 'avi', 'mjpeg', 'mpg', 'avr', 'heif', 'heic', 'mov', 'ts'];\n\nconst gallerySorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\nconst folderSorter = {\n nameA: { name: 'Name Ascending', func: (a, b) => a.name.localeCompare(b.name) },\n nameD: { name: 'Name Descending', func: (b, a) => a.name.localeCompare(b.name) },\n sizeD: { name: 'Size Ascending', func: (a, b) => a.size - b.size },\n sizeA: { name: 'Size Descending', func: (b, a) => a.size - b.size },\n resD: { name: 'Resolution Ascending', func: (a, b) => a.width * a.height - b.width * b.height },\n resA: { name: 'Resolution Descending', func: (b, a) => a.width * a.height - b.width * b.height },\n modD: { name: 'Modified Ascending', func: (a, b) => a.mtime - b.mtime },\n modA: { name: 'Modified Descending', func: (b, a) => a.mtime - b.mtime },\n none: { name: 'None', func: undefined },\n};\n\nlet sortMode = gallerySorter.none;\n\nasync function getHash(str) {\n let hex = '';\n const strBuf = new TextEncoder().encode(str);\n let hashBuf;\n if (crypto?.subtle?.digest) {\n hashBuf = await crypto.subtle.digest('SHA-256', strBuf);\n } else {\n const hashResult: any = hash(strBuf);\n hashBuf = hashResult.buffer; // from sha256.js\n }\n const view = new DataView(hashBuf);\n for (let i = 0; i < hashBuf.byteLength; i += 4) hex += (`00000000${view.getUint32(i).toString(16)}`).slice(-8);\n return hex;\n}\n\nfunction getVisibleGalleryFiles() {\n if (!el.files) return [];\n return Array.from(el.files.children).filter((node) => node.name && node.offsetParent);\n}\n\nfunction updateGallerySelectionClasses(files = gallerySelection.files, index = gallerySelection.index) {\n files.forEach((file, i) => {\n file.classList.toggle('gallery-file-selected', i === index);\n });\n}\n\nfunction refreshGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n const files = getVisibleGalleryFiles();\n const index = files.findIndex((file) => file.src === currentImage);\n gallerySelection = { files, index };\n updateGallerySelectionClasses(files, index);\n}\n\nfunction resetGallerySelection() {\n updateGallerySelectionClasses(gallerySelection.files, -1);\n gallerySelection = { files: [], index: -1 };\n currentImage = null;\n currentName = '';\n currentTitle = '';\n}\n\nfunction applyGallerySelection(index, { send = true } = {}) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n const { files } = gallerySelection;\n if (!files.length) return;\n if (!Number.isInteger(index) || index < 0 || index >= files.length) {\n log('gallery selection index out of range', index, files.length);\n resetGallerySelection();\n return;\n }\n gallerySelection.index = index;\n currentImage = files[index].src;\n currentName = files[index].name;\n currentTitle = files[index].title;\n updateGallerySelectionClasses(files, index);\n if (send && el.btnSend) el.btnSend.click();\n}\n\nfunction setGallerySelectionByElement(element, options) {\n if (!gallerySelection.files.length) refreshGallerySelection();\n let index = gallerySelection.files.findIndex((file) => file === element);\n if (index < 0) {\n refreshGallerySelection();\n index = gallerySelection.files.findIndex((file) => file === element);\n }\n if (index >= 0) applyGallerySelection(index, options);\n}\n\nfunction buildGalleryFileUrl(path) {\n return new URL(`/file=${encodeURI(path)}`, window.location.origin).toString();\n}\n\nwindow.getGallerySelection = () => ({ index: gallerySelection.index, files: gallerySelection.files });\nwindow.setGallerySelection = (index, options) => applyGallerySelection(index, options);\nwindow.getGallerySelectedUrl = () => (currentImage ? buildGalleryFileUrl(currentImage) : null);\n\n/**\n * Wait for gallery to finish populating\n * @param {number} expectedSize - Expected gallery size\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForGallery(expectedSize, signal) {\n while (Math.max(galleryHashes.size, galleryHashes.fallback) < expectedSize && !signal.aborted) await new Promise((resolve) => { setTimeout(resolve, 500); }); // longer interval because it's a low priority check\n signal.throwIfAborted();\n}\n\nfunction updateGalleryStyles() {\n if (opts.theme_type?.toLowerCase() === 'modern') {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n background-color: var(--sd-button-normal-color);\n border-radius: var(--sd-border-radius);\n text-align: left;\n direction: rtl; /* Used to overflow the beginning instead of the end */\n min-width: 12em;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-duration: 0.2s;\n transition-property: color, opacity, background-color, border-color;\n transition-timing-function: ease-out;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover, var(--sd-button-hover-color));\n }\n .gallery-folder-selected {\n background-color: var(--sd-button-selected-color);\n color: var(--sd-button-selected-text-color);\n }\n .gallery-folder-icon {\n font-size: 1.2em;\n color: var(--sd-button-icon-color);\n margin-right: 1em;\n filter: drop-shadow(1px 1px 2px black);\n float: left;\n }\n `);\n } else {\n folderStylesheet.replace(`\n .gallery-folder {\n cursor: pointer;\n padding: 8px 6px 8px 6px;\n max-width: 200px;\n overflow-x: hidden;\n text-wrap: nowrap;\n text-overflow: ellipsis;\n }\n .gallery-folder:hover {\n background-color: var(--button-primary-background-fill-hover);\n }\n .gallery-folder-selected {\n background-color: var(--button-primary-background-fill);\n }\n `);\n }\n const size = el.size ? el.size.value : opts.extra_networks_card_size;\n fileStylesheet.replace(`\n .gallery-file {\n object-fit: contain;\n cursor: pointer;\n height: ${size}px;\n width: ${opts.browser_fixed_width ? `${size}px` : 'unset'};\n }\n .gallery-file:hover {\n filter: grayscale(100%);\n }\n .gallery-overlay {\n position: absolute;\n height: 24px;\n background-color: rgba(0,0,0,0.7);\n display: block;\n text-align: right;\n padding: 4px;\n font-size: 1.2em;\n letter-spacing: 0.5em;\n margin-top: calc(140px - 32px);\n opacity: 75%;\n border-radius: var(--sd-border-radius);\n }\n :host(.gallery-file-selected) .gallery-file {\n box-shadow: 0 0 0 2px var(--sd-button-selected-color);\n }\n `);\n}\n\n// Classes\n\nclass HashSet extends Set {\n fallback = 0;\n constructor(val?: any) {\n super(val);\n this.fallback = 0;\n }\n\n override add(value: any): this {\n ++this.fallback;\n super.add(value);\n return this;\n }\n\n override clear(): void {\n this.fallback = 0;\n super.clear();\n }\n}\n\nconst galleryHashes = new HashSet();\n\nclass SimpleProgressBar {\n #container = document.createElement('div');\n #progress = document.createElement('div');\n #textDiv = document.createElement('div');\n #text = document.createElement('span');\n #visible = false;\n #interval: ReturnType | undefined;\n #max = 0;\n defaultStats = { queue: 0, fetch: 0, hash: 0, db: 0, cached: 0, fetched: 0, failed: 0, error: 0, callback: 0, elapsed: 0, count: 0 };\n stats = { ...this.defaultStats };\n /** @type {Set} */\n #monitoredSet;\n\n constructor(monitoredSet) {\n this.#monitoredSet = monitoredSet; // This is required because incrementing a variable with a class method turned out to not be an atomic operation\n this.#container.style.cssText = 'position:relative; overflow:hidden; border-radius:var(--sd-border-radius); width:100%; background-color:hsla(0,0%,36%,0.3); height:1.2rem; margin:0; padding:0; display:none;';\n this.#progress.style.cssText = 'position:absolute; left:0; height:100%; width:0; transition:width 200ms;';\n this.#progress.style.backgroundColor = 'var(--sd-main-accent-color)';\n this.#textDiv.style.cssText = 'position:relative; margin:auto; width:max-content; height:100%;';\n this.#text.style.cssText = 'user-select:none; color:white;';\n this.#textDiv.append(this.#text);\n this.#container.append(this.#progress, this.#textDiv);\n }\n\n start(total) {\n if (total <= 0) return;\n this.hide();\n this.#max = total;\n if (this.#monitoredSet.size >= this.#max) {\n this.stop();\n return;\n }\n this.#interval = setInterval(() => this.update(this.#monitoredSet.size, this.#max), 100);\n }\n\n attachTo(element) {\n if (element.hasChildNodes) element.innerHTML = '';\n element.appendChild(this.#container);\n }\n\n hide() {\n this.#container.style.display = 'none';\n this.#visible = false;\n this.#progress.style.width = '0';\n this.#text.textContent = '';\n }\n\n update(loaded, max) {\n // log('galleryUpdate', { loaded, max });\n this.#progress.style.width = `${Math.floor((loaded / max) * 100)}%`;\n this.#text.textContent = `${loaded}/${max}`;\n if (!this.#visible) {\n this.#container.style.display = 'block';\n this.#visible = true;\n }\n if (loaded >= max) this.stop();\n }\n\n stop() {\n clearInterval(this.#interval);\n // this.#interval = undefined;\n if (this.stats.count) {\n debug('gallery: thumbnail stats', this.stats);\n this.stats = { ...this.defaultStats };\n }\n setTimeout(() => this.hide(), 100);\n }\n}\n\nconst pb = new SimpleProgressBar(galleryHashes);\n\n/* This isn't as robust as the Web Locks API, but it will at least work if accessing a remote machine without HTTPS */\nclass SimpleFunctionQueue {\n #id;\n #running;\n #queue;\n\n constructor(id) {\n this.#id = id;\n this.#running = false;\n this.#queue = [];\n }\n\n static abortLogger(identifier, result) {\n if (typeof result === 'string' || (result instanceof DOMException && result.name === 'AbortError')) {\n log(identifier, typeof result === 'object' && result !== null ? (result as any).message || result : result);\n } else {\n error(identifier, result.message);\n }\n }\n\n /**\n * @param {{\n * signal: AbortSignal,\n * callback: Function\n * }} config\n */\n enqueue(config) {\n if (!(config.signal instanceof AbortSignal) || typeof config.callback !== 'function') {\n throw new Error('Invalid configuration. Object must contain an AbortSignal and a function');\n }\n if (config.signal.aborted) {\n debug(`${this.#id} Queue: Skipping addition to queue due to \"${config.signal.reason}\"`);\n return;\n }\n this.#queue.push(config);\n this.#tryRunNext();\n }\n\n async #tryRunNext() {\n if (this.#running || !this.#queue.length) return;\n try {\n const { signal, callback } = this.#queue.shift();\n if (signal.aborted) {\n return;\n }\n this.#running = true;\n if (callback.constructor.name.toLowerCase() === 'asyncfunction') {\n await callback();\n } else {\n callback();\n }\n } catch (err) {\n error(`${this.#id} Queue:`, err);\n } finally {\n this.#running = false;\n this.#tryRunNext();\n }\n }\n}\n\n// HTML Elements\n\nclass GalleryFolder extends HTMLElement {\n static folders = new Set();\n /** @type {GalleryFolder | null} */\n static #active = null;\n\n constructor(folder) {\n super();\n // Support both old format (string) and new format (object with path and label)\n if (typeof folder === 'object' && folder !== null) {\n this.name = decodeURI(folder.path || '');\n this.label = decodeURI(folder.label || folder.path || '');\n } else {\n this.name = decodeURI(folder);\n this.label = this.name;\n }\n this.style.overflowX = 'hidden';\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [folderStylesheet];\n\n this.div = document.createElement('div');\n }\n\n connectedCallback() {\n if (GalleryFolder.folders.has(this)) return; // Element is just being moved\n this.div.className = 'gallery-folder';\n this.div.innerHTML = `\\uf03e ${this.label}`;\n this.div.title = this.name; // Show full path on hover\n this.addEventListener('click', this.updateSelected);\n this.addEventListener('click', fetchFilesWS);\n this.shadow.appendChild(this.div);\n GalleryFolder.folders.add(this);\n if (this.name === currentGalleryFolder) {\n this.updateSelected();\n }\n }\n\n async disconnectedCallback() {\n await Promise.resolve(); // Wait for other microtasks (such as element moving)\n if (this.isConnected) return;\n GalleryFolder.folders.delete(this);\n if (GalleryFolder.#active === this) {\n GalleryFolder.#active = null;\n }\n }\n\n static getActive() {\n return GalleryFolder.#active;\n }\n\n updateSelected() {\n this.div.classList.add('gallery-folder-selected');\n GalleryFolder.#active = this;\n for (const folder of GalleryFolder.folders as any) {\n if (folder !== this) folder.div.classList.remove('gallery-folder-selected');\n }\n }\n}\n\n/**\n * Event-driven wait mechanism replacing the 50ms polling loop\n * @param {AbortSignal} signal - AbortController signal\n */\nasync function awaitForOutstanding(signal) {\n if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\n if (outstanding < maxFetchRequests) return; // if we are under the limit, proceed immediately\n await new Promise((resolve, reject) => { // otherwise, register a promise and wait for the queue to resolve us\n const onResolve = () => { // define what happens when this item gets its turn or gets aborted\n signal?.removeEventListener('abort', onAbort);\n resolve(true);\n };\n const onAbort = () => {\n const idx = fetchQueue.findIndex((item) => item.resolve === onResolve); // remove this specific request from the waiting queue if aborted\n if (idx !== -1) fetchQueue.splice(idx, 1);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n fetchQueue.push({ resolve: onResolve });\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nasync function delayFetchThumb(fn, signal) {\n const t0 = performance.now();\n try {\n await awaitForOutstanding(signal);\n } catch (err) {\n if ((err as DOMException).name === 'AbortError') return undefined;\n throw err;\n }\n pb.stats.queue = (pb.stats.queue || 0) + Math.round(performance.now() - t0);\n const t1 = performance.now();\n try {\n outstanding++;\n const ts = t0.toString();\n const res = await authFetch(`${window.api}/browser/thumb?file=${encodeURI(fn)}&ts=${ts}&exif=false`, { priority: 'low' });\n if (!res?.ok) {\n error(`fetchThumb: ${res.statusText}`);\n return undefined;\n }\n const json = await res.json();\n if (!res || !json || json.error || Object.keys(json).length === 0) {\n if (json.error) error(`fetchThumb: ${json.error}`);\n return undefined;\n }\n return json;\n } finally {\n outstanding--;\n pb.stats.fetch = (pb.stats.fetch || 0) + Math.round(performance.now() - t1);\n if (fetchQueue.length > 0 && outstanding < maxFetchRequests) { // queue magic: trigger the next waiting fetch immediately\n const nextRequest = fetchQueue.shift();\n nextRequest.resolve(); // This wakes up the next awaitForOutstanding()\n }\n }\n}\n\nclass GalleryFile extends HTMLElement {\n /** @type {AbortSignal} */\n #signal;\n\n constructor(folder, file, signal) {\n super();\n this.folder = folder;\n this.name = file;\n this.#signal = signal;\n this.src = `${this.folder}/${this.name}`.replace(/\\/+/g, '/'); // Ensure no //, ///, etc...\n this.fullFolder = this.src.replace(/\\/[^/]+$/, '');\n this.size = 0;\n this.mtime = 0;\n this.hash = undefined;\n this.exif = '';\n this.width = 0;\n this.height = 0;\n this.shadow = this.attachShadow({ mode: 'open' });\n this.shadow.adoptedStyleSheets = [fileStylesheet];\n this.firstRun = true;\n }\n\n async connectedCallback() {\n if (!this.firstRun) return; // Element is just being moved\n this.firstRun = false;\n const t0 = performance.now();\n pb.stats.count = (pb.stats.count || 0) + 1;\n // Check separator state early to hide the element immediately\n const dir = this.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) this.style.display = 'none';\n }\n\n this.hash = await getHash(`${this.src}/${this.size}/${this.mtime}`)\n .catch((err) => {\n error('getHash:', err);\n return null;\n });\n pb.stats.hash = (pb.stats.hash || 0) + Math.round(performance.now() - t0);\n let cachedData;\n if (opts.browser_cache) {\n const t1 = performance.now();\n // if (!pb.stats.keys) pb.stats.keys = await idbKeys();\n // if (pb.stats.keys && this.hash && pb.stats.keys.includes(this.hash)) cachedData = await idbGet(this.hash).catch(() => undefined);\n cachedData = await idbGet(this.hash).catch(() => undefined);\n pb.stats.db = (pb.stats.db || 0) + Math.round(performance.now() - t1);\n }\n const img = document.createElement('img');\n img.className = 'gallery-file';\n img.loading = 'lazy';\n img.onload = async () => {\n img.title += `\\nResolution: ${this.width} x ${this.height}`;\n this.title = img.title;\n if (!cachedData && opts.browser_cache) {\n if ((this.width === 0) || (this.height === 0)) { // fetch thumb failed so we use actual image\n this.width = img.naturalWidth;\n this.height = img.naturalHeight;\n }\n }\n };\n let ok = true;\n if (cachedData?.img) {\n img.src = cachedData.img;\n this.exif = cachedData.exif;\n this.width = cachedData.width;\n this.height = cachedData.height;\n this.size = cachedData.size;\n this.mtime = new Date(cachedData.mtime);\n pb.stats.cached = (pb.stats.cached || 0) + 1;\n } else {\n try {\n const json = await delayFetchThumb(this.src, this.#signal);\n if (!json) {\n ok = false;\n pb.stats.failed = (pb.stats.failed || 0) + 1;\n } else {\n img.src = json.data;\n this.exif = json.exif;\n this.width = json.width;\n this.height = json.height;\n this.size = json.size;\n this.mtime = new Date(json.mtime);\n pb.stats.fetched = (pb.stats.fetched || 0) + 1;\n if (opts.browser_cache && this.hash) {\n idbAdd({\n hash: this.hash,\n folder: this.fullFolder,\n file: this.name,\n size: this.size,\n mtime: this.mtime,\n width: this.width,\n height: this.height,\n src: this.src,\n exif: this.exif,\n img: img.src,\n // exif: await getExif(img), // alternative client-side exif\n // img: await createThumb(img), // alternative client-side thumb\n });\n }\n }\n } catch (err) { // thumb fetch failed so assign actual image\n img.src = `file=${this.src}`;\n pb.stats.error = (pb.stats.error || 0) + 1;\n }\n }\n pb.stats.callback = (pb.stats.callback || 0) + Math.round(performance.now() - t0);\n if (this.#signal.aborted) return;\n galleryHashes.add(this.hash);\n if (!ok) return;\n\n img.onclick = () => {\n setGallerySelectionByElement(this, { send: true });\n };\n img.onpointerenter = () => {\n el.overlay.display = 'block';\n this.shadow.appendChild(el.overlay);\n currentImage = this.src;\n currentName = this.name;\n currentTitle = this.title;\n };\n img.onpointerleave = () => {\n el.overlay.display = 'none';\n };\n img.title = `Folder: ${this.folder}\\nFile: ${this.name}\\nSize: ${this.size.toLocaleString()} bytes\\nModified: ${this.mtime.toLocaleString()}`;\n this.title = img.title;\n const shouldDisplayBasedOnSearch = this.title.toLowerCase().includes(el.search.value.toLowerCase()); // Final visibility check based on search term.\n if (this.style.display !== 'none') this.style.display = shouldDisplayBasedOnSearch ? '' : 'none'; // Only proceed if not already hidden by a closed separator\n this.shadow.appendChild(img);\n pb.stats.elapsed = (pb.stats.elapsed || 0) + Math.round(performance.now() - t0);\n }\n}\n\nasync function createThumb(img) {\n const sizeEl = document.getElementById('gallery-thumb-size');\n currentSize = sizeEl ? parseInt(sizeEl.value, 10) : opts.extra_networks_card_size;\n const height = currentSize;\n const width = opts.browser_fixed_width ? currentSize : 0;\n const canvas = document.createElement('canvas');\n const scaleY = height / img.height;\n const scaleX = width > 0 ? width / img.width : scaleY;\n const scale = Math.min(scaleX, scaleY);\n const scaledWidth = img.width * scale;\n const scaledHeight = img.height * scale;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n const dataURL = canvas.toDataURL('image/jpeg', 0.5);\n return dataURL;\n}\n\nasync function handleSeparator(separator) {\n separator.classList.toggle('gallery-separator-hidden');\n const nowHidden = separator.classList.contains('gallery-separator-hidden');\n\n // Store the state (true = open, false = closed)\n separatorStates.set(separator.title, !nowHidden);\n\n // Update arrow and count\n const arrow = separator.querySelector('.gallery-separator-arrow');\n arrow.style.transform = nowHidden ? 'rotate(0deg)' : 'rotate(90deg)';\n\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n // Check if file belongs to this exact directory\n const fileDir = f.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n\n if (separator.title.length > 0 && fileDirPath === separator.title) {\n f.style.display = nowHidden ? 'none' : '';\n }\n }\n // Note: Count is not updated here on manual toggle, as it reflects the total.\n // If I end up implementing it, the search function will handle dynamic count updates.\n}\n\nasync function addSeparators() {\n document.querySelectorAll('.gallery-separator').forEach((node) => { el.files.removeChild(node); });\n const all = Array.from(el.files.children);\n let lastDir;\n\n // Count root files (files without a directory path)\n const hasRootFiles = all.some((f) => f.name && !f.name.match(/[/\\\\]/));\n // Only auto-open first separator if there are no root files to display\n let isFirstSeparator = !hasRootFiles;\n\n // First pass: create separators\n for (const f of all) {\n let dir = f.name?.match(/(.*)[/\\\\]/);\n if (!dir) dir = '';\n else dir = dir[1];\n if (dir !== lastDir) {\n lastDir = dir;\n if (dir.length > 0) {\n // Count files in this directory\n let fileCount = 0;\n for (const file of all) {\n if (!file.name) continue;\n const fileDir = file.name.match(/(.*)[/\\\\]/);\n const fileDirPath = fileDir ? fileDir[1] : '';\n if (fileDirPath === dir) fileCount++;\n }\n\n const sep = document.createElement('div');\n sep.className = 'gallery-separator';\n sep.title = dir;\n\n // Default to open for the first separator if no state is saved, otherwise closed.\n const isOpen = separatorStates.has(dir) ? separatorStates.get(dir) : isFirstSeparator;\n separatorStates.set(dir, isOpen); // Ensure it's in the map\n if (isFirstSeparator) isFirstSeparator = false; // Subsequent separators will default to closed\n\n if (!isOpen) {\n sep.classList.add('gallery-separator-hidden');\n }\n\n // Create arrow span\n const arrow = document.createElement('span');\n arrow.className = 'gallery-separator-arrow';\n arrow.textContent = '\u25B6';\n arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n\n // Create directory name span\n const dirName = document.createElement('span');\n dirName.className = 'gallery-separator-name';\n dirName.textContent = dir;\n dirName.title = dir; // Show full path on hover\n\n // Create count span\n const count = document.createElement('span');\n count.className = 'gallery-separator-count';\n count.textContent = `${fileCount} files`;\n sep.dataset.totalFiles = String(fileCount); // Store total count for search filtering\n\n sep.appendChild(arrow);\n sep.appendChild(dirName);\n sep.appendChild(count);\n\n sep.onclick = () => handleSeparator(sep);\n el.files.insertBefore(sep, f);\n }\n }\n }\n\n // Second pass: hide files in closed directories\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n}\n\n// methods\n\nconst gallerySendImage = (_images) => [currentImage]; // invoked by gradio button\nwindow.gallerySendImage = gallerySendImage;\n\n/**\n * Helper function to update status with sort mode\n * @param {...string|[string, string]} messages - Each can be either a string to use as-is, or an array of a string label and value\n * @returns {void}\n */\nfunction updateStatusLine(...messages) {\n if (!el.status) return;\n messages.unshift(['Sort', sortMode.name]);\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < messages.length; i++) {\n const div = document.createElement('div');\n if (Array.isArray(messages[i])) {\n const [k, v] = messages[i];\n const tDiv = document.createElement('div');\n const ico = icons[k] || `${k}:`;\n tDiv.innerText = `${ico} ${v}`;\n div.append(tDiv);\n } else {\n const tDiv = document.createElement('div');\n tDiv.innerText = messages[i];\n div.append(tDiv);\n }\n fragment.append(div);\n }\n if (el.status.hasChildNodes()) el.status.innerHTML = '';\n el.status.append(fragment);\n}\n\nasync function injectGalleryStatusCSS() {\n const style = document.createElement('style');\n style.textContent = `\n #tab-gallery-status {\n display: inline-flex;\n flex-flow: row wrap;\n justify-content: ${opts.theme_type?.toLowerCase() === 'modern' ? 'flex-start' : 'flex-end'};\n }\n #tab-gallery-status > div {\n display: flex;\n max-width: 100%;\n white-space: nowrap;\n & div {\n &:first-child {\n flex-shrink: 0;\n margin-right: 4px;\n }\n &:last-child:not(:first-child) {\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n }\n }\n }\n #tab-gallery-status > div:not(:last-child)::after {\n content: '|';\n margin-inline: 6px;\n }`;\n document.head.append(style);\n}\n\nasync function wsConnect(socket, timeout = 5000) {\n const intrasleep = 100;\n const ttl = timeout / intrasleep;\n const isOpened = () => (socket.readyState === WebSocket.OPEN);\n if (socket.readyState !== WebSocket.CONNECTING) return isOpened();\n\n let loop = 0;\n while (socket.readyState === WebSocket.CONNECTING && loop < ttl) {\n await new Promise((resolve) => { setTimeout(resolve, intrasleep); });\n loop++;\n }\n return isOpened();\n}\n\nasync function gallerySearch() {\n if (el.search.busy) clearTimeout(el.search.busy);\n el.search.busy = setTimeout(async () => {\n const t0 = performance.now();\n const str = el.search.value.toLowerCase();\n const allFiles = Array.from(el.files.children).filter((node) => node.name);\n const allSeparators = Array.from(el.files.children).filter((node) => node.classList.contains('gallery-separator'));\n\n // If search is cleared, restore original view\n if (str === '') {\n allSeparators.forEach((sep) => {\n sep.style.display = 'flex';\n const isOpen = separatorStates.has(sep.title) ? separatorStates.get(sep.title) : false;\n\n const countSpan = sep.querySelector('.gallery-separator-count');\n if (countSpan && sep.dataset.totalFiles) {\n countSpan.textContent = `${sep.dataset.totalFiles} files`;\n }\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n sep.classList.toggle('gallery-separator-hidden', !isOpen);\n if (arrow) arrow.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';\n });\n\n allFiles.forEach((f) => {\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n const isOpen = separatorStates.get(dirPath);\n f.style.display = (!dirPath || isOpen) ? 'unset' : 'none';\n });\n\n updateStatusLine('Filter', 'Cleared', ['Images', allFiles.length.toLocaleString()]);\n return;\n }\n\n // --- Search logic ---\n let totalFound = 0;\n const directoryMatches = new Map();\n const fileMatches = new WeakSet();\n const r = /^(.+)([=<>])(.*)/;\n\n for (const f of allFiles) {\n let isMatch = false;\n if (r.test(str)) {\n const match = str.match(r);\n const key = match[1].trim();\n const op = match[2].trim();\n let val = match[3].trim();\n if (key === 'mtime') val = new Date(val);\n if (((op === '=') && (f[key] === val)) || ((op === '>') && (f[key] > val)) || ((op === '<') && (f[key] < val))) {\n isMatch = true;\n }\n } else if (f.title?.toLowerCase().includes(str) || f.exif?.toLowerCase().includes(str)) {\n isMatch = true;\n }\n\n if (isMatch) {\n fileMatches.add(f);\n totalFound++;\n const dir = f.name.match(/(.*)[/\\\\]/);\n const dirPath = (dir && dir[1]) ? dir[1] : '';\n directoryMatches.set(dirPath, (directoryMatches.get(dirPath) || 0) + 1);\n }\n }\n\n // Update separators based on search results\n for (const sep of allSeparators) {\n const dirPath = sep.title;\n const foundCount = directoryMatches.get(dirPath) || 0;\n\n if (foundCount > 0) {\n sep.style.display = 'flex'; // Show separator\n sep.classList.remove('gallery-separator-hidden'); // Force open\n\n const arrow = sep.querySelector('.gallery-separator-arrow');\n if (arrow) arrow.style.transform = 'rotate(90deg)';\n\n // Removed file count update during search as it was buggy.\n } else {\n sep.style.display = 'none'; // Hide separator\n }\n }\n\n // Update file visibility\n for (const f of allFiles) {\n f.style.display = fileMatches.has(f) ? 'unset' : 'none';\n }\n\n const t1 = performance.now();\n updateStatusLine('Filter', ['Images', `${totalFound.toLocaleString()} / ${allFiles.length.toLocaleString()}`], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`galleryFilter:${str}`, t1 - t0);\n refreshGallerySelection();\n }, 250);\n}\n\nconst findDuplicates = (arr, key) => {\n const map = new Map();\n return arr.filter((item) => {\n const value = item[key];\n if (map.has(value)) return true;\n map.set(value, true);\n return false;\n });\n};\n\nexport async function gallerySort(key) {\n // if currentSort does not start with key, default to key+A\n // else if currentSort ends with A change to D and vice versa for toggling sort order\n if (currentSort.startsWith(key)) currentSort = currentSort.endsWith('A') ? `${key}D` : `${key}A`;\n else currentSort = `${key}A`;\n\n if (!Object.hasOwn(gallerySorter, currentSort)) {\n error(`Gallery: \"${currentSort}\" is not a valid gallery sorting key`);\n return;\n }\n const t0 = performance.now();\n const arr = Array.from(el.files.children).filter((node) => node.name); // filter out separators\n if (arr.length === 0) return; // no files to sort\n const fragment = document.createDocumentFragment();\n\n // Helper to get directory path from a file node\n const getDirPath = (node) => {\n const match = node.name.match(/(.*)[/\\\\]/);\n return match ? match[1] : '';\n };\n\n // Partition into root files and subfolder files - root files always stay at top\n const rootFiles = arr.filter((node) => !getDirPath(node));\n const subfolderFiles = arr.filter((node) => getDirPath(node));\n\n // Group subfolder files by directory\n const folderGroups = new Map();\n for (const file of subfolderFiles) {\n const dir = getDirPath(file);\n if (!folderGroups.has(dir)) folderGroups.set(dir, []);\n folderGroups.get(dir).push(file);\n }\n\n sortMode = gallerySorter[currentSort];\n\n // Sort root files\n rootFiles.sort(sortMode.func);\n rootFiles.forEach((node) => fragment.appendChild(node));\n\n // Sort folder names alphabetically, then sort files within each folder\n // const sortedFolderNames = Array.from(folderGroups.keys()).sort((a, b) => a.localeCompare(b));\n const folderNames = Array.from(folderGroups.keys());\n const sortedFolderNames = currentSort.endsWith('A') ? folderNames.sort((a, b) => a.localeCompare(b)) : folderNames.sort((a, b) => b.localeCompare(a));\n\n for (const folderName of sortedFolderNames) {\n const files = folderGroups.get(folderName);\n files.sort(sortMode.func);\n files.forEach((node) => fragment.appendChild(node));\n }\n\n if (fragment.children.length === 0) return;\n el.files.innerHTML = '';\n el.files.appendChild(fragment);\n addSeparators();\n\n // After sorting and adding separators, ensure files respect separator states\n const all = Array.from(el.files.children);\n for (const f of all) {\n if (!f.name) continue; // Skip separators\n\n const dir = f.name.match(/(.*)[/\\\\]/);\n if (dir && dir[1]) {\n const dirPath = dir[1];\n const isOpen = separatorStates.get(dirPath);\n if (isOpen === false) {\n f.style.display = 'none';\n }\n }\n }\n\n const t1 = performance.now();\n log(`gallerySort: sort=${sortMode.name} len=${arr.length} time=${Math.floor(t1 - t0)}`);\n updateStatusLine(['Images', arr.length.toLocaleString()], ['Time', `${Math.round(t1 - t0).toLocaleString()}ms`]);\n timer(`gallerySort:${sortMode.name}`, t1 - t0);\n refreshGallerySelection();\n}\nwindow.gallerySort = gallerySort;\n\n/**\n * Function for removing the cleaning overlay\n * @callback ClearMsgCallback\n * @returns {void}\n */\n\n/**\n * Generate and display the overlay to announce cleanup is in progress.\n * @param {number} count - Number of entries being cleaned up\n * @param {boolean} all - Indicate that all thumbnails are being cleared\n * @returns {ClearMsgCallback}\n */\nfunction showCleaningMsg(count, all = false) {\n // Rendering performance isn't a priority since this doesn't run often\n const parent = el.folders.parentElement;\n const cleaningOverlay = document.createElement('div');\n const msgDiv = document.createElement('div');\n const msgText = document.createElement('div');\n const msgInfo = document.createElement('div');\n const anim = document.createElement('span');\n\n parent.style.position = 'relative';\n cleaningOverlay.style.cssText = 'position: absolute; height: 100%; width: 100%; background-color: var(--sd-main-accent-color); display: flex; align-items: center; justify-content: center; align-content: center; flex-wrap: wrap; opacity: 0.8; border-radius: var(--sd-border-radius);';\n msgDiv.style.cssText = 'display: block; color: var(--sd-button-normal-color); padding: 12px; border-radius: 8px; border-radius: var(--sd-border-radius);';\n msgText.style.cssText = 'font-size: 1.2em';\n msgInfo.style.cssText = 'font-size: 0.9em; text-align: center;';\n msgText.innerText = 'Thumbnail cleanup...';\n msgInfo.innerText = all ? 'Clearing all entries' : `Found ${count} old entries`;\n anim.classList.add('idbBusyAnim');\n\n msgDiv.append(msgText, msgInfo);\n cleaningOverlay.append(msgDiv, anim);\n parent.append(cleaningOverlay);\n return () => { cleaningOverlay.remove(); };\n}\n\nconst maintenanceQueue = new SimpleFunctionQueue('Gallery Maintenance');\n\n/**\n * Handles calling the cleanup function for the thumbnail cache\n * @param {string} folder - Folder to clean\n * @param {number} imgCount - Expected number of images in gallery\n * @param {AbortController} controller - AbortController that's handling this task\n * @param {boolean} force - Force full cleanup of the folder\n */\nasync function thumbCacheCleanup(folder, imgCount, controller, force = false) {\n if (!opts.browser_cache && !force) return;\n if (!folder || !imgCount) return;\n if (Date.now() - cleanupTimers[folder] < minCleanupTime) return; // Prevents multiple calls in quick succession\n cleanupTimers[folder] = Date.now();\n try {\n if (typeof folder !== 'string' || typeof imgCount !== 'number') {\n throw new Error('Function called with invalid arguments');\n }\n debug('thumbCacheCleanup', { folder, imgCount });\n await awaitForGallery(imgCount, controller.signal);\n } catch (err) {\n error('thumbCacheCleanup', { folder, error: err });\n return;\n }\n\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n if (Date.now() - maintenanceTimers[folder] < minCleanupTime) return;\n maintenanceTimers[folder] = Date.now();\n const t0 = performance.now();\n const keptGalleryHashes = force ? new Set() : new Set(galleryHashes.values()); // External context should be safe since this function run is guarded by AbortController/AbortSignal in the SimpleFunctionQueue\n const folderNormalized = folder.replace(/\\/+/g, '/').replace(/\\/$/, '');\n const recursiveFolder = IDBKeyRange.bound(folderNormalized, `${folderNormalized}\\uffff`, false, true);\n const cachedHashesCount = await idbCount(recursiveFolder)\n .catch((e) => {\n error('maintenanceQueue', { folder, error: e });\n return Infinity; // Forces next check to fail if something went wrong\n });\n const cleanupCount = cachedHashesCount - keptGalleryHashes.size;\n if (!force && (cleanupCount < minCleanupCount || !Number.isFinite(cleanupCount))) return; // Don't run when there aren't many excess entries\n log('galleryMaintenance', { folder });\n\n if (controller.signal.aborted) {\n debug('maintenanceQueue', { folder, reason: controller.signal.reason });\n return;\n }\n const cb_clearMsg = showCleaningMsg(cleanupCount);\n await idbFolderCleanup(keptGalleryHashes, recursiveFolder, controller.signal)\n .then((delcount) => {\n const t1 = performance.now();\n log('galleryMaintenance', { folder, kept: keptGalleryHashes.size, deleted: delcount, time: Math.round(t1 - t0) });\n timer(`thumbnailDBCleanup:${folder}`, t1 - t0);\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((reason) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', reason);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); }); // Delay removal by 1 second to ensure at least minimum visibility\n cb_clearMsg();\n });\n },\n });\n}\n\nfunction resetGalleryState(reason) {\n maintenanceController.abort(reason);\n const controller = new AbortController();\n maintenanceController = controller;\n\n galleryHashes.clear(); // Must happen AFTER the AbortController steps\n pb.hide();\n resetGallerySelection();\n return controller;\n}\n\nfunction clearCacheIfDisabled(browser_cache) {\n if (browser_cache === false) {\n log('thumbCacheCleanup', { disabled: true });\n const controller = resetGalleryState('Clearing all thumbnails from cache');\n maintenanceQueue.enqueue({\n signal: controller.signal,\n callback: async () => {\n const t0 = performance.now();\n const cb_clearMsg = showCleaningMsg(0, true);\n await idbClearAll(controller.signal)\n .then(() => {\n log('thumbCacheCleanup', { time: Math.floor(performance.now() - t0) });\n currentGalleryFolder = null;\n updateStatusLine('Thumbnail cache cleared');\n })\n .catch((e) => {\n SimpleFunctionQueue.abortLogger('thumbCacheCleanup', e);\n })\n .finally(async () => {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n cb_clearMsg();\n });\n },\n });\n }\n}\n\nexport function clearCache() {\n if (!currentGalleryFolder) return;\n const controller = resetGalleryState('Clearing folder thumbnails cache');\n el.files.innerHTML = '';\n log('clearCache', { folder: currentGalleryFolder });\n thumbCacheCleanup(currentGalleryFolder, 0, controller, true);\n}\nwindow.clearCache = clearCache;\n\nasync function fetchFilesHT(evt, controller) {\n const t0 = performance.now();\n const fragment = document.createDocumentFragment();\n updateStatusLine(['Folder', evt.target.name], 'in-progress');\n let numFiles = 0;\n\n const res = await authFetch(`${window.api}/browser/files?folder=${encodeURI(evt.target.name)}`);\n if (!res || res.status !== 200) {\n updateStatusLine(['Folder', evt.target.name], ['Failed', res?.statusText || 'No response']);\n return;\n }\n const jsonData = await res.json();\n for (const line of jsonData) {\n const data = decodeURI(line).split('##F##');\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n numFiles++;\n const f = new GalleryFile(data[0], fileName, controller.signal);\n fragment.appendChild(f);\n }\n }\n\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n\n const t1 = performance.now();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=http time=${Math.floor(t1 - t0)}ms`);\n timer(`galleryFetch:${evt.target.name}`, t1 - t0);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n}\n\nasync function fetchFilesWS(evt) { // fetch file-by-file list over websockets\n if (!url) return;\n // Abort previous controller and point to new controller for next time\n const controller = resetGalleryState('Gallery update'); // Called here because fetchFilesHT isn't called directly\n\n el.files.innerHTML = '';\n updateGalleryStyles();\n if (ws && ws.readyState === WebSocket.OPEN) ws.close(); // abort previous request\n let wsConnected = false;\n try {\n ws = new WebSocket(`${url}/sdapi/v1/browser/files`);\n wsConnected = await wsConnect(ws);\n } catch (err) {\n log('gallery: ws connect error', err);\n return;\n }\n log(`gallery: connected=${wsConnected} state=${ws?.readyState} url=${ws?.url}`);\n currentGalleryFolder = evt.target.name;\n if (!wsConnected) {\n await fetchFilesHT(evt, controller); // fallback to http\n return;\n }\n updateStatusLine(['Folder', evt.target.name]);\n const t0 = performance.now();\n let numFiles = 0;\n let t1 = performance.now();\n let fragment = document.createDocumentFragment();\n\n ws.onmessage = (event) => {\n t1 = performance.now();\n const data = decodeURI(event.data).split('##F##');\n if (data[0] === '#END#') {\n ws.close();\n } else {\n const fileName = data[1];\n const ext = fileName.split('.').pop().toLowerCase();\n if (SUPPORTED_EXTENSIONS.includes(ext)) {\n const file = new GalleryFile(data[0], fileName, controller.signal);\n numFiles++;\n fragment.appendChild(file);\n if (numFiles % fragmentSize === 0) {\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Status', 'in-progress'], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n el.files.appendChild(fragment);\n fragment = document.createDocumentFragment();\n }\n }\n }\n };\n ws.onclose = (event) => {\n if (controller.signal.aborted) return;\n el.files.appendChild(fragment);\n // gallerySort();\n log(`gallery: folder=${evt.target.name} num=${numFiles} method=ws time=${Math.floor(t1 - t0)}ms`);\n updateStatusLine(['Folder', evt.target.name], ['Images', numFiles.toLocaleString()], ['Time', `${Math.floor(t1 - t0).toLocaleString()}ms`]);\n pb.start(numFiles);\n addSeparators();\n refreshGallerySelection();\n thumbCacheCleanup(evt.target.name, numFiles, controller);\n };\n ws.onerror = (event) => {\n log('gallery ws error', event);\n };\n ws.send(encodeURI(evt.target.name));\n}\n\nasync function updateFolders() {\n // if (el.folders.children.length > 0) return;\n const res = await authFetch(`${window.api}/browser/folders`);\n if (!res || res.status !== 200) return;\n url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn\n const folders = await res.json();\n el.folders.innerHTML = '';\n for (const folder of folders) {\n const f = new GalleryFolder(folder);\n el.folders.appendChild(f);\n }\n}\n\nasync function monitorGalleries() {\n async function galleryMutation(mutations) {\n const galleries = mutations.filter((m) => m.target?.classList?.contains('preview'));\n for (const gallery of galleries) {\n const links = gallery.target.querySelectorAll('a');\n for (const link of links) {\n const href = link.getAttribute('href');\n if (!href) continue;\n const fn = href.split('/').pop().split('\\\\').pop();\n link.setAttribute('download', fn);\n }\n }\n }\n\n const galleryElements = gradioApp().querySelectorAll('.gradio-gallery');\n for (const gallery of galleryElements) {\n const galleryObserver = new MutationObserver(galleryMutation);\n galleryObserver.observe(gallery, { childList: true, subtree: true, attributes: true });\n }\n}\n\nasync function setOverlayAnimation() {\n const busyAnimation = document.createElement('style');\n\n // eslint-disable-next-line @stylistic/max-len\n busyAnimation.textContent = '.idbBusyAnim{width:16px;height:16px;border-radius:50%;display:block;margin:40px;position:relative;background:#aa3d00;color:#fff;box-shadow:-24px 0,24px 0;box-sizing:border-box;animation:2s ease-in-out infinite overlayRotation}@keyframes overlayRotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}';\n document.head.append(busyAnimation);\n}\n\nasync function initGalleryAutoRefresh() {\n const isModern = opts.theme_type?.toLowerCase() === 'modern';\n let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n let timeout = 0;\n while (!galleryTab && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 2500); });\n galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery');\n }\n if (!galleryTab) {\n error('Gallery: timeout');\n return;\n }\n const displayNoneRegEx = /display:\\s*none/;\n async function galleryAutoRefresh(mutations) {\n if (!opts.browser_gallery_autoupdate) return;\n for (const mutation of mutations) {\n switch (mutation.attributeName) {\n case 'class':\n if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n case 'style':\n if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) {\n await updateFolders();\n GalleryFolder.getActive()?.click();\n }\n break;\n default:\n break;\n }\n }\n }\n const galleryVisObserver = new MutationObserver(galleryAutoRefresh);\n galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true });\n}\n\nasync function overlayDelete(evt) {\n const res = await authFetch(`${window.api}/delete-image?file=${encodeURIComponent(currentImage)}`, { method: 'DELETE' });\n evt.stopPropagation();\n if (!res || res.status !== 200) {\n error('galleryDelete', { file: currentImage, status: res?.status, statusText: res?.statusText });\n return;\n }\n const data = await res.json();\n log('galleryDelete', data);\n GalleryFolder.getActive()?.click();\n}\n\nasync function overlayDownload(evt) {\n log('galleryDownload', currentImage);\n const link = document.createElement('a');\n link.href = `/file=${encodeURIComponent(currentImage)}`;\n link.download = currentName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n evt.stopPropagation();\n}\n\nasync function overlayInfo(evt) {\n evt.stopPropagation();\n const tgt = document.getElementById('html_info_formatted_gallery');\n if (!tgt) return;\n const res = await authFetch(`${window.api}/png-info?file=${encodeURI(currentImage)}`);\n if (!res || res.status !== 200) return;\n const data = await res.json();\n log('galleryInfo res', data);\n const prompt = data?.parameters?.Prompt || '';\n const negative = data?.parameters?.Negative || data?.parameters?.['Negative prompt'] || '';\n const raw = data?.info || '';\n const params = data?.parameters || {};\n delete params.Prompt;\n delete params.Negative;\n delete params['Negative prompt'];\n const paramsFormatted = Object.entries(params).map(([key, value]) => `${key}: ${value}`).join(' | ');\n tgt.innerHTML = `\n
    File: ${currentImage}
    \n
    Prompt: ${prompt}
    \n
    Negative: ${negative}
    \n
    ${paramsFormatted}
    \n
    Raw:
    ${raw}
    \n `;\n const img = document.querySelector('#gallery_gallery img');\n if (img) img.src = `/file=${encodeURIComponent(currentImage)}?t=${Date.now()}`; // Force refresh in case info endpoint is faster than cache update\n const status = document.querySelector('#html_log_gallery p');\n if (status) status.innerText = currentTitle;\n}\n\nasync function createOverlay() {\n if (el.overlay) return;\n el.overlay = document.createElement('div');\n el.overlay.className = 'gallery-overlay';\n const btnDownload = document.createElement('span');\n btnDownload.innerHTML = '\\udb85\\udc64';\n btnDownload.title = 'Download image';\n btnDownload.style.cursor = 'pointer';\n btnDownload.addEventListener('click', overlayDownload);\n const btnDelete = document.createElement('span');\n btnDelete.innerHTML = '\\uf05c';\n btnDelete.title = 'Delete image';\n btnDelete.style.cursor = 'pointer';\n btnDelete.addEventListener('click', overlayDelete);\n const btnInfo = document.createElement('span');\n btnInfo.innerHTML = '\\uf05a';\n btnInfo.title = 'Image metadata';\n btnInfo.style.cursor = 'pointer';\n btnInfo.addEventListener('click', overlayInfo);\n el.overlay.append(btnInfo, btnDelete, btnDownload);\n}\n\nasync function observeImageError(img: HTMLImageElement) {\n if (!img || !img.src) return;\n if (!img.src.toLowerCase().includes('.heic') && !img.src.toLowerCase().includes('.heif')) return;\n const origSrc = img.src;\n try {\n const t0 = performance.now();\n img.src = loadingSvg; // Use a loading spinner or placeholder image\n // @ts-ignore: external CDN module with no local types\n // eslint-disable-next-line import-x/no-unresolved\n const { default: heic2any } = await import('https://esm.sh/heic2any@0.0.4');\n const res = await authFetch(origSrc);\n if (!res || res.status !== 200) return;\n const imageBlob = await res.blob();\n if (!imageBlob || imageBlob.size <= 1024) {\n error('imageHEIC', { src: origSrc, res, blob: imageBlob });\n return;\n }\n const convertedBlob = await heic2any({\n blob: imageBlob,\n toType: 'image/jpeg',\n quality: 0.9,\n });\n img.src = URL.createObjectURL(convertedBlob);\n const t1 = performance.now();\n log('imageHEIC', { time: Math.round(t1 - t0), originalSize: imageBlob.size, convertedSize: convertedBlob.size });\n } catch (err) {\n error('imageHEIC:', { src: origSrc, err });\n }\n}\n\nasync function observeGalleryMutations() {\n const galleryContainers = document.querySelectorAll('.gradio-gallery');\n for (const galleryContainer of galleryContainers) {\n if (!galleryContainer) return;\n const galleryObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n const img = galleryContainer.querySelector('img');\n if (img && !galleryContainer.dataset.errorObserved) {\n galleryContainer.dataset.errorObserved = 'true';\n log('imageErrorHandler', { gallery: galleryContainer.id });\n img.addEventListener('error', () => observeImageError(img)); // late attach error handler as el may not be present\n galleryObserver.disconnect(); // stop observing after attaching the error handler\n }\n }\n }\n });\n galleryObserver.observe(galleryContainer, { childList: true, subtree: true });\n }\n}\n\nasync function blockQueueUntilReady() {\n // Add block to maintenanceQueue until cache is ready\n maintenanceQueue.enqueue({\n signal: new AbortController().signal, // Use standalone AbortSignal that can't be aborted\n callback: async () => {\n let timeout = 0;\n while (!idbIsReady() && timeout++ < 60) {\n await new Promise((resolve) => { setTimeout(resolve, 1000); });\n }\n if (!idbIsReady()) {\n throw new Error('Timed out waiting for thumbnail cache');\n }\n },\n });\n}\n\nexport async function initGallery() { // triggered on gradio change to monitor when ui gets sufficiently constructed\n const t0 = performance.now();\n el.folders = gradioApp().getElementById('tab-gallery-folders');\n el.files = gradioApp().getElementById('tab-gallery-files');\n el.status = gradioApp().getElementById('tab-gallery-status');\n el.search = gradioApp().querySelector('#tab-gallery-search textarea');\n el.size = document.getElementById('tab-gallery-thumb-size');\n if (!el.folders || !el.files || !el.status || !el.search) {\n error('initGallery', 'Missing gallery elements');\n return;\n }\n\n if (el.size) {\n el.size.value = opts.extra_networks_card_size;\n el.size.addEventListener('input', updateGalleryStyles);\n }\n blockQueueUntilReady(); // Run first\n createOverlay();\n updateGalleryStyles();\n injectGalleryStatusCSS();\n setOverlayAnimation();\n\n const progress = gradioApp().getElementById('tab-gallery-progress');\n if (progress) pb.attachTo(progress);\n else log('initGallery', 'Failed to attach loading progress bar');\n\n if (galleryInitialized) {\n log('initGallery', 'already initialized');\n return;\n }\n galleryInitialized = true;\n\n el.search.addEventListener('input', gallerySearch);\n el.btnSend = gradioApp().getElementById('tab-gallery-send-image');\n document.getElementById('tab-gallery-files').style.height = opts.logmonitor_show ? '75vh' : '85vh';\n\n monitorGalleries();\n updateFolders();\n initGalleryAutoRefresh();\n observeGalleryMutations();\n [\n 'browser_folders',\n 'outdir_samples',\n 'outdir_txt2img_samples',\n 'outdir_img2img_samples',\n 'outdir_control_samples',\n 'outdir_extras_samples',\n 'outdir_save',\n 'outdir_video',\n 'outdir_init_images',\n 'outdir_grids',\n 'outdir_txt2img_grids',\n 'outdir_img2img_grids',\n 'outdir_control_grids',\n ].forEach((op) => { monitorOption(op, updateFolders); });\n const t1 = performance.now();\n log('initGallery', Math.round(t1 - t0));\n timer('initGallery', t1 - t0);\n}\n\n// register on startup\n\ncustomElements.define('gallery-folder', GalleryFolder);\ncustomElements.define('gallery-file', GalleryFile);\n", "import exifr from 'exifr';\nimport Panzoom from 'panzoom';\nimport { log, debug } from './logger';\nimport { gradioApp, onAfterUiUpdate } from './script';\nimport { getENActiveTab } from './extraNetworks';\nimport { all_gallery_buttons, selected_gallery_button } from './ui';\nimport { timer } from './timers';\n\n// A full size 'lightbox' preview modal shown when left clicking on gallery previews\nlet previewDrag = false;\nlet modalPreviewZone;\nlet previewInstance;\n\nfunction cycleImageFit() {\n const root = document.documentElement;\n const current = getComputedStyle(root).getPropertyValue('--sd-image-fit').trim();\n let next = 'contain';\n if (current === 'contain') next = 'cover';\n else if (current === 'cover') next = 'fill';\n else if (current === 'fill') next = 'scale-down';\n else if (current === 'scale-down') next = 'none';\n root.style.setProperty('--sd-image-fit', next);\n log('cycleImageFit', current, next);\n}\n\nwindow.cycleImageFit = cycleImageFit;\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nfunction closeModal(evt, force = false) {\n if (force) gradioApp().getElementById('lightboxModal').style.display = 'none';\n if (previewDrag) return;\n if (evt?.button !== 0) return;\n gradioApp().getElementById('lightboxModal').style.display = 'none';\n let thumbnails = Array.from(gradioApp().querySelectorAll('.thumbnails .thumbnail-item'));\n thumbnails = thumbnails.filter((el) => el.checkVisibility());\n if (thumbnails.length === 0) return;\n thumbnails[0].focus();\n}\n\nfunction modalImageSwitch(offset) {\n const negmod = (n, m) => ((n % m) + m) % m;\n const galleryButtons = all_gallery_buttons();\n if (galleryButtons.length > 1) {\n const currentButton = selected_gallery_button();\n let result = -1;\n galleryButtons.forEach((v, i) => {\n if (v === currentButton) result = i;\n });\n if (result !== -1) {\n const nextButton = galleryButtons[negmod((result + offset), galleryButtons.length)];\n nextButton.click();\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n modalImage.src = nextButton.children[0].src;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${modalImage.src})`);\n return;\n }\n }\n\n const galleryFilesContainer = gradioApp().getElementById('tab-gallery-files');\n if (!galleryFilesContainer || !galleryFilesContainer.offsetParent) return;\n const gallerySelection = window.getGallerySelection();\n if (!gallerySelection.files.length || gallerySelection.files.length <= 1) return;\n const baseIndex = gallerySelection.index >= 0 ? gallerySelection.index : 0;\n const nextIndex = negmod((baseIndex + offset), gallerySelection.files.length);\n window.setGallerySelection(nextIndex, { send: true });\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const directSrc = window.getGallerySelectedUrl();\n if (modalImage && modal && directSrc) {\n modalImage.src = directSrc;\n if (modalImage.style.display === 'none') modal.style.setProperty('background-image', `url(${directSrc})`);\n }\n}\n\nfunction modalSaveImage(event?: any) {\n const tabName = getENActiveTab();\n const saveBtn = gradioApp().getElementById(`save_${tabName}`);\n log('modalSaveImage', tabName, saveBtn);\n if (saveBtn) saveBtn.click();\n modalImageSwitch(0);\n}\n\nfunction modalKeyHandler(event) {\n log('modalKeyHandler', event.key);\n switch (event.key) {\n case 's':\n modalSaveImage();\n break;\n case 'ArrowLeft':\n modalImageSwitch(-1);\n break;\n case 'ArrowRight':\n modalImageSwitch(1);\n break;\n case 'Escape':\n closeModal(null, true);\n break;\n }\n event.stopPropagation();\n}\n\nfunction decodeBytes(bytes: Uint8Array): string {\n if (!bytes || bytes.length < 8) return '';\n const prefix = new TextDecoder('ascii').decode(bytes.slice(0, 8));\n const data = bytes.slice(8);\n if (prefix.startsWith('ASCII')) return new TextDecoder('ascii').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('UNICODE')) return new TextDecoder('utf-16be').decode(data).replace(/\\0+$/, '');\n if (prefix.startsWith('JIS')) return new TextDecoder('shift-jis').decode(data).replace(/\\0+$/, '');\n return new TextDecoder().decode(bytes).replace(/\\0+$/, '');\n}\n\nexport async function getExif(el) {\n let exif: any = '';\n try {\n exif = await exifr.parse(el, { userComment: true });\n } catch (e) {\n log('getExif', el, e);\n return exif;\n }\n // let html = `Image ${el.src} Size ${el.naturalWidth}x${el.naturalHeight}
    `;\n let html = '';\n let params;\n if (!exif) {\n log('getExif', 'exif is none');\n return html;\n }\n if (exif.parameters) params = exif.parameters;\n else if (exif.userComment) params = decodeBytes(exif.userComment);\n else params = '';\n // debug('getExif', params);\n if (params.length > 0) html += `Prompt ${params || ''}
    `;\n html = html.replace('Negative prompt:', '
    Negative');\n html = html.replace('Steps:', '
    Params Steps:');\n html = html.replaceAll('\\n', '
    ');\n html = html.replaceAll('

    ', '
    ');\n return html;\n}\n\nasync function displayExif(el) {\n const modalExif = gradioApp().getElementById('modalExif');\n const html = await getExif(el);\n modalExif.innerHTML = html;\n}\n\nfunction showModal(event) {\n const source = event.target || event.srcElement;\n const modalImage = gradioApp().getElementById('modalImage');\n const lb = gradioApp().getElementById('lightboxModal');\n lb.ownerSVGElement = modalImage;\n modalImage.onload = () => {\n previewInstance.moveTo(0, 0);\n modalPreviewZone.focus();\n if (opts.viewer_show_metadata) displayExif(modalImage);\n };\n modalImage.src = source.src;\n if (modalImage.style.display === 'none') lb.style.setProperty('background-image', `url(${source.src})`);\n lb.style.display = 'flex';\n lb.onkeydown = modalKeyHandler;\n event.stopPropagation();\n}\n\nfunction modalDownloadImage() {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = gradioApp().getElementById('modalImage').src;\n link.download = 'image';\n document.body.appendChild(link);\n link.click();\n setTimeout(() => {\n URL.revokeObjectURL(link.href);\n link.parentNode.removeChild(link);\n }, 0);\n}\n\nfunction modalZoomSet(modalImage, enable) {\n localStorage.setItem('modalZoom', enable ? 'yes' : 'no');\n if (modalImage) modalImage.classList.toggle('modalImageFullscreen', !!enable);\n}\n\nfunction setupImageForLightbox(image) {\n if (image.dataset.modded) return;\n image.dataset.modded = 'true';\n image.style.cursor = 'pointer';\n image.style.userSelect = 'none';\n}\n\nfunction modalZoomToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen'));\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalTileToggle(event) {\n const modalImage = gradioApp().getElementById('modalImage');\n const modal = gradioApp().getElementById('lightboxModal');\n const isTiling = modalImage.style.display === 'none';\n if (isTiling) {\n modalImage.style.display = 'block';\n modal.style.setProperty('background-image', 'none');\n } else {\n modalImage.style.display = 'none';\n modal.style.setProperty('background-image', `url(${modalImage.src})`);\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalResetInstance(event) {\n const modalImage = document.getElementById('modalImage');\n previewInstance.dispose();\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction modalToggleParams(event) {\n const modalExif = gradioApp().getElementById('modalExif');\n if (modalExif.style.display === 'none' || modalExif.style.display === '') {\n modalExif.style.display = 'block';\n } else {\n modalExif.style.display = 'none';\n }\n event.stopPropagation();\n modalImageSwitch(0);\n}\n\nfunction galleryClickEventHandler(event) {\n if (event.button !== 0) return;\n if (event.target.nodeName === 'IMG' && !event.target.parentNode.classList.contains('thumbnail-item')) {\n const initialZoom = (localStorage.getItem('modalZoom') || true) === 'yes';\n modalZoomSet(gradioApp().getElementById('modalImage'), initialZoom);\n event.preventDefault();\n showModal(event);\n }\n}\n\nasync function bindImageViewer() {\n // Each tab has its own gradio-gallery\n const galleryPreviews = gradioApp().querySelectorAll('.gradio-gallery > div.preview');\n for (const galleryPreview of galleryPreviews) {\n if (!galleryPreview.hasAttribute('data-listener')) galleryPreview.addEventListener('click', galleryClickEventHandler, true);\n galleryPreview.setAttribute('data-listener', 'true');\n galleryPreview.querySelectorAll('img').forEach(setupImageForLightbox);\n }\n}\n\nexport async function initImageViewer() {\n const t0 = performance.now();\n // main elements\n const modal = document.createElement('div');\n modal.id = 'lightboxModal';\n\n modalPreviewZone = document.createElement('div');\n modalPreviewZone.className = 'lightboxModalPreviewZone';\n\n const modalImage = document.createElement('img');\n modalImage.id = 'modalImage';\n modalPreviewZone.appendChild(modalImage);\n previewInstance = Panzoom(modalImage, { zoomSpeed: 0.05, minZoom: 0.1, maxZoom: 5.0, filterKey: (/* e, dx, dy, dz */) => true });\n\n // toolbar\n const modalZoom = document.createElement('span');\n modalZoom.id = 'modal_zoom';\n modalZoom.className = 'cursor';\n modalZoom.innerHTML = '\\uf531';\n modalZoom.title = 'Toggle zoomed view';\n modalZoom.addEventListener('click', modalZoomToggle, true);\n\n const modalReset = document.createElement('span');\n modalReset.id = 'modal_reset';\n modalReset.className = 'cursor';\n modalReset.innerHTML = '\\uf532';\n modalReset.title = 'Reset zoomed view';\n modalReset.addEventListener('click', modalResetInstance, true);\n\n const modalTile = document.createElement('span');\n modalTile.id = 'modal_tile';\n modalTile.className = 'cursor';\n modalTile.innerHTML = '\\udb81\\udd70';\n modalTile.title = 'Preview tiling';\n modalTile.addEventListener('click', modalTileToggle, true);\n\n const modalSave = document.createElement('span');\n modalSave.id = 'modal_save';\n modalSave.className = 'cursor';\n modalSave.innerHTML = '\\udb80\\udd93';\n modalSave.title = 'Save Image';\n modalSave.addEventListener('click', modalSaveImage, true);\n\n const modalDownload = document.createElement('span');\n modalDownload.id = 'modal_download';\n modalDownload.className = 'cursor';\n modalDownload.innerHTML = '\\udb85\\udc62';\n modalDownload.title = 'Download Image';\n modalDownload.addEventListener('click', modalDownloadImage, true);\n\n const modalClose = document.createElement('span');\n modalClose.id = 'modal_close';\n modalClose.className = 'cursor';\n modalClose.innerHTML = '\\udb80\\udd57';\n modalClose.title = 'Close';\n modalClose.addEventListener('click', (evt) => closeModal(evt, true), true);\n\n const modalToggleParamsBtn = document.createElement('span');\n modalToggleParamsBtn.id = 'modal_toggle_params';\n modalToggleParamsBtn.className = 'cursor';\n modalToggleParamsBtn.innerHTML = '\\uf05a';\n modalToggleParamsBtn.title = 'Toggle Parameters';\n modalToggleParamsBtn.addEventListener('click', modalToggleParams, true);\n\n // exif\n const modalExif = document.createElement('div');\n modalExif.id = 'modalExif';\n modalExif.style = 'position: absolute; bottom: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.5); color: var(--neutral-300); padding: 1em; font-size: small; line-height: 1.2em; z-index: 1; display: none;';\n\n // handlers\n modalPreviewZone.addEventListener('mousedown', () => { previewDrag = false; });\n modalPreviewZone.addEventListener('touchstart', () => { previewDrag = false; }, { passive: true });\n modalPreviewZone.addEventListener('mousemove', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('touchmove', () => { previewDrag = true; }, { passive: true });\n modalPreviewZone.addEventListener('scroll', () => { previewDrag = true; });\n modalPreviewZone.addEventListener('mouseup', (evt) => closeModal(evt));\n modalPreviewZone.addEventListener('touchend', (evt) => closeModal(evt));\n\n const modalPrev = document.createElement('a');\n modalPrev.className = 'modalPrev';\n modalPrev.innerHTML = '❮';\n modalPrev.addEventListener('click', () => modalImageSwitch(-1), true);\n // modalPrev.addEventListener('keydown', modalKeyHandler, true);\n\n const modalNext = document.createElement('a');\n modalNext.className = 'modalNext';\n modalNext.innerHTML = '❯';\n modalNext.addEventListener('click', () => modalImageSwitch(1), true);\n // modalNext.addEventListener('keydown', modalKeyHandler, true);\n\n const modalControls = document.createElement('div');\n modalControls.className = 'modalControls gradio-container';\n\n // build interface\n modal.appendChild(modalPrev);\n modal.appendChild(modalPreviewZone);\n modal.appendChild(modalNext);\n modal.append(modalControls);\n modalControls.appendChild(modalZoom);\n modalControls.appendChild(modalReset);\n modalControls.appendChild(modalTile);\n modalControls.appendChild(modalSave);\n modalControls.appendChild(modalDownload);\n modalControls.appendChild(modalToggleParamsBtn);\n modalControls.appendChild(modalClose);\n modal.append(modalExif);\n\n gradioApp().appendChild(modal);\n const t1 = performance.now();\n log('initImageViewer', Math.round(t1 - t0));\n timer('initImageViewer', t1 - t0);\n}\n\nonAfterUiUpdate(bindImageViewer);\n", "import { log } from './logger';\n\n/*\n * Extra-networks completion for SD.Next prompt textareas.\n *\n * Companion to autocomplete.js: exposes sorted indices for LoRAs, embeddings, and wildcards,\n * each backed by an existing enumeration endpoint. Dispatch and insertion are driven from\n * autocomplete.js via the mode returned by getCurrentWord().\n */\n\ninterface XnItem {\n name: string;\n display?: string;\n}\n\ninterface SearchItem {\n name: string;\n display: string;\n}\n\ntype SearchResult = SearchItem & { kind: 'lora' | 'embed' | 'wildcard' };\n\n/** Binary search for the first item where item.name >= query. */\nexport function lowerBound(items: { name: string }[], query: string): number {\n let lo = 0;\n let hi = items.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (items[mid].name < query) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface XnEngine {\n lora: XnIndex;\n embed: XnIndex;\n wildcard: XnIndex;\n fetchJson(path: string): Promise;\n loadAll(): Promise;\n searchLoras(prefix: string, limit?: number): SearchResult[];\n searchEmbeddings(prefix: string, limit?: number): SearchResult[];\n searchWildcards(prefix: string, limit?: number): SearchResult[];\n}\n\n// -- Indices --\n\nclass XnIndex {\n items: SearchItem[];\n\n constructor(items: XnItem[]) {\n // items: [{ name, display }]. Sorted in-place by lowercase name.\n this.items = items.map(({ name, display }) => ({\n name: String(name).toLowerCase(),\n display: display ?? name,\n }));\n this.items.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n search(prefix: string, limit = 20): SearchItem[] {\n const query = String(prefix).toLowerCase();\n // Empty query returns the first `limit` items so `= 3) {\n for (let i = 0; i < this.items.length && matches.length < limit; i++) {\n if (this.items[i].name.includes(query)) matches.push(this.items[i]);\n }\n }\n return matches.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nexport const xnEngine: XnEngine = {\n lora: new XnIndex([]),\n embed: new XnIndex([]),\n wildcard: new XnIndex([]),\n\n async fetchJson(path) {\n try {\n // const resp = await fetch(`${window.api}${path}`, { credentials: 'include' });\n const resp = await authFetch(`${window.api}${path}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n return await resp.json();\n } catch (e) {\n log('autoComplete', { xnFetchFailed: path, error: String(e) });\n return null;\n }\n },\n\n async loadAll() {\n // LoRAs: [{name, alias, path, metadata}, ...]\n const loraData = await this.fetchJson('/loras');\n if (Array.isArray(loraData)) {\n const items: XnItem[] = [];\n for (const lo of loraData) {\n if (typeof lo === 'object' && lo && 'name' in lo && typeof lo.name === 'string') items.push({ name: lo.name });\n if (typeof lo === 'object' && lo && 'alias' in lo && typeof lo.alias === 'string' && lo.alias !== (lo as { name?: string }).name) items.push({ name: lo.alias });\n }\n this.lora = new XnIndex(items);\n }\n // Embeddings: {loaded: [...], skipped: [...]}\n if (window.opts.diffusers_enable_embed) {\n const embData = await this.fetchJson('/embeddings') as Record | null;\n if (embData && typeof embData === 'object') {\n const loaded = Array.isArray(embData.loaded) ? embData.loaded : [];\n this.embed = new XnIndex(loaded.map((name) => ({ name: String(name) })));\n }\n } else {\n this.embed = new XnIndex([]);\n }\n // Wildcards: [{name}, ...]\n if (window.opts.wildcards_enabled) {\n const wcData = await this.fetchJson('/wildcards');\n if (Array.isArray(wcData)) {\n this.wildcard = new XnIndex(\n wcData\n .filter((w) => typeof w === 'object' && w && 'name' in w && typeof w.name === 'string')\n .map((w) => ({ name: w.name })),\n );\n }\n } else {\n this.wildcard = new XnIndex([]);\n }\n log('autoComplete', {\n xnLoaded: true,\n lora: this.lora.items.length,\n embed: this.embed.items.length,\n wildcard: this.wildcard.items.length,\n });\n },\n\n searchLoras(prefix, limit = 20) {\n return this.lora.search(prefix, limit).map((item) => ({ ...item, kind: 'lora' as const }));\n },\n\n searchEmbeddings(prefix, limit = 20) {\n return this.embed.search(prefix, limit).map((item) => ({ ...item, kind: 'embed' as const }));\n },\n\n searchWildcards(prefix, limit = 20) {\n return this.wildcard.search(prefix, limit).map((item) => ({ ...item, kind: 'wildcard' as const }));\n },\n};\n", "import { xnEngine, lowerBound } from './autocomplete_xn';\nimport { log } from './logger';\nimport { gradioApp, onAfterUiUpdate, onOptionsChanged, executeCallbacks, optionsChangedCallbacks } from './script';\nimport { timer } from './timers';\nimport { updateInput } from './ui';\n\n/*\n * Tag autocomplete for SD.Next prompt textareas.\n *\n * Ported from Enso's CodeMirror-based autocomplete (autocomplete.ts).\n * Uses binary search on sorted tag arrays for O(log n) prefix lookup,\n * with substring fallback for 4+ char queries.\n */\n\n// -- Category colors (unified 14-category scheme) --\n\nconst CATEGORY_COLORS = {\n 0: '#0075f8', // general\n 1: '#cc0000', // artist\n 2: '#ff4500', // studio\n 3: '#9900ff', // copyright\n 4: '#00ab2c', // character\n 5: '#ed5d1f', // species\n 6: '#8a66ff', // genre\n 7: '#00cccc', // medium\n 8: '#6b7280', // meta\n 9: '#228b22', // lore\n 10: '#e67e22', // lens\n 11: '#f1c40f', // lighting\n 12: '#1abc9c', // composition\n 13: '#e84393', // color\n};\n\nconst CATEGORY_NAMES = {\n 0: 'general',\n 1: 'artist',\n 2: 'studio',\n 3: 'copyright',\n 4: 'character',\n 5: 'species',\n 6: 'genre',\n 7: 'medium',\n 8: 'meta',\n 9: 'lore',\n 10: 'lens',\n 11: 'lighting',\n 12: 'composition',\n 13: 'color',\n};\n\n// Glyph + color per result kind. Renders in place of the category dot for non-tag results.\nconst KIND_GLYPHS = {\n tag: { glyph: '\u25CF', color: null }, // color pulled from tag category\n lora: { glyph: '\u25C6', color: '#8a66ff' },\n embed: { glyph: '\u25B2', color: '#1abc9c' },\n wildcard: { glyph: '\u2605', color: '#f1c40f' },\n};\n\nlet active = false;\n\ninterface TagResult {\n name: string;\n display: string;\n category: number | string;\n count: number;\n aliases?: string[];\n matchedVia?: 'alias' | 'translation';\n matchedAlias?: string;\n matchedTerm?: string;\n}\n\n// -- Utilities (ported from Enso) --\n\n/** Format post count as abbreviated string. */\nfunction formatCount(count: number): string {\n if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;\n if (count >= 1_000) return `${Math.round(count / 1_000)}k`;\n return String(count);\n}\n\n/**\n * Estimate viewport Y of the bottom of the caret line using a persistent\n * offscreen mirror div. Styles and width are re-read from the textarea on\n * every call so resized textareas are handled correctly.\n */\nlet caretMirror: HTMLDivElement | null = null;\nlet caretMarker: HTMLSpanElement | null = null;\nconst MIRROR_PROPS = ['fontFamily', 'fontSize', 'fontWeight', 'fontStyle',\n 'lineHeight', 'letterSpacing', 'wordSpacing', 'textTransform',\n 'padding', 'border', 'boxSizing'];\n\nfunction caretViewportY(textarea: HTMLTextAreaElement): number {\n if (!caretMirror) {\n caretMirror = document.createElement('div');\n caretMirror.className = 'autocomplete-mirror';\n caretMirror.style.whiteSpace = 'pre-wrap';\n caretMirror.style.wordWrap = 'break-word';\n caretMirror.style.position = 'absolute';\n caretMirror.style.left = '-9999px';\n caretMirror.style.overflow = 'hidden';\n caretMarker = document.createElement('span');\n caretMarker.textContent = '\\u200b';\n document.body.appendChild(caretMirror);\n }\n const cs = getComputedStyle(textarea);\n for (const p of MIRROR_PROPS) caretMirror.style[p] = cs[p];\n caretMirror.style.width = `${textarea.offsetWidth}px`;\n caretMirror.textContent = textarea.value.substring(0, textarea.selectionStart);\n caretMirror.appendChild(caretMarker);\n const offset = caretMarker.offsetTop + caretMarker.offsetHeight;\n return textarea.getBoundingClientRect().top + offset - textarea.scrollTop;\n}\n\n// -- TagIndex --\n\nclass TagIndex {\n categories: Record;\n tags: TagResult[];\n aliasEntries: { name: string; display: string; tag: TagResult }[];\n translations: Map;\n tagByName: Map;\n translationEntries: { name: string; foreign: string; canonical: string }[];\n\n constructor(data: any) {\n this.categories = data.categories || {};\n // Tuples are [name, catId, count] or [name, catId, count, aliases]. Default `aliases = []`\n // keeps legacy 3-tuple dictionaries working unchanged.\n this.tags = data.tags.map(([name, category, count, aliases = []]) => ({\n name: name.toLowerCase(),\n display: name,\n category,\n count,\n aliases,\n }));\n this.tags.sort((a, b) => a.name.localeCompare(b.name));\n // Alias index parallel to this.tags. Each entry has .name so lowerBound works on both.\n this.aliasEntries = [];\n for (const tag of this.tags) {\n if (!tag.aliases || tag.aliases.length === 0) continue;\n for (const alias of tag.aliases) {\n this.aliasEntries.push({ name: alias.toLowerCase(), display: alias, tag });\n }\n }\n this.aliasEntries.sort((a, b) => a.name.localeCompare(b.name));\n // Optional translations companion: foreign_term -> canonical_tag_name.\n // tagByName is keyed on canonical lowercased name for O(1) resolution from a translation hit.\n this.translations = new Map();\n this.tagByName = new Map(this.tags.map((t) => [t.name, t]));\n if (data.translations && typeof data.translations === 'object') {\n for (const [foreign, canonical] of Object.entries(data.translations)) {\n if (typeof foreign !== 'string' || typeof canonical !== 'string') continue;\n this.translations.set(foreign.toLowerCase(), { canonical: canonical.toLowerCase(), foreign });\n }\n }\n // Sorted translation keys for prefix+substring scan via lowerBound.\n this.translationEntries = [...this.translations.entries()]\n .map(([foreignLower, { canonical, foreign }]) => ({ name: foreignLower, foreign, canonical }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Prefix search with binary search across canonical names and aliases. Returns matches sorted by count descending. */\n search(prefix: string, limit = 20): TagResult[] {\n const query = prefix.toLowerCase().replace(/ /g, '_');\n if (!query) return [];\n // Canonical prefix matches\n const matches = [];\n const start = lowerBound(this.tags, query);\n for (let i = start; i < this.tags.length && matches.length < limit * 5; i++) {\n if (!this.tags[i].name.startsWith(query)) break;\n matches.push(this.tags[i]);\n }\n // Alias prefix matches. Annotate so render can show \"canonical (alias)\".\n const aliasStart = lowerBound(this.aliasEntries, query);\n for (let i = aliasStart; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (!entry.name.startsWith(query)) break;\n matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n // Substring fallback (canonical + aliases) for 4+ char queries when prefix matching returned nothing.\n if (matches.length === 0 && query.length >= 4) {\n for (let i = 0; i < this.tags.length && matches.length < limit * 5; i++) {\n if (this.tags[i].name.includes(query)) matches.push(this.tags[i]);\n }\n for (let i = 0; i < this.aliasEntries.length && matches.length < limit * 10; i++) {\n const entry = this.aliasEntries[i];\n if (entry.name.includes(query)) matches.push({ ...entry.tag, matchedVia: 'alias', matchedAlias: entry.display });\n }\n }\n // Translation lookup. Prefix scan over foreign terms, resolving to canonical tags when present.\n if (this.translationEntries.length > 0) {\n const tStart = lowerBound(this.translationEntries, query);\n for (let i = tStart; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (!entry.name.startsWith(query)) break;\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n // Substring fallback over translation keys (CJK/short foreign terms benefit from 2-char threshold)\n if (query.length >= 2) {\n for (let i = 0; i < this.translationEntries.length && matches.length < limit * 10; i++) {\n const entry = this.translationEntries[i];\n if (entry.name.includes(query) && !entry.name.startsWith(query)) {\n const canonicalTag = this.tagByName.get(entry.canonical);\n if (canonicalTag) matches.push({ ...canonicalTag, matchedVia: 'translation', matchedTerm: entry.foreign });\n }\n }\n }\n }\n // Dedupe by canonical name; prefer canonical (no matchedVia) over alias/translation matches.\n const seen = new Map();\n for (const tag of matches) {\n const existing = seen.get(tag.name);\n if (!existing || (existing.matchedVia && !tag.matchedVia)) seen.set(tag.name, tag);\n }\n const result = [...seen.values()];\n result.sort((a, b) => b.count - a.count);\n return result.slice(0, limit);\n }\n}\n\n// -- Engine --\n\nconst engine = {\n indices: new Map(), // name -> TagIndex\n categoryColors: { ...CATEGORY_COLORS },\n categoryNames: { ...CATEGORY_NAMES },\n\n async loadEnabled() {\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n if (!active) {\n this.indices.clear();\n return;\n }\n const t0 = performance.now();\n const toLoad = enabled.filter((n) => !this.indices.has(n));\n const toRemove = [...this.indices.keys()].filter((n) => !enabled.includes(n));\n toRemove.forEach((n) => this.indices.delete(n));\n await Promise.all(toLoad.map(async (name) => {\n try {\n const resp = await authFetch(`${window.api}/autocomplete/${name}`);\n if (!resp?.ok) throw new Error(`${resp?.status}`);\n const data = await resp.json();\n this.indices.set(name, new TagIndex(data));\n // Extract category colors from first loaded file\n if (data.categories) {\n Object.entries(data.categories).forEach(([id, cat]) => {\n const category: any = cat;\n if (category.color) this.categoryColors[id] = category.color;\n if (category.name) this.categoryNames[id] = category.name;\n });\n }\n const t1 = performance.now();\n log('autoComplete', { loaded: name, tags: data.tags?.length || 0, time: Math.round(t1 - t0) });\n timer(`autocompleteLoad:${name}`, t1 - t0);\n } catch (e) {\n log('autoComplete', { failed: name, error: e });\n }\n }));\n },\n\n searchAll(prefix, limit = 20) {\n if (this.indices.size === 0) return [];\n const all = [];\n this.indices.forEach((index) => {\n all.push(...index.search(prefix, limit));\n });\n // Deduplicate by name, keeping highest count\n const seen = new Map();\n all.forEach((tag) => {\n const existing = seen.get(tag.name);\n if (!existing || tag.count > existing.count) seen.set(tag.name, tag);\n });\n const results = [...seen.values()];\n results.sort((a, b) => b.count - a.count);\n return results.slice(0, limit);\n },\n};\n\n// -- Textarea integration --\n\n/**\n * Extract the current completion context at the cursor position.\n *\n * Returns { word, start, end, mode } where:\n * mode === 'tag': ordinary tag completion\n * mode === 'artist': leading `@` trigger; results filtered to artist category and inserted with `@` preserved\n * mode === 'lora': inside an unclosed ` 0) {\n const ch = value[wordStart - 1];\n if (ch === ',' || ch === '\\n') break;\n wordStart--;\n }\n // Skip leading whitespace between the separator and the typed word\n while (wordStart < selectionStart && value[wordStart] === ' ') wordStart++;\n const segment = value.slice(wordStart, selectionStart);\n // LoRA / extra-network trigger: unclosed `<` with `kind:` prefix\n const before = value.slice(0, selectionStart);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose && lastOpen >= wordStart) {\n const inside = before.slice(lastOpen + 1); // e.g. \"lora:foo\", \"lora:\", \"lor\", or \"\"\n const colon = inside.indexOf(':');\n if (colon < 0) {\n // Bare `<` (or `` kind we ship,\n // so browse-all-loras; whatever the user typed gets overwritten on accept.\n return { word: '', start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n if (inside.slice(0, colon).toLowerCase() === 'lora') {\n return { word: inside.slice(colon + 1), start: lastOpen, end: selectionStart, mode: 'lora' };\n }\n // Recognized colon but unknown kind, suppress completion.\n return null;\n }\n // Wildcard trigger: unclosed `__` that doesn't close within the current word\n if (segment.startsWith('__') && !segment.slice(2).includes('__')) {\n return { word: segment.slice(2), start: wordStart, end: selectionStart, mode: 'wildcard' };\n }\n // Artist trigger: leading `@` filters tag results to the artist category.\n if (segment.startsWith('@')) {\n return { word: segment.slice(1), start: wordStart, end: selectionStart, mode: 'artist' };\n }\n // Ordinary tag\n if (!segment) return null;\n return { word: segment, start: wordStart, end: selectionStart, mode: 'tag' };\n}\n\n// Booru schemas (danbooru/e621/sankaku) all assign category id 1 to artist tags.\nconst ARTIST_CATEGORY_ID = 1;\n\n/** Escape bare parens so tag names like `fate_(series)` aren't parsed as attention syntax. */\nfunction escapeParensForPrompt(name) {\n return name.replace(/([()])/g, '\\\\$1');\n}\n\n/**\n * Insert an extra-network reference at the current trigger position.\n * kind === 'lora': inserts `` over the range including the leading `<`\n * kind === 'wildcard': inserts `__name__` over the range including the leading `__`\n * Embeddings use insertTag directly so they go through comma-separator and paren-escape logic.\n */\nfunction insertExtraNetwork(textarea, item, kind) {\n const info = getCurrentWord(textarea);\n if (!info || info.mode !== kind) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n let insertion;\n if (kind === 'lora') {\n insertion = ``;\n } else if (kind === 'wildcard') {\n insertion = `__${item.display ?? item.name}__`;\n } else {\n return;\n }\n textarea.value = before + insertion + after;\n const cursorPos = before.length + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n/** Insert a tag at the current word position, replacing the typed prefix. */\nfunction insertTag(textarea, tagName, kind = 'tag') {\n const info = getCurrentWord(textarea);\n if (!info || (info.mode !== 'tag' && info.mode !== 'artist')) return;\n const { value } = textarea;\n const before = value.slice(0, info.start);\n const after = value.slice(info.end);\n // Build insertion: tag + separator. Parens in tag names are escaped so the prompt parser doesn't read them as attention syntax.\n const useComma = window.opts?.autocomplete_append_comma ?? true;\n const sep = useComma ? ',' : '';\n const needsSepBefore = before.length > 0 && before.trimEnd().length > 0 && !before.trimEnd().endsWith(',');\n const prefix = needsSepBefore ? `${sep} ` : '';\n let suffix = `${sep} `;\n if (after.length > 0 && after.trimStart().startsWith(',')) suffix = ' ';\n // Embedding names are file-system identifiers, so underscores must be preserved regardless of the user setting.\n // Tags and artists honor `autocomplete_keep_underscores`; default is to swap `_` for space.\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n let body = tagName;\n if (kind !== 'embed' && !keepUnderscores) body = body.replace(/_/g, ' ');\n // Artist mode optionally keeps the `@` prefix (Anima syntax). The `@` is consumed for non-Anima models.\n if (info.mode === 'artist' && window.opts?.autocomplete_at_prefix_artist) body = `@${body}`;\n const insertion = `${prefix}${escapeParensForPrompt(body)}${suffix}`;\n textarea.value = before.trimEnd() + (before.trimEnd().length > 0 ? ' ' : '') + insertion + after.trimStart();\n // Position cursor after the inserted tag + separator\n const cursorPos = before.trimEnd().length + (before.trimEnd().length > 0 ? 1 : 0) + insertion.length;\n textarea.selectionStart = cursorPos;\n textarea.selectionEnd = cursorPos;\n // Sync with Gradio\n if (typeof updateInput === 'function') updateInput(textarea);\n}\n\n// -- Dropdown --\n\nconst dropdown = {\n el: null,\n listEl: null,\n selectedIndex: -1,\n results: [],\n textarea: null,\n query: '',\n visible: false,\n resizeObserver: null as ResizeObserver | null,\n\n init() {\n this.el = document.createElement('div');\n this.el.className = 'autocompleteResults';\n this.el.style.display = 'none';\n this.listEl = document.createElement('ul');\n this.listEl.className = 'autocompleteResultsList';\n this.el.appendChild(this.listEl);\n document.body.appendChild(this.el);\n this.el.addEventListener('mousedown', (e) => e.preventDefault()); // prevent blur on click\n this.el.addEventListener('click', (e) => {\n const li = e.target.closest('li');\n if (!li) return;\n const idx = [...this.listEl.children].indexOf(li);\n if (idx >= 0 && idx < this.results.length) {\n this.selectedIndex = idx;\n this.accept();\n }\n });\n this.resizeObserver = new ResizeObserver(() => {\n if (this.visible) this.position();\n });\n },\n\n show(results, textarea, query) {\n if (results.length === 0) { this.hide(); return; }\n // Switching textareas: clear prior state so a stale render can't leak across.\n if (this.textarea && this.textarea !== textarea) this.hide();\n if (this.textarea !== textarea) this.resizeObserver?.observe(textarea);\n this.results = results;\n this.textarea = textarea;\n this.query = query || '';\n this.selectedIndex = -1;\n this.render();\n this.position();\n this.el.style.display = '';\n this.visible = true;\n },\n\n hide() {\n if (this.textarea) this.resizeObserver?.unobserve(this.textarea);\n this.textarea = null;\n this.el.style.display = 'none';\n this.visible = false;\n this.results = [];\n this.selectedIndex = -1;\n },\n\n render() {\n const keepUnderscores = window.opts?.autocomplete_keep_underscores ?? false;\n const queryNorm = this.query.toLowerCase().replace(/ /g, '_');\n this.listEl.replaceChildren();\n this.results.forEach((tag, i) => {\n const li = document.createElement('li');\n if (i === this.selectedIndex) li.classList.add('selected');\n const dot = document.createElement('span');\n dot.className = 'autocomplete-category';\n const kind = tag.kind || 'tag';\n const kindStyle = KIND_GLYPHS[kind] || KIND_GLYPHS.tag;\n dot.style.color = kindStyle.color || engine.categoryColors[tag.category] || '#888';\n dot.textContent = kindStyle.glyph;\n dot.title = kind === 'tag' ? (engine.categoryNames[tag.category] || '') : kind;\n const name = document.createElement('span');\n name.className = 'autocomplete-tag';\n // Embeddings are file-name identifiers, so they always render as-is to match how they get inserted.\n const swapForKind = kind !== 'embed';\n const tagText = (swapForKind && !keepUnderscores) ? tag.display.replace(/_/g, ' ') : tag.display;\n const canonicalMatch = tag.name.indexOf(queryNorm);\n if (canonicalMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = tagText.slice(canonicalMatch, canonicalMatch + queryNorm.length);\n name.append(\n document.createTextNode(tagText.slice(0, canonicalMatch)),\n mark,\n document.createTextNode(tagText.slice(canonicalMatch + queryNorm.length)),\n );\n } else {\n name.textContent = tagText;\n }\n // Alias/translation-matched rows append \" (foreign)\" with the query fragment highlighted.\n let annotationTerm = null;\n if (tag.matchedVia === 'alias') annotationTerm = tag.matchedAlias;\n else if (tag.matchedVia === 'translation') annotationTerm = tag.matchedTerm;\n if (annotationTerm) {\n const annotationDisplay = (swapForKind && !keepUnderscores) ? annotationTerm.replace(/_/g, ' ') : annotationTerm;\n const annotationLower = annotationTerm.toLowerCase();\n const annotationMatch = annotationLower.indexOf(queryNorm);\n const prefix = tag.matchedVia === 'translation' ? ' \\u{1F310} ' : ' (';\n const suffix = tag.matchedVia === 'translation' ? '' : ')';\n name.appendChild(document.createTextNode(prefix));\n if (annotationMatch >= 0 && queryNorm.length > 0) {\n const mark = document.createElement('mark');\n mark.textContent = annotationDisplay.slice(annotationMatch, annotationMatch + queryNorm.length);\n name.append(\n document.createTextNode(annotationDisplay.slice(0, annotationMatch)),\n mark,\n document.createTextNode(annotationDisplay.slice(annotationMatch + queryNorm.length)),\n );\n } else {\n name.appendChild(document.createTextNode(annotationDisplay));\n }\n if (suffix) name.appendChild(document.createTextNode(suffix));\n }\n const count = document.createElement('span');\n count.className = 'autocomplete-count';\n count.textContent = tag.count > 0 ? formatCount(tag.count) : '';\n li.append(dot, name, count);\n li.addEventListener('mouseenter', () => {\n this.selectedIndex = i;\n this.updateSelection();\n });\n this.listEl.appendChild(li);\n });\n },\n\n position() {\n if (!this.textarea) return;\n const rect = this.textarea.getBoundingClientRect();\n // Position near the caret line instead of the textarea bottom\n const cursorBottom = caretViewportY(this.textarea);\n const anchorY = Math.max(rect.top, Math.min(cursorBottom, rect.bottom));\n const spaceBelow = window.innerHeight - anchorY;\n const dropHeight = Math.min(this.el.scrollHeight, 300);\n if (spaceBelow >= dropHeight || spaceBelow >= anchorY - rect.top) {\n this.el.style.top = `${anchorY + 2}px`;\n } else {\n this.el.style.top = `${anchorY - dropHeight - 2}px`;\n }\n this.el.style.left = `${rect.left}px`;\n this.el.style.width = `${rect.width}px`;\n },\n\n updateSelection() {\n [...this.listEl.children].forEach((li, i) => {\n li.classList.toggle('selected', i === this.selectedIndex);\n });\n const selected = this.listEl.children[this.selectedIndex];\n if (selected) selected.scrollIntoView({ block: 'nearest' });\n },\n\n navigate(dir) {\n if (this.results.length === 0) return;\n if (this.selectedIndex === -1) {\n this.selectedIndex = dir > 0 ? 0 : this.results.length - 1;\n } else {\n this.selectedIndex = (this.selectedIndex + dir + this.results.length) % this.results.length;\n }\n this.updateSelection();\n },\n\n accept() {\n if (this.selectedIndex < 0 || this.selectedIndex >= this.results.length) {\n // Tab with no selection: select first\n if (this.results.length > 0) {\n this.selectedIndex = 0;\n this.updateSelection();\n }\n return;\n }\n const result = this.results[this.selectedIndex];\n if (this.textarea) {\n if (result.kind === 'lora' || result.kind === 'wildcard') {\n insertExtraNetwork(this.textarea, result, result.kind);\n } else {\n // 'embed' kind and untagged tag results both go through insertTag (comma-aware, paren-escaped).\n insertTag(this.textarea, result.display ?? result.name, result.kind);\n }\n }\n this.hide();\n },\n};\n\n// -- Event handlers --\n\nlet debounceInput: ReturnType | undefined;\nlet debounceFocus: ReturnType | undefined;\n\nfunction onInput(textarea) {\n if (!active) return;\n // IME candidate window open: value isn't committed, and Enter would race with tag accept.\n if (textarea.dataset.imeActive === '1') return;\n const minChars = window.opts?.autocomplete_min_chars ?? 3;\n const info = getCurrentWord(textarea);\n if (!info) {\n dropdown.hide();\n return;\n }\n // Threshold by mode. Trigger characters carry their own signal so we can lower (or zero) the bar.\n let threshold = minChars;\n if (info.mode === 'lora' || info.mode === 'wildcard') threshold = 0;\n else if (info.mode === 'artist') threshold = 1;\n if (info.word.length < threshold) {\n dropdown.hide();\n return;\n }\n clearTimeout(debounceInput);\n debounceInput = setTimeout(() => {\n let results;\n if (info.mode === 'lora') {\n results = xnEngine.searchLoras(info.word);\n } else if (info.mode === 'wildcard') {\n results = xnEngine.searchWildcards(info.word);\n } else if (info.mode === 'artist') {\n // `@` trigger: tag-search filtered to the artist category. The category-1 color carries the visual cue.\n results = engine.searchAll(info.word).filter((t) => t.category === ARTIST_CATEGORY_ID);\n } else {\n const tagResults = engine.searchAll(info.word);\n const embedResults = xnEngine.searchEmbeddings(info.word);\n // Embeddings fold into tag-mode results (a1111 tagcomplete parity).\n results = [...embedResults, ...tagResults];\n }\n dropdown.show(results, textarea, info.word);\n }, 150);\n}\n\nfunction onKeyDown(e) {\n if (!dropdown.visible) return;\n if (e.isComposing) return; // IME candidate selection, let the browser commit the candidate\n // Modifier + nav/accept keys belong to other handlers (editAttention.js on Ctrl+Arrow,\n // generate hotkey on Ctrl+Enter). Let them through even with the dropdown open.\n const hasModifier = e.ctrlKey || e.metaKey || e.altKey;\n switch (e.key) {\n case 'ArrowDown':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(1);\n break;\n case 'ArrowUp':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.navigate(-1);\n break;\n case 'Enter':\n if (hasModifier) return;\n if (dropdown.selectedIndex >= 0) {\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n }\n break;\n case 'Tab':\n if (hasModifier) return;\n e.preventDefault();\n e.stopPropagation();\n dropdown.accept();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n dropdown.hide();\n break;\n default:\n break;\n }\n}\n\n/** Attach autocomplete to a single textarea. */\nfunction attachAutocomplete(textarea) {\n textarea.addEventListener('input', () => onInput(textarea));\n textarea.addEventListener('keydown', onKeyDown);\n textarea.addEventListener('compositionstart', () => { textarea.dataset.imeActive = '1'; });\n textarea.addEventListener('compositionend', () => { delete textarea.dataset.imeActive; });\n textarea.addEventListener('focusin', () => {\n if (dropdown.visible && dropdown.textarea && dropdown.textarea !== textarea) dropdown.hide();\n // Cancel any pending hide from a recent blur so refocusing within 200ms doesn't close the dropdown.\n clearTimeout(debounceFocus);\n debounceFocus = undefined;\n // Re-fire input handling so a partial tag at the cursor reopens the dropdown.\n onInput(textarea);\n });\n textarea.addEventListener('focusout', () => {\n // Cancel any in-flight debounced dropdown.show; otherwise it fires against a stale textarea.\n clearTimeout(debounceInput);\n debounceFocus = setTimeout(() => dropdown.hide(), 200);\n });\n}\n\n// -- Prompt textarea IDs --\n\nconst PROMPT_IDS = [\n 'txt2img_prompt', 'txt2img_neg_prompt',\n 'img2img_prompt', 'img2img_neg_prompt',\n 'control_prompt', 'control_neg_prompt',\n 'video_prompt', 'video_neg_prompt',\n];\n\n// -- Active button --\n\nfunction patchActiveButton() {\n const buttons = [...gradioApp().querySelectorAll('.autocomplete-active')];\n active = window.opts?.autocomplete_active || false;\n buttons.forEach((btn) => {\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n btn.parentElement.onclick = () => {\n active = !active;\n window.opts.autocomplete_active = !active;\n btn.classList.toggle('autocomplete-active', active);\n btn.classList.toggle('autocomplete-inactive', !active);\n };\n });\n}\n\n// -- Config bridge --\n\n/** Monkey-patch script config bridge textboxes to push autocomplete config changes to window.opts immediately. */\nlet bridgeWarnedMissingDescriptor = false;\nfunction patchConfigBridge() {\n const proto = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n if (!proto?.get || !proto?.set) {\n if (!bridgeWarnedMissingDescriptor) {\n log('autoComplete', { bridge: 'skipped', reason: 'HTMLTextAreaElement.prototype.value descriptor missing' });\n bridgeWarnedMissingDescriptor = true;\n }\n return;\n }\n const elements = gradioApp().querySelectorAll('[id$=\"_tag_autocomplete_config_json\"]');\n for (const el of elements) {\n const textarea = el.querySelector('textarea');\n if (!textarea || textarea.acBridgePatched) continue;\n textarea.acBridgePatched = true;\n Object.defineProperty(textarea, 'value', {\n set(newValue) {\n const oldValue = proto.get.call(textarea);\n proto.set.call(textarea, newValue);\n if (oldValue !== newValue && newValue) {\n try {\n const cfg = JSON.parse(newValue);\n for (const [key, val] of Object.entries(cfg)) window.opts[key] = val;\n executeCallbacks(optionsChangedCallbacks);\n } catch { /* ignore parse errors; the bridge is best-effort */ }\n }\n },\n get() { return proto.get.call(textarea); },\n });\n }\n}\n\n// -- Initialization --\n\nexport async function initAutocomplete() {\n const t0 = performance.now();\n const enabled = window.opts?.autocomplete_enabled || [];\n active = window.opts?.autocomplete_active || false;\n log('autoComplete', { active, enabled });\n // Inject styles (CSS files in javascript/ are not auto-loaded)\n const style = document.createElement('style');\n style.textContent = `\n .autocompleteResults { position: fixed; z-index: 9999; max-height: 300px; overflow-y: auto;\n background: var(--sd-main-background-color, var(--background-fill-primary, #1f2937));\n border: 1px solid var(--sd-input-border-color, var(--border-color-primary, #374151));\n border-radius: var(--sd-border-radius, 6px); box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n font-size: 13px; scrollbar-width: thin; color: var(--body-text-color-subdued); }\n .autocompleteResultsList { list-style: none; margin: 0; padding: 4px 0; }\n .autocompleteResultsList > li { display: flex; align-items: center; padding: 6px 12px; cursor: pointer;\n gap: 8px; line-height: 1.4; transition: background 0.1s ease; border-bottom: 1px solid rgba(255,255,255,0.03); }\n .autocompleteResultsList > li:last-child { border-bottom: none; }\n .autocompleteResultsList > li:hover { background: var(--sd-panel-background-color, var(--input-background-fill-focus, #374151)); }\n .autocompleteResultsList > li.selected { background: var(--sd-main-accent-color, var(--button-primary-background-fill, #4b5563)); }\n .autocomplete-category { font-size: 10px; flex-shrink: 0; width: 10px; text-align: center; cursor: help; }\n .autocomplete-tag { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .autocomplete-tag mark { background: transparent; color: inherit; font-weight: 700; }\n .autocomplete-count { font-size: 0.75em; opacity: 0.45; flex-shrink: 0; font-variant-numeric: tabular-nums;\n background: rgba(255,255,255,0.06); padding: 1px 6px; border-radius: 8px; min-width: 28px; text-align: right; }\n `;\n document.head.appendChild(style);\n dropdown.init();\n await engine.loadEnabled();\n xnEngine.loadAll();\n // Attach to all prompt textareas; even if no dictionaries loaded yet, they may be enabled later via script UI\n let attached = 0;\n PROMPT_IDS.forEach((id) => {\n const textarea = gradioApp().querySelector(`#${id} > label > textarea`);\n if (textarea) {\n attachAutocomplete(textarea);\n attached++;\n }\n });\n // Reload when settings change\n\n async function optionsChangedCallback() {\n const newActive = window.opts?.autocomplete_active || false;\n const newEnabled = window.opts?.autocomplete_enabled || [];\n const currentKeys = [...engine.indices.keys()].sort().join(',');\n const newKeys = [...newEnabled].sort().join(',');\n if ((currentKeys !== newKeys) || (active !== newActive)) {\n log('autoComplete', { reload: newEnabled });\n await engine.loadEnabled();\n active = newActive;\n patchActiveButton();\n }\n xnEngine.loadAll();\n }\n onOptionsChanged(optionsChangedCallback);\n // Watch for config updates from the script UI bridge\n patchConfigBridge();\n patchActiveButton();\n onAfterUiUpdate(patchConfigBridge);\n const t1 = performance.now();\n log('autoComplete', { attached, dicts: engine.indices.size, time: Math.round(t1 - t0) });\n timer('autocompleteInit', t1 - t0);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { timer } from './timers';\n\nlet hintsObserver: MutationObserver | null = null;\nconst allLocales = ['en', 'tb', 'nb', 'hr', 'es', 'it', 'fr', 'de', 'pt', 'ru', 'zh', 'ja', 'ko', 'hi', 'ar', 'bn', 'ur', 'id', 'vi', 'tr', 'sr', 'po', 'he', 'xx', 'qq', 'tlh'];\nconst localeData = {\n prev: null,\n locale: null,\n data: [],\n timeout: null,\n finished: false,\n initial: true,\n type: 2,\n hint: null,\n btn: null,\n expandTimeout: undefined, // Property for expansion timeout\n currentElement: null, // Track current element for expansion\n};\nlet localeTimeout: ReturnType | undefined;\nconst isTouchDevice = 'ontouchstart' in window;\n\nasync function cycleLocale() {\n clearTimeout(localeTimeout);\n localeTimeout = setTimeout(() => {\n log('cycleLocale', localeData.prev, localeData.locale);\n const index = allLocales.indexOf(localeData.prev);\n localeData.locale = allLocales[(index + 1) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n localeData.finished = false;\n localeData.data = [];\n localeData.prev = localeData.locale;\n window.opts.ui_locale = localeData.locale;\n setHints();\n }, 250);\n}\n\nasync function resetLocale() {\n clearTimeout(localeTimeout); // Prevent the single click logic\n localeData.locale = 'en';\n log('resetLocale', localeData.locale);\n const index = allLocales.indexOf(localeData.locale);\n localeData.locale = allLocales[(index) % allLocales.length];\n localeData.btn.innerText = localeData.locale;\n localeData.finished = false;\n localeData.data = [];\n window.opts.ui_locale = localeData.locale;\n setHints();\n}\n\nasync function tooltipCreate() {\n localeData.hint = document.createElement('div');\n localeData.hint.className = 'tooltip';\n localeData.hint.id = 'tooltip-container';\n localeData.hint.innerText = 'this is a hint';\n gradioApp().appendChild(localeData.hint);\n localeData.btn = gradioApp().getElementById('locale-container');\n if (!localeData.btn) {\n localeData.btn = document.createElement('div');\n localeData.btn.className = 'locale';\n localeData.btn.id = 'locale-container';\n gradioApp().appendChild(localeData.btn);\n }\n localeData.btn.innerText = localeData.locale;\n localeData.btn.ondblclick = resetLocale;\n localeData.btn.onclick = cycleLocale;\n if (window.opts.tooltips === 'None') localeData.type = 0;\n if (window.opts.tooltips === 'Browser default') localeData.type = 1;\n if (window.opts.tooltips === 'UI tooltips') localeData.type = 2;\n\n if (localeData.type === 2) { // setup event delegation for tooltips instead of individual listeners\n if (isTouchDevice) {\n gradioApp().addEventListener('touchstart', tooltipShowDelegated);\n gradioApp().addEventListener('touchend', tooltipHideDelegated);\n }\n gradioApp().addEventListener('pointerover', tooltipShowDelegated);\n gradioApp().addEventListener('pointerout', tooltipHideDelegated);\n }\n if (!hintsObserver) initializeDOMObserver();\n}\n\nasync function expandTooltip(element, longHint) {\n if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) {\n const ring = localeData.hint.querySelector('.tooltip-progress-ring');\n if (ring) ring.style.opacity = '0';\n localeData.hint.classList.add('tooltip-expanded');\n setTimeout(() => {\n const longContent = localeData.hint.querySelector('.long-content');\n if (longContent) longContent.classList.add('show');\n }, 100);\n }\n}\n\nasync function tooltipShowDelegated(e) { // use event delegation to handle dynamically created elements\n if (e.target.dataset && e.target.dataset.hint) tooltipShow(e);\n}\n\nasync function tooltipHideDelegated(e) {\n if (e.target.dataset && e.target.dataset.hint) tooltipHide(e);\n}\n\nasync function tooltipShow(e) {\n if (localeData.expandTimeout) { // clear any existing expansion timeout\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n\n localeData.hint.classList.remove('tooltip-expanded'); // remove expanded class and reset current element\n localeData.currentElement = e.target;\n\n if (e.target.dataset.hint) {\n const progressRing = ` // create progress ring SVG\n
    \n \n \n \n \n
    \n `;\n // set up the complete content structure from the start\n let content = `\n
    \n ${e.target.textContent}\n ${e.target.dataset.longHint ? progressRing : ''}\n
    \n
    \n ${e.target.dataset.hint}\n `;\n if (e.target.dataset.longHint) content += `
    ${e.target.dataset.longHint}
    `; // add long content if available, but keep it hidden\n if (e.target.dataset.reload) { // add reload notice if needed\n const reloadType = e.target.dataset.reload;\n let reloadText = '';\n if (reloadType === 'model') reloadText = 'Requires model reload';\n else if (reloadType === 'server') reloadText = 'Requires server restart';\n if (reloadText) {\n content += `\n
    \n
    \n ${reloadText}\n
    \n `;\n }\n }\n\n localeData.hint.innerHTML = content;\n localeData.hint.classList.add('tooltip-show');\n\n if (e.clientX > window.innerWidth / 2) localeData.hint.classList.add('tooltip-left');\n else localeData.hint.classList.remove('tooltip-left');\n\n if (e.target.dataset.longHint) { // set up expansion timer if long hint is available\n const ring = localeData.hint.querySelector('.tooltip-progress-ring'); // start progress ring animation\n const ringProgress = localeData.hint.querySelector('.ring-progress');\n if (ring && ringProgress) {\n setTimeout(() => {\n ring.classList.add('active');\n ringProgress.classList.add('animate');\n }, 100);\n }\n localeData.expandTimeout = setTimeout(() => expandTooltip(e.target, e.target.dataset.longHint), 3000);\n }\n }\n}\n\nasync function tooltipHide(e) {\n if (localeData.expandTimeout) {\n clearTimeout(localeData.expandTimeout);\n localeData.expandTimeout = undefined;\n }\n localeData.hint.classList.remove('tooltip-show', 'tooltip-expanded');\n localeData.currentElement = null;\n}\n\nasync function replaceButtonText(el) {\n // https://www.nerdfonts.com/cheat-sheet\n // use unicode of icon with format nf-md-_circle\n const textIcons = {\n Generate: '\\uf144',\n Enqueue: '\\udb81\\udc17',\n Stop: '\\udb81\\ude66',\n Skip: '\\udb81\\ude61',\n Pause: '\\udb80\\udfe5',\n Restore: '\\udb82\\udd9b',\n Clear: '\\udb80\\udd59',\n Networks: '\\uf261',\n };\n if (textIcons[el.innerText]) {\n el.classList.add('button-icon');\n el.innerText = textIcons[el.innerText];\n }\n}\n\nasync function getLocaleData(desiredLocale = null) {\n if (desiredLocale) desiredLocale = desiredLocale.split(':')[0];\n if (desiredLocale === 'Auto') {\n try {\n localeData.locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n localeData.locale = localeData.locale.split('-')[0];\n localeData.prev = localeData.locale;\n } catch (e) {\n localeData.locale = 'en';\n log('getLocale', e);\n }\n } else {\n localeData.locale = desiredLocale || 'en';\n localeData.prev = localeData.locale;\n }\n log('getLocale', { lang: desiredLocale, locale: localeData.locale });\n // primary\n let json: any = {};\n try {\n let res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n if (!res || !res.ok) {\n localeData.locale = 'en';\n res = await authFetch(`${window.subpath}/file=ui/locale/locale_${localeData.locale}.json`);\n }\n json = await res.json();\n } catch { /**/ }\n\n try {\n const res = await authFetch(`${window.subpath}/file=ui/locale/override_${localeData.locale}.json`);\n if (res && res.ok) json.override = await res.json();\n } catch { /**/ }\n\n return json;\n}\n\nasync function replaceTextContent(el, text) {\n if (el.children.length === 1 && el.firstElementChild.classList.contains('mask-icon')) return;\n if (el.querySelector('span')) el = el.querySelector('span');\n if (el.querySelector('div')) el = el.querySelector('div');\n if (el.classList.contains('mask-icon')) return; // skip icon buttons\n if (el.dataset.selector) { // replace on rehosted child if exists\n el = el.firstElementChild || el.querySelector(el.dataset.selector);\n replaceTextContent(el, text);\n return;\n }\n el.textContent = text;\n}\n\nasync function setHint(el, entry) {\n if (localeData.type === 1) {\n el.title = entry.hint;\n } else if (localeData.type === 2) {\n el.dataset.hint = entry.hint;\n if (entry.longHint && entry.longHint.length > 0) el.dataset.longHint = entry.longHint;\n if (entry.reload && entry.reload.length > 0) el.dataset.reload = entry.reload;\n } else {\n // tooltips disabled\n }\n}\n\nfunction createLocaleJSON() {\n const excludeText = ['\u25BC']; // add any common non-label elements to exclude\n const ecxcludeIds = ['logo_nav']; // add any specific element IDs to exclude\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')),\n ])];\n const json = {};\n const allSeen = {};\n for (const el of elements) {\n const label = el.textContent.trim();\n if (!label || label.length < 1 || label.length > 1024) continue; // likely not UI element\n if (excludeText.includes(label)) continue; // skip common non-label elements\n if (ecxcludeIds.includes(el.id)) continue; // skip specific element IDs\n\n let hint = el.dataset.hint || '';\n if (hint.toLowerCase() === label.toLowerCase()) hint = ''; // skip if hint is same as label\n if (Object.keys(allSeen).includes(label.toLowerCase())) {\n if (hint.length === 0 || allSeen[label.toLowerCase()] === hint) continue; // seen this label and hint is empty or same as before\n hint = allSeen[label.toLowerCase()]; // use existing hint for this label\n }\n allSeen[label.toLowerCase()] = hint; // track seen labels\n\n let section = label[0].toLowerCase();\n if (section >= '0' && section <= '9') section = '0';\n if ((section < 'a' || section > 'z') && section !== '0') section = '_';\n\n let ui = el.closest('.group-extension')\n || el.closest('.group-scripts')\n || el.closest('.main-tab')\n || el.closest('.settings_section')\n || el.closest('.tabitem')\n || 'other';\n ui = ui?.id?.replace('_tabitem_parent', '').replace('_section_row', '');\n if (ui?.includes('_script')) ui = ui?.split('_').slice(1).join('_').split(':')[0];\n\n if (!json[section]) json[section] = [];\n const entry = { id: el.id || '', label, localized: '', hint, ui };\n json[section].push(entry); // add new entry\n }\n const sorted = Object.keys(json).sort().reduce((obj, key) => {\n obj[key] = json[key];\n return obj;\n }, {});\n console.log('localeJSON', sorted);\n}\n\nexport async function setHints() {\n let json: any;\n let overrideData: any[] = [];\n if (localeData.finished) return;\n if (Object.keys(opts).length === 0) return;\n const elements = [...new Set([\n ...Array.from(gradioApp().querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('label > span')),\n ...Array.from(gradioApp().querySelectorAll('.label-wrap > span')),\n ...Array.from(gradioApp().querySelectorAll('span[data-testid=\"block-info\"]')), // radio/checkboxgroup titles render as a bare block-info span, not under a label\n ])];\n if (elements.length === 0) return;\n if (localeData.data.length === 0) {\n json = await getLocaleData(window.opts.ui_locale);\n overrideData = Object.values(json.override || {}).flat().filter((e: any) => e.hint.length > 0);\n const jsonData = Object.values(json).flat().filter((e: any) => e.hint.length > 0);\n localeData.data = [...overrideData, ...jsonData];\n }\n if (!localeData.hint) tooltipCreate();\n let localized = 0;\n let hints = 0;\n const t0 = performance.now();\n\n for (const el of elements) {\n // localize elements text\n let found;\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id))); // prefer id match for disambiguation\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n if (found?.localized?.length > 0) {\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n localized++;\n } else if (found?.label && !localeData.initial && (localeData.locale === 'en')) { // reset to english\n replaceTextContent(el, found.label);\n }\n // set hints\n if (found?.hint?.length > 0) {\n hints++;\n setHint(el, found);\n }\n }\n localeData.finished = true;\n localeData.initial = false;\n const t1 = performance.now();\n timer('setHints', t1 - t0);\n // localeData.btn.style.backgroundColor = localeData.locale !== 'en' ? 'var(--primary-500)' : '';\n log('touchDevice', isTouchDevice);\n log('setHints', { type: localeData.type, locale: localeData.locale, elements: elements.length, localized, hints, data: localeData.data.length, override: overrideData.length, time: Math.round(t1 - t0) });\n // sortUIElements();\n}\n\n// Apply hints to a single element immediately\nasync function applyHintToElement(el) {\n if (!localeData.data || localeData.data.length === 0) return;\n // if (!el.textContent) return;\n\n // check if element matches our selector criteria\n const isValidElement = el.tagName === 'BUTTON'\n || el.tagName === 'H2'\n || el.classList.contains('hint')\n || (el.tagName === 'SPAN' && (el.parentElement?.tagName === 'LABEL' || el.parentElement?.classList.contains('label-wrap') || el.dataset.testid === 'block-info'));\n if (!isValidElement) return;\n\n let found; // find matching hint data - prefer id match for disambiguation\n if (el.id) found = localeData.data.find((l) => l.id && (l.id === el.id || el.id.endsWith(l.id)));\n if (!found) {\n if (el.dataset.original) found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.dataset.original.toLowerCase().trim());\n else found = localeData.data.find((l) => l.label.toLowerCase().trim() === el.textContent.toLowerCase().trim());\n }\n\n if (el.textContent && el.textContent.length > 0 && found?.localized?.length > 0) { // apply localization if found\n if (!el.dataset.original) el.dataset.original = el.textContent;\n replaceTextContent(el, found.localized);\n }\n\n if (found?.hint?.length > 0) setHint(el, found); // apply hint if found\n}\n\n// Initialize MutationObserver for immediate hint application\nfunction initializeDOMObserver() {\n if (hintsObserver) hintsObserver.disconnect();\n\n hintsObserver = new MutationObserver((mutations) => {\n // Process added nodes immediately\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Apply hints to the node itself\n applyHintToElement(node);\n\n // Apply hints to all relevant children\n const elements = [\n ...Array.from(node.querySelectorAll('button')),\n ...Array.from(gradioApp().querySelectorAll('h1')),\n ...Array.from(gradioApp().querySelectorAll('h2')),\n ...Array.from(gradioApp().querySelectorAll('h3')),\n ...Array.from(gradioApp().querySelectorAll('.hint')),\n ...Array.from(node.querySelectorAll('label > span')),\n ...Array.from(node.querySelectorAll('.label-wrap > span')),\n ...Array.from(node.querySelectorAll('span[data-testid=\"block-info\"]')),\n ];\n\n // Include the node itself if it matches\n if (node.matches && (\n node.matches('button')\n || node.matches('h1')\n || node.matches('h2')\n || node.matches('h3')\n || node.matches('label > span')\n || node.matches('.hint')\n || node.matches('.label-wrap > span')\n || node.matches('span[data-testid=\"block-info\"]')\n )) {\n elements.push(node);\n }\n\n // Apply hints immediately to all found elements\n elements.forEach((el) => applyHintToElement(el));\n }\n }\n }\n }\n });\n\n // Start observing the entire gradio app for changes\n const targetNode = gradioApp();\n if (targetNode) {\n hintsObserver.observe(targetNode, {\n childList: true,\n subtree: true,\n });\n }\n}\n\nexport function disconnectHintsObserver() {\n if (hintsObserver) {\n hintsObserver.disconnect();\n hintsObserver = null;\n }\n}\n\n// Export for external use if needed\nconst forceReapplyHints = () => setHints();\n", "import { gradioApp, getUICurrentTabContent } from './script';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\nimport { quickApplyStyle, quickSaveStyle } from './extraNetworks';\n\ninterface ContextMenuItem {\n id: string;\n name: string;\n func: () => void;\n primary: boolean;\n}\n\nconst contextMenuInit = () => {\n let eventListenerApplied = false;\n const menuSpecs = new Map();\n\n const uid = () => Date.now().toString(36) + Math.random().toString(36).substring(2);\n\n function showContextMenu(event: MouseEvent, _element: Element, menuEntries: ContextMenuItem[]): void {\n const posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n const posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n const contextMenu = document.createElement('nav');\n contextMenu.id = 'context-menu';\n contextMenu.style.top = `${posy}px`;\n contextMenu.style.left = `${posx}px`;\n const contextMenuList = document.createElement('ul');\n contextMenuList.className = 'context-menu-items';\n contextMenu.append(contextMenuList);\n menuEntries.forEach((entry) => {\n const contextMenuEntry = document.createElement('a');\n contextMenuEntry.innerHTML = entry.name;\n contextMenuEntry.addEventListener('click', () => entry.func());\n contextMenuList.append(contextMenuEntry);\n });\n gradioApp().appendChild(contextMenu);\n const menuWidth = contextMenu.offsetWidth + 4;\n const menuHeight = contextMenu.offsetHeight + 4;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n if ((windowWidth - posx) < menuWidth) contextMenu.style.left = `${windowWidth - menuWidth}px`;\n if ((windowHeight - posy) < menuHeight) contextMenu.style.top = `${windowHeight - menuHeight}px`;\n }\n\n function appendContextMenuOption(targetElementSelector: string, entryName: string, entryFunction: () => void, primary = false): string {\n let currentItems = menuSpecs.get(targetElementSelector);\n if (!currentItems) {\n currentItems = [];\n menuSpecs.set(targetElementSelector, currentItems);\n }\n const newItem = {\n id: `${targetElementSelector}_${uid()}`,\n name: entryName,\n func: entryFunction,\n primary,\n // isNew: true,\n };\n currentItems.push(newItem);\n return newItem.id;\n }\n\n function removeContextMenuOption(id: string): void {\n menuSpecs.forEach((v, k) => {\n let index = -1;\n v.forEach((e, ei) => {\n if (e.id === id) { index = ei; }\n });\n if (index >= 0) v.splice(index, 1);\n });\n }\n\n window.appendContextMenuOption = appendContextMenuOption;\n window.removeContextMenuOption = removeContextMenuOption;\n\n async function addContextMenuEventListener(): Promise {\n if (eventListenerApplied) return;\n log('initContextMenu');\n gradioApp().addEventListener('click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (!mouseEvent.isTrusted) return;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n gradioApp().addEventListener('contextmenu', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const oldMenu = gradioApp().querySelector('#context-menu');\n if (oldMenu) oldMenu.remove();\n menuSpecs.forEach((v, k) => {\n const items = v.filter((item) => !item.primary);\n const target = mouseEvent.target as Element | null;\n if (!target) return;\n const matched = target.closest(k);\n if (items.length > 0 && matched) {\n showContextMenu(mouseEvent, matched, items);\n mouseEvent.preventDefault();\n }\n });\n });\n eventListenerApplied = true;\n }\n return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener];\n};\n\nconst initContextResponse = contextMenuInit();\nconst appendContextMenuOption = initContextResponse[0];\nconst removeContextMenuOption = initContextResponse[1];\nconst addContextMenuEventListener = initContextResponse[2] as () => void;\n\nlet generateOnRepeatInterval: ReturnType | null = null;\n\nexport const generateForever = (genbuttonid: string): void => {\n if (generateOnRepeatInterval) {\n log('generateForever: cancel');\n clearInterval(generateOnRepeatInterval);\n generateOnRepeatInterval = null;\n } else {\n const genbutton = gradioApp().querySelector(genbuttonid);\n if (!(genbutton instanceof HTMLElement)) return;\n const isBusy = () => {\n let busy = document.getElementById('progressbar')?.style.display === 'block';\n if (!busy) {\n // Also check in Modern UI\n const outerButton = genbutton.parentElement.closest('button');\n busy = outerButton?.classList.contains('generate') && outerButton?.classList.contains('active');\n }\n return busy;\n };\n log('generateForever: start');\n if (!isBusy()) genbutton.click();\n generateOnRepeatInterval = setInterval(() => {\n if (!isBusy()) genbutton.click();\n }, 500);\n }\n};\nwindow.generateForever = generateForever;\n\nconst reprocessClick = (tabId: string, state: string): void => {\n const btn = document.getElementById(`${tabId}_${state}`);\n window.submit_state = state;\n if (btn) btn.click();\n};\n\nconst getStatus = async () => {\n const headers = new Headers();\n const body = JSON.stringify({ id_task: -1, id_live_preview: false });\n headers.set('Content-Type', 'application/json');\n const tab = getUICurrentTabContent()?.id.replace('tab_', '') || '';\n const el = gradioApp().querySelector(`#html_log_${tab} .performance p`);\n\n let res;\n let data;\n res = await fetch('./internal/progress', { method: 'POST', headers, body });\n if (res?.ok) {\n data = await res.json();\n log('progressInternal:', data);\n if (el) el.innerText += `\\nProgress internal:\\n${JSON.stringify(data, null, 2)}`;\n }\n res = await authFetch('./sdapi/v1/progress?skip_current_image=true', { method: 'GET', headers });\n if (res?.ok) {\n data = await res.json();\n log('progressAPI:', data);\n if (el) el.innerText += `\\nProgress API:\\n${JSON.stringify(data, null, 2)}`;\n }\n};\n\nexport async function initContextMenu() {\n for (const tab of ['txt2img', 'img2img', 'control', 'video']) {\n appendContextMenuOption(`#${tab}_generate`, 'Get server status', getStatus);\n appendContextMenuOption(`#${tab}_generate`, 'Copy prompt to clipboard', () => navigator.clipboard.writeText(document.querySelector(`#${tab}_prompt > label > textarea`).value));\n appendContextMenuOption(`#${tab}_generate`, 'Generate forever', () => generateForever(`#${tab}_generate`));\n appendContextMenuOption(`#${tab}_generate`, 'Apply selected style', quickApplyStyle);\n appendContextMenuOption(`#${tab}_generate`, 'Quick save style', quickSaveStyle);\n appendContextMenuOption(`#${tab}_reprocess`, 'Decode full quality', () => reprocessClick(tab, 'reprocess_decode'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Refine & HiRes pass', () => reprocessClick(tab, 'reprocess_refine'), true);\n appendContextMenuOption(`#${tab}_reprocess`, 'Detailer pass', () => reprocessClick(tab, 'reprocess_detail'), true);\n }\n // Right-click send-to-control button for prompt/params-only transfer.\n for (const tab of ['gallery', 'txt2img', 'img2img', 'extras']) {\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer only prompt to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_prompt`)?.click();\n document.getElementById('control_nav')?.click();\n });\n appendContextMenuOption(`#${tab}_tabitem #control_tab`, 'Transfer all parameters to Images tab', () => {\n document.querySelector(`#image_buttons_${tab} #control_tab_params`)?.click();\n document.getElementById('control_nav')?.click();\n });\n }\n addContextMenuEventListener();\n}\n", "import { gradioApp } from './script';\n\nexport function uiOpenSubmenus() {\n const accordions = Array.from(gradioApp().querySelectorAll('.gradio-accordion'));\n const states: Record = {};\n accordions.forEach((el) => {\n const labelEl = el.querySelector('.label-wrap > span:not(.icon)');\n const name = labelEl instanceof HTMLElement ? labelEl.innerText.trim() : '';\n if (!name) return;\n const children = Array.from(el.childNodes);\n const open = children.filter((c) => c instanceof HTMLElement && c.style.display === 'block');\n if (states[name] === undefined) states[name] = open.length > 0;\n });\n return states;\n}\n\nexport async function getUIDefaults() {\n const btn = gradioApp().getElementById('ui_defaults_view');\n if (!btn) return;\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0) { /* Pass */ }\n if (entries[0].intersectionRatio > 0) btn.click();\n });\n intersectionObserver.observe(btn); // monitor visibility of tab\n}\n\nwindow.uiOpenSubmenus = uiOpenSubmenus;\n", "import { error, log, xhrPost } from './logger';\nimport { authFetch } from './authWrap';\nimport { timer } from './timers';\n\nexport const appStartTime = performance.now();\nlet monitorLogActive = false;\n\nasync function preloadImages(): Promise {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const imagePromises: Promise[] = [];\n const num = Math.floor(9.99 * Math.random());\n const imageUrls = [\n `file=ui/assets/logo-bg-${dark ? 'dark' : 'light'}.jpg`,\n `file=ui/assets/logo-bg-${num}.jpg`,\n ];\n for (const url of imageUrls) {\n const img = new Image();\n const promise = new Promise((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () => reject(new Error(`failed to preload image: ${url}`));\n });\n img.src = url;\n imagePromises.push(promise);\n }\n try {\n await Promise.all(imagePromises);\n return true;\n } catch (err) {\n error(`preloadImages: ${err}`);\n return false;\n }\n}\n\nfunction joinArgs(messages: unknown[]): string {\n let output = '';\n for (let i = 0; i < messages.length; i++) {\n let arg = messages[i];\n if (arg === undefined) arg = 'undefined';\n if (arg === null) arg = 'null';\n output += ' ';\n if (typeof arg === 'object') output += JSON.stringify(arg).replace(/[\"]+/g, '');\n else output += arg;\n }\n return output;\n}\n\nfunction monitorLog(): void {\n if (window.logBufferDirty) {\n window.logBufferDirty = false;\n const maxLines = 100; // print last n logs from ring buffer to splash-log\n const lines: string[] = [];\n // print last n logs from ring buffer in time order\n for (let i = Math.max(0, window.logRingBuffer.length - maxLines); i < window.logRingBuffer.length; i++) {\n const logEntry = window.logRingBuffer[i];\n let color = 'white';\n if (logEntry.type === 'error') color = 'palevioletred';\n else if (logEntry.type === 'debug') color = 'gray';\n const html = `
    ${logEntry.ts}   ${joinArgs(logEntry.msg)}
    `;\n lines.push(html);\n }\n const splashLogEl = document.getElementById('splashLog');\n if (splashLogEl) splashLogEl.innerHTML = lines.join('');\n }\n if (monitorLogActive) setTimeout(monitorLog, 250);\n}\n\nexport async function removeSplash() {\n const splash = document.getElementById('splash');\n if (splash) splash.remove();\n log('removeSplash');\n const t = Math.round(performance.now() - appStartTime);\n log('startupTime', t);\n timer('splashVisible', t);\n xhrPost(`${window.api}/log`, { message: `ready time=${t}` });\n monitorLogActive = false;\n}\n\nasync function createSplash() {\n const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n log('createSplash', { theme: dark ? 'dark' : 'light' });\n const num = Math.floor(9.99 * Math.random());\n const splash = `\n
    \n
    \n
    \n
    \n
    `;\n document.body.insertAdjacentHTML('beforeend', splash);\n const ok = await preloadImages();\n if (!ok) {\n removeSplash();\n return;\n }\n const imgEl = `
    `;\n const splashEl = document.getElementById('splash');\n if (splashEl) splashEl.insertAdjacentHTML('afterbegin', imgEl);\n\n monitorLogActive = true;\n monitorLog();\n\n await authFetch(`${window.api}/motd`)\n .then((res) => res.text())\n .then((text) => {\n const clean = text.replace(/[\"]+/g, '');\n const boldMatch = clean.match(/(.*?)<\\/b>/);\n const boldText = boldMatch ? boldMatch[1] : clean;\n if (boldMatch) log('getMOTD', { version: boldText });\n else log('getMOTD', { text: clean });\n const motdEl = document.getElementById('motd');\n if (motdEl) motdEl.innerHTML = clean;\n })\n .catch((err) => error(`getMOTD: ${err}`));\n\n log('loadGradioUi');\n\n const splashMonitor = setInterval(() => {\n const splashVisible = !!document.getElementById('splash');\n if (splashVisible) {\n log('splashVisible', { visible: true, elapsed: Math.round(performance.now() - appStartTime) });\n } else {\n log('splashVisible', { visible: false, elapsed: Math.round(performance.now() - appStartTime) });\n clearInterval(splashMonitor);\n }\n }, 5000);\n}\n\nwindow.onload = createSplash;\n", "import { log } from './logger';\n\nexport function addLegacyNotice() {\n log('legacyNotice');\n const notice = document.createElement('div');\n notice.id = 'legacy-notice';\n notice.className = 'legacy-standard';\n notice.textContent = 'Legacy';\n notice.title = 'Standard UI is a legacy interface that is no longer maintained and will be removed in the future. Please switch to ModernUI for best experience.';\n document.body.appendChild(notice);\n}\n", "import { initChangelog } from './changelog';\nimport { setupControlUI } from './control';\nimport { initiGenerationParams } from './generationParams';\nimport { initDragDrop } from './imageParams';\nimport { initAccordions } from './inputAccordion';\nimport { initIndexDB } from './indexdb';\nimport { initLogMonitor } from './logMonitor';\nimport { monitorConnection } from './monitor';\nimport { setRefreshInterval } from './progressBar';\nimport { initPromptChecker } from './promptChecker';\nimport { initModels, initSettings } from './settings';\nimport { initGallery } from './gallery';\nimport { initImageViewer } from './imageViewer';\nimport { reconnectUI } from './ui';\nimport { setupExtraNetworks, showNetworks, applyStyles } from './extraNetworks';\nimport { initAutocomplete } from './autocomplete';\nimport { setHints, disconnectHintsObserver } from './setHints';\nimport { initContextMenu } from './contextMenus';\nimport { executeCallbacks, onUiLoaded, onUiReady, sleep, uiReadyCallbacks, initTableSorter } from './script';\nimport { timer, logTimers } from './timers';\nimport { getUIDefaults } from './uiConfig';\nimport { log } from './logger';\nimport { appStartTime, removeSplash } from './loader';\nimport { addLegacyNotice } from './legacy';\n\nwindow.api = '/sdapi/v1';\nwindow.subpath = '';\n\nconst startupPromises: Promise[] = [];\nlet optsReady = false;\nlet initialized = false;\n\nasync function waitForOpts() {\n // make sure all of the ui is ready and options are loaded\n const t0 = performance.now();\n let t1 = performance.now();\n while (true) {\n if (t1 - t0 > 60000) {\n log('waitForOpts timeout');\n break;\n }\n if (window.opts && Object.keys(window.opts).length > 0) {\n optsReady = (window.opts.theme_type === 'Modern') ? 'uiux_separator_appearance' in window.opts : true;\n if (optsReady) {\n log('waitForOpts', Math.round(t1 - t0));\n timer('waitForOpts', t1 - t0);\n break;\n }\n }\n if (t1 - t0 > 15000) {\n log('waitForOpts delayed', Math.round(t1 - t0));\n }\n await sleep(100);\n t1 = performance.now();\n }\n}\n\nasync function postStartup() {\n log('postStartup');\n disconnectHintsObserver();\n logTimers();\n}\n\nasync function updateSubpath() {\n log('mountURL', window.opts.subpath);\n if (window.opts.subpath?.length > 0) {\n window.subpath = window.opts.subpath;\n window.api = `${window.subpath}/sdapi/v1`;\n }\n log('API', { url: window.api });\n}\n\nexport async function initStartup() {\n if (initialized) return;\n initialized = true;\n const t0 = performance.now();\n log('initGradio', Math.round(t0 - appStartTime));\n timer('initGradio', t0 - appStartTime);\n log('initUi');\n if (window.setupLogger) await window.setupLogger();\n\n // all items here are non-blocking async calls\n\n startupPromises.push(initModels());\n startupPromises.push(getUIDefaults());\n startupPromises.push(initPromptChecker());\n startupPromises.push(initContextMenu());\n startupPromises.push(initDragDrop());\n startupPromises.push(Promise.resolve(initAccordions()));\n startupPromises.push(Promise.resolve(initSettings()));\n startupPromises.push(Promise.resolve(initImageViewer()));\n startupPromises.push(Promise.resolve(initGallery()));\n startupPromises.push(Promise.resolve(initiGenerationParams()));\n startupPromises.push(Promise.resolve(initChangelog()));\n startupPromises.push(Promise.resolve(setupControlUI()));\n\n // reconnect server session\n await reconnectUI();\n await waitForOpts();\n await updateSubpath();\n\n executeCallbacks(uiReadyCallbacks);\n\n // optionally wait for modern ui\n if (window.opts.theme_type.toLowerCase().startsWith('modern') && window.waitForUiReady) await window.waitForUiReady();\n\n // post startup tasks that may take longer but are not critical\n startupPromises.push(Promise.resolve(initLogMonitor()));\n startupPromises.push(Promise.resolve(setRefreshInterval()));\n startupPromises.push(Promise.resolve(setupExtraNetworks()));\n startupPromises.push(Promise.resolve(initAutocomplete()));\n startupPromises.push(Promise.resolve(monitorConnection()));\n startupPromises.push(Promise.resolve(showNetworks()));\n startupPromises.push(Promise.resolve(setHints()));\n startupPromises.push(Promise.resolve(applyStyles()));\n startupPromises.push(Promise.resolve(initIndexDB()));\n startupPromises.push(Promise.resolve(initTableSorter()));\n\n if (window.opts.theme_type !== 'Modern') addLegacyNotice();\n\n const t1 = performance.now();\n log('initStartup', Math.round(1000 * (t1 - t0) / 1000000));\n\n removeSplash();\n\n await Promise.all(startupPromises);\n const t2 = performance.now();\n log('initComplete', Math.round(1000 * (t2 - t0) / 1000000));\n postStartup();\n}\n\nonUiLoaded(initStartup);\nonUiReady(() => log('uiReady'));\n\nwindow.initStartup = initStartup;\nwindow.addEventListener('pageshow', (evt) => log('pageShow', evt));\nwindow.addEventListener('pagehide', (evt) => log('pageHide', evt));\n\n// onAfterUiUpdate(() => log('evt onAfterUiUpdate'));\n// onUiLoaded(() => log('evt onUiLoaded'));\n// onOptionsChanged(() => log('evt onOptionsChanged'));\n// onUiTabChange(() => log('evt onUiTabChange'));\n// onUiUpdate(() => log('evt onUiUpdate'));\n", "import { randomId } from './progressBar';\n\nimport { log } from './logger';\nimport { gradioApp } from './script';\nimport { restartReload, updateInput } from './ui';\n\nexport function extensions_apply(_extensionsDisabledList: unknown, _extensionsUpdateList: unknown, disableAll: unknown): [string, string, unknown] {\n const disable = [];\n const update = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n if (x.name.startsWith('update_') && x.checked) update.push(x.name.substring(7));\n });\n restartReload();\n log('Extensions apply:', { disable, update });\n return [JSON.stringify(disable), JSON.stringify(update), disableAll];\n}\n\nexport function extensions_check(_info: unknown, _extensionsDisabledList: unknown, searchText: unknown, sortColumn: unknown): [string, string, unknown, unknown] {\n const disable = [];\n gradioApp().querySelectorAll('#extensions input[type=\"checkbox\"]').forEach((x) => {\n if (!(x instanceof HTMLInputElement)) return;\n if (x.name.startsWith('enable_') && !x.checked) disable.push(x.name.substring(7));\n });\n const id = randomId();\n log('Extensions check:', { disable });\n return [id, JSON.stringify(disable), searchText, sortColumn];\n}\n\nexport function install_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Installing...';\n button.innerHTML = 'installing';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension install:', { url });\n const installBtn = gradioApp().querySelector('#install_extension_button');\n if (installBtn instanceof HTMLElement) installBtn.click();\n}\n\nexport function uninstall_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.disabled = true;\n button.value = 'Uninstalling...';\n button.innerHTML = 'uninstalling';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension uninstall:', { url });\n const uninstallBtn = gradioApp().querySelector('#uninstall_extension_button');\n if (uninstallBtn instanceof HTMLElement) uninstallBtn.click();\n}\n\nexport function update_extension(button: HTMLButtonElement | HTMLInputElement, url: string): void {\n button.value = 'Updating...';\n button.innerHTML = 'updating';\n const textarea = gradioApp().querySelector('#extension_to_install textarea');\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n textarea.value = url;\n updateInput(textarea);\n log('Extension update:', { url });\n const updateBtn = gradioApp().querySelector('#update_extension_button');\n if (updateBtn instanceof HTMLInputElement) updateBtn.click();\n}\n\nwindow.extensions_apply = extensions_apply;\nwindow.extensions_check = extensions_check;\nwindow.uninstall_extension = uninstall_extension;\nwindow.install_extension = install_extension;\nwindow.update_extension = update_extension;\n", "import { log } from './logger';\nimport { gradioApp, uiElementIsVisible, uiElementInSight } from './script';\n\ntype PromptDropTarget = EventTarget & {\n placeholder?: string;\n closest: (selector: string) => Element | null;\n};\n\nfunction isValidImageList(files: FileList | null | undefined): files is FileList {\n return files && files?.length === 1 && ['image/png', 'image/gif', 'image/jpeg'].includes(files[0].type);\n}\n\nfunction dropReplaceImage(imgWrap: Element, files: FileList): void {\n log('dropReplaceImage', imgWrap, files);\n if (!isValidImageList(files)) return;\n const tmpFile = files[0];\n imgWrap.querySelector('.modify-upload button + button, .touch-none + div button + button')?.click();\n const callback = () => {\n const fileInput = imgWrap.querySelector('input[type=\"file\"]');\n if (fileInput instanceof HTMLInputElement) {\n if (files.length === 0) {\n const dt = new DataTransfer();\n dt.items.add(tmpFile);\n fileInput.files = dt.files;\n } else {\n fileInput.files = files;\n }\n fileInput.dispatchEvent(new Event('change'));\n }\n };\n\n if (imgWrap.closest('#pnginfo_image')) {\n const oldFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, options?: RequestInit) => {\n const response = await oldFetch(input, options);\n if (input === 'api/predict/') {\n const content = await response.text();\n window.fetch = oldFetch;\n window.requestAnimationFrame(() => callback());\n return new Response(content, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return response;\n };\n } else {\n window.requestAnimationFrame(() => callback());\n }\n}\n\nwindow.document.addEventListener('dragover', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap && target.placeholder && target.placeholder.indexOf('Prompt') === -1) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n});\n\nwindow.document.addEventListener('drop', (e) => {\n const target = e.composedPath()[0] as PromptDropTarget;\n log('dropEvent', e, target);\n if (!target.placeholder) return;\n if (target.placeholder.indexOf('Prompt') === -1) return;\n const imgWrap = target.closest('[data-testid=\"image\"]');\n if (!imgWrap) return;\n if ((e.dataTransfer?.files?.length || 0) > 0) {\n e.stopPropagation();\n e.preventDefault();\n dropReplaceImage(imgWrap, e.dataTransfer.files);\n }\n});\n\nwindow.addEventListener('paste', (e) => {\n log('pasteEvent', e);\n const files = e.clipboardData?.files;\n if (!isValidImageList(files)) return;\n const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid=\"image\"]')]\n .filter((el) => uiElementIsVisible(el))\n .sort((a, b) => Number(uiElementInSight(b)) - Number(uiElementInSight(a)));\n if (!visibleImageFields.length) return;\n const firstFreeImageField = visibleImageFields.filter((el) => el.querySelector('input[type=file]'))?.[0];\n dropReplaceImage(firstFreeImageField || visibleImageFields[visibleImageFields.length - 1], files);\n});\n", "import { gradioApp, onUiLoaded } from './script';\nimport { log, error } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface CivitFileMetadata {\n fp?: string | null;\n format?: string | null;\n size?: string | null;\n quantType?: string | null;\n}\n\ninterface CivitFile {\n id: number;\n url?: string;\n name?: string;\n type?: string;\n size?: number;\n primary?: boolean;\n metadata?: CivitFileMetadata;\n}\n\ninterface CivitImage {\n url: string;\n}\n\ninterface CivitVersion {\n id: number;\n name?: string;\n base?: string;\n mtime: string;\n availability?: string;\n desc?: string;\n files: CivitFile[];\n images: CivitImage[];\n}\n\ninterface CivitModel {\n id: number;\n url: string;\n name?: string;\n type?: string;\n tags?: string[];\n nsfw?: boolean;\n level?: number;\n availability?: string;\n downloads?: number;\n creator?: string;\n desc?: string;\n versions: CivitVersion[];\n}\n\ninterface QueuedFile {\n version: CivitVersion;\n file: CivitFile;\n}\n\n// eslint-disable-next-line no-extend-native\nString.prototype.format = function format(this: string, args: Record): string {\n let thisString = '';\n for (let charPos = 0; charPos < this.length; charPos++) thisString += this[charPos];\n for (const key in args) {\n const stringKey = `{${key}}`;\n thisString = thisString.replace(new RegExp(stringKey, 'g'), String(args[key]));\n }\n return thisString;\n};\n\nlet selectedURL: string[] = [];\nlet selectedName: string[] = [];\nlet selectedType: string[] = [];\nlet selectedBase: string[] = [];\nlet selectedModelId: number[] = [];\nlet selectedVersionId: number[] = [];\nlet currentModel: CivitModel | null = null;\n\nconst precisionOrder = ['fp32', 'bf16', 'fp16', 'fp8', 'int8', 'int4'];\nconst companionTypes = ['VAE', 'Text Encoder'];\n\nexport function clearModelDetails() {\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n el.innerHTML = '';\n}\nwindow.clearModelDetails = clearModelDetails;\n\nconst modelDetailsHTML = `\n
    \n \"model\n \n \n \n \n \n \n \n \n \n \n \n
    Name{name}
    Type{type}
    Tags
    {tags}
    NSFW{nsfw} | {level}
    Availability{availability}
    Downloads{downloads}
    Author{creator}
    Description
    {desc}
    Download
    All variants
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {versions}\n \n
    VersionTypeBaseFileVariantUpdatedSizeAvailabilityDescription
    \n
    \n`;\n\nfunction fileVariant(file: CivitFile): string | null {\n return file.metadata?.fp || file.metadata?.quantType || null;\n}\n\n// Model files before companions, then by precision, then larger first\nfunction sortFiles(files: CivitFile[]): CivitFile[] {\n const isModel = (f: CivitFile) => f.type === 'Model' || f.type === 'Pruned Model';\n const rank = (f: CivitFile) => {\n const index = precisionOrder.indexOf((fileVariant(f) || '').toLowerCase());\n return index < 0 ? precisionOrder.length : index;\n };\n return [...files].sort((a, b) => Number(isModel(b)) - Number(isModel(a)) || rank(a) - rank(b) || (b.size || 0) - (a.size || 0));\n}\n\nfunction insertNameSuffix(name: string, suffix: string): string {\n const dot = name.lastIndexOf('.');\n return dot > 0 ? `${name.slice(0, dot)}-${suffix}${name.slice(dot)}` : `${name}-${suffix}`;\n}\n\n// Precision suffix, then full/pruned and the file id only as far as needed to stay unique within the version\nfunction fileSaveName(file: CivitFile, siblings: CivitFile[]): string {\n const tier1 = (f: CivitFile) => {\n const variant = fileVariant(f);\n return variant ? insertNameSuffix(f.name || '', variant) : f.name || '';\n };\n const tier2 = (f: CivitFile) => (f.metadata?.size ? insertNameSuffix(tier1(f), f.metadata.size) : tier1(f));\n const others = siblings.filter((s) => s.id !== file.id);\n const name = tier1(file);\n if (!others.some((s) => tier1(s) === name)) return name;\n const sized = tier2(file);\n if (!others.some((s) => tier2(s) === sized)) return sized;\n return insertNameSuffix(name, String(file.id));\n}\n\nfunction escapeHTML(text: string): string {\n return text.replace(/[&<>\"']/g, (c) => `&#${c.charCodeAt(0)};`);\n}\n\nfunction versionRows(version: CivitVersion, divider: boolean): string {\n const files = sortFiles(version.files);\n const entries: (CivitFile | null)[] = files.length > 0 ? files : [null];\n const border = divider ? ' style=\"border-top: 1px solid var(--sd-panel-border-color, #555)\"' : '';\n const span = entries.length > 1 ? ` rowspan=\"${entries.length}\"` : '';\n const versionCell = (content: string) => `${content}`;\n return entries.map((file, i) => {\n const first = i === 0;\n const cell = (content: string) => `${content}`;\n const link = file ? `
    \\udb80\\uddda
    ` : '';\n const name = file ? `${escapeHTML(file.name || 'unknown')}${file.primary ? ' \u2605' : ''}` : 'unknown';\n const variant = file ? [fileVariant(file), file.metadata?.size].filter(Boolean).join(' \u00B7 ') : '';\n const size = file?.size ? `${(file.size / 1024 / 1024 / 1024).toFixed(2)} GB` : 'unknown';\n const cells = [\n cell(link),\n first ? versionCell(escapeHTML(version.name || 'unknown')) : '',\n cell(escapeHTML(file?.type || 'unknown')),\n first ? versionCell(escapeHTML(version.base || 'unknown')) : '',\n cell(name),\n cell(escapeHTML(variant || '-')),\n first ? versionCell((new Date(version.mtime)).toLocaleDateString()) : '',\n cell(size),\n first ? versionCell(escapeHTML(version.availability || 'unknown')) : '',\n first ? versionCell(`
    ${version.desc || 'no description available'}
    `) : '',\n ];\n return `${cells.join('')}`;\n }).join('');\n}\n\nexport async function modelCardClick(id) {\n log('modelCardClick id', id);\n const el = gradioApp().getElementById('model-details') || gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n if (!el) return;\n const res = await authFetch(`${window.api}/civitai?model_id=${encodeURI(id)}`);\n if (!res || res.status !== 200) {\n error(`modelCardClick: id=${id} status=${res ? res.status : 'unknown'}`);\n return;\n }\n const dataArray = await res.json();\n log('modelCardClick data', dataArray);\n if (!dataArray || dataArray.length === 0) return;\n const data: any = dataArray[0]; // assuming the first item is the one we want\n currentModel = data;\n\n const versionsHTML = data.versions.map((v: CivitVersion, i: number) => versionRows(v, i > 0)).join('');\n const url = `${data.name || 'unknown'}`;\n const creator = `${data.creator || 'unknown'}`;\n const images = data.versions.map((v: CivitVersion) => v.images).flat().map((i: CivitImage) => i.url); // TODO image gallery\n const modelHTML = modelDetailsHTML.format({\n name: url,\n type: data.type || 'unknown',\n tags: data.tags?.join(', ') || '',\n nsfw: data.nsfw ? 'yes' : 'no',\n level: data.level?.toString() || '',\n availability: data.availability || 'unknown',\n downloads: data.downloads?.toString() || '',\n creator,\n desc: data.desc || 'no description available',\n image: images.length > 0 ? images[0] : '/sdapi/v1/network/thumb?filename=ui/assets/missing.png',\n versions: versionsHTML || '',\n });\n el.innerHTML = modelHTML;\n}\nwindow.modelCardClick = modelCardClick;\n\nfunction queueFiles(model: CivitModel, queued: QueuedFile[]) {\n selectedURL = queued.map(({ file }) => file.url || '');\n selectedName = queued.map(({ version, file }) => fileSaveName(file, version.files));\n selectedType = queued.map(({ file }) => (companionTypes.includes(file.type || '') ? file.type : model.type) || '');\n selectedBase = queued.map(({ version }) => version.base || '');\n selectedModelId = queued.map(() => model.id || 0);\n selectedVersionId = queued.map(({ version }) => version.id || 0);\n const civitDownloadBtn = gradioApp().getElementById('civitai_download_btn');\n if (civitDownloadBtn) civitDownloadBtn.click();\n}\n\nexport function startCivitFileDownload(versionId: number, fileId: number) {\n log('startCivitFileDownload', { versionId, fileId });\n const version = currentModel?.versions.find((v) => v.id === versionId);\n const file = version?.files.find((f) => f.id === fileId);\n if (!currentModel || !version || !file) return;\n queueFiles(currentModel, [{ version, file }]);\n}\nwindow.startCivitFileDownload = startCivitFileDownload;\n\nexport function startCivitAllDownload(evt) {\n log('startCivitAllDownload', evt);\n if (!currentModel) return;\n const queued = currentModel.versions\n .map((version) => ({ version, file: version.files.find((f) => f.primary) || version.files[0] }))\n .filter((entry): entry is QueuedFile => !!entry.file);\n queueFiles(currentModel, queued);\n}\nwindow.startCivitAllDownload = startCivitAllDownload;\n\nexport function downloadCivitModel(modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken, innerHTML) {\n log('downloadCivitModel', { modelUrl, modelName, modelType, modelBase, mId, vId, modelPath, civitToken });\n const el = gradioApp().getElementById('civitai_models_output') || gradioApp().getElementById('models_outcome');\n const currentHTML = el?.innerHTML || '';\n return [selectedURL, selectedName, selectedType, selectedBase, selectedModelId, selectedVersionId, modelPath, civitToken, currentHTML];\n}\nwindow.downloadCivitModel = downloadCivitModel;\n\nlet civitMutualExcludeBound = false;\n\nexport function civitaiMutualExclude() {\n if (civitMutualExcludeBound) return;\n const searchEl = gradioApp().querySelector('#civit_search_text textarea');\n const tagEl = gradioApp().querySelector('#civit_search_tag textarea');\n if (!searchEl || !tagEl) return;\n civitMutualExcludeBound = true;\n searchEl.addEventListener('input', () => {\n tagEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!searchEl.value.trim());\n });\n tagEl.addEventListener('input', () => {\n searchEl.closest('.gradio-textbox')?.classList.toggle('disabled-look', !!tagEl.value.trim());\n });\n}\n\nonUiLoaded(civitaiMutualExclude);\n", "import { log } from './logger';\n\ntype GuiderLike = string | { label?: string };\n\nconst guiders: Record = {\n None: '',\n 'LSC: LayerSkipConfig': 'https://github.com/huggingface/diffusers/blob/041501aea92919c9c7f36e189fc9cf7d865ebb96/src/diffusers/hooks/layer_skip.py#L41',\n 'CFG: ClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance',\n 'Auto: AutoGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AutoGuidance',\n 'Zero: ClassifierFreeZeroStar': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.ClassifierFreeZeroStarGuidance',\n 'PAG: PerturbedAttentionGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.PerturbedAttentionGuidance',\n 'APG: AdaptiveProjectedGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.AdaptiveProjectedGuidance',\n 'SLG: SkipLayerGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SkipLayerGuidance',\n 'SEG: SmoothedEnergyGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.SmoothedEnergyGuidance',\n 'TCFG: TangentialClassifierFreeGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.TangentialClassifierFreeGuidance',\n 'FDG: FrequencyDecoupledGuidance': 'https://huggingface.co/docs/diffusers/v0.35.1/en/api/modular_diffusers/guiders#diffusers.FrequencyDecoupledGuidance',\n};\n\nexport function getGuidanceDocs(guider: GuiderLike): void {\n const key = typeof guider === 'object' && guider?.label ? guider.label : guider;\n const url = guiders[key as string];\n log('getGuidanceDocs', guider, url);\n if (url) window.open(url, '_blank');\n}\n\nwindow.getGuidanceDocs = getGuidanceDocs;\n", "/* eslint max-classes-per-file: [\"error\", 2] */\n\ninterface TimesheetItem {\n start: number;\n end: number;\n label: string;\n type: string;\n}\n\nclass Bubble {\n type: string;\n label: string;\n min: number;\n start: number;\n end: number;\n scale: number;\n offset: number;\n width: number;\n duration: number;\n title: string;\n\n constructor(min: number, start: number, end: number, label: string, scale: number, type: string) {\n this.type = type;\n this.label = label;\n this.min = min;\n this.start = start;\n this.end = end;\n this.scale = scale;\n this.offset = Math.round(this.scale * (this.start - this.min));\n this.width = Math.round(this.scale * (this.end - this.start));\n this.duration = Math.round(1000 * (this.end - this.start)) / 1000;\n this.title = `Job: ${this.label}\\nDuration: ${this.duration}s\\nStart: ${new Date(1000 * this.start).toLocaleString()}\\nEnd: ${new Date(1000 * this.end).toLocaleString()}`;\n }\n\n getDateLabel(): number {\n return Math.round(1000 * (this.end - this.start)) / 1000;\n }\n}\n\nexport class Timesheet {\n min: number;\n max: number;\n data: TimesheetItem[];\n container: HTMLElement;\n scale: number;\n\n constructor(container: HTMLElement, data: TimesheetItem[]) {\n this.min = Math.floor(data[0].start);\n this.max = Math.round(data[data.length - 1].end + 0.5);\n this.data = data;\n this.container = container;\n const box = container.getBoundingClientRect();\n const width = box.width - 140;\n this.scale = width / (this.max - this.min);\n\n // draw sections\n let html: string[] = [];\n for (let c = 0; c <= this.max - this.min; c++) html.push(`
    `);\n container.className = 'timesheet color-scheme-default';\n container.innerHTML = `
    ${html.join('')}
    `;\n\n // insert data\n html = [];\n for (let n = 0, m = this.data.length; n < m; n++) {\n const cur = this.data[n];\n const bubble = new Bubble(this.min, cur.start, cur.end, cur.label, this.scale, cur.type);\n const line = [\n ``,\n `${bubble.duration} `,\n `${bubble.label}`,\n ].join('');\n html.push(`
  • ${line}
  • `);\n }\n this.container.innerHTML += `
      ${html.join('')}
    `;\n }\n}\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\ninterface HistoryEntry {\n timestamp: number;\n id: string;\n job: string;\n op: string;\n duration?: number;\n outputs: string[];\n type?: 'inference' | 'io' | 'default';\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nconst inferenceTypes = ['inference', 'vae', 'te'];\nconst ioTypes = ['load', 'save'];\n\nexport async function refreshHistory() {\n log('refreshHistory');\n authFetch(`${window.api}/history`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('history_timeline');\n const table = document.getElementById('history_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n let data = rawData as HistoryEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No history data available.

    ';\n return;\n }\n\n // build table\n let html = '';\n for (const entry of data) {\n const ts = new Date(1000 * entry.timestamp).toLocaleString();\n const duration = entry.duration ? (entry.duration).toFixed(3) : '';\n const outputs = entry.outputs.join(', ');\n html += ``;\n }\n html += '
    TimeIDJobActionDurationOutputs
    ${ts}${entry.id}${entry.job}${entry.op}${duration}${outputs}
    ';\n table.innerHTML = html;\n\n // crop data to last processing session\n let startIdx = -1;\n for (let i = data.length - 1; i >= 0; --i) {\n const e = data[i];\n if ((e.job === 'control' || e.job === 'text' || e.job === 'control' || e.job === 'image') && (e.op === 'begin')) {\n startIdx = i;\n break;\n }\n }\n if (startIdx >= 0) data = data.slice(startIdx);\n\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n });\n });\n}\n\nwindow.refreshHistory = refreshHistory;\n", "import { Timesheet } from './timesheet';\nimport { log } from './logger';\nimport { authFetch } from './authWrap';\n\nconst types = ['Images', 'Videos', 'Models', 'Data', 'Cache', 'Code', 'Other'];\n\ninterface LocationEntry {\n name: string;\n type: 'Images' | 'Videos' | 'Models' | 'Data' | 'Cache' | 'Code' | 'Other';\n folders: string[];\n paths: string[];\n size: number;\n mtime: number;\n nfiles: number;\n nfolders: number;\n nsymlinks: number;\n nerrors: number;\n time: number;\n}\n\ninterface TimelineEntry {\n start: number;\n end: number;\n label: string;\n type: 'inference' | 'io' | 'default';\n}\n\nfunction buildTable(type: string, data: LocationEntry[]) {\n // let html = `

    ${type}

    `;\n const totalSize = data.reduce((acc, entry) => acc + entry.size, 0);\n const totalLoc = data.length;\n const totalFiles = data.reduce((acc, entry) => acc + entry.nfiles, 0);\n const totalFolders = data.reduce((acc, entry) => acc + entry.nfolders, 0);\n let title = `Locations: ${totalLoc}\\nTotal Size: ${(totalSize / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} MB\\nTotal Files: ${totalFiles}\\nTotal Folders: ${totalFolders}\\n`;\n let html = `

    ${type}

    LocationSizeMTime
    `;\n for (const entry of data) {\n if (entry.size === 0) continue;\n const size = (entry.size / (1024 * 1024)).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' MB';\n const mtime = entry.mtime > 0 ? new Date(entry.mtime * 1000).toLocaleString() : '';\n title = `Type: ${entry.type}\\nName: ${entry.name}\\nSize: ${size}\\nLast modified: ${mtime}\\n`;\n title += `Folders: ${entry.folders.join(', ')}\\nResolved paths: ${entry.paths.join(', ')}\\n`;\n title += `Subfolders: ${entry.nfolders}\\nFiles: ${entry.nfiles}\\nSymlinks: ${entry.nsymlinks}\\nErrors: ${entry.nerrors}\\n`;\n title += `Time to scan: ${entry.time.toFixed(3)} seconds`;\n const perc = Math.round((entry.size / totalSize) * 100);\n const color = `rgb(${perc}, 50, 80)`;\n const css = `background: linear-gradient(to right, ${color} ${perc}%, transparent ${perc}%);`;\n html += ``;\n }\n html += '
    ${entry.name}${size}${mtime}
    ';\n return html;\n}\n\nexport async function refreshStorage(storageTypes: string[]) {\n log('refreshStorage', storageTypes);\n authFetch(`${window.api}/storage?types=${storageTypes.join(',')}`, { priority: 'low' }).then((res) => {\n if (!res) return;\n const timeline = document.getElementById('storage_timeline');\n const table = document.getElementById('storage_table');\n if (!timeline || !table) return;\n timeline.innerHTML = '';\n res.json().then((rawData) => {\n const data = rawData as LocationEntry[];\n if (!data || !data.length) {\n table.innerHTML = '

    No storage data available.

    ';\n return;\n }\n table.innerHTML = '';\n if (storageTypes.includes('All')) storageTypes = types;\n for (const type of storageTypes) {\n const typeData = data.filter((entry) => entry.type === type);\n if (typeData.length > 0) table.innerHTML += buildTable(type, typeData);\n }\n\n /*\n // build timeline\n const ts: TimelineEntry[] = [];\n for (const entry of data) {\n if (entry.op === 'begin') {\n const start = entry.timestamp;\n const endEntry = data.find((e) => (e.id === entry.id && e.op === 'end'));\n const end = endEntry?.timestamp ?? data[data.length - 1].timestamp;\n if (end - start < 0.02) continue; // skip very short entries\n if (inferenceTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'inference';\n else if (ioTypes.some((type) => entry.job.toLowerCase().startsWith(type))) entry.type = 'io';\n else entry.type = 'default';\n if (start && end) ts.push({ start, end, label: entry.job, type: entry.type });\n }\n }\n if (!ts.length) return;\n // eslint-disable-next-line no-new\n new Timesheet(timeline, ts);\n */\n });\n });\n}\n\nwindow.refreshStorage = refreshStorage;\n", "import { gradioApp, onAfterUiUpdate } from './script';\nimport { get_tab_index } from './ui';\n\nlet currentWidth: number | null = null;\nlet currentHeight: number | null = null;\nlet arFrameTimeout: ReturnType | undefined;\n\nfunction dimensionChange(e: Event, isWidth: boolean, isHeight: boolean): void {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) return;\n if (isWidth) currentWidth = Number(target.value);\n if (isHeight) currentHeight = Number(target.value);\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (!(tabImg2img instanceof HTMLElement)) return;\n const inImg2img = tabImg2img.style.display === 'block';\n if (!inImg2img) return;\n let targetElement: HTMLImageElement | null = null;\n const tabIndex = get_tab_index('mode_img2img');\n if (tabIndex === 0) targetElement = gradioApp().querySelector('#img2img_image div[data-testid=image] img'); // img2img\n else if (tabIndex === 1) targetElement = gradioApp().querySelector('#img2img_sketch div[data-testid=image] img'); // Sketch\n else if (tabIndex === 2) targetElement = gradioApp().querySelector('#img2maskimg div[data-testid=image] img'); // Inpaint\n else if (tabIndex === 3) targetElement = gradioApp().querySelector('#composite div[data-testid=image] img'); // Inpaint sketch\n\n if (targetElement && currentWidth && currentHeight) {\n let arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (!arPreviewRect) {\n arPreviewRect = document.createElement('div');\n arPreviewRect.id = 'imageARPreview';\n gradioApp().appendChild(arPreviewRect);\n }\n\n const viewportOffset = targetElement.getBoundingClientRect();\n const viewportscale = Math.min(targetElement.clientWidth / targetElement.naturalWidth, targetElement.clientHeight / targetElement.naturalHeight);\n const scaledx = targetElement.naturalWidth * viewportscale;\n const scaledy = targetElement.naturalHeight * viewportscale;\n const cleintRectTop = (viewportOffset.top + window.scrollY);\n const cleintRectLeft = (viewportOffset.left + window.scrollX);\n const cleintRectCentreY = cleintRectTop + (targetElement.clientHeight / 2);\n const cleintRectCentreX = cleintRectLeft + (targetElement.clientWidth / 2);\n const arscale = Math.min(scaledx / currentWidth, scaledy / currentHeight);\n const arscaledx = currentWidth * arscale;\n const arscaledy = currentHeight * arscale;\n const arRectTop = cleintRectCentreY - (arscaledy / 2);\n const arRectLeft = cleintRectCentreX - (arscaledx / 2);\n const arRectWidth = arscaledx;\n const arRectHeight = arscaledy;\n arPreviewRect.style.top = `${arRectTop}px`;\n arPreviewRect.style.left = `${arRectLeft}px`;\n arPreviewRect.style.width = `${arRectWidth}px`;\n arPreviewRect.style.height = `${arRectHeight}px`;\n\n if (arFrameTimeout) clearTimeout(arFrameTimeout);\n arFrameTimeout = setTimeout(() => { arPreviewRect.style.display = 'none'; }, 2000);\n arPreviewRect.style.display = 'block';\n }\n}\n\nexport function aspectRatioCallback(): void {\n const arPreviewRect = gradioApp().querySelector('#imageARPreview');\n if (arPreviewRect instanceof HTMLElement) arPreviewRect.style.display = 'none';\n const tabImg2img = gradioApp().querySelector('#tab_img2img');\n if (tabImg2img instanceof HTMLElement) {\n const inImg2img = tabImg2img.style.display === 'block';\n if (inImg2img) {\n const inputs = gradioApp().querySelectorAll('input');\n inputs.forEach((e) => {\n if (!(e instanceof HTMLInputElement) || !(e.parentElement instanceof HTMLElement)) return;\n const isWidth = e.parentElement.id === 'img2img_width';\n const isHeight = e.parentElement.id === 'img2img_height';\n if ((isWidth || isHeight) && !e.classList.contains('scrollwatch')) {\n e.addEventListener('input', (evt) => { dimensionChange(evt, isWidth, isHeight); });\n e.classList.add('scrollwatch');\n }\n if (isWidth) currentWidth = Number(e.value);\n if (isHeight) currentHeight = Number(e.value);\n });\n }\n }\n}\n\nonAfterUiUpdate(aspectRatioCallback);\n", "import { gradioApp, onAfterUiUpdate } from './script';\n\n// Aspect-ratio lock for the paired width/height sliders. The math runs client-side and debounced,\n// and only the partner axis is ever written, never the field being edited; writing the edited field\n// back is what yanked the value mid-type when this went through a gradio round-trip. Programmatic\n// updates dispatch a synthetic input event so gradio's store stays in sync. State is keyed per\n// dropdown element so duplicate elem ids across tabs stay isolated.\n\nconst RES_DEBOUNCE = 350;\nconst AR_DEBOUNCE = 120;\nconst timers = new WeakMap>();\nconst busy = new WeakSet();\n\nfunction parseAR(ar: string): [number, number] | null {\n if (!ar || ar === 'AR') return null;\n const parts = ar.split(':');\n if (parts.length !== 2) return null;\n const w = parseInt(parts[0], 10);\n const h = parseInt(parts[1], 10);\n return (w > 0 && h > 0) ? [w, h] : null;\n}\n\nfunction numberInput(group: Element): HTMLInputElement | null {\n const inp = group.querySelector('input[type=number]') || group.querySelector('input');\n return inp instanceof HTMLInputElement ? inp : null;\n}\n\nfunction readValue(group: Element): number {\n const inp = numberInput(group);\n return inp ? Number(inp.value) : 0;\n}\n\nfunction writeValue(group: Element, raw: number): void {\n const inp = numberInput(group);\n if (!inp) return;\n const step = Number(inp.step) || 8;\n const min = inp.min !== '' ? Number(inp.min) : 0;\n const max = inp.max !== '' ? Number(inp.max) : 8192;\n const value = Math.max(min, Math.min(max, Math.round(raw / step) * step));\n if (value === Number(inp.value)) return; // unchanged: skip so the listeners do not refire\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) return;\n el.value = String(value);\n const e = new Event('input', { bubbles: true });\n Object.defineProperty(e, 'target', { value: el });\n el.dispatchEvent(e);\n });\n}\n\nfunction arValue(arEl: Element): string {\n const inp = arEl.querySelector('input');\n return inp instanceof HTMLInputElement ? inp.value : 'AR';\n}\n\nfunction pairOf(arEl: Element): { width: Element; height: Element } | null {\n let container: Element | null = arEl.parentElement;\n for (let i = 0; i < 6 && container; i++) {\n const width = container.querySelector('[id$=\"_width\"]');\n const height = container.querySelector('[id$=\"_height\"]');\n if (width && height) return { width, height };\n container = container.parentElement;\n }\n return null;\n}\n\nfunction getNearestAspectRatio(width: number, height: number, maxPixelTolerance = 8): string | null {\n const STANDARD_RATIOS = [\n { label: '1:1', ratio: 1 / 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '3:2', ratio: 3 / 2 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '16:10', ratio: 16 / 10 },\n { label: '21:9', ratio: 64 / 27 }, // standard cinematic 21:9 ratio is actually 64/27\n { label: '2:3', ratio: 2 / 3 },\n { label: '3:4', ratio: 3 / 4 },\n { label: '9:16', ratio: 9 / 16 },\n { label: '10:16', ratio: 10 / 16 },\n { label: '9:21', ratio: 27 / 64 },\n ];\n const targetRatio = width / height;\n const closest = STANDARD_RATIOS.reduce((prev, curr) => (Math.abs(curr.ratio - targetRatio) < Math.abs(prev.ratio - targetRatio) ? curr : prev));\n const expectedWidth = height * closest.ratio;\n const expectedHeight = width / closest.ratio;\n const widthDiff = Math.abs(width - expectedWidth);\n const heightDiff = Math.abs(height - expectedHeight);\n if (widthDiff <= maxPixelTolerance || heightDiff <= maxPixelTolerance) return closest.label;\n const ratio = (width / height).toFixed(2);\n return `${ratio}:1`;\n}\n\nfunction settle(arEl: Element, source: 'width' | 'height'): void {\n const ar = parseAR(arValue(arEl));\n const pair = pairOf(arEl);\n if (!pair) return;\n if (ar) { // ar is set\n const [rw, rh] = ar;\n busy.add(arEl);\n if (source === 'height') writeValue(pair.width, (readValue(pair.height) * rw) / rh);\n else writeValue(pair.height, (readValue(pair.width) * rh) / rw);\n }\n const span = arEl.querySelector('span');\n if (span) span.innerText = getNearestAspectRatio(readValue(pair.width), readValue(pair.height));\n busy.delete(arEl);\n}\n\nfunction schedule(arEl: Element, source: 'width' | 'height', delay: number): void {\n if (busy.has(arEl)) return; // ignore the input events our own writes dispatch\n clearTimeout(timers.get(arEl));\n timers.set(arEl, setTimeout(() => settle(arEl, source), delay));\n}\n\nfunction flush(arEl: Element, source: 'width' | 'height'): void {\n if (busy.has(arEl)) return;\n clearTimeout(timers.get(arEl));\n settle(arEl, source);\n}\n\nfunction bind(arEl: Element, group: Element, source: 'width' | 'height'): void {\n group.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('input', () => schedule(arEl, source, RES_DEBOUNCE));\n el.addEventListener('change', () => flush(arEl, source)); // commit on blur, enter, or slider release\n });\n}\n\nexport function setupResolutionLock(): void {\n gradioApp().querySelectorAll('.ar-dropdown').forEach((arEl) => {\n const pair = pairOf(arEl);\n if (!pair) return;\n bind(arEl, pair.width, 'width');\n bind(arEl, pair.height, 'height');\n arEl.querySelectorAll('span').forEach((el) => {\n if (el) el.innerText = '';\n });\n arEl.querySelectorAll('input').forEach((el) => {\n if (!(el instanceof HTMLInputElement) || el.classList.contains('ar-lock-bound')) return;\n el.classList.add('ar-lock-bound');\n el.addEventListener('change', () => flush(arEl, 'width')); // new ratio: keep width, derive height\n el.addEventListener('input', () => schedule(arEl, 'width', AR_DEBOUNCE));\n });\n });\n}\n\nonAfterUiUpdate(setupResolutionLock);\n", "import { updateInput } from './ui';\n\nexport function keyupEditAttention(event: KeyboardEvent): void {\n const target = (event as any).originalTarget || event.composedPath()[0];\n if (!(target instanceof HTMLTextAreaElement)) return;\n if (!target.matches(\"*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea\")) return;\n if (!(event.metaKey || event.ctrlKey)) return;\n const isPlus = event.key === 'ArrowUp';\n const isMinus = event.key === 'ArrowDown';\n if (!isPlus && !isMinus) return;\n let { selectionStart } = target;\n let { selectionEnd } = target;\n let text = target.value;\n\n function selectCurrentParenthesisBlock(OPEN: string, CLOSE: string): boolean {\n if (selectionStart !== selectionEnd) return false;\n\n // Find opening parenthesis around current cursor\n const before = text.substring(0, selectionStart);\n let beforeParen = before.lastIndexOf(OPEN);\n if (beforeParen === -1) return false;\n let beforeParenClose = before.lastIndexOf(CLOSE);\n while (beforeParenClose !== -1 && beforeParenClose > beforeParen) {\n beforeParen = before.lastIndexOf(OPEN, beforeParen - 1);\n beforeParenClose = before.lastIndexOf(CLOSE, beforeParenClose - 1);\n }\n\n // Find closing parenthesis around current cursor\n const after = text.substring(selectionStart);\n let afterParen = after.indexOf(CLOSE);\n if (afterParen === -1) return false;\n let afterParenOpen = after.indexOf(OPEN);\n while (afterParenOpen !== -1 && afterParen > afterParenOpen) {\n afterParen = after.indexOf(CLOSE, afterParen + 1);\n afterParenOpen = after.indexOf(OPEN, afterParenOpen + 1);\n }\n if (beforeParen === -1 || afterParen === -1) return false;\n\n // Set the selection to the text between the parenthesis\n const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);\n const lastColon = parenContent.lastIndexOf(':');\n selectionStart = beforeParen + 1;\n selectionEnd = selectionStart + lastColon;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n function selectCurrentWord(): boolean {\n if (selectionStart !== selectionEnd) return false;\n const delimiters = `${window.opts.keyedit_delimiters} \\r\\n\\t`;\n // seek backward until to find beginning\n while (!delimiters.includes(text[selectionStart - 1]) && selectionStart > 0) selectionStart--;\n // seek forward to find end\n while (!delimiters.includes(text[selectionEnd]) && selectionEnd < text.length) selectionEnd++;\n target.setSelectionRange(selectionStart, selectionEnd);\n return true;\n }\n\n // If the user hasn't selected anything, let's select their current parenthesis block or word\n if (!selectCurrentParenthesisBlock('<', '>') && !selectCurrentParenthesisBlock('(', ')')) selectCurrentWord();\n event.preventDefault();\n\n let closeCharacter = ')';\n let delta = window.opts.keyedit_precision_attention;\n\n if (selectionStart > 0 && text[selectionStart - 1] === '<') {\n closeCharacter = '>';\n delta = window.opts.keyedit_precision_extra;\n } else if (selectionStart === 0 || text[selectionStart - 1] !== '(') {\n while (selectionEnd > selectionStart && text[selectionEnd - 1] === ' ') selectionEnd -= 1;\n if (selectionStart === selectionEnd) return;\n text = `${text.slice(0, selectionStart)}(${text.slice(selectionStart, selectionEnd)}:1.0)${text.slice(selectionEnd)}`;\n selectionStart += 1;\n selectionEnd += 1;\n }\n const end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;\n let weight: any = parseFloat(text.slice(selectionEnd + 1, selectionEnd + 1 + end));\n if (Number.isNaN(weight)) return;\n weight += isPlus ? delta : -delta;\n weight = parseFloat(weight.toPrecision(12));\n if (String(weight).length === 1) weight += '.0';\n if (closeCharacter === ')' && weight === 1) {\n text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 5);\n selectionStart--;\n selectionEnd--;\n } else {\n text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + 1 + end - 1);\n }\n target.focus();\n target.value = text;\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n updateInput(target);\n}\n\naddEventListener('keydown', (event) => keyupEditAttention(event));\n", "/**\n*\n* jquery.sparkline.js\n*\n* v2.4.1\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n* * Redistributions of source code must retain the above copyright notice,\n* this list of conditions and the following disclaimer.\n* * Redistributions in binary form must reproduce the above copyright notice,\n* this list of conditions and the following disclaimer in the documentation\n* and/or other materials provided with the distribution.\n* * Neither the name of Splunk Inc nor the names of its contributors may\n* be used to endorse or promote products derived from this software without\n* specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n* $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*

    Sparkline: 1,4,6,6,8,5,3,5

    \n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*

    Sparkline: This text replaced if the browser is compatible

    \n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*

    Sparkline:

    \n*

    Sparkline:

    \n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    \n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as the second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*

    Sparkline: loading

    \n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionsPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat(' {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'box-sizing: content-box;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag, iefail;\n if (document.createStyleSheet) {\n try {\n document.createStyleSheet().cssText = css;\n return;\n } catch (e) {\n // IE <= 9 maxes out at 31 stylesheets; inject into page instead.\n iefail = true;\n }\n }\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n if (iefail) {\n document.styleSheets[document.styleSheets.length - 1].cssText = css;\n } else {\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('
    ', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('
    ', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '
    ' + options.get('tooltipChartTitle') + '
    \\n';\n }\n formats = this.options.get('tooltipFormat');\n if (!formats) {\n return '';\n }\n if (!$.isArray(formats)) {\n formats = [formats];\n }\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n showFields = this.options.get('tooltipFormatFieldlist');\n showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n if (showFields && showFieldsKey) {\n // user-selected ordering of fields\n newFields = [];\n for (i = fields.length; i--;) {\n fv = fields[i][showFieldsKey];\n if ((j = $.inArray(fv, showFields)) != -1) {\n newFields[j] = fields[i];\n }\n }\n fields = newFields;\n }\n formatlen = formats.length;\n fieldlen = fields.length;\n for (i = 0; i < formatlen; i++) {\n format = formats[i];\n if (typeof format === 'string') {\n format = new SPFormat(format);\n }\n fclass = format.fclass || 'jqsfield';\n for (j = 0; j < fieldlen; j++) {\n if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n $.extend(fields[j], {\n prefix: options.get('tooltipPrefix'),\n suffix: options.get('tooltipSuffix')\n });\n text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n entries.push('
    ' + text + '
    ');\n }\n }\n }\n if (entries.length) {\n return header + entries.join('\\n');\n }\n return '';\n },\n\n getCurrentRegionFields: function () {},\n\n calcHighlightColor: function (color, options) {\n var highlightColor = options.get('highlightColor'),\n lighten = options.get('highlightLighten'),\n parse, mult, rgbnew, i;\n if (highlightColor) {\n return highlightColor;\n }\n if (lighten) {\n // extract RGB values\n parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (parse) {\n rgbnew = [];\n mult = color.length === 4 ? 16 : 1;\n for (i = 0; i < 3; i++) {\n rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n }\n return 'rgb(' + rgbnew.join(',') + ')';\n }\n\n }\n return color;\n }\n\n });\n\n barHighlightMixin = {\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n target = this.target,\n shapeids = this.regionShapes[currentRegion],\n newShapes;\n // will be null if the region value was null\n if (shapeids) {\n newShapes = this.renderRegion(currentRegion, highlight);\n if ($.isArray(newShapes) || $.isArray(shapeids)) {\n target.replaceWithShapes(shapeids, newShapes);\n this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n return newShape.id;\n });\n } else {\n target.replaceWithShape(shapeids, newShapes);\n this.regionShapes[currentRegion] = newShapes.id;\n }\n }\n },\n\n render: function () {\n var values = this.values,\n target = this.target,\n regionShapes = this.regionShapes,\n shapes, ids, i, j;\n\n if (!this.cls._super.render.call(this)) {\n return;\n }\n for (i = values.length; i--;) {\n shapes = this.renderRegion(i);\n if (shapes) {\n if ($.isArray(shapes)) {\n ids = [];\n for (j = shapes.length; j--;) {\n shapes[j].append();\n ids.push(shapes[j].id);\n }\n regionShapes[i] = ids;\n } else {\n shapes.append();\n regionShapes[i] = shapes.id; // store just the shapeid\n }\n } else {\n // null value\n regionShapes[i] = null;\n }\n }\n target.render();\n }\n };\n\n /**\n * Line charts\n */\n $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n type: 'line',\n\n init: function (el, values, options, width, height) {\n line._super.init.call(this, el, values, options, width, height);\n this.vertices = [];\n this.regionMap = [];\n this.xvalues = [];\n this.yvalues = [];\n this.yminmax = [];\n this.hightlightSpotId = null;\n this.lastShapeId = null;\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var i,\n regionMap = this.regionMap; // maps regions to value positions\n for (i = regionMap.length; i--;) {\n if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n return regionMap[i][2];\n }\n }\n return undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.yvalues[currentRegion] === null,\n x: this.xvalues[currentRegion],\n y: this.yvalues[currentRegion],\n color: this.options.get('lineColor'),\n fillColor: this.options.get('fillColor'),\n offset: currentRegion\n };\n },\n\n renderHighlight: function () {\n var currentRegion = this.currentRegion,\n target = this.target,\n vertex = this.vertices[currentRegion],\n options = this.options,\n spotRadius = options.get('spotRadius'),\n highlightSpotColor = options.get('highlightSpotColor'),\n highlightLineColor = options.get('highlightLineColor'),\n highlightSpot, highlightLine;\n\n if (!vertex) {\n return;\n }\n if (spotRadius && highlightSpotColor) {\n highlightSpot = target.drawCircle(vertex[0], vertex[1],\n spotRadius, undefined, highlightSpotColor);\n this.highlightSpotId = highlightSpot.id;\n target.insertAfterShape(this.lastShapeId, highlightSpot);\n }\n if (highlightLineColor) {\n highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n this.canvasTop + this.canvasHeight, highlightLineColor);\n this.highlightLineId = highlightLine.id;\n target.insertAfterShape(this.lastShapeId, highlightLine);\n }\n },\n\n removeHighlight: function () {\n var target = this.target;\n if (this.highlightSpotId) {\n target.removeShapeId(this.highlightSpotId);\n this.highlightSpotId = null;\n }\n if (this.highlightLineId) {\n target.removeShapeId(this.highlightLineId);\n this.highlightLineId = null;\n }\n },\n\n scanValues: function () {\n var values = this.values,\n valcount = values.length,\n xvalues = this.xvalues,\n yvalues = this.yvalues,\n yminmax = this.yminmax,\n i, val, isStr, isArray, sp;\n for (i = 0; i < valcount; i++) {\n val = values[i];\n isStr = typeof(values[i]) === 'string';\n isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n sp = isStr && values[i].split(':');\n if (isStr && sp.length === 2) { // x:y\n xvalues.push(Number(sp[0]));\n yvalues.push(Number(sp[1]));\n yminmax.push(Number(sp[1]));\n } else if (isArray) {\n xvalues.push(val[0]);\n yvalues.push(val[1]);\n yminmax.push(val[1]);\n } else {\n xvalues.push(i);\n if (values[i] === null || values[i] === 'null') {\n yvalues.push(null);\n } else {\n yvalues.push(Number(val));\n yminmax.push(Number(val));\n }\n }\n }\n if (this.options.get('xvalues')) {\n xvalues = this.options.get('xvalues');\n }\n\n this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n this.maxx = Math.max.apply(Math, xvalues);\n this.minx = Math.min.apply(Math, xvalues);\n\n this.xvalues = xvalues;\n this.yvalues = yvalues;\n this.yminmax = yminmax;\n\n },\n\n processRangeOptions: function () {\n var options = this.options,\n normalRangeMin = options.get('normalRangeMin'),\n normalRangeMax = options.get('normalRangeMax');\n\n if (normalRangeMin !== undefined) {\n if (normalRangeMin < this.miny) {\n this.miny = normalRangeMin;\n }\n if (normalRangeMax > this.maxy) {\n this.maxy = normalRangeMax;\n }\n }\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n this.miny = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n this.maxy = options.get('chartRangeMax');\n }\n if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n this.minx = options.get('chartRangeMinX');\n }\n if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n this.maxx = options.get('chartRangeMaxX');\n }\n\n },\n\n drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n var normalRangeMin = this.options.get('normalRangeMin'),\n normalRangeMax = this.options.get('normalRangeMax'),\n ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n },\n\n render: function () {\n var options = this.options,\n target = this.target,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n vertices = this.vertices,\n spotRadius = options.get('spotRadius'),\n regionMap = this.regionMap,\n rangex, rangey, yvallast,\n canvasTop, canvasLeft,\n vertex, path, paths, x, y, xnext, xpos, xposnext,\n last, next, yvalcount, lineShapes, fillShapes, plen,\n valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n if (!line._super.render.call(this)) {\n return;\n }\n\n this.scanValues();\n this.processRangeOptions();\n\n xvalues = this.xvalues;\n yvalues = this.yvalues;\n\n if (!this.yminmax.length || this.yvalues.length < 2) {\n // empty or all null valuess\n return;\n }\n\n canvasTop = canvasLeft = 0;\n\n rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n yvallast = this.yvalues.length - 1;\n\n if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n spotRadius = 0;\n }\n if (spotRadius) {\n // adjust the canvas size as required so that spots will fit\n hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');\n if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n canvasHeight -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n canvasHeight -= Math.ceil(spotRadius);\n canvasTop += Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled ||\n ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n canvasLeft += Math.ceil(spotRadius);\n canvasWidth -= Math.ceil(spotRadius);\n }\n if (hlSpotsEnabled || options.get('spotColor') ||\n (options.get('minSpotColor') || options.get('maxSpotColor') &&\n (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n canvasWidth -= Math.ceil(spotRadius);\n }\n }\n\n\n canvasHeight--;\n\n if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n path = [];\n paths = [path];\n last = next = null;\n yvalcount = yvalues.length;\n for (i = 0; i < yvalcount; i++) {\n x = xvalues[i];\n xnext = xvalues[i + 1];\n y = yvalues[i];\n xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n next = xpos + ((xposnext - xpos) / 2);\n regionMap[i] = [last || 0, next, i];\n last = next;\n if (y === null) {\n if (i) {\n if (yvalues[i - 1] !== null) {\n path = [];\n paths.push(path);\n }\n vertices.push(null);\n }\n } else {\n if (y < this.miny) {\n y = this.miny;\n }\n if (y > this.maxy) {\n y = this.maxy;\n }\n if (!path.length) {\n // previous value was null\n path.push([xpos, canvasTop + canvasHeight]);\n }\n vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n path.push(vertex);\n vertices.push(vertex);\n }\n }\n\n lineShapes = [];\n fillShapes = [];\n plen = paths.length;\n for (i = 0; i < plen; i++) {\n path = paths[i];\n if (path.length) {\n if (options.get('fillColor')) {\n path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n fillShapes.push(path.slice(0));\n path.pop();\n }\n // if there's only a single point in this path, then we want to display it\n // as a vertical line which means we keep path[0] as is\n if (path.length > 2) {\n // else we want the first value\n path[0] = [path[0][0], path[1][1]];\n }\n lineShapes.push(path);\n }\n }\n\n // draw the fill first, then optionally the normal range, then the line on top of that\n plen = fillShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(fillShapes[i],\n options.get('fillColor'), options.get('fillColor')).append();\n }\n\n if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n }\n\n plen = lineShapes.length;\n for (i = 0; i < plen; i++) {\n target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n options.get('lineWidth')).append();\n }\n\n if (spotRadius && options.get('valueSpots')) {\n valueSpots = options.get('valueSpots');\n if (valueSpots.get === undefined) {\n valueSpots = new RangeMap(valueSpots);\n }\n for (i = 0; i < yvalcount; i++) {\n color = valueSpots.get(yvalues[i]);\n if (color) {\n target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n spotRadius, undefined,\n color).append();\n }\n }\n\n }\n if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('spotColor')).append();\n }\n if (this.maxy !== this.minyorg) {\n if (spotRadius && options.get('minSpotColor')) {\n x = xvalues[$.inArray(this.minyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('minSpotColor')).append();\n }\n if (spotRadius && options.get('maxSpotColor')) {\n x = xvalues[$.inArray(this.maxyorg, yvalues)];\n target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n spotRadius, undefined,\n options.get('maxSpotColor')).append();\n }\n }\n\n this.lastShapeId = target.getLastShapeId();\n this.canvasTop = canvasTop;\n target.render();\n }\n });\n\n /**\n * Bar charts\n */\n $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'bar',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10),\n chartRangeMin = options.get('chartRangeMin'),\n chartRangeMax = options.get('chartRangeMax'),\n chartRangeClip = options.get('chartRangeClip'),\n stackMin = Infinity,\n stackMax = -Infinity,\n isStackString, groupMin, groupMax, stackRanges,\n numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n bar._super.init.call(this, el, values, options, width, height);\n\n // scan values to determine whether to stack bars\n for (i = 0, vlen = values.length; i < vlen; i++) {\n val = values[i];\n isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n if (isStackString || $.isArray(val)) {\n stacked = true;\n if (isStackString) {\n val = values[i] = normalizeValues(val.split(':'));\n }\n val = remove(val, null); // min/max will treat null as zero\n groupMin = Math.min.apply(Math, val);\n groupMax = Math.max.apply(Math, val);\n if (groupMin < stackMin) {\n stackMin = groupMin;\n }\n if (groupMax > stackMax) {\n stackMax = groupMax;\n }\n }\n }\n\n this.stacked = stacked;\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n this.initTarget();\n\n if (chartRangeClip) {\n clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n }\n\n numValues = [];\n stackRanges = stacked ? [] : numValues;\n var stackTotals = [];\n var stackRangesNeg = [];\n for (i = 0, vlen = values.length; i < vlen; i++) {\n if (stacked) {\n vlist = values[i];\n values[i] = svals = [];\n stackTotals[i] = 0;\n stackRanges[i] = stackRangesNeg[i] = 0;\n for (j = 0, slen = vlist.length; j < slen; j++) {\n val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n if (val !== null) {\n if (val > 0) {\n stackTotals[i] += val;\n }\n if (stackMin < 0 && stackMax > 0) {\n if (val < 0) {\n stackRangesNeg[i] += Math.abs(val);\n } else {\n stackRanges[i] += val;\n }\n } else {\n stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n }\n numValues.push(val);\n }\n }\n } else {\n val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n val = values[i] = normalizeValue(val);\n if (val !== null) {\n numValues.push(val);\n }\n }\n }\n this.max = max = Math.max.apply(Math, numValues);\n this.min = min = Math.min.apply(Math, numValues);\n this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n max = options.get('chartRangeMax');\n }\n\n this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n if (min <= 0 && max >= 0 && zeroAxis) {\n xaxisOffset = 0;\n } else if (zeroAxis == false) {\n xaxisOffset = min;\n } else if (min > 0) {\n xaxisOffset = min;\n } else {\n xaxisOffset = max;\n }\n this.xaxisOffset = xaxisOffset;\n\n range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n // as we plot zero/min values a single pixel line, we add a pixel to all other\n // values - Reduce the effective canvas size to suit\n this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n if (min < xaxisOffset) {\n yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n if (yoffset !== Math.ceil(yoffset)) {\n this.canvasHeightEf -= 2;\n yoffset = Math.ceil(yoffset);\n }\n } else {\n yoffset = this.canvasHeight;\n }\n this.yoffset = yoffset;\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n\n this.range = range;\n },\n\n getRegion: function (el, x, y) {\n var result = Math.floor(x / this.totalBarWidth);\n return (result < 0 || result >= this.values.length) ? undefined : result;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion,\n values = ensureArray(this.values[currentRegion]),\n result = [],\n value, i;\n for (i = values.length; i--;) {\n value = values[i];\n result.push({\n isNull: value === null,\n value: value,\n color: this.calcColor(i, value, currentRegion),\n offset: currentRegion\n });\n }\n return result;\n },\n\n calcColor: function (stacknum, value, valuenum) {\n var colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n options = this.options,\n color, newColor;\n if (this.stacked) {\n color = options.get('stackedBarColor');\n } else {\n color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n }\n if (value === 0 && options.get('zeroColor') !== undefined) {\n color = options.get('zeroColor');\n }\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n }\n return $.isArray(color) ? color[stacknum % color.length] : color;\n },\n\n /**\n * Render bar(s) for a region\n */\n renderRegion: function (valuenum, highlight) {\n var vals = this.values[valuenum],\n options = this.options,\n xaxisOffset = this.xaxisOffset,\n result = [],\n range = this.range,\n stacked = this.stacked,\n target = this.target,\n x = valuenum * this.totalBarWidth,\n canvasHeightEf = this.canvasHeightEf,\n yoffset = this.yoffset,\n y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n vals = $.isArray(vals) ? vals : [vals];\n valcount = vals.length;\n val = vals[0];\n isNull = all(null, vals);\n allMin = all(xaxisOffset, vals, true);\n\n if (isNull) {\n if (options.get('nullColor')) {\n color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n y = (yoffset > 0) ? yoffset - 1 : yoffset;\n return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n } else {\n return undefined;\n }\n }\n yoffsetNeg = yoffset;\n for (i = 0; i < valcount; i++) {\n val = vals[i];\n\n if (stacked && val === xaxisOffset) {\n if (!allMin || minPlotted) {\n continue;\n }\n minPlotted = true;\n }\n\n if (range > 0) {\n height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n } else {\n height = 1;\n }\n if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n y = yoffsetNeg;\n yoffsetNeg += height;\n } else {\n y = yoffset - height;\n yoffset -= height;\n }\n color = this.calcColor(i, val, valuenum);\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n }\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n });\n\n /**\n * Tristate charts\n */\n $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'tristate',\n\n init: function (el, values, options, width, height) {\n var barWidth = parseInt(options.get('barWidth'), 10),\n barSpacing = parseInt(options.get('barSpacing'), 10);\n tristate._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.barWidth = barWidth;\n this.barSpacing = barSpacing;\n this.totalBarWidth = barWidth + barSpacing;\n this.values = $.map(values, Number);\n this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n if ($.isArray(options.get('colorMap'))) {\n this.colorMapByIndex = options.get('colorMap');\n this.colorMapByValue = null;\n } else {\n this.colorMapByIndex = null;\n this.colorMapByValue = options.get('colorMap');\n if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n this.colorMapByValue = new RangeMap(this.colorMapByValue);\n }\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.totalBarWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n color: this.calcColor(this.values[currentRegion], currentRegion),\n offset: currentRegion\n };\n },\n\n calcColor: function (value, valuenum) {\n var values = this.values,\n options = this.options,\n colorMapByIndex = this.colorMapByIndex,\n colorMapByValue = this.colorMapByValue,\n color, newColor;\n\n if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n color = newColor;\n } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n color = colorMapByIndex[valuenum];\n } else if (values[valuenum] < 0) {\n color = options.get('negBarColor');\n } else if (values[valuenum] > 0) {\n color = options.get('posBarColor');\n } else {\n color = options.get('zeroBarColor');\n }\n return color;\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n target = this.target,\n canvasHeight, height, halfHeight,\n x, y, color;\n\n canvasHeight = target.pixelHeight;\n halfHeight = Math.round(canvasHeight / 2);\n\n x = valuenum * this.totalBarWidth;\n if (values[valuenum] < 0) {\n y = halfHeight;\n height = halfHeight - 1;\n } else if (values[valuenum] > 0) {\n y = 0;\n height = halfHeight - 1;\n } else {\n y = halfHeight - 1;\n height = 2;\n }\n color = this.calcColor(values[valuenum], valuenum);\n if (color === null) {\n return;\n }\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n }\n });\n\n /**\n * Discrete charts\n */\n $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n type: 'discrete',\n\n init: function (el, values, options, width, height) {\n discrete._super.init.call(this, el, values, options, width, height);\n\n this.regionShapes = {};\n this.values = values = $.map(values, Number);\n this.min = Math.min.apply(Math, values);\n this.max = Math.max.apply(Math, values);\n this.range = this.max - this.min;\n this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n this.interval = Math.floor(width / values.length);\n this.itemWidth = width / values.length;\n if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n this.min = options.get('chartRangeMin');\n }\n if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n this.max = options.get('chartRangeMax');\n }\n this.initTarget();\n if (this.target) {\n this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n }\n },\n\n getRegion: function (el, x, y) {\n return Math.floor(x / this.itemWidth);\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n offset: currentRegion\n };\n },\n\n renderRegion: function (valuenum, highlight) {\n var values = this.values,\n options = this.options,\n min = this.min,\n max = this.max,\n range = this.range,\n interval = this.interval,\n target = this.target,\n canvasHeight = this.canvasHeight,\n lineHeight = this.lineHeight,\n pheight = canvasHeight - lineHeight,\n ytop, val, color, x;\n\n val = clipval(values[valuenum], min, max);\n x = valuenum * interval;\n ytop = Math.round(pheight - pheight * ((val - min) / range));\n color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n }\n });\n\n /**\n * Bullet charts\n */\n $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n type: 'bullet',\n\n init: function (el, values, options, width, height) {\n var min, max, vals;\n bullet._super.init.call(this, el, values, options, width, height);\n\n // values: target, performance, range1, range2, range3\n this.values = values = normalizeValues(values);\n // target or performance could be null\n vals = values.slice();\n vals[0] = vals[0] === null ? vals[2] : vals[0];\n vals[1] = values[1] === null ? vals[2] : vals[1];\n min = Math.min.apply(Math, values);\n max = Math.max.apply(Math, values);\n if (options.get('base') === undefined) {\n min = min < 0 ? min : 0;\n } else {\n min = options.get('base');\n }\n this.min = min;\n this.max = max;\n this.range = max - min;\n this.shapes = {};\n this.valueShapes = {};\n this.regiondata = {};\n this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n this.target = this.$el.simpledraw(width, height, options.get('composite'));\n if (!values.length) {\n this.disabled = true;\n }\n this.initTarget();\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n fieldkey: currentRegion.substr(0, 1),\n value: this.values[currentRegion.substr(1)],\n region: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n shapeid = this.valueShapes[currentRegion],\n shape;\n delete this.shapes[shapeid];\n switch (currentRegion.substr(0, 1)) {\n case 'r':\n shape = this.renderRange(currentRegion.substr(1), highlight);\n break;\n case 'p':\n shape = this.renderPerformance(highlight);\n break;\n case 't':\n shape = this.renderTarget(highlight);\n break;\n }\n this.valueShapes[currentRegion] = shape.id;\n this.shapes[shape.id] = currentRegion;\n this.target.replaceWithShape(shapeid, shape);\n },\n\n renderRange: function (rn, highlight) {\n var rangeval = this.values[rn],\n rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n color = this.options.get('rangeColors')[rn - 2];\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n },\n\n renderPerformance: function (highlight) {\n var perfval = this.values[1],\n perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n color = this.options.get('performanceColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n Math.round(this.canvasHeight * 0.4) - 1, color, color);\n },\n\n renderTarget: function (highlight) {\n var targetval = this.values[0],\n x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n targettop = Math.round(this.canvasHeight * 0.10),\n targetheight = this.canvasHeight - (targettop * 2),\n color = this.options.get('targetColor');\n if (highlight) {\n color = this.calcHighlightColor(color, this.options);\n }\n return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n },\n\n render: function () {\n var vlen = this.values.length,\n target = this.target,\n i, shape;\n if (!bullet._super.render.call(this)) {\n return;\n }\n for (i = 2; i < vlen; i++) {\n shape = this.renderRange(i).append();\n this.shapes[shape.id] = 'r' + i;\n this.valueShapes['r' + i] = shape.id;\n }\n if (this.values[1] !== null) {\n shape = this.renderPerformance().append();\n this.shapes[shape.id] = 'p1';\n this.valueShapes.p1 = shape.id;\n }\n if (this.values[0] !== null) {\n shape = this.renderTarget().append();\n this.shapes[shape.id] = 't0';\n this.valueShapes.t0 = shape.id;\n }\n target.render();\n }\n });\n\n /**\n * Pie charts\n */\n $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n type: 'pie',\n\n init: function (el, values, options, width, height) {\n var total = 0, i;\n\n pie._super.init.call(this, el, values, options, width, height);\n\n this.shapes = {}; // map shape ids to value offsets\n this.valueShapes = {}; // maps value offsets to shape ids\n this.values = values = $.map(values, Number);\n\n if (options.get('width') === 'auto') {\n this.width = this.height;\n }\n\n if (values.length > 0) {\n for (i = values.length; i--;) {\n total += values[i];\n }\n }\n this.total = total;\n this.initTarget();\n this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n },\n\n getRegion: function (el, x, y) {\n var shapeid = this.target.getShapeAt(el, x, y);\n return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n },\n\n getCurrentRegionFields: function () {\n var currentRegion = this.currentRegion;\n return {\n isNull: this.values[currentRegion] === undefined,\n value: this.values[currentRegion],\n percent: this.values[currentRegion] / this.total * 100,\n color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n offset: currentRegion\n };\n },\n\n changeHighlight: function (highlight) {\n var currentRegion = this.currentRegion,\n newslice = this.renderSlice(currentRegion, highlight),\n shapeid = this.valueShapes[currentRegion];\n delete this.shapes[shapeid];\n this.target.replaceWithShape(shapeid, newslice);\n this.valueShapes[currentRegion] = newslice.id;\n this.shapes[newslice.id] = currentRegion;\n },\n\n renderSlice: function (valuenum, highlight) {\n var target = this.target,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n offset = options.get('offset'),\n circle = 2 * Math.PI,\n values = this.values,\n total = this.total,\n next = offset ? (2*Math.PI)*(offset/360) : 0,\n start, end, i, vlen, color;\n\n vlen = values.length;\n for (i = 0; i < vlen; i++) {\n start = next;\n end = next;\n if (total > 0) { // avoid divide by zero\n end = next + (circle * (values[i] / total));\n }\n if (valuenum === i) {\n color = options.get('sliceColors')[i % options.get('sliceColors').length];\n if (highlight) {\n color = this.calcHighlightColor(color, options);\n }\n\n return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n }\n next = end;\n }\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n options = this.options,\n radius = this.radius,\n borderWidth = options.get('borderWidth'),\n donutWidth = options.get('donutWidth'),\n shape, i;\n\n if (!pie._super.render.call(this)) {\n return;\n }\n if (borderWidth) {\n target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n options.get('borderColor'), undefined, borderWidth).append();\n }\n for (i = values.length; i--;) {\n if (values[i]) { // don't render zero values\n shape = this.renderSlice(i).append();\n this.valueShapes[i] = shape.id; // store just the shapeid\n this.shapes[shape.id] = i;\n }\n }\n if (donutWidth) {\n target.drawCircle(radius, radius, radius - donutWidth, options.get('donutColor'), \n options.get('donutColor'), 0).append();\n }\n target.render();\n }\n });\n\n /**\n * Box plots\n */\n $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n type: 'box',\n\n init: function (el, values, options, width, height) {\n box._super.init.call(this, el, values, options, width, height);\n this.values = $.map(values, Number);\n this.width = options.get('width') === 'auto' ? '4.0em' : width;\n this.initTarget();\n if (!this.values.length) {\n this.disabled = 1;\n }\n },\n\n /**\n * Simulate a single region\n */\n getRegion: function () {\n return 1;\n },\n\n getCurrentRegionFields: function () {\n var result = [\n { field: 'lq', value: this.quartiles[0] },\n { field: 'med', value: this.quartiles[1] },\n { field: 'uq', value: this.quartiles[2] }\n ];\n if (this.loutlier !== undefined) {\n result.push({ field: 'lo', value: this.loutlier});\n }\n if (this.routlier !== undefined) {\n result.push({ field: 'ro', value: this.routlier});\n }\n if (this.lwhisker !== undefined) {\n result.push({ field: 'lw', value: this.lwhisker});\n }\n if (this.rwhisker !== undefined) {\n result.push({ field: 'rw', value: this.rwhisker});\n }\n return result;\n },\n\n render: function () {\n var target = this.target,\n values = this.values,\n vlen = values.length,\n options = this.options,\n canvasWidth = this.canvasWidth,\n canvasHeight = this.canvasHeight,\n minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n canvasLeft = 0,\n lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n size, unitSize;\n\n if (!box._super.render.call(this)) {\n return;\n }\n\n if (options.get('raw')) {\n if (options.get('showOutliers') && values.length > 5) {\n loutlier = values[0];\n lwhisker = values[1];\n q1 = values[2];\n q2 = values[3];\n q3 = values[4];\n rwhisker = values[5];\n routlier = values[6];\n } else {\n lwhisker = values[0];\n q1 = values[1];\n q2 = values[2];\n q3 = values[3];\n rwhisker = values[4];\n }\n } else {\n values.sort(function (a, b) { return a - b; });\n q1 = quartile(values, 1);\n q2 = quartile(values, 2);\n q3 = quartile(values, 3);\n iqr = q3 - q1;\n if (options.get('showOutliers')) {\n lwhisker = rwhisker = undefined;\n for (i = 0; i < vlen; i++) {\n if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n lwhisker = values[i];\n }\n if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n rwhisker = values[i];\n }\n }\n loutlier = values[0];\n routlier = values[vlen - 1];\n } else {\n lwhisker = values[0];\n rwhisker = values[vlen - 1];\n }\n }\n this.quartiles = [q1, q2, q3];\n this.lwhisker = lwhisker;\n this.rwhisker = rwhisker;\n this.loutlier = loutlier;\n this.routlier = routlier;\n\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (options.get('showOutliers')) {\n canvasLeft = Math.ceil(options.get('spotRadius'));\n canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n unitSize = canvasWidth / (maxValue - minValue + 1);\n if (loutlier < lwhisker) {\n target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n if (routlier > rwhisker) {\n target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n canvasHeight / 2,\n options.get('spotRadius'),\n options.get('outlierLineColor'),\n options.get('outlierFillColor')).append();\n }\n }\n\n // box\n target.drawRect(\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q3 - q1) * unitSize),\n Math.round(canvasHeight * 0.8),\n options.get('boxLineColor'),\n options.get('boxFillColor')).append();\n // left whisker\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q1 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // right whisker\n target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n Math.round((q3 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 2),\n options.get('lineColor')).append();\n target.drawLine(\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight / 4),\n Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight - canvasHeight / 4),\n options.get('whiskerColor')).append();\n // median line\n target.drawLine(\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.1),\n Math.round((q2 - minValue) * unitSize + canvasLeft),\n Math.round(canvasHeight * 0.9),\n options.get('medianColor')).append();\n if (options.get('target')) {\n size = Math.ceil(options.get('spotRadius'));\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) - size),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n Math.round((canvasHeight / 2) + size),\n options.get('targetColor')).append();\n target.drawLine(\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n Math.round(canvasHeight / 2),\n Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n Math.round(canvasHeight / 2),\n options.get('targetColor')).append();\n }\n target.render();\n }\n });\n\n // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n // This is accessible as $(foo).simpledraw()\n\n VShape = createClass({\n init: function (target, id, type, args) {\n this.target = target;\n this.id = id;\n this.type = type;\n this.args = args;\n },\n append: function () {\n this.target.appendShape(this);\n return this;\n }\n });\n\n VCanvas_base = createClass({\n _pxregex: /(\\d+)(px)?\\s*$/i,\n\n init: function (width, height, target) {\n if (!width) {\n return;\n }\n this.width = width;\n this.height = height;\n this.target = target;\n this.lastShapeId = null;\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n },\n\n drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n },\n\n drawShape: function (path, lineColor, fillColor, lineWidth) {\n return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n },\n\n drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n },\n\n drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n },\n\n drawRect: function (x, y, width, height, lineColor, fillColor) {\n return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n },\n\n getElement: function () {\n return this.canvas;\n },\n\n /**\n * Return the most recently inserted shape id\n */\n getLastShapeId: function () {\n return this.lastShapeId;\n },\n\n /**\n * Clear and reset the canvas\n */\n reset: function () {\n alert('reset not implemented');\n },\n\n _insert: function (el, target) {\n $(target).html(el);\n },\n\n /**\n * Calculate the pixel dimensions of the canvas\n */\n _calculatePixelDims: function (width, height, canvas) {\n // XXX This should probably be a configurable option\n var match;\n match = this._pxregex.exec(height);\n if (match) {\n this.pixelHeight = match[1];\n } else {\n this.pixelHeight = $(canvas).height();\n }\n match = this._pxregex.exec(width);\n if (match) {\n this.pixelWidth = match[1];\n } else {\n this.pixelWidth = $(canvas).width();\n }\n },\n\n /**\n * Generate a shape object and id for later rendering\n */\n _genShape: function (shapetype, shapeargs) {\n var id = shapeCount++;\n shapeargs.unshift(id);\n return new VShape(this, id, shapetype, shapeargs);\n },\n\n /**\n * Add a shape to the end of the render queue\n */\n appendShape: function (shape) {\n alert('appendShape not implemented');\n },\n\n /**\n * Replace one shape with another\n */\n replaceWithShape: function (shapeid, shape) {\n alert('replaceWithShape not implemented');\n },\n\n /**\n * Insert one shape after another in the render queue\n */\n insertAfterShape: function (shapeid, shape) {\n alert('insertAfterShape not implemented');\n },\n\n /**\n * Remove a shape from the queue\n */\n removeShapeId: function (shapeid) {\n alert('removeShapeId not implemented');\n },\n\n /**\n * Find a shape at the specified x/y co-ordinates\n */\n getShapeAt: function (el, x, y) {\n alert('getShapeAt not implemented');\n },\n\n /**\n * Render all queued shapes onto the canvas\n */\n render: function () {\n alert('render not implemented');\n }\n });\n\n VCanvas_canvas = createClass(VCanvas_base, {\n init: function (width, height, target, interact) {\n VCanvas_canvas._super.init.call(this, width, height, target);\n this.canvas = document.createElement('canvas');\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n this.interact = interact;\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n },\n\n _getContext: function (lineColor, fillColor, lineWidth) {\n var context = this.canvas.getContext('2d');\n if (lineColor !== undefined) {\n context.strokeStyle = lineColor;\n }\n context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n if (fillColor !== undefined) {\n context.fillStyle = fillColor;\n }\n return context;\n },\n\n reset: function () {\n var context = this._getContext();\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n this.shapes = {};\n this.shapeseq = [];\n this.currentTargetShapeId = undefined;\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth),\n i, plen;\n context.beginPath();\n context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n for (i = 1, plen = path.length; i < plen; i++) {\n context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var context = this._getContext(lineColor, fillColor, lineWidth);\n context.beginPath();\n context.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor !== undefined) {\n context.fill();\n }\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var context = this._getContext(lineColor, fillColor);\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, startAngle, endAngle, false);\n context.lineTo(x, y);\n context.closePath();\n if (lineColor !== undefined) {\n context.stroke();\n }\n if (fillColor) {\n context.fill();\n }\n if (this.targetX !== undefined && this.targetY !== undefined &&\n context.isPointInPath(this.targetX, this.targetY)) {\n this.currentTargetShapeId = shapeid;\n }\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n },\n\n appendShape: function (shape) {\n this.shapes[shape.id] = shape;\n this.shapeseq.push(shape.id);\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n this.shapes[shape.id] = shape;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] == shapeid) {\n shapeseq[i] = shape.id;\n }\n }\n delete this.shapes[shapeid];\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n var shapeseq = this.shapeseq,\n shapemap = {},\n sid, i, first;\n\n for (i = shapeids.length; i--;) {\n shapemap[shapeids[i]] = true;\n }\n for (i = shapeseq.length; i--;) {\n sid = shapeseq[i];\n if (shapemap[sid]) {\n shapeseq.splice(i, 1);\n delete this.shapes[sid];\n first = i;\n }\n }\n for (i = shapes.length; i--;) {\n shapeseq.splice(first, 0, shapes[i].id);\n this.shapes[shapes[i].id] = shapes[i];\n }\n\n },\n\n insertAfterShape: function (shapeid, shape) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i + 1, 0, shape.id);\n this.shapes[shape.id] = shape;\n return;\n }\n }\n },\n\n removeShapeId: function (shapeid) {\n var shapeseq = this.shapeseq,\n i;\n for (i = shapeseq.length; i--;) {\n if (shapeseq[i] === shapeid) {\n shapeseq.splice(i, 1);\n break;\n }\n }\n delete this.shapes[shapeid];\n },\n\n getShapeAt: function (el, x, y) {\n this.targetX = x;\n this.targetY = y;\n this.render();\n return this.currentTargetShapeId;\n },\n\n render: function () {\n var shapeseq = this.shapeseq,\n shapes = this.shapes,\n shapeCount = shapeseq.length,\n context = this._getContext(),\n shapeid, shape, i;\n context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n for (i = 0; i < shapeCount; i++) {\n shapeid = shapeseq[i];\n shape = shapes[shapeid];\n this['_draw' + shape.type].apply(this, shape.args);\n }\n if (!this.interact) {\n // not interactive so no need to keep the shapes array\n this.shapes = {};\n this.shapeseq = [];\n }\n }\n\n });\n\n VCanvas_vml = createClass(VCanvas_base, {\n init: function (width, height, target) {\n var groupel;\n VCanvas_vml._super.init.call(this, width, height, target);\n if (target[0]) {\n target = target[0];\n }\n $.data(target, '_jqs_vcanvas', this);\n this.canvas = document.createElement('span');\n $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n this._insert(this.canvas, target);\n this._calculatePixelDims(width, height, this.canvas);\n this.canvas.width = this.pixelWidth;\n this.canvas.height = this.pixelHeight;\n groupel = '';\n this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n this.group = $(this.canvas).children()[0];\n this.rendered = false;\n this.prerender = '';\n },\n\n _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n var vpath = [],\n initial, stroke, fill, closed, vel, plen, i;\n for (i = 0, plen = path.length; i < plen; i++) {\n vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n }\n initial = vpath.splice(0, 1);\n lineWidth = lineWidth === undefined ? 1 : lineWidth;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n var stroke, fill, vel;\n x -= radius;\n y -= radius;\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '';\n return vel;\n\n },\n\n _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n var vpath, startx, starty, endx, endy, stroke, fill, vel;\n if (startAngle === endAngle) {\n return ''; // VML seems to have problem when start angle equals end angle.\n }\n if ((endAngle - startAngle) === (2 * Math.PI)) {\n startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0\n endAngle = (2 * Math.PI);\n }\n\n startx = x + Math.round(Math.cos(startAngle) * radius);\n starty = y + Math.round(Math.sin(startAngle) * radius);\n endx = x + Math.round(Math.cos(endAngle) * radius);\n endy = y + Math.round(Math.sin(endAngle) * radius);\n\n if (startx === endx && starty === endy) {\n if ((endAngle - startAngle) < Math.PI) {\n // Prevent very small slices from being mistaken as a whole pie\n return '';\n }\n // essentially going to be the entire circle, so ignore startAngle\n startx = endx = x + radius;\n starty = endy = y;\n }\n\n if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n return '';\n }\n\n vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n vel = '' +\n ' ';\n return vel;\n },\n\n _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n },\n\n reset: function () {\n this.group.innerHTML = '';\n },\n\n appendShape: function (shape) {\n var vel = this['_draw' + shape.type].apply(this, shape.args);\n if (this.rendered) {\n this.group.insertAdjacentHTML('beforeEnd', vel);\n } else {\n this.prerender += vel;\n }\n this.lastShapeId = shape.id;\n return shape.id;\n },\n\n replaceWithShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].outerHTML = vel;\n },\n\n replaceWithShapes: function (shapeids, shapes) {\n // replace the first shapeid with all the new shapes then toast the remaining old shapes\n var existing = $('#jqsshape' + shapeids[0]),\n replace = '',\n slen = shapes.length,\n i;\n for (i = 0; i < slen; i++) {\n replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n }\n existing[0].outerHTML = replace;\n for (i = 1; i < shapeids.length; i++) {\n $('#jqsshape' + shapeids[i]).remove();\n }\n },\n\n insertAfterShape: function (shapeid, shape) {\n var existing = $('#jqsshape' + shapeid),\n vel = this['_draw' + shape.type].apply(this, shape.args);\n existing[0].insertAdjacentHTML('afterEnd', vel);\n },\n\n removeShapeId: function (shapeid) {\n var existing = $('#jqsshape' + shapeid);\n this.group.removeChild(existing[0]);\n },\n\n getShapeAt: function (el, x, y) {\n var shapeid = el.id.substr(8);\n return shapeid;\n },\n\n render: function () {\n if (!this.rendered) {\n // batch the intial render into a single repaint\n this.group.innerHTML = this.prerender;\n this.rendered = true;\n }\n }\n });\n\n}))}(document, Math));\n", "import './vendor';\nimport 'jquery-sparkline';\nimport { authFetch } from './authWrap';\nimport { error, log } from './logger';\n\ninterface GpuInfo {\n name: string;\n data: Record;\n chart?: [number, number];\n}\n\nlet gpuInterval: ReturnType | null = null;\nconst chartData: { mem: number[]; load: number[] } = { mem: [], load: [] };\n\nasync function updateGPUChart(mem: number, load: number): Promise {\n const maxLen = 120;\n const colorRangeMap = $.range_map({\n '0:5': '#fffafa',\n '6:10': '#fff7ed',\n '11:20': '#fed7aa',\n '21:30': '#fdba74',\n '31:40': '#fb923c',\n '41:50': '#f97316',\n '51:60': '#ea580c',\n '61:70': '#c2410c',\n '71:80': '#9a3412',\n '81:90': '#7c2d12',\n '91:100': '#6c2e12',\n });\n const sparklineConfigLOAD = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, barColor: '#89007D' };\n const sparklineConfigMEM = { type: 'bar', height: '128px', barWidth: '3px', barSpacing: '1px', chartRangeMin: 0, chartRangeMax: 100, colorMap: colorRangeMap, composite: true };\n if (chartData.load.length > maxLen) chartData.load.shift();\n chartData.load.push(load);\n if (chartData.mem.length > maxLen) chartData.mem.shift();\n chartData.mem.push(mem);\n $('#gpuChart').sparkline(chartData.load, sparklineConfigLOAD);\n $('#gpuChart').sparkline(chartData.mem, sparklineConfigMEM);\n}\n\nasync function updateGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n const gpuTable = document.getElementById('gpu-table');\n if (!gpuEl || !gpuTable) return;\n try {\n const res = await authFetch(`${window.api}/gpu-smi`);\n if (!res || !res.ok) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const data = (await res.json()) as GpuInfo[];\n if (!data) {\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n return;\n }\n const gpuTbody = gpuTable.querySelector('tbody');\n if (!gpuTbody) return;\n let gpu = { data: {} } as GpuInfo;\n if (Array.isArray(data) && data.length >= 1) gpu = data[0];\n let rows = `GPU${gpu.name || 'unknown'}`;\n for (const item of Object.entries(gpu.data)) rows += `${item[0]}${item[1]}`;\n gpuTbody.innerHTML = rows;\n if (gpu.chart && gpu.chart.length === 2) updateGPUChart(gpu.chart[0], gpu.chart[1]);\n gpuEl.style.display = 'block';\n } catch (e) {\n error('updateGPU', e);\n clearInterval(gpuInterval);\n gpuEl.style.display = 'none';\n }\n}\n\nexport async function startGPU(): Promise {\n const gpuEl = document.getElementById('gpu');\n if (!gpuEl) return;\n gpuEl.style.display = 'block';\n if (gpuInterval) clearInterval(gpuInterval);\n const interval = window.opts?.gpu_monitor || 3000;\n log('startGPUmonitor', interval);\n gpuInterval = setInterval(updateGPU, interval);\n updateGPU();\n}\n\nwindow.startGPU = startGPU;\n\nexport async function disableGPU(): Promise {\n clearInterval(gpuInterval);\n const gpuEl = document.getElementById('gpu');\n if (gpuEl) gpuEl.style.display = 'none';\n}\n\nwindow.disableGPU = disableGPU;\n"], + "mappings": "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", "names": ["global", "window", "i", "jQuery", "arr", "matches", "escape", "value", "document", "dir", "parent", "hash", "preFilter", "token", "find", "elem", "self", "add", "deferred", "process", "error", "data", "el", "nodeName", "types", "event", "name", "schedule", "opts", "index", "length", "timers", "timer", "location", "val", "url", "completed", "done", "method", "type", "undefined", "requestAnimationFrame", "timer", "addEventListener", "el", "log", "event", "iframeId", "location", "hash", "error", "MutationObserver", "options", "isVisible", "$", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "K", "$", "eventify", "subject", "validateSubject", "eventsStorage", "createEventsStorage", "registeredEvents", "eventName", "callback", "ctx", "handlers", "callbacks", "fireArguments", "i", "callbackInfo", "reservedWords", "cancelAnimationFrame", "requestAnimationFrame", "isNaN", "parent", "onKeyDown", "el", "jQuery", "el", "url", "user", "token", "authFetch", "url", "event", "authFetch", "el", "isVisible", "el", "el", "el", "event", "el", "el", "event", "el", "el", "authFetch", "el", "gallerySelection", "authFetch", "authFetch", "updateInput", "active", "el", "el", "el", "updateInput", "updateInput", "event", "hash", "atBottom", "el", "authFetch", "parent", "el", "authFetch", "el", "authFetch", "Hash", "HMAC", "hash", "hmac", "authFetch", "parent", "authFetch", "event", "el", "modalImage", "modal", "gallerySelection", "event", "exifr", "Panzoom", "updateInput", "el", "el", "el", "event", "appendContextMenuOption", "removeContextMenuOption", "addContextMenuEventListener", "busy", "el", "authFetch", "el", "url", "authFetch", "url", "updateInput", "el", "el", "authFetch", "url", "url", "authFetch", "ts", "authFetch", "el", "delay", "event", "updateInput", "document", "Math", "undefined", "$", "format", "self", "token", "el", "width", "height", "target", "interact", "shapeCount", "authFetch"] } diff --git a/ui/startup.ts b/ui/startup.ts index c797def8b..c4af4f0bc 100644 --- a/ui/startup.ts +++ b/ui/startup.ts @@ -102,7 +102,7 @@ export async function initStartup() { executeCallbacks(uiReadyCallbacks); // optionally wait for modern ui - if (window.waitForUiReady) await window.waitForUiReady(); + if (window.opts.theme_type.toLowerCase().startsWith('modern') && window.waitForUiReady) await window.waitForUiReady(); // post startup tasks that may take longer but are not critical startupPromises.push(Promise.resolve(initLogMonitor())); From 2e3275bd400b29f32e8bd42c2e66560c0ecb57c5 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 15 Sep 2026 08:20:33 +0200 Subject: [PATCH 249/270] update modernui Signed-off-by: Vladimir Mandic --- extensions-builtin/sdnext-modernui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 5472d5dd7..2cec63a51 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 5472d5dd7b1f0593d0bf2b620f42956a64e1f178 +Subproject commit 2cec63a515c1171160fc0b9db483d98e16029228 From 9fe7170248ee8a5d21a0652c8c128837063c58d1 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 15 Sep 2026 08:56:33 +0200 Subject: [PATCH 250/270] better handle git detached head Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 7 ++++--- installer.py | 26 +++++++++++++++++--------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f529ff418..6e43f3c0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-09-14 +## Update for 2026-09-15 -### Highlights for 2026-09-14 +### Highlights for 2026-09-15 *What's New*? Well, code-wise, this is a big one... First, a-lot-of-optimizations: @@ -23,7 +23,7 @@ Plus inevitable bug-fixes... [Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) -### Details for 2026-09-14 +### Details for 2026-09-15 - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) @@ -126,6 +126,7 @@ Plus inevitable bug-fixes... - compile: keep model compiled state - detailer: handling of stop/skip/pause - framepack: correct device assignment, thanks @li-lizhe + - installer: better handle git detached head - json: handle file locks - log: ansi color handling - lora: cleanup tags diff --git a/installer.py b/installer.py index 4d544f930..be8759237 100644 --- a/installer.py +++ b/installer.py @@ -385,12 +385,13 @@ def git(arg: str, folder: str | None= None, ignore: bool = False, optional: bool # reattach as needed as head can get detached def branch(folder=None): - # if args.experimental: - # return None + if args.experimental or args.skip_git or args.skip_all: + return None t_start = time.time() if not os.path.exists(os.path.join(folder or os.curdir, '.git')): return None branches = [] + detached = False try: b = git('branch --show-current', folder, optional=True) if b == '': @@ -399,20 +400,27 @@ def branch(folder=None): if len(branches) > 0 and len(marked) > 0: b = marked[0] if ('detached' in b or 'HEAD' in b) and len(branches) > 1: + detached = True b = branches[1].strip() - log.debug(f'Git detached head detected: folder="{folder}" reattach={b}') + log.debug(f'Submodule: folder="{folder}" reattach={b} git detached head detected') except Exception: b = git('git rev-parse --abbrev-ref HEAD', folder, optional=True) + if 'main' in b: - b = 'main' + tgt = 'main' elif 'master' in b: - b = 'master' + tgt = 'master' else: - b = b.split('\n')[0].replace('*', '').strip() - log.debug(f'Submodule: folder="{folder}" branch="{b}"') - git(f'checkout {b}', folder, ignore=True, optional=True) + tgt = b.split('\n')[0].replace('*', '').strip() + if (tgt != b) or detached: + log.debug(f'Submodule: folder="{folder}" branch="{b}" target="{tgt}"') + git(f'checkout {tgt}', folder, ignore=True, optional=True) + git('fetch', folder, ignore=True) + git(f'merge --ff-only origin/{tgt}', folder, ignore=True) + else: + log.debug(f'Submodule: folder="{folder}" branch="{b}"') ts('branch', t_start) - return b + return tgt # restart process From d86916b8eb75ad94ba4331330ead4535945edd1a Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 15 Sep 2026 08:58:34 +0200 Subject: [PATCH 251/270] update installer Signed-off-by: Vladimir Mandic --- installer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/installer.py b/installer.py index be8759237..2d5f64cda 100644 --- a/installer.py +++ b/installer.py @@ -385,8 +385,6 @@ def git(arg: str, folder: str | None= None, ignore: bool = False, optional: bool # reattach as needed as head can get detached def branch(folder=None): - if args.experimental or args.skip_git or args.skip_all: - return None t_start = time.time() if not os.path.exists(os.path.join(folder or os.curdir, '.git')): return None @@ -406,6 +404,9 @@ def branch(folder=None): except Exception: b = git('git rev-parse --abbrev-ref HEAD', folder, optional=True) + if args.experimental or args.skip_git or args.skip_all: + return b + if 'main' in b: tgt = 'main' elif 'master' in b: From af16ef567cb6fbaa5b5f015e61cfd37fdeb3f7c8 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 15 Sep 2026 09:34:10 +0200 Subject: [PATCH 252/270] theme handle cli Signed-off-by: Vladimir Mandic --- modules/theme.py | 37 +++++++++++++++++++++++-------------- modules/ui_javascript.py | 2 +- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/modules/theme.py b/modules/theme.py index 381fb9cde..7f6043f23 100644 --- a/modules/theme.py +++ b/modules/theme.py @@ -1,3 +1,4 @@ +from functools import lru_cache import json import os from types import SimpleNamespace @@ -60,21 +61,23 @@ def refresh_themes(no_update=False): return res +@lru_cache(maxsize=1024) def list_locales(): return ['Auto', 'en: English', 'hr: Croatian', 'de: German', 'es: Spanish', 'fr: French', 'it: Italian', 'pt: Portuguese', 'zh: Chinese', 'ja: Japanese', 'ko: Korean', 'ru: Russian'] +@lru_cache(maxsize=1024) def list_themes(): - if opts.theme_type == 'None': + if opts.theme_type.lower() == 'none': gradio = ["gradio/default", "gradio/base", "gradio/glass", "gradio/monochrome", "gradio/soft"] huggingface = refresh_themes(no_update=True) huggingface = {x['id'] for x in huggingface if x['status'] == 'RUNNING' and 'test' not in x['id'].lower()} huggingface = [f'huggingface/{x}' for x in huggingface] themes = sorted(gradio) + sorted(huggingface, key=str.casefold) - elif opts.theme_type == 'Standard': + elif opts.theme_type.lower() == 'standard': builtin = list_builtin_themes() themes = sorted(builtin) - elif opts.theme_type == 'Modern': + elif opts.theme_type.lower() == 'modern': # ext = next((e for e in modules.extensions.extensions if e.name == 'sdnext-modernui'), None) # folder = os.path.join(ext.path, 'themes') folder = os.path.join('extensions-builtin', 'sdnext-modernui', 'themes') @@ -92,8 +95,16 @@ def list_themes(): return themes -def reload_gradio_theme(): - global gradio_theme # pylint: disable=global-statement +def reload_gradio_theme(_opts, _cmd_opts): + global opts, gradio_theme # pylint: disable=global-statement + if _opts is not None: + opts = _opts + if _cmd_opts is not None: + if _cmd_opts.theme is not None: + if '/' in _cmd_opts.theme: + opts.theme_type, opts.gradio_theme = _cmd_opts.theme.split('/', 1) + else: + opts.theme_type = _cmd_opts.theme theme_name = opts.gradio_theme default_font_params: FontParams = { 'font':['Helvetica', 'ui-sans-serif', 'system-ui', 'sans-serif'], @@ -103,31 +114,29 @@ def reload_gradio_theme(): available_themes = list_themes() if theme_name not in available_themes: # log.error(f'UI theme invalid: type={opts.theme_type} theme="{theme_name}"') - if opts.theme_type == 'Standard': + if opts.theme_type.lower() == 'standard': theme_name = 'black-teal' - elif opts.theme_type == 'Modern': - theme_name = 'Default' - elif opts.theme_type == 'None': + elif opts.theme_type.lower() == 'none': theme_name = 'gradio/default' else: - opts.theme_type = 'Standard' - theme_name = 'black-teal' + opts.theme_type = 'modern' + theme_name = 'Default' opts.gradio_theme = theme_name log.info(f'UI locale: name="{opts.ui_locale}"') - if opts.theme_type == 'Standard': + if opts.theme_type.lower() == 'standard': gradio_theme = gr.themes.Base(**default_font_params) log.debug(f'UI theme: type={opts.theme_type} available={len(available_themes)}') log.warning('UI theme: please switch to ModernUI for best experience') return 'sdnext.css' - if opts.theme_type == 'Modern': + if opts.theme_type.lower() == 'modern': gradio_theme = gr.themes.Base(**default_font_params) log.debug(f'UI theme: type={opts.theme_type} available={len(available_themes)}') return 'base.css' - if opts.theme_type == 'None': + if opts.theme_type.lower() == 'none': if theme_name.startswith('gradio/'): log.warning('UI theme: using Gradio default theme which is not optimized for SD.Next') if theme_name == "gradio/default": diff --git a/modules/ui_javascript.py b/modules/ui_javascript.py index 4312b116a..786b4e25e 100644 --- a/modules/ui_javascript.py +++ b/modules/ui_javascript.py @@ -125,7 +125,7 @@ def reload_javascript(): js = html_head() css_files: list[str] = [] - if (css_base := theme.reload_gradio_theme()) is not None: + if (css_base := theme.reload_gradio_theme(shared.opts, shared.cmd_opts)) is not None: css_files.append(css_base) css_files.append("timesheet.css") From c038e2b21cacb699a397fa1cb84aea4c92cf18b6 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 15 Sep 2026 11:34:01 +0200 Subject: [PATCH 253/270] update submodules Signed-off-by: Vladimir Mandic --- extensions-builtin/sdnext-kanvas | 2 +- extensions-builtin/sdnext-modernui | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions-builtin/sdnext-kanvas b/extensions-builtin/sdnext-kanvas index d81446267..e2407080b 160000 --- a/extensions-builtin/sdnext-kanvas +++ b/extensions-builtin/sdnext-kanvas @@ -1 +1 @@ -Subproject commit d81446267571bddf223a225e25fcec190244a5db +Subproject commit e2407080b5da33be317cadafa9461444a93e6a73 diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 2cec63a51..60db7c4b2 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 2cec63a515c1171160fc0b9db483d98e16029228 +Subproject commit 60db7c4b26d1fce3eb2f6da2480d0ee529269bd5 From b7aa4b895a7494c4a8f9e27937bd9435c3f0c45b Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 15 Sep 2026 12:29:14 +0200 Subject: [PATCH 254/270] prompt cache prevent clear on task change Signed-off-by: Vladimir Mandic --- installer.py | 4 ++-- modules/sd_hijack_te.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/installer.py b/installer.py index 2d5f64cda..f76cf220c 100644 --- a/installer.py +++ b/installer.py @@ -1553,7 +1553,7 @@ def check_ui(ver): return t_start = time.time() if not same(ver): - log.debug(f'Branch mismatch: {ver}') + log.debug(f'Branch mismatch: module=ModernUI {ver}') try: if 'dev' in ver['branch']: target = 'dev' @@ -1580,7 +1580,7 @@ def check_kanvas(ver): return t_start = time.time() if not same(ver): - log.debug(f'Branch mismatch: {ver}') + log.debug(f'Branch mismatch: module=Kanvas {ver}') try: if 'dev' in ver['branch']: target = 'dev' diff --git a/modules/sd_hijack_te.py b/modules/sd_hijack_te.py index 0e949c3fa..1732db1e7 100644 --- a/modules/sd_hijack_te.py +++ b/modules/sd_hijack_te.py @@ -18,9 +18,10 @@ class PromptCache: return val def get(self, prompt, negative_prompt=None, cfg_enabled=None): - if self.id != id(shared.sd_model): + current_id = id(shared.sd_model.sd_checkpoint_info) if hasattr(shared.sd_model, 'sd_checkpoint_info') else id(shared.sd_model) + if self.id != current_id: self.cache.clear() - self.id = id(shared.sd_model) + self.id = current_id log.debug(f'Encode: prompt cache activate id={self.id} depth={len(self.cache)}') negative_prompt = self._hashable(negative_prompt) if (isinstance(prompt, list) and len(prompt) == 1 and isinstance(prompt[0], str)): From 07320874d3ff9cff330c929dcf07184ab90e0a9c Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 15 Sep 2026 12:40:53 +0200 Subject: [PATCH 255/270] fix font paths Signed-off-by: Vladimir Mandic --- modules/caption/vqa_detection.py | 2 +- modules/image/grid.py | 4 ++-- modules/progress.py | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/modules/caption/vqa_detection.py b/modules/caption/vqa_detection.py index 8b03e21c9..17cc4e89b 100644 --- a/modules/caption/vqa_detection.py +++ b/modules/caption/vqa_detection.py @@ -313,7 +313,7 @@ def draw_bounding_boxes(image: Image.Image, detections: list, points: list | Non # Try to load a font, fall back to default if unavailable try: font_size = max(12, int(min(width, height) * 0.02)) - font_path = shared.opts.font or os.path.join(script_path, "ui", "fonts", "notosans-nerdfont-regular.ttf") + font_path = shared.opts.font or os.path.join(script_path, "ui", "css", "ubuntu-nerdfont.ttf") font = ImageFont.truetype(font_path, size=font_size) except Exception: font = ImageFont.load_default() diff --git a/modules/image/grid.py b/modules/image/grid.py index dbd4bbda6..374fe0ea1 100644 --- a/modules/image/grid.py +++ b/modules/image/grid.py @@ -146,9 +146,9 @@ class GridAnnotation: def get_font(fontsize: float): try: - return ImageFont.truetype(shared.opts.font or os.path.join(script_path, "ui", "fonts", "notosans-nerdfont-regular.ttf"), fontsize) + return ImageFont.truetype(shared.opts.font or os.path.join(script_path, "ui", "css", "ubuntu-nerdfont.ttf"), fontsize) except Exception: - return ImageFont.truetype(os.path.join(script_path, "ui", "fonts", "notosans-nerdfont-regular.ttf"), fontsize) + return ImageFont.truetype(os.path.join(script_path, "ui", "css", "ubuntu-nerdfont.ttf"), fontsize) def draw_grid_annotations(im: Image.Image, width: int, height: int, x_texts: list[list[GridAnnotation]], y_texts: list[list[GridAnnotation]], margin=0, title: list[GridAnnotation] | None = None): diff --git a/modules/progress.py b/modules/progress.py index 263bc6342..cd6a52d4f 100644 --- a/modules/progress.py +++ b/modules/progress.py @@ -116,8 +116,6 @@ def api_progress(req: ProgressRequest): try: buffered = io.BytesIO() shared.state.current_image.save(buffered, format='jpeg', quality=60) - fn = f'/tmp/preview-{shared.state.preview_job}-{shared.state.current_image_sampling_step}.jpg' - shared.state.current_image.save(fn, quality=90) b64 = base64.b64encode(buffered.getvalue()) live_preview = f'data:image/jpeg;base64,{b64.decode("ascii")}' except Exception: From fe6c3acd164a87d4d9836708ae11b7808dabb4da Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 15 Sep 2026 17:16:12 +0200 Subject: [PATCH 256/270] minimax vdn experimental Signed-off-by: Vladimir Mandic --- extensions-builtin/sdnext-modernui | 2 +- modules/minimax/minimax_vdn.py | 211 +++++++++++++++++++++++++++++ modules/minimax/minimax_video.py | 4 + 3 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 modules/minimax/minimax_vdn.py diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 60db7c4b2..7bfb72835 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 60db7c4b26d1fce3eb2f6da2480d0ee529269bd5 +Subproject commit 7bfb7283527f4df21030bcdc67d0ffe06238e914 diff --git a/modules/minimax/minimax_vdn.py b/modules/minimax/minimax_vdn.py new file mode 100644 index 000000000..a82e86347 --- /dev/null +++ b/modules/minimax/minimax_vdn.py @@ -0,0 +1,211 @@ +import types +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.utils.checkpoint + +from modules import devices +from modules.logger import log + + +class VectorizedGatedDeltaBranch(nn.Module): + def __init__(self, d_model: int, num_heads: int, init_gamma: float = 1.0): + super().__init__() + self.num_heads = num_heads + self.head_dim = d_model // num_heads + self.proj_beta = nn.Linear(d_model, num_heads, bias=False) + nn.init.zeros_(self.proj_beta.weight) + self.gamma = nn.Parameter(torch.full((1,), float(init_gamma))) + self.compute_dtype = devices.dtype + + def get_sliding_window_mask(self, num_frames: int, window_size: int, device: torch.device) -> torch.Tensor: + grid = torch.arange(num_frames, device=device) + diff = torch.abs(grid.unsqueeze(0) - grid.unsqueeze(1)) + return (diff <= (window_size // 2)).unsqueeze(0).unsqueeze(0) + + def forward(self, q: torch.Tensor, k: torch.Tensor, v: torch.Tensor) -> torch.Tensor: + B, F_len, S, H, D = q.shape + + if self.proj_beta.weight.device != q.device or self.proj_beta.weight.dtype != self.compute_dtype: + self.to(device=q.device, dtype=self.compute_dtype) + + q_t = q.to(dtype=self.compute_dtype).permute(0, 2, 3, 1, 4).reshape(B * S, H, F_len, D) + k_t = k.to(dtype=self.compute_dtype).permute(0, 2, 3, 1, 4).reshape(B * S, H, F_len, D) + v_t = v.to(dtype=self.compute_dtype).permute(0, 2, 3, 1, 4).reshape(B * S, H, F_len, D) + + q_in = q.reshape(B, F_len, S, -1).to(dtype=self.proj_beta.weight.dtype) + beta = torch.sigmoid(self.proj_beta(q_in)) + beta = beta.to(dtype=self.compute_dtype).permute(0, 2, 3, 1).reshape(B * S, H, F_len, 1, 1) + + state = torch.zeros((B * S, H, D, D), dtype=self.compute_dtype, device=q.device) + out_buf = torch.empty((B * S, H, F_len, D), dtype=self.compute_dtype, device=q.device) + + gamma_comp = self.gamma.to(dtype=self.compute_dtype, device=q.device) + + for t in range(F_len): + q_f = q_t[:, :, t] + k_f = k_t[:, :, t] + v_f = v_t[:, :, t] + b_f = beta[:, :, t] + + pred_v = torch.matmul(state, k_f.unsqueeze(-1)).squeeze(-1) + error = v_f - pred_v + + # In-place state update avoids intermediate 5D tensor allocations + state.mul_(1.0 - b_f).addcmul_(b_f, error.unsqueeze(-1), k_f.unsqueeze(-2)) + + frame_out = torch.matmul(q_f.unsqueeze(-2), state).squeeze(-2) + + # upcast to fp32 before squaring to prevent fp16 overflow + v_rms = torch.rsqrt(torch.mean(v_f.float().pow(2), dim=-1, keepdim=True) + 1e-6).to(self.compute_dtype) + out_rms = torch.rsqrt(torch.mean(frame_out.float().pow(2), dim=-1, keepdim=True) + 1e-6).to(self.compute_dtype) + + out_buf[:, :, t] = frame_out * (out_rms / v_rms) + + out = out_buf.reshape(B, S, H, F_len, D).permute(0, 3, 1, 2, 4) + return (gamma_comp * out).to(dtype=q.dtype) + + +def vdn_attention_forward(self, hidden_states, *args, **kwargs): + encoder_hidden_states = kwargs.get("encoder_hidden_states", args[0] if len(args) > 0 else None) + + if encoder_hidden_states is not None or hidden_states.ndim != 3: + if hasattr(self, "orig_forward"): + return self.orig_forward(hidden_states, *args, **kwargs) + + B, SeqLen, C = hidden_states.shape + default_frames = getattr(self, "num_frames", 22) + num_frames = kwargs.get("num_frames", None) or getattr(self, "num_frames", None) + + if num_frames is None or SeqLen % num_frames != 0: + if SeqLen % default_frames == 0: + num_frames = default_frames + else: + possible_factors = [f for f in (16, 24, 32, 48, 64) if SeqLen % f == 0] + if possible_factors: + num_frames = possible_factors[0] + else: + if hasattr(self, "orig_forward"): + return self.orig_forward(hidden_states, *args, **kwargs) + raise ValueError(f"Sequence length {SeqLen} cannot be factorized by frame count.") + + window_size = kwargs.get("window_size", None) or getattr(self, "window_size", 16) + S = SeqLen // num_frames + + q = self.to_q(hidden_states) + k = self.to_k(hidden_states) + v = self.to_v(hidden_states) + + inner_dim = getattr(self, "inner_dim", C) + head_dim = getattr(self, "slice_able_head_dim", getattr(self, "head_dim", 64)) + num_heads = getattr(self, "heads", inner_dim // head_dim) + + q_5d = q.contiguous().view(B, num_frames, S, num_heads, head_dim) + k_5d = k.contiguous().view(B, num_frames, S, num_heads, head_dim) + v_5d = v.contiguous().view(B, num_frames, S, num_heads, head_dim) + + q_loc = q_5d.permute(0, 2, 3, 1, 4).reshape(B * S, num_heads, num_frames, head_dim) + k_loc = k_5d.permute(0, 2, 3, 1, 4).reshape(B * S, num_heads, num_frames, head_dim) + v_loc = v_5d.permute(0, 2, 3, 1, 4).reshape(B * S, num_heads, num_frames, head_dim) + + attention_mask = kwargs.get("attention_mask", None) + if window_size >= num_frames: + combined_mask = attention_mask + else: + window_mask = self.get_sliding_window_mask(num_frames, window_size, hidden_states.device) + if attention_mask is not None and attention_mask.dtype == torch.bool and attention_mask.shape == window_mask.shape: + combined_mask = attention_mask & window_mask + else: + combined_mask = window_mask + + if self.delta_branch.proj_beta.weight.device != hidden_states.device or self.delta_branch.proj_beta.weight.dtype != devices.dtype: + self.delta_branch.to(device=hidden_states.device, dtype=devices.dtype) + + try: + out_local = F.scaled_dot_product_attention(q_loc, k_loc, v_loc, attn_mask=combined_mask, is_causal=False) + except (RuntimeError, TypeError): + if combined_mask is not None and combined_mask.dtype == torch.bool: + mask_val = -1e4 if q_loc.dtype == torch.float16 else -1e9 + float_mask = torch.zeros(combined_mask.shape, device=hidden_states.device, dtype=q_loc.dtype) + float_mask.masked_fill_(~combined_mask, mask_val) + out_local = F.scaled_dot_product_attention(q_loc, k_loc, v_loc, attn_mask=float_mask, is_causal=False) + else: + raise + + out_local = out_local.reshape(B, S, num_heads, num_frames, head_dim).permute(0, 3, 1, 2, 4) + out_delta = self.delta_branch(q_5d, k_5d, v_5d) + out_hybrid = (out_local + out_delta).reshape(B, SeqLen, C) + + to_out = getattr(self, "to_out", None) + if to_out is not None: + if isinstance(to_out, (nn.ModuleList, list)): + for proj in to_out: + out_hybrid = proj(out_hybrid) + return out_hybrid + return to_out(out_hybrid) + + return out_hybrid + + +def apply_vdn(pipe, window_size=16, num_frames=22, init_gamma=1.0): + if pipe is None or getattr(pipe, "transformer", None) is None: + return + count = 0 + for _, module in pipe.transformer.named_modules(): + if module.__class__.__name__ == "MiniMaxH3Attention": + if hasattr(module, "delta_branch"): + # already patched, just update the num_frames and window_size + module.num_frames = num_frames + module.window_size = window_size + continue + if not hasattr(module, "orig_forward"): + # backup the original forward method + module.orig_forward = module.forward + + to_q = getattr(module, "to_q", None) + if to_q is not None: + if hasattr(to_q, "out_features"): + default_dim = to_q.out_features + elif hasattr(to_q, "orig_out_features"): + default_dim = to_q.orig_out_features + elif hasattr(to_q, "weight"): + default_dim = to_q.weight.shape[0] + else: + default_dim = 1024 + else: + default_dim = 1024 + + inner_dim = getattr(module, "inner_dim", default_dim) + head_dim = getattr(module, "slice_able_head_dim", getattr(module, "head_dim", 64)) + num_heads = getattr(module, "heads", inner_dim // head_dim) + + delta_branch = VectorizedGatedDeltaBranch(inner_dim, num_heads, init_gamma=init_gamma) + delta_branch = delta_branch.to(device=devices.device, dtype=devices.dtype) + + module.add_module("delta_branch", delta_branch) + module.num_frames = num_frames + module.window_size = window_size + + module.forward = types.MethodType(vdn_attention_forward, module) + count += 1 + + log.info(f'Pipeline: cls={pipe.__class__.__name__} gate={VectorizedGatedDeltaBranch.__name__} patched={count} window={window_size} gamma={init_gamma} frames={num_frames}') + + +def unapply_vdn(pipe): + if pipe is None or getattr(pipe, "transformer", None) is None: + return + count = 0 + for _, module in pipe.transformer.named_modules(): + if module.__class__.__name__ == "MiniMaxH3Attention": + if hasattr(module, "orig_forward"): + count += 1 + module.forward = module.orig_forward + delattr(module, "orig_forward") + if hasattr(module, "delta_branch"): + delattr(module, "delta_branch") + if hasattr(module, "num_frames"): + delattr(module, "num_frames") + if hasattr(module, "window_size"): + delattr(module, "window_size") + log.info(f'Pipeline: cls={pipe.__class__.__name__} gate={VectorizedGatedDeltaBranch.__name__} restored={count}') diff --git a/modules/minimax/minimax_video.py b/modules/minimax/minimax_video.py index 5631a0b3f..ec19ec77d 100644 --- a/modules/minimax/minimax_video.py +++ b/modules/minimax/minimax_video.py @@ -156,6 +156,10 @@ def generate(task_id, _ui_state, _processed: processing.Processed = scripts_manager.scripts_video.run(p, *args) + if os.environ.get("SD_MINIMAX_VDN", None) is not None: + from modules.minimax.minimax_vdn import apply_vdn + apply_vdn(shared.sd_model, window_size=12, num_frames=frames, init_gamma=1.0) + if os.environ.get("SD_MINIMAX_CHUNK", None) is not None: from modules.minimax.minimax_chunking import minimax_attention chunk_size = int(os.environ.get("SD_MINIMAX_CHUNK", 0)) From a941d101c568661fc7a464145486dc20ef6dfa39 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 15 Sep 2026 18:01:34 +0200 Subject: [PATCH 257/270] lint Signed-off-by: Vladimir Mandic --- modules/minimax/minimax_vdn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/minimax/minimax_vdn.py b/modules/minimax/minimax_vdn.py index a82e86347..47b4aac95 100644 --- a/modules/minimax/minimax_vdn.py +++ b/modules/minimax/minimax_vdn.py @@ -52,7 +52,7 @@ class VectorizedGatedDeltaBranch(nn.Module): error = v_f - pred_v # In-place state update avoids intermediate 5D tensor allocations - state.mul_(1.0 - b_f).addcmul_(b_f, error.unsqueeze(-1), k_f.unsqueeze(-2)) + state.mul_(1.0 - b_f).addcmul_(b_f, error.unsqueeze(-1), k_f.unsqueeze(-2)) # ty: ignore[too-many-positional-arguments] frame_out = torch.matmul(q_f.unsqueeze(-2), state).squeeze(-2) From 29fe895c0bbe9414ae4fdd43886cec13feafa524 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 15 Sep 2026 23:01:41 +0100 Subject: [PATCH 258/270] feat(video): absolute per-request minimax shift on every path Shift is a property of the trained schedule, not of the step count, so the tab sliders take absolute values, defaulting to the shipped 12 and 3. video_minimax resolves each request from the request value or the scheduler config inside apply_overrides, which the tab, the api and the still path all call, so a request without values lands on the shipped schedule. The api maps sampler_shift onto the video schedule and gains audio_shift. Applied values are recorded as Video shift and Audio shift; the PDD pin records what it enforces. --- modules/api/video.py | 4 +- modules/lora/network_pdd.py | 6 +- modules/minimax/minimax_ui.py | 4 +- modules/minimax/minimax_video.py | 3 +- modules/video_models/video_minimax.py | 44 ++--- modules/video_models/video_overrides.py | 2 +- modules/video_models/video_run.py | 2 + pipelines/minimax/minimax_lora.py | 3 +- test/test-minimax-shift.py | 223 ++++++++++++++++++++++++ test/test-pdd.py | 3 +- ui/locale/locale_en.json | 4 +- 11 files changed, 265 insertions(+), 33 deletions(-) create mode 100644 test/test-minimax-shift.py diff --git a/modules/api/video.py b/modules/api/video.py index 9afc66385..66dbe9efb 100644 --- a/modules/api/video.py +++ b/modules/api/video.py @@ -22,8 +22,9 @@ class ReqVideo(BaseModel): frames: int = Field(default=17, ge=1, le=1024, title="Frames", description="Number of frames; 1 produces a single still image on workflow models") steps: int = Field(default=50, ge=1, le=200, title="Steps", description="Number of inference steps") sampler_name: str = Field(default="Default", title="Sampler", description="Sampler name; Default keeps the model scheduler") - sampler_shift: float = Field(default=-1.0, title="Sampler shift", description="Scheduler flow shift; -1 keeps the model default") + sampler_shift: float = Field(default=-1.0, title="Sampler shift", description="Scheduler flow shift, the video schedule on models with a separate audio schedule; -1 keeps the model default") dynamic_shift: bool = Field(default=False, title="Dynamic shift", description="Enable dynamic scheduler shifting") + audio_shift: float = Field(default=-1.0, title="Audio shift", description="Audio schedule shift on models with a separate audio scheduler; -1 keeps the model default") seed: int = Field(default=-1, title="Seed", description="Generation seed; -1 for random") guidance_scale: float = Field(default=-1.0, title="Guidance scale", description="CFG scale; -1 keeps the model default") guidance_true: float = Field(default=-1.0, title="True guidance", description="True CFG scale; -1 keeps the model default") @@ -173,6 +174,7 @@ class APIVideo: sampler_name=sampler_name, sampler_shift=req.sampler_shift, dynamic_shift=req.dynamic_shift, + audio_shift=req.audio_shift, seed=req.seed, guidance_scale=req.guidance_scale, guidance_true=req.guidance_true, diff --git a/modules/lora/network_pdd.py b/modules/lora/network_pdd.py index 82cf7f35a..24818829d 100644 --- a/modules/lora/network_pdd.py +++ b/modules/lora/network_pdd.py @@ -20,10 +20,11 @@ EXTRAS_KEY = 'pdd' class ArchSpec: """How an architecture hosts parallel heads: the scheduler behind each head and how interval counts map onto its num_inference_steps.""" - def __init__(self, schedulers=None, default_scheduler='scheduler', steps_for=None): + def __init__(self, schedulers=None, default_scheduler='scheduler', steps_for=None, shift_keys=None): self.schedulers = schedulers or {} # head path -> attribute of the scheduler the head was trained on self.default_scheduler = default_scheduler self.steps_for = steps_for or (lambda intervals: intervals) # num_inference_steps that yields this many grid intervals + self.shift_keys = shift_keys or {} # scheduler attribute -> infotext key the pinned shift is recorded under def scheduler_name(self, head): return self.schedulers.get(head, self.default_scheduler) @@ -301,5 +302,8 @@ def pin(p, model): p.task_args['num_inference_steps'] = state.steps if getattr(model, 'num_timesteps', None) is not None: model.num_timesteps = state.heads.nfe # the progress total counts transformer evaluations + extra = getattr(p, 'extra_generation_params', None) + if extra is not None: + extra.update({state.spec.shift_keys[name]: shift for name, shift in shifts.items() if name in state.spec.shift_keys}) log.info(f'Network: type=PDD name="{state.name}" steps={state.steps} requested={requested} nfe={state.heads.nfe} shift={shifts}') return state.steps diff --git a/modules/minimax/minimax_ui.py b/modules/minimax/minimax_ui.py index 04c425bc6..aee62c526 100644 --- a/modules/minimax/minimax_ui.py +++ b/modules/minimax/minimax_ui.py @@ -29,8 +29,8 @@ def create_ui(prompt, _negative, styles, overrides, script_inputs, mp4_fps, mp4_ steps = gr.Slider(minimum=2, maximum=100, step=1, label="MiniMax steps", elem_id='minimax_steps', value=30) frames = gr.Slider(label='MiniMax frames', minimum=22, maximum=362, step=17, value=124, elem_id='minimax_frames') with gr.Row(): - video_shift = gr.Slider(minimum=0.05, maximum=0.95, step=0.05, value=0.40, label="MiniMax video shift", elem_id='minimax_video_shift') - audio_shift = gr.Slider(minimum=0.05, maximum=0.95, step=0.05, value=0.15, label="MiniMax audio shift", elem_id='minimax_audio_shift') + video_shift = gr.Slider(minimum=0.5, maximum=20.0, step=0.1, value=12.0, label="MiniMax video shift", elem_id='minimax_video_shift') + audio_shift = gr.Slider(minimum=0.5, maximum=10.0, step=0.1, value=3.0, label="MiniMax audio shift", elem_id='minimax_audio_shift') with gr.Row(): seed = gr.Number(label='Seed', value=-1, elem_id='minimax_seed', container=True) random_seed = ToolButton(ui_symbols.random, elem_id='minimax_seed_random') diff --git a/modules/minimax/minimax_video.py b/modules/minimax/minimax_video.py index 5631a0b3f..8a175df6e 100644 --- a/modules/minimax/minimax_video.py +++ b/modules/minimax/minimax_video.py @@ -144,8 +144,7 @@ def generate(task_id, _ui_state, outpath_samples=paths.resolve_output_path(shared.opts.outdir_samples, shared.opts.outdir_video), ops=['video'], ) - video_minimax.apply_overrides(p, shared.sd_model, still=False, audio=enable_audio, preview=enable_preview) - video_minimax.set_sampler_shift(shared.sd_model, steps=steps, video_shift=video_shift, audio_shift=audio_shift) + video_minimax.apply_overrides(p, shared.sd_model, still=False, audio=enable_audio, preview=enable_preview, video_shift=video_shift, audio_shift=audio_shift) log.debug(f'Video: engine="{engine}" model="{model}" workflow={workflow} cls={shared.sd_model.__class__.__name__} audio={enable_audio} preview={enable_preview} kwargs={p.task_args}') processing.fix_seed(p) p.ops.append('video') diff --git a/modules/video_models/video_minimax.py b/modules/video_models/video_minimax.py index cd0d17e2a..1b5065764 100644 --- a/modules/video_models/video_minimax.py +++ b/modules/video_models/video_minimax.py @@ -3,11 +3,12 @@ from modules.logger import log MIN_LATENT_FRAMES = 7 # decoder floor: fewer latent frames leave the chunked decode with nothing to emit +SHIFT_KEYS = {'scheduler': 'Video shift', 'audio_scheduler': 'Audio shift'} # infotext key per schedule -def apply_overrides(p, pipe, still: bool = False, audio: bool = True, preview: bool = False): - """Per-generation constraints shared by the video tab and the image path: canvas and frame - alignment, the bespoke scheduler guard, tiling, and the audio/still toggles.""" +def apply_overrides(p, pipe, still: bool = False, audio: bool = True, preview: bool = False, video_shift: float | None = None, audio_shift: float | None = None): + """Per-generation constraints shared by the video tab, the api and the image path: canvas and frame + alignment, the bespoke scheduler guard, the schedule shifts, tiling, and the audio/still toggles.""" if still: audio = False # a sub-second soundtrack is pure waste on a kept single frame multiple = pipe.canvas_multiple @@ -34,6 +35,7 @@ def apply_overrides(p, pipe, still: bool = False, audio: bool = True, preview: b if p.sampler_name not in ('None', 'Default'): log.warning(f'Pipeline: cls={pipe.__class__.__name__} sampler={p.sampler_name} unsupported: using model default') p.sampler_name = 'Default' # the model default is the bespoke scheduler pair, which discrete samplers must not replace + p.extra_generation_params.update(set_sampler_shift(pipe, video_shift=video_shift, audio_shift=audio_shift)) pipe.vae.enable_tiling() # model always tiles; the shared vae params path may have disabled it set_audio(pipe, audio) p.task_args['output'] = ['videos', 'audio', 'sampling_rate'] if audio else ['videos'] @@ -91,29 +93,27 @@ def set_audio(pipe, enabled: bool): log.debug(f'Pipeline: cls={pipe.__class__.__name__} audio=disabled') -def calculate_video_shift(steps: int, value: float = 0.40, max_shift: float = 16.0) -> float: - value = max(0.05, min(0.95, value)) - return min(max_shift, round((value * steps) + 0.5)) +def resolve_shift(scheduler, requested: float | None = None) -> float: + """The shift one request lands on: a positive request value, else the value the scheduler config ships.""" + if requested is not None and requested > 0: + return float(requested) + return float(scheduler.config['shift']) -def calculate_audio_shift(steps: int, value: float = 0.15, max_shift: float = 6.0) -> float: - value = max(0.05, min(0.95, value)) - return min(max_shift, round((value * steps) + 0.5)) - - -def set_sampler_shift(pipe, steps: int, video_shift: float = 12.0, audio_shift: float = 3.0): +def set_sampler_shift(pipe, video_shift: float | None = None, audio_shift: float | None = None) -> dict: + """Apply the video and audio schedule shift for one request; returns the applied values keyed for infotext. + Non-positive values resolve to the shipped schedule; default_scheduler is written too, since the Default + sampler restore copies it over scheduler each generation.""" scheduler = getattr(pipe, 'scheduler', None) audio_scheduler = getattr(pipe, 'audio_scheduler', None) - if not hasattr(scheduler, 'set_shift') or not hasattr(audio_scheduler, 'set_shift'): + if any(not hasattr(s, 'set_shift') or 'shift' not in getattr(s, 'config', {}) for s in (scheduler, audio_scheduler)): log.warning(f'Pipeline: cls={pipe.__class__.__name__} scheduler={scheduler.__class__.__name__} audio={audio_scheduler.__class__.__name__} shift unsupported') - return - video_calc_shift = calculate_video_shift(steps=steps, value=video_shift) - audio_calc_shift = calculate_audio_shift(steps=steps, value=audio_shift) - dct_video = { 'value': video_shift, 'shift': video_calc_shift } - dct_audio = { 'value': audio_shift, 'shift': audio_calc_shift } - # set_shift keeps the shipped value in config.shift; the default sampler restores scheduler from default_scheduler every generation, so that copy carries the shift too + return {} + video = resolve_shift(scheduler, video_shift) + audio = resolve_shift(audio_scheduler, audio_shift) for target in (scheduler, getattr(pipe, 'default_scheduler', None)): if hasattr(target, 'set_shift'): - target.set_shift(video_calc_shift) - audio_scheduler.set_shift(audio_calc_shift) - log.debug(f'Pipeline: scheduler={scheduler.__class__.__name__} video={dct_video} audio={dct_audio}') + target.set_shift(video) + audio_scheduler.set_shift(audio) + log.debug(f'Pipeline: cls={pipe.__class__.__name__} shift video={video} audio={audio} requested={video_shift}/{audio_shift}') + return {SHIFT_KEYS['scheduler']: video, SHIFT_KEYS['audio_scheduler']: audio} diff --git a/modules/video_models/video_overrides.py b/modules/video_models/video_overrides.py index f0e760896..a52e2d2f9 100644 --- a/modules/video_models/video_overrides.py +++ b/modules/video_models/video_overrides.py @@ -114,4 +114,4 @@ def set_overrides(p: processing.StableDiffusionProcessingVideo, selected: Model) # MiniMax H3 if 'MiniMaxH3' in cls: from modules.video_models import video_minimax - video_minimax.apply_overrides(p, shared.sd_model, still=getattr(p, 'video_still', False), audio=getattr(p, 'video_audio', True)) + video_minimax.apply_overrides(p, shared.sd_model, still=getattr(p, 'video_still', False), audio=getattr(p, 'video_audio', True), video_shift=getattr(p, 'sampler_shift', None), audio_shift=getattr(p, 'audio_shift', None)) diff --git a/modules/video_models/video_run.py b/modules/video_models/video_run.py index db9ee06b8..870dd47f0 100644 --- a/modules/video_models/video_run.py +++ b/modules/video_models/video_run.py @@ -106,6 +106,7 @@ def run(selected: models_def.Model, *, sampler_name: str = 'Default', sampler_shift: float = -1.0, dynamic_shift: bool = False, + audio_shift: float = -1.0, seed: int = -1, guidance_scale: float = -1.0, guidance_true: float = -1.0, @@ -162,6 +163,7 @@ def run(selected: models_def.Model, *, seed=int(seed), sampler_name=sampler_name, sampler_shift=float(sampler_shift), + audio_shift=float(audio_shift), steps=int(steps), width=16 * int(width // 16), height=16 * int(height // 16), diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index e74a1d740..edbdf2c37 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -16,10 +16,11 @@ import torch from modules.logger import log from modules.lora import native_adapter, network_pdd +from modules.video_models.video_minimax import SHIFT_KEYS # Parallel decoding heads: the audio projection follows the audio schedule, and MiniMaxH3Scheduler counts the terminal sigma in num_inference_steps. -PDD = network_pdd.ArchSpec(schedulers={"audio_proj_out": "audio_scheduler"}, steps_for=lambda intervals: intervals + 1) +PDD = network_pdd.ArchSpec(schedulers={"audio_proj_out": "audio_scheduler"}, steps_for=lambda intervals: intervals + 1, shift_keys=SHIFT_KEYS) KNOWN_PREFIXES = ( diff --git a/test/test-minimax-shift.py b/test/test-minimax-shift.py new file mode 100644 index 000000000..f81e023c3 --- /dev/null +++ b/test/test-minimax-shift.py @@ -0,0 +1,223 @@ +#!/usr/bin/env python +""" +Offline unit tests for the MiniMax schedule shift in modules.video_models.video_minimax. + +- ``resolve_shift`` takes a positive request value and falls back to the scheduler config otherwise +- ``set_sampler_shift`` writes scheduler, default_scheduler and audio_scheduler and keys the result for infotext +- a request without values resets what the previous request set +- the Default sampler restore, a deepcopy of default_scheduler, carries the shift into the sigma grid +- ``apply_overrides`` records the applied values on the processing object + +No running server required. + +Usage: + python test/test-minimax-shift.py +""" + +import os +import sys +import copy +import types + +import torch + +script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, script_dir) +os.chdir(script_dir) + +os.environ['SD_INSTALL_QUIET'] = '1' + +# Bootstrap cmd_args before any module that pulls in shared.py. +import modules.cmd_args # pylint: disable=wrong-import-position +import installer # pylint: disable=wrong-import-position +_orig_argv = sys.argv +sys.argv = [sys.argv[0]] +try: + modules.cmd_args.parse_args() +finally: + sys.argv = _orig_argv +installer.add_args(modules.cmd_args.parser) +modules.cmd_args.parsed, _ = modules.cmd_args.parser.parse_known_args([]) + +import diffusers # pylint: disable=wrong-import-position +from modules.errors import log # pylint: disable=wrong-import-position +from modules.video_models import video_minimax # pylint: disable=wrong-import-position + + +VIDEO_SHIFT = 12.0 +AUDIO_SHIFT = 3.0 +STEPS = 5 + + +results = {} + + +def category(name: str): + if name not in results: + results[name] = {'passed': 0, 'failed': 0, 'tests': []} + return name + + +def record(cat: str, passed: bool, name: str, detail: str = ''): + status = 'PASS' if passed else 'FAIL' + results[cat]['passed' if passed else 'failed'] += 1 + results[cat]['tests'].append((status, name)) + msg = f' {status}: {name}' + if detail: + msg += f' ({detail})' + if passed: + log.info(msg) + else: + log.error(msg) + + +def run_test(cat: str, fn): + name = fn.__name__ + try: + ok = fn() + record(cat, ok is not False, name) + except AssertionError as e: + record(cat, False, name, str(e)) + except Exception as e: # pylint: disable=broad-except + record(cat, False, name, f'{type(e).__name__}: {e}') + + +# ============================================================ +# Fixtures +# ============================================================ + +class StubVae: + def enable_tiling(self): + pass + + def decode(self, z, *args, **kwargs): # still mode wraps it with the latent-frame padding + return z + + +class StubPipe: + """The parts of the modular pipeline the shim touches: the scheduler pair with the shipped copy, and the canvas and frame constants.""" + + canvas_multiple = 32 + vae_frames_per_chunk = 17 + vae_latents_per_chunk = 5 + max_duration = 15.0 + fps = 24 + sdnext_supported_min_frames = 120 + + def __init__(self): + self.scheduler = diffusers.MiniMaxH3Scheduler(shift=VIDEO_SHIFT) + self.audio_scheduler = diffusers.MiniMaxH3Scheduler(shift=AUDIO_SHIFT) + self.default_scheduler = copy.deepcopy(self.scheduler) + self.vae = StubVae() + + @property + def min_duration(self): + return 5.0 + + +def make_p(): + return types.SimpleNamespace(width=1024, height=576, steps=STEPS, frames=124, sampler_name='Default', task_args={}, extra_generation_params={}) + + +def sigmas(shift: float): + scheduler = diffusers.MiniMaxH3Scheduler(shift=shift) + scheduler.set_timesteps(STEPS) + return scheduler.sigmas.detach().cpu() + + +def shifts(pipe): + return (pipe.scheduler.shift, pipe.default_scheduler.shift, pipe.audio_scheduler.shift) + + +# ============================================================ +# Tests +# ============================================================ + +def test_resolve_prefers_positive_request(): + scheduler = diffusers.MiniMaxH3Scheduler(shift=VIDEO_SHIFT) + assert video_minimax.resolve_shift(scheduler, 6.0) == 6.0 + assert video_minimax.resolve_shift(scheduler, 0.5) == 0.5 + for absent in (None, -1.0, 0.0): + assert video_minimax.resolve_shift(scheduler, absent) == VIDEO_SHIFT, f'requested={absent}' + + +def test_resolve_reads_the_shipped_value_not_the_live_one(): + scheduler = diffusers.MiniMaxH3Scheduler(shift=VIDEO_SHIFT) + scheduler.set_shift(4.0) + assert video_minimax.resolve_shift(scheduler, None) == VIDEO_SHIFT + + +def test_set_writes_every_copy_and_keys_the_result(): + pipe = StubPipe() + applied = video_minimax.set_sampler_shift(pipe, video_shift=6.0, audio_shift=4.0) + assert applied == {'Video shift': 6.0, 'Audio shift': 4.0}, f'applied={applied}' + assert shifts(pipe) == (6.0, 6.0, 4.0), f'shifts={shifts(pipe)}' + assert pipe.scheduler.config['shift'] == VIDEO_SHIFT and pipe.audio_scheduler.config['shift'] == AUDIO_SHIFT + + +def test_next_request_without_values_resets(): + pipe = StubPipe() + video_minimax.set_sampler_shift(pipe, video_shift=6.0, audio_shift=4.0) + applied = video_minimax.set_sampler_shift(pipe) + assert applied == {'Video shift': VIDEO_SHIFT, 'Audio shift': AUDIO_SHIFT}, f'applied={applied}' + assert shifts(pipe) == (VIDEO_SHIFT, VIDEO_SHIFT, AUDIO_SHIFT), f'shifts={shifts(pipe)}' + applied = video_minimax.set_sampler_shift(pipe, video_shift=-1.0, audio_shift=-1.0) + assert applied == {'Video shift': VIDEO_SHIFT, 'Audio shift': AUDIO_SHIFT}, f'applied={applied}' + + +def test_default_sampler_restore_carries_the_shift(): + pipe = StubPipe() + video_minimax.set_sampler_shift(pipe, video_shift=6.0) + pipe.scheduler = copy.deepcopy(pipe.default_scheduler) # sd_samplers.restore_default + pipe.scheduler.set_timesteps(STEPS) + assert torch.allclose(pipe.scheduler.sigmas.detach().cpu(), sigmas(6.0)), 'restored scheduler does not follow the requested shift' + assert not torch.allclose(pipe.scheduler.sigmas.detach().cpu(), sigmas(VIDEO_SHIFT)), 'requested shift did not change the grid' + + +def test_unsupported_scheduler_is_skipped(): + pipe = StubPipe() + pipe.scheduler = diffusers.EulerDiscreteScheduler() # no set_shift and no shift in its config + assert video_minimax.set_sampler_shift(pipe, video_shift=6.0) == {} + assert pipe.audio_scheduler.shift == AUDIO_SHIFT + + +def test_apply_overrides_records_the_applied_values(): + pipe = StubPipe() + p = make_p() + video_minimax.apply_overrides(p, pipe, still=False, audio=True, video_shift=6.0, audio_shift=-1.0) + assert p.extra_generation_params == {'Video shift': 6.0, 'Audio shift': AUDIO_SHIFT}, f'recorded={p.extra_generation_params}' + assert shifts(pipe) == (6.0, 6.0, AUDIO_SHIFT), f'shifts={shifts(pipe)}' + assert p.sampler_name == 'Default' + + +def test_apply_overrides_without_values_uses_the_shipped_schedule(): + pipe = StubPipe() + video_minimax.set_sampler_shift(pipe, video_shift=6.0, audio_shift=4.0) # an earlier request on the same pipe + p = make_p() + video_minimax.apply_overrides(p, pipe, still=True, audio=False) + assert p.extra_generation_params == {'Video shift': VIDEO_SHIFT, 'Audio shift': AUDIO_SHIFT}, f'recorded={p.extra_generation_params}' + assert shifts(pipe) == (VIDEO_SHIFT, VIDEO_SHIFT, AUDIO_SHIFT), f'shifts={shifts(pipe)}' + + +# ============================================================ +# Main +# ============================================================ + +def main(): + cat = category('resolve') + for fn in (test_resolve_prefers_positive_request, test_resolve_reads_the_shipped_value_not_the_live_one): + run_test(cat, fn) + cat = category('apply') + for fn in (test_set_writes_every_copy_and_keys_the_result, test_next_request_without_values_resets, test_default_sampler_restore_carries_the_shift, test_unsupported_scheduler_is_skipped): + run_test(cat, fn) + cat = category('overrides') + for fn in (test_apply_overrides_records_the_applied_values, test_apply_overrides_without_values_uses_the_shipped_schedule): + run_test(cat, fn) + failed = sum(r['failed'] for r in results.values()) + passed = sum(r['passed'] for r in results.values()) + log.info(f'MiniMax shift tests: passed={passed} failed={failed}') + return 1 if failed else 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/test/test-pdd.py b/test/test-pdd.py index 7eab00d7b..2849ba384 100644 --- a/test/test-pdd.py +++ b/test/test-pdd.py @@ -333,11 +333,12 @@ def test_pin_overrides_steps_and_shift(): assert network_pdd.install(pipe, make_net(heads), heads, minimax_lora.PDD, ['transformer']) is True pipe.scheduler.set_shift(4.0) pipe.audio_scheduler.set_shift(2.0) - p = types.SimpleNamespace(steps=30, task_args={'num_inference_steps': 30}) + p = types.SimpleNamespace(steps=30, task_args={'num_inference_steps': 30}, extra_generation_params={'Video shift': 4.0, 'Audio shift': 2.0}) assert network_pdd.pin(p, pipe) == 9 assert p.steps == 9 and p.task_args['num_inference_steps'] == 9 assert pipe.num_timesteps == 8 assert pipe.scheduler.shift == 12.0 and pipe.audio_scheduler.shift == 3.0 + assert p.extra_generation_params == {'Video shift': 12.0, 'Audio shift': 3.0}, f'recorded={p.extra_generation_params}' network_pdd.restore(pipe) assert network_pdd.pin(p, pipe) is None diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 47bb4dd2d..b9b884e47 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -946,8 +946,8 @@ {"id":"","label":"Max tags","localized":"","hint":"Maximum number of tags to include in the output.
    Limits the result length when an image has many detected features.
    Tags are sorted by confidence, so the most relevant ones are kept.","ui":"caption"}, {"id":"","label":"Memory","localized":"","hint":"","ui":"component-8779"}, {"id":"","label":"Memory optimization","localized":"","hint":"","ui":"component-8779"}, - {"id":"","label":"MiniMax Video Shift","localized":"","hint":"Controls how inference steps are distributed along the flow-matching curve, where higher values prioritize large-scale motion dynamics, camera movement, and global scene composition, while lower values focus steps on refining fine spatial textures and sharp visual details.","ui":"video"}, - {"id":"","label":"MiniMax Audio Shift","localized":"","hint":"Governs the step distribution for latent sound generation, where higher values enforce strong temporal alignment with visual action and macro rhythm, while lower values allocate sampling depth toward high-frequency acoustic fidelity, speech clarity, and crisp sound effects.","ui":"video"}, + {"id":"minimax_video_shift","label":"MiniMax video shift","localized":"","hint":"Exponential shift of the video sigma schedule, sigma' = s*sigma / (1 + (s-1)*sigma). Values above 1 move the step grid toward full noise, values below 1 toward the clean end. The value is absolute and does not scale with the step count.

    Default is 12, the value the model ships with. Distilled LoRAs run at the shift they were trained with: 12 for the 544p lightx2v files, 6 for their 768p files. Parallel decoding (PDD) LoRAs pin the shipped value.

    Recorded in the output metadata as Video shift.","ui":"video"}, + {"id":"minimax_audio_shift","label":"MiniMax audio shift","localized":"","hint":"Exponential shift of the audio sigma schedule. The audio rows are denoised on this schedule inside the joint pass, so the value applies with audio output disabled too.

    Default is 3, the value the model ships with; the published turbo LoRAs keep it. Parallel decoding (PDD) LoRAs pin the shipped value.

    Recorded in the output metadata as Audio shift.","ui":"video"}, {"id":"","label":"MiniMax Frames","localized":"","hint":"MiniMax is optimized to generate 5-15sec videos at 24 FPS","ui":"video"}, {"id":"","label":"Model Info","localized":"","hint":"","ui":"component-8779"}, {"id":"","label":"Model pipeline","localized":"","hint":"If autodetect does not detect model automatically, select model type before loading a model","ui":"settings_sd"}, From 726907dd5bf58ab71719e6712af9e01ce90fff45 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 16 Sep 2026 00:47:46 +0100 Subject: [PATCH 259/270] fix(video): count minimax steps as transformer evaluations MiniMaxH3Scheduler counts the terminal sigma in num_inference_steps, so Steps N ran N-1 evaluations while every other model runs N. The shim hands the scheduler p.steps + 1, the slider starts at 1, and the PDD pin records the evaluation count while passing the scheduler its grid argument. Metadata written before this change counted grid points. --- modules/lora/network_pdd.py | 8 ++++---- modules/minimax/minimax_ui.py | 2 +- modules/video_models/video_minimax.py | 6 +++--- test/test-minimax-shift.py | 3 ++- test/test-pdd.py | 2 +- ui/locale/locale_en.json | 1 + 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/modules/lora/network_pdd.py b/modules/lora/network_pdd.py index 24818829d..b90e20cbf 100644 --- a/modules/lora/network_pdd.py +++ b/modules/lora/network_pdd.py @@ -285,7 +285,7 @@ def reconcile(pipe, loaded, components): def pin(p, model): - """Hold a generation on the distilled step count and shipped schedule while heads are installed; returns the pinned step count or None.""" + """Hold a generation on the distilled evaluation count and shipped schedule while heads are installed; returns the scheduler step argument or None.""" state = getattr(model, 'sdnext_pdd', None) if state is None: return None @@ -297,13 +297,13 @@ def pin(p, model): scheduler.set_shift(scheduler.config['shift']) shifts[name] = scheduler.config['shift'] requested = p.steps - p.steps = state.steps + p.steps = state.heads.nfe # what the user-facing step count means: transformer evaluations if getattr(p, 'task_args', None) is not None: - p.task_args['num_inference_steps'] = state.steps + p.task_args['num_inference_steps'] = state.steps # the scheduler argument that yields that many grid intervals if getattr(model, 'num_timesteps', None) is not None: model.num_timesteps = state.heads.nfe # the progress total counts transformer evaluations extra = getattr(p, 'extra_generation_params', None) if extra is not None: extra.update({state.spec.shift_keys[name]: shift for name, shift in shifts.items() if name in state.spec.shift_keys}) - log.info(f'Network: type=PDD name="{state.name}" steps={state.steps} requested={requested} nfe={state.heads.nfe} shift={shifts}') + log.info(f'Network: type=PDD name="{state.name}" steps={state.heads.nfe} requested={requested} grid_steps={state.steps} shift={shifts}') return state.steps diff --git a/modules/minimax/minimax_ui.py b/modules/minimax/minimax_ui.py index aee62c526..69890ceeb 100644 --- a/modules/minimax/minimax_ui.py +++ b/modules/minimax/minimax_ui.py @@ -26,7 +26,7 @@ def create_ui(prompt, _negative, styles, overrides, script_inputs, mp4_fps, mp4_ width, height = ui_sections.create_resolution_inputs('minimax', default_width=1024, default_height=576, step=32) btn_detect_image_size = ToolButton(value=ui_symbols.detect, elem_id="minimax_resize_detect_size") with gr.Row(): - steps = gr.Slider(minimum=2, maximum=100, step=1, label="MiniMax steps", elem_id='minimax_steps', value=30) + steps = gr.Slider(minimum=1, maximum=100, step=1, label="MiniMax steps", elem_id='minimax_steps', value=30) frames = gr.Slider(label='MiniMax frames', minimum=22, maximum=362, step=17, value=124, elem_id='minimax_frames') with gr.Row(): video_shift = gr.Slider(minimum=0.5, maximum=20.0, step=0.1, value=12.0, label="MiniMax video shift", elem_id='minimax_video_shift') diff --git a/modules/video_models/video_minimax.py b/modules/video_models/video_minimax.py index 1b5065764..6841ce0f1 100644 --- a/modules/video_models/video_minimax.py +++ b/modules/video_models/video_minimax.py @@ -29,9 +29,9 @@ def apply_overrides(p, pipe, still: bool = False, audio: bool = True, preview: b log.debug(f'Pipeline: cls={pipe.__class__.__name__} frames requested={getattr(p, "frames", None)} aligned={frames}') p.frames = frames p.task_args['num_frames'] = frames - p.steps = max(2, p.steps) - p.task_args['num_inference_steps'] = p.steps - pipe.num_timesteps = p.steps - 1 # sigma grid includes the terminal point; feeds the progress total + p.steps = max(1, p.steps) # transformer evaluations, as on every other model + p.task_args['num_inference_steps'] = p.steps + 1 # the scheduler counts the terminal sigma as a grid point + pipe.num_timesteps = p.steps # feeds the progress total if p.sampler_name not in ('None', 'Default'): log.warning(f'Pipeline: cls={pipe.__class__.__name__} sampler={p.sampler_name} unsupported: using model default') p.sampler_name = 'Default' # the model default is the bespoke scheduler pair, which discrete samplers must not replace diff --git a/test/test-minimax-shift.py b/test/test-minimax-shift.py index f81e023c3..3af160c00 100644 --- a/test/test-minimax-shift.py +++ b/test/test-minimax-shift.py @@ -6,7 +6,7 @@ Offline unit tests for the MiniMax schedule shift in modules.video_models.video_ - ``set_sampler_shift`` writes scheduler, default_scheduler and audio_scheduler and keys the result for infotext - a request without values resets what the previous request set - the Default sampler restore, a deepcopy of default_scheduler, carries the shift into the sigma grid -- ``apply_overrides`` records the applied values on the processing object +- ``apply_overrides`` records the applied values on the processing object and hands the scheduler one grid point more than the step count No running server required. @@ -188,6 +188,7 @@ def test_apply_overrides_records_the_applied_values(): assert p.extra_generation_params == {'Video shift': 6.0, 'Audio shift': AUDIO_SHIFT}, f'recorded={p.extra_generation_params}' assert shifts(pipe) == (6.0, 6.0, AUDIO_SHIFT), f'shifts={shifts(pipe)}' assert p.sampler_name == 'Default' + assert p.steps == STEPS and p.task_args['num_inference_steps'] == STEPS + 1 and pipe.num_timesteps == STEPS, f'steps={p.steps} grid_steps={p.task_args["num_inference_steps"]} total={pipe.num_timesteps}' def test_apply_overrides_without_values_uses_the_shipped_schedule(): diff --git a/test/test-pdd.py b/test/test-pdd.py index 2849ba384..d285a0dd8 100644 --- a/test/test-pdd.py +++ b/test/test-pdd.py @@ -335,7 +335,7 @@ def test_pin_overrides_steps_and_shift(): pipe.audio_scheduler.set_shift(2.0) p = types.SimpleNamespace(steps=30, task_args={'num_inference_steps': 30}, extra_generation_params={'Video shift': 4.0, 'Audio shift': 2.0}) assert network_pdd.pin(p, pipe) == 9 - assert p.steps == 9 and p.task_args['num_inference_steps'] == 9 + assert p.steps == 8 and p.task_args['num_inference_steps'] == 9, f'steps={p.steps} grid_steps={p.task_args["num_inference_steps"]}' assert pipe.num_timesteps == 8 assert pipe.scheduler.shift == 12.0 and pipe.audio_scheduler.shift == 3.0 assert p.extra_generation_params == {'Video shift': 12.0, 'Audio shift': 3.0}, f'recorded={p.extra_generation_params}' diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index b9b884e47..fb2be6fd9 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -949,6 +949,7 @@ {"id":"minimax_video_shift","label":"MiniMax video shift","localized":"","hint":"Exponential shift of the video sigma schedule, sigma' = s*sigma / (1 + (s-1)*sigma). Values above 1 move the step grid toward full noise, values below 1 toward the clean end. The value is absolute and does not scale with the step count.

    Default is 12, the value the model ships with. Distilled LoRAs run at the shift they were trained with: 12 for the 544p lightx2v files, 6 for their 768p files. Parallel decoding (PDD) LoRAs pin the shipped value.

    Recorded in the output metadata as Video shift.","ui":"video"}, {"id":"minimax_audio_shift","label":"MiniMax audio shift","localized":"","hint":"Exponential shift of the audio sigma schedule. The audio rows are denoised on this schedule inside the joint pass, so the value applies with audio output disabled too.

    Default is 3, the value the model ships with; the published turbo LoRAs keep it. Parallel decoding (PDD) LoRAs pin the shipped value.

    Recorded in the output metadata as Audio shift.","ui":"video"}, {"id":"","label":"MiniMax Frames","localized":"","hint":"MiniMax is optimized to generate 5-15sec videos at 24 FPS","ui":"video"}, + {"id":"minimax_steps","label":"MiniMax steps","localized":"","hint":"Number of transformer evaluations, counted the same way as on every other model. Distilled LoRAs run at the count in their name: a 4-step file at 4, an 8-step file at 8. Parallel decoding (PDD) LoRAs pin their own count.

    Default is 30.","ui":"video"}, {"id":"","label":"Model Info","localized":"","hint":"","ui":"component-8779"}, {"id":"","label":"Model pipeline","localized":"","hint":"If autodetect does not detect model automatically, select model type before loading a model","ui":"settings_sd"}, {"id":"","label":"Model auto-load on start","localized":"","hint":"","ui":"settings_sd"}, From 09e861157f9c8ee7cbd25b81a424df8a07a20128 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 16 Sep 2026 01:57:23 +0100 Subject: [PATCH 260/270] fix(offload): hand back the loaded cpu tensors on no-stream offload Group hooks on the no-stream path and the on-demand hook return a component to cpu through a device copy, so a memory-mapped text encoder sits in memory twice, as the mapped file its never-run vision tower keeps alive and as the copies, and every encode pays a device-to-host transfer of unchanged weights. The engine now records the cpu tensors at onload and hands them back at offload; a component moved by any other path still takes the copy. --- modules/sd_offload_group.py | 64 ++++++++++++++++++++++++++++++++++++- test/test-offload-roles.py | 55 +++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletion(-) diff --git a/modules/sd_offload_group.py b/modules/sd_offload_group.py index 014456be7..51967b3b4 100644 --- a/modules/sd_offload_group.py +++ b/modules/sd_offload_group.py @@ -1,4 +1,5 @@ import time +import types import itertools import torch import accelerate.hooks @@ -28,6 +29,59 @@ def group_offload_config(main: bool) -> dict: } +def group_tensors(group) -> list: + """Every parameter and buffer a diffusers group moves, read at call time so a tensor replaced while offloaded is seen.""" + tensors = [] + for module in group.modules: + tensors.extend(module.parameters()) + tensors.extend(module.buffers()) + tensors.extend(group.parameters) + tensors.extend(group.buffers) + return tensors + + +def loaded_tensors(tensors) -> dict: + """The cpu tensors held right now, keyed by parameter, to hand back on offload in place of a fresh copy.""" + return {t: t.data for t in tensors if t.data.device.type == 'cpu'} + + +def restore_tensors(tensors, loaded: dict | None, non_blocking: bool = False): + """Return tensors to cpu: the tensor each was onloaded from where known, a copy otherwise.""" + for t in tensors: + if t.data.device.type == 'cpu': + continue + source = loaded.get(t) if loaded else None + t.data = source if source is not None else t.data.to(devices.cpu, non_blocking=non_blocking) + + +def onload_remember(group): + group.sdnext_loaded = loaded_tensors(group_tensors(group)) + group.sdnext_onload() + + +def offload_restore(group): + restore_tensors(group_tensors(group), getattr(group, 'sdnext_loaded', None)) + group.sdnext_loaded = None # a record lives from one onload to its offload + + +def keep_loaded_tensors(module) -> int: + """Groups on the no-stream path copy their weights to fresh cpu memory on every offload; record the cpu + tensors at onload and hand them back at offload instead. Returns the number of groups patched.""" + from diffusers.hooks.group_offloading import _GROUP_OFFLOADING + count = 0 + for sub in module.modules(): + registry = getattr(sub, '_diffusers_hook', None) + hook = registry.get_hook(_GROUP_OFFLOADING) if registry is not None else None + group = getattr(hook, 'group', None) + if group is None or group.stream is not None or getattr(group, 'offload_to_disk_path', None) or hasattr(group, 'sdnext_onload'): + continue + group.sdnext_onload = group._onload_from_memory # pylint: disable=protected-access + group._onload_from_memory = types.MethodType(onload_remember, group) # pylint: disable=protected-access + group._offload_to_memory = types.MethodType(offload_restore, group) # pylint: disable=protected-access + count += 1 + return count + + def remove_group_offload_component(module) -> bool: if getattr(module, 'sdnext_group_offload_sig', None) is None: module = getattr(module, 'model', None) # wrapper components carry the hooks on the inner model @@ -99,6 +153,8 @@ def apply_group_offload_component(module, module_name: str, main: bool) -> bool: s.debug_move(f'Offload: type=group op=apply type={shared.opts.group_offload_type} module={module_name} pin={cfg["use_stream"] and not cfg["low_cpu_mem_usage"]}') # before the apply: pinning large components takes a while and would otherwise run silently module.sdnext_group_offload_sig = 'partial' # a raise below leaves hooks that only a non-empty signature will remove apply_group_offloading(module, onload_device=devices.device, offload_device=devices.cpu, **cfg) + if not cfg['use_stream']: + s.debug_move(f'Offload: type=group op=keep module={module_name} groups={keep_loaded_tensors(module)}') module.sdnext_group_offload_sig = sig return True @@ -153,6 +209,7 @@ class OnDemandHook(accelerate.hooks.ModelHook): param = next(module.parameters(), None) if param is not None and not devices.same_device(param.device, devices.device): t0 = time.time() + module.sdnext_loaded = loaded_tensors(list(module.parameters()) + list(module.buffers())) module.to(devices.device, non_blocking=shared.opts.diffusers_offload_nonblocking) t1 = time.time() process_timer.add('onload', t1 - t0) @@ -194,7 +251,12 @@ def offload_ondemand(sd_model, include=[], exclude=[], reason='', force=False): continue try: t0 = time.time() - module.to(devices.cpu, non_blocking=shared.opts.diffusers_offload_nonblocking) + loaded = getattr(module, 'sdnext_loaded', None) + if loaded: + restore_tensors(list(module.parameters()) + list(module.buffers()), loaded, non_blocking=shared.opts.diffusers_offload_nonblocking) + module.sdnext_loaded = None # a record lives from one onload to its offload + else: + module.to(devices.cpu, non_blocking=shared.opts.diffusers_offload_nonblocking) dt = time.time() - t0 process_timer.add('offload', dt) moved.append(module_name) diff --git a/test/test-offload-roles.py b/test/test-offload-roles.py index 533e4a8d7..8af4bfe56 100644 --- a/test/test-offload-roles.py +++ b/test/test-offload-roles.py @@ -466,6 +466,59 @@ def test_resident_placement_clears_the_ondemand_stamp(): assert not hasattr(module, '_hf_hook'), 'the on-demand hook must be removed' +def accelerator(): + """The restore round trip needs a device that swaps tensor data with cpu both ways; meta cannot, so these two tests take a real accelerator or skip.""" + if torch.cuda.is_available(): + return torch.device('cuda') + log.warning(' SKIP: no accelerator for the round trip') + return None + + +def test_ondemand_offload_hands_back_the_loaded_tensors(): + device = accelerator() + if device is None: + return True + module = BridgeModule() + sd_offload_group.apply_group_offload_ondemand(module) + loaded = {name: p.data for name, p in module.named_parameters()} + pipe = FakePipe({'vae': module}) + orig_device = sd_offload_group.devices.device + sd_offload_group.devices.device = device + try: + module._hf_hook.pre_forward(module, torch.zeros(1, 4)) # pylint: disable=protected-access + assert next(module.parameters()).device.type == device.type, 'the entry hook must onload the whole module' + sd_offload_group.offload_ondemand(pipe, force=True) + finally: + sd_offload_group.devices.device = orig_device + for name, param in module.named_parameters(): + assert param.data.data_ptr() == loaded[name].data_ptr(), f'{name} came back as a copy rather than the loaded tensor' + return True + + +def test_group_offload_hands_back_the_loaded_tensors(): + from diffusers.hooks.group_offloading import _GROUP_OFFLOADING + device = accelerator() + if device is None: + return True + module = PlainModule() + orig_device = sd_offload_group.devices.device + sd_offload_group.devices.device = device + try: + assert sd_offload_group.apply_group_offload_component(module, 'text_encoder', main=False) is True + loaded = {name: p.data for name, p in module.named_parameters()} + group = module.proj._diffusers_hook.get_hook(_GROUP_OFFLOADING).group # pylint: disable=protected-access + assert group.stream is None and hasattr(group, 'sdnext_onload'), 'aux components take the no-stream path and must carry the restore patch' + group.onload_() + assert next(module.parameters()).device.type == device.type, 'onload must still move the group' + group.offload_() + finally: + sd_offload_group.devices.device = orig_device + for name, param in module.named_parameters(): + assert param.data.data_ptr() == loaded[name].data_ptr(), f'{name} came back as a copy rather than the loaded tensor' + assert sd_offload_group.keep_loaded_tensors(module) == 0, 'a second pass must not patch the same groups again' + return True + + # ============================================================ # get_module_names # ============================================================ @@ -706,6 +759,8 @@ def run_all(): test_ondemand_apply_returns_bool_and_is_idempotent, test_ondemand_apply_leaves_weights_on_cpu, test_resident_placement_clears_the_ondemand_stamp, + test_ondemand_offload_hands_back_the_loaded_tensors, + test_group_offload_hands_back_the_loaded_tensors, ]: run_test(cat, fn) From c3fc8560cb1fe26c598d2e0a301096970720dec3 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 16 Sep 2026 02:13:28 +0100 Subject: [PATCH 261/270] docs(offload): describe the group offload blocks setting The blocks count is clamped to one under streams and leaf level never reads it; the hint says so, and the type hint names the setting it refers to. --- ui/locale/locale_en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/locale/locale_en.json b/ui/locale/locale_en.json index 47bb4dd2d..9b736af0d 100644 --- a/ui/locale/locale_en.json +++ b/ui/locale/locale_en.json @@ -624,7 +624,8 @@ {"id":"","label":"Generic","localized":"","hint":"","ui":"video"}, {"id":"","label":"Google GenAI","localized":"","hint":"","ui":"settings_model_options"}, {"id":"","label":"Group Offload","localized":"","hint":"Offloads components in groups of layers rather than as a whole, so only the layers in use occupy VRAM.
    Lets a single component larger than the card run, at the cost of transferring weights throughout every step.

    Applies only when Model offload mode is group.","ui":"settings_offload"}, - {"id":"","label":"Group offload type","localized":"","hint":"Granularity used by group offload.
    - leaf_level: offloads at the smallest module level; maximum memory savings, slower
    - block_level: offloads groups of transformer blocks (size set by Offload blocks); faster with less savings
    This setting applies to the parts of the model that run at every step. Components used once per generation, such as text encoders, always offload at leaf_level. The VAE is handled separately: it waits in system memory and loads as a whole when encoding or decoding.
    Anything named in Modules to never offload or Model types not to offload stays in VRAM instead.

    Applies only when Model offload mode is group.

    Default is leaf_level.","ui":"settings_offload"}, + {"id":"","label":"Group offload type","localized":"","hint":"Granularity used by group offload.
    - leaf_level: offloads at the smallest module level; maximum memory savings, slower
    - block_level: offloads groups of transformer blocks (size set by Group offload blocks, one block when Prefetch with streams is enabled); faster with less savings
    This setting applies to the parts of the model that run at every step. Components used once per generation, such as text encoders, always offload at leaf_level. The VAE is handled separately: it waits in system memory and loads as a whole when encoding or decoding.
    Anything named in Modules to never offload or Model types not to offload stays in VRAM instead.

    Applies only when Model offload mode is group.

    Default is leaf_level.","ui":"settings_offload"}, + {"id":"","label":"Group offload blocks","localized":"","hint":"Number of transformer blocks moved together as one group on block_level group offload. Larger groups mean fewer, larger transfers and more weights resident in VRAM at once.
    Ignored when Prefetch with streams is enabled, which runs one block per group, and on leaf_level, which has no blocks. Components used once per generation always offload at leaf_level and never read this value.

    Applies only when Model offload mode is group.

    Default is 1.","ui":"settings_offload"}, {"id":"","label":"Grid Options","localized":"","hint":"","ui":"settings_saving-images"}, {"id":"","label":"Grids","localized":"","hint":"","ui":"settings_saving-paths"}, {"id":"","label":"Guider","localized":"","hint":"","ui":"txt2img"}, From a7d430a8bac5232eb2d7dd7584a4b3541e777f7d Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 16 Sep 2026 02:18:07 +0100 Subject: [PATCH 262/270] feat(offload): warn when streams clamp the group offload blocks Streamed prefetch runs one block per group, so a larger blocks setting is reduced to one at apply time. The clamp is now logged once per component. --- modules/sd_offload_group.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/sd_offload_group.py b/modules/sd_offload_group.py index 51967b3b4..96bfeffa6 100644 --- a/modules/sd_offload_group.py +++ b/modules/sd_offload_group.py @@ -145,6 +145,9 @@ def apply_group_offload_component(module, module_name: str, main: bool) -> bool: sig = f'{devices.device}:{main}:' + ':'.join(str(v) for v in cfg.values()) if getattr(module, 'sdnext_group_offload_sig', None) == sig: return False + requested_blocks = int(shared.opts.group_offload_blocks) + if cfg['use_stream'] and requested_blocks > 1: + log.warning(f'Offload: type=group module={module_name} blocks={requested_blocks} streams=True clamped=1') if hasattr(module, '_hf_hook'): # leftover accelerate hooks from a previous offload mode abort the group apply upstream module = accelerate.hooks.remove_hook_from_module(module, recurse=True) module.sdnext_ondemand = False # group placement replaces any on-demand hook From b259a4844850c2682b1a1b78795590c0d4ac9205 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 16 Sep 2026 03:23:03 +0100 Subject: [PATCH 263/270] fix(lora): give replaced pdd projections their own memory The projection a parallel head replaces waits out of the module tree, so nothing moves it, and a weight still viewing its checkpoint shard keeps the whole shard mapped. The stash now clones the projection's tensors. --- modules/lora/network_pdd.py | 2 ++ test/test-pdd.py | 3 +++ 2 files changed, 5 insertions(+) diff --git a/modules/lora/network_pdd.py b/modules/lora/network_pdd.py index b90e20cbf..3ae55c708 100644 --- a/modules/lora/network_pdd.py +++ b/modules/lora/network_pdd.py @@ -231,6 +231,8 @@ def install(pipe, net, heads, spec, components): def get_scheduler(name=scheduler_name): owner_pipe = pipe_ref() return getattr(owner_pipe, name, None) if owner_pipe is not None else None + for tensor in list(module.parameters()) + list(module.buffers()): + tensor.data = tensor.data.clone() # nothing moves the stashed projection, and a shard view would keep the whole shard mapped head = ParallelHead(module, weight, bias, strength, get_scheduler, heads.block_size, intervals) parent_path, _, attr = path.rpartition('.') parent = component.get_submodule(parent_path) if parent_path else component diff --git a/test/test-pdd.py b/test/test-pdd.py index d285a0dd8..52a29677b 100644 --- a/test/test-pdd.py +++ b/test/test-pdd.py @@ -275,10 +275,13 @@ def test_parallel_head_keeps_base_out_of_tree(): def test_install_and_restore_round_trip(): pipe = StubPipe() original_video, original_audio = pipe.transformer.proj_out, pipe.transformer.audio_proj_out + before = original_video.weight.detach().clone() + before_ptr = original_video.weight.data_ptr() heads = make_heads() assert network_pdd.install(pipe, make_net(heads), heads, minimax_lora.PDD, ['unet', 'transformer']) is True assert isinstance(pipe.transformer.proj_out, network_pdd.ParallelHead) assert isinstance(pipe.transformer.audio_proj_out, network_pdd.ParallelHead) + assert original_video.weight.data_ptr() != before_ptr and torch.equal(original_video.weight, before), 'the stashed projection must own its memory and keep its values' assert pipe.sdnext_pdd.steps == 9 and pipe.sdnext_pdd.component == 'transformer' pipe.audio_scheduler.set_shift(3.0) pipe.scheduler.set_timesteps(9) From 6b7c43cd29a37f4f793011997451c723de86d733 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 16 Sep 2026 14:14:20 +0100 Subject: [PATCH 264/270] fix(lora): resolve network names that carry a dot in the filename add_network keys available_networks by the basename with dots mangled to underscores, and create_item looked the name up in that table using the name as loaded, so any file with a dot in its stem missed and logged "not registered". The tag pass then dropped the network's own tags and used the filename instead. The lookup now falls back to the alias table, which already carries the natural basename and the subfolder path. --- modules/ui_extra_networks_lora.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ui_extra_networks_lora.py b/modules/ui_extra_networks_lora.py index 0c3b0cace..0052217e6 100644 --- a/modules/ui_extra_networks_lora.py +++ b/modules/ui_extra_networks_lora.py @@ -91,7 +91,7 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage): return ver def create_item(self, name): - l = lora_load.available_networks.get(name) + l = lora_load.available_networks.get(name) or lora_load.available_network_aliases.get(name) # that table mangles dots in the stem to underscores; the aliases carry the natural basename and the subfolder path if l is None: log.warning(f'Networks: type=lora registered={len(list(lora_load.available_networks))} file="{name}" not registered') return None From 909db4b7971873e8f8e316e630d186bf4a73d194 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 16 Sep 2026 20:23:45 +0200 Subject: [PATCH 265/270] packages Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 10 +++++----- data/reference-nunchaku.json | 2 +- extensions-builtin/sdnq | 2 +- modules/ui_definitions.py | 8 ++++---- requirements.txt | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e43f3c0b..f0ba9ab99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-09-15 +## Update for 2026-09-17 -### Highlights for 2026-09-15 +### Highlights for 2026-09-17 *What's New*? Well, code-wise, this is a big one... First, a-lot-of-optimizations: @@ -14,7 +14,7 @@ First, a-lot-of-optimizations: - Compute updates across the board And some cool new stuff and models: -- **DLSSv5** integration +- **DLSS v5** integration - New models: **Anima 2.9B**, **LLaDa-Image** - And few cloud models: *Google's Gemini, NanoBanana, Veo, Omni* and *X.AI's Grok* - Some (light) UI restyling @@ -23,7 +23,7 @@ Plus inevitable bug-fixes... [Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) -### Details for 2026-09-15 +### Details for 2026-09-17 - **Models** - [Anima 2.9B Preview v1](https://huggingface.co/yeoj34760/Anima-2.9B) @@ -108,7 +108,6 @@ Plus inevitable bug-fixes... *note*: this may break compatibility with some legacy packages, so report any finidings - **Other** - video preview: TAESD support for **MiniMax** - - **minimax** video and audio shift are now dependent on steps instead of static - support `xai grok` for prompt enhance workflows *note*: requires grok api key - remove `/redocs` as `/docs` are primary api docs @@ -126,6 +125,7 @@ Plus inevitable bug-fixes... - compile: keep model compiled state - detailer: handling of stop/skip/pause - framepack: correct device assignment, thanks @li-lizhe + - group offload: improve memory management - installer: better handle git detached head - json: handle file locks - log: ansi color handling diff --git a/data/reference-nunchaku.json b/data/reference-nunchaku.json index 15b129ce9..a8c8a4ddb 100644 --- a/data/reference-nunchaku.json +++ b/data/reference-nunchaku.json @@ -298,7 +298,7 @@ }, "MiniMaxAI MiniMax-H3 Nunchaku-Lite": { "path": "rootonchair/MiniMax-H3-nunchaku-lite-int4", - "preview": "OzzyGT/MiniMax_H3_sdnq_dynamic_4bit.jpg", + "preview": "MiniMaxAI--MiniMax-H3.jpg", "desc": "Nunchaku-Lite quantization using precompiled Kernels", "size": 23.70, "date": "2026 September" diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index 06c83b387..cbf3ecbe8 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit 06c83b3878d7240da5d8b8c94ae798af9a047e6b +Subproject commit cbf3ecbe8e2f771dbda79ed1ef813069920d987f diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index be6c8510f..464c1935e 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -201,8 +201,8 @@ def create_settings(cmd_opts): "sdnq_quantize_shuffle_weights": OptionInfo(False, "Shuffle weights in post mode", gr.Checkbox), "nunchaku_sep": OptionInfo("

    Nunchaku Engine

    ", "", gr.HTML), - "nunchaku_attention": OptionInfo(False, "Nunchaku attention", gr.Checkbox), - "nunchaku_offload": OptionInfo(False, "Nunchaku offloading", gr.Checkbox), + "nunchaku_attention": OptionInfo(True, "Nunchaku attention", gr.Checkbox), + "nunchaku_offload": OptionInfo(True, "Nunchaku offloading", gr.Checkbox), "layerwise_quantization_sep": OptionInfo("

    Layerwise Casting

    ", "", gr.HTML), "layerwise_quantization": OptionInfo([], "Layerwise casting enabled", gr.CheckboxGroup, {"choices": ["Model", "TE"]}), @@ -592,7 +592,7 @@ def create_settings(cmd_opts): "themes_sep_ui": OptionInfo("

    Theme options

    ", "", gr.HTML), "theme_type": OptionInfo("Modern", "Theme type", gr.Radio, {"choices": ["Modern", "Standard", "None"]}), "theme_style": OptionInfo("Auto", "Theme mode", gr.Radio, {"choices": ["Auto", "Dark", "Light"]}), - "gradio_theme": OptionInfo("black-teal", "UI theme", gr.Dropdown, lambda: {"choices": theme.list_themes()}, refresh=theme.refresh_themes), + "gradio_theme": OptionInfo("Default", "UI theme", gr.Dropdown, lambda: {"choices": theme.list_themes()}, refresh=theme.refresh_themes), "quicksetting_sep_images": OptionInfo("

    Quicksettings

    ", "", gr.HTML), "quicksettings_list": OptionInfo(["sd_model_checkpoint"], "Quicksettings list", gr.Dropdown, lambda: {"multiselect":True, "choices": list(options_templates.keys())}), @@ -617,7 +617,7 @@ def create_settings(cmd_opts): "other_sep_ui": OptionInfo("

    Other...

    ", "", gr.HTML), "ui_locale": OptionInfo("Auto", "UI locale", gr.Dropdown, lambda: {"choices": theme.list_locales()}), - "font_size": OptionInfo(15, "Font size", gr.Slider, {"minimum": 8, "maximum": 32, "step": 1}), + "font_size": OptionInfo(14, "Font size", gr.Slider, {"minimum": 8, "maximum": 32, "step": 1}), "gpu_monitor": OptionInfo(3000, "GPU monitor interval", gr.Slider, {"minimum": 100, "maximum": 60000, "step": 100}), "aspect_ratios": OptionInfo("1:1, 4:3, 3:2, 16:9, 16:10, 21:9, 2:3, 3:4, 9:16, 10:16, 9:21", "Allowed aspect ratios"), "compact_view": OptionInfo(False, "Compact view"), diff --git a/requirements.txt b/requirements.txt index 080d9c2ce..5d69f2256 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ fastapi==0.124.4 uvicorn==0.52.4 rich==15.0.0 safetensors==0.8.0 -peft==0.20.0 +peft==0.21.0 httpx==0.28.1 requests==2.34.2 tqdm==4.70.1 From c67b4f499f383d09cf85961abebb95b397c43cec Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 16 Sep 2026 08:37:13 +0100 Subject: [PATCH 266/270] fix(lora): read the pdd grid from the file header when the cache lacks it The metadata cache keeps a failed read forever and --no-metadata returns nothing, and in both cases the head loader returned None silently while the backbone still applied. The grid is now read from the file's own header when the cached metadata lacks it, and head-shaped tensors without a grid log a warning. --- modules/lora/network_pdd.py | 20 ++++++++++++++++++++ test/test-pdd.py | 25 ++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/modules/lora/network_pdd.py b/modules/lora/network_pdd.py index 3ae55c708..86b1744b2 100644 --- a/modules/lora/network_pdd.py +++ b/modules/lora/network_pdd.py @@ -87,9 +87,29 @@ def load(name, metadata, state_dict): return ParallelHeads(num_steps, block_size, heads) +def header_metadata(filename, name): + """The metadata read from the file itself, for when the cached metadata lacks the grid; warns when head-shaped tensors have no grid.""" + from safetensors import safe_open + try: + with safe_open(filename, framework='pt', device='cpu') as f: + metadata = f.metadata() or {} + if METADATA_STEPS in metadata: + log.debug(f'Network load: type=PDD name="{name}" grid read from the file header') + else: + heads = sum(1 for key in f.keys() if key.endswith('.weight') and len(f.get_slice(key).get_shape()) == 3) + if heads > 0: + log.warning(f'Network load: type=PDD name="{name}" heads={heads} no {METADATA_STEPS} metadata: heads ignored') + return metadata + except Exception as e: + log.warning(f'Network load: type=PDD name="{name}" header {e}') + return {} + + def try_load(name, network_on_disk, lora_scale): # pylint: disable=unused-argument """Family loader for the native chain: a network carrying only the heads.""" metadata = getattr(network_on_disk, 'metadata', None) or {} + if METADATA_STEPS not in metadata: + metadata = header_metadata(network_on_disk.filename, name) # the metadata cache keeps a failed read forever and --no-metadata returns nothing if METADATA_STEPS not in metadata: return None from modules.lora import native_adapter diff --git a/test/test-pdd.py b/test/test-pdd.py index 52a29677b..de5e3d04b 100644 --- a/test/test-pdd.py +++ b/test/test-pdd.py @@ -194,6 +194,29 @@ def test_load_without_heads_is_none(): assert network_pdd.load('x', METADATA, {'transformer_blocks.0.attn.to_q.lora_down': torch.zeros(64, HIDDEN)}) is None +def write_pdd_file(folder, metadata): + from safetensors.torch import save_file + path = os.path.join(folder, 'pdd.safetensors') + save_file({'proj_out.weight': torch.zeros(NUM_STEPS, VIDEO_OUT, HIDDEN), 'proj_out.bias': torch.zeros(NUM_STEPS, VIDEO_OUT)}, path, metadata=metadata) + return path + + +def test_try_load_reads_the_grid_from_the_file_header(): + import tempfile + with tempfile.TemporaryDirectory() as folder: + disk = types.SimpleNamespace(name='pdd', filename=write_pdd_file(folder, METADATA), metadata={}) # the cached metadata lacks the grid + net = network_pdd.try_load('pdd', disk, 1.0) + assert net is not None and network_pdd.EXTRAS_KEY in net.extras, 'the grid in the file header must be enough' + assert net.extras[network_pdd.EXTRAS_KEY].nfe == NUM_STEPS // BLOCK + + +def test_try_load_without_grid_metadata_is_none(): + import tempfile + with tempfile.TemporaryDirectory() as folder: + disk = types.SimpleNamespace(name='pdd', filename=write_pdd_file(folder, {'alpha': '1'}), metadata={}) + assert network_pdd.try_load('pdd', disk, 1.0) is None + + # ============================================================ # Tests: grid and fusion math # ============================================================ @@ -352,7 +375,7 @@ def test_pin_overrides_steps_and_shift(): def main(): cat = category('detect') - for fn in (test_detect_grid, test_detect_rejects_bad_block, test_load_collects_heads, test_load_without_metadata_is_none, test_load_without_heads_is_none): + for fn in (test_detect_grid, test_detect_rejects_bad_block, test_load_collects_heads, test_load_without_metadata_is_none, test_load_without_heads_is_none, test_try_load_reads_the_grid_from_the_file_header, test_try_load_without_grid_metadata_is_none): run_test(cat, fn) cat = category('math') for fn in (test_grid_intervals_match_reference, test_steps_for_counts_terminal_sigma, test_parallel_head_matches_reference_per_block, test_parallel_head_strength_blend, test_parallel_head_clamps_overflow, test_parallel_head_keeps_base_out_of_tree): From 23a280d7d4317e0fee4d482d5e2357c9b076b560 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 16 Sep 2026 08:37:13 +0100 Subject: [PATCH 267/270] chore(lora): gate the adaln projection lines behind SD_LORA_DEBUG One line per projected layer is trace output, not a load-time message. --- pipelines/minimax/minimax_lora.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pipelines/minimax/minimax_lora.py b/pipelines/minimax/minimax_lora.py index edbdf2c37..9ea9332a5 100644 --- a/pipelines/minimax/minimax_lora.py +++ b/pipelines/minimax/minimax_lora.py @@ -10,6 +10,7 @@ fused ``attn.qkv_proj`` splits into ``to_q``/``to_k``/``to_v``, and ``mlp.fc1`` lands on the fused SwiGLU projection with its two output halves swapped. """ +import os import re import torch @@ -19,6 +20,9 @@ from modules.lora import native_adapter, network_pdd from modules.video_models.video_minimax import SHIFT_KEYS +debug_log = log.trace if os.environ.get('SD_LORA_DEBUG', None) is not None else lambda *args, **kwargs: None + + # Parallel decoding heads: the audio projection follows the audio schedule, and MiniMaxH3Scheduler counts the terminal sigma in num_inference_steps. PDD = network_pdd.ArchSpec(schedulers={"audio_proj_out": "audio_scheduler"}, steps_for=lambda intervals: intervals + 1, shift_keys=SHIFT_KEYS) @@ -252,7 +256,7 @@ def project_pruned_adaln(sd_module, network_key, w, transformers=None): return None projected = dict(w) projected["lora_down.weight"] = (down.to(dtype=torch.float32, device=basis.device) @ basis.to(dtype=torch.float32).T).to(dtype=down.dtype, device=down.device) - log.debug(f'Network load: type=LoRA arch=minimaxh3 key={network_key} adaln projected {down.shape[1]}->{shape[1]}') + debug_log(f'Network load: type=LoRA arch=minimaxh3 key={network_key} adaln projected {down.shape[1]}->{shape[1]}') return projected From ead32daddf4dcab4731ae922c4f2e3140e7fe04f Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 16 Sep 2026 08:53:08 +0100 Subject: [PATCH 268/270] chore(lora): trace pdd head fusion under SD_LORA_DEBUG One line per fused block shows which heads a generation runs on. --- modules/lora/network_pdd.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/lora/network_pdd.py b/modules/lora/network_pdd.py index 86b1744b2..f84dcf098 100644 --- a/modules/lora/network_pdd.py +++ b/modules/lora/network_pdd.py @@ -6,12 +6,16 @@ walk the trajectory. Heads ride on ``Network.extras['pdd']``: ``reconcile`` inst the loaded set, ``pin`` holds the step count and schedule the file was distilled for. """ +import os import copy import weakref import torch from modules.logger import log +debug_log = log.trace if os.environ.get('SD_LORA_DEBUG', None) is not None else lambda *args, **kwargs: None + + METADATA_STEPS = 'pdd_num_steps' METADATA_BLOCK = 'pdd_block_size' EXTRAS_KEY = 'pdd' @@ -179,6 +183,7 @@ class ParallelHead(torch.nn.Module): base_bias = self.base_bias.to(device=bias.device) bias = base_bias + self.strength * (bias - base_bias) self.fused_index, self.fused_weight, self.fused_bias = index, weight, bias + debug_log(f'Network: type=PDD fuse block={index} heads={start}:{stop} out={self.out_features} strength={self.strength}') def forward(self, hidden_states): index = self.step_index() From 9bb7b41f4874297fedc7d4b3163aa20eff9d8981 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 17 Sep 2026 07:48:51 +0200 Subject: [PATCH 269/270] refresh Signed-off-by: Vladimir Mandic --- extensions-builtin/sdnq | 2 +- wiki | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index cbf3ecbe8..b9b50e4a5 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit cbf3ecbe8e2f771dbda79ed1ef813069920d987f +Subproject commit b9b50e4a598ddee318e5e48665bbfbecc5ab1d87 diff --git a/wiki b/wiki index 3e33a90f2..0a592b3cf 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 3e33a90f279e1eb31a89dec28e268ba57a6c3374 +Subproject commit 0a592b3cff44bdf3b440b0791f68f71cd7ecc3ea From dca0bc69242cd4dad6acaf86c04e4264a04fc7bb Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 17 Sep 2026 07:53:37 +0200 Subject: [PATCH 270/270] refresh submodules Signed-off-by: Vladimir Mandic --- extensions-builtin/sdnext-kanvas | 2 +- extensions-builtin/sdnext-modernui | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions-builtin/sdnext-kanvas b/extensions-builtin/sdnext-kanvas index e2407080b..e55743904 160000 --- a/extensions-builtin/sdnext-kanvas +++ b/extensions-builtin/sdnext-kanvas @@ -1 +1 @@ -Subproject commit e2407080b5da33be317cadafa9461444a93e6a73 +Subproject commit e5574390433e2311b399dc90ab9d2ae259961c8c diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 7bfb72835..0bacb152d 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 7bfb7283527f4df21030bcdc67d0ffe06238e914 +Subproject commit 0bacb152d214cddd0bff0477c8629080a1244769

    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%0D*J&?$d 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 z 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